पश्चिम में सबसे तेज गन


23

आप मिसिसिपी के पश्चिम में सबसे कठिन, सबसे कठिन, सबसे शांत चरवाहे हैं। हालांकि, एक निराला बेवकूफ वेबसाइट पर कुछ अजीब आदमी ने फैसला किया कि यह आपको बेतरतीब अधूरे परिदृश्यों और लड़ाई में गिराने के लिए अच्छा होगा। कोई बात नहीं, तुम अब भी जीतोगे। हालाँकि, आपको उन भीषण गोलियों से जीतने में मदद करने के लिए जिनके बारे में आप घर पर लिखेंगे, यह जानना उपयोगी है कि परिदृश्य में कायर को कितनी गोलियां लगी हैं।

आप इस गरीब आदमी की मदद कैसे करेंगे। एक ASCII परिदृश्य को देखते हुए, इसके अंदर बंदूक ढूंढें और उसे बताएं कि इसमें कितनी गोलियां भरी हुई हैं। यह बंदूक है:

  (X)
(X\ /X)
 (XVX)
  \X/

Xउपरोक्त चित्र में प्रत्येक बुलेट के लिए एक संभावित स्लॉट है। स्लॉट में या तो एक स्थान होगा या उनमें से एक 0,O,o(लगातार नहीं हो सकता है - चरवाहे ने अपनी बंदूक में विभिन्न प्रकार की गोलियों को लोड किया हो सकता है)।

परिदृश्य में उपरोक्त विवरण से मेल खाते हुए हमेशा एक बंदूक होगी। हालांकि, कृपया ध्यान दें कि बंदूक के आसपास और अंदर के रिक्त स्थान में कुछ भी हो सकता है।

इनपुट

आपको एक स्ट्रिंग दी जाएगी जिसमें प्रिंट करने योग्य ASCII (इसलिए टैब नहीं) और अलग-अलग लाइनों के लिए नई रूपरेखाएँ हों। आप चाहें तो स्ट्रिंग्स की एक सूची भी ले सकते हैं। स्ट्रिंग्स को सभी स्थानों के साथ गद्देदार किया जाएगा, इसलिए वे सभी समान लंबाई के होंगे। इनपुट कम से कम 4 पंक्तियों उच्च और 7 कॉलम चौड़ा होगा।

परिदृश्य में हमेशा एक बंदूक होगी।

उत्पादन

आप उत्पादन करेंगे 0, O, oकि बंदूक में कितनी गोलियां ( ) हैं, इसलिए आपका आउटपुट हमेशा 0और के बीच होगा 6

परीक्षण के मामलों

  (0)   ( )
(o\ /o( \ / )
 (oVo) ( V )
  \o/   \ /

0

----------------------------
////////////////////////////
////////////////////////////
/////////////(o)////////////
///////////(0\// )//////////
////////////( Vo)///////////
/////////////\ /////////////
////////////////////////////
----------------------------

3

()()()()()()()()()()()()()()()()\)/)()()()()()()()()()()()()
()()()()()()()()()()()()()()()()(V)()()()()()()()()()()()()(
()()()()()()()(\0/)()()()()()()()()()()()()()()()()()()()()(
()()()()()()()()()()()()()()()()()()()()()()()( )()()()()()(
()()()()()()(o)()()()()()()()(00)()()()()()(( \(/0)()()()()(
()()()()()()()()()()()()()()()()()()()()()()(( V )()()()()()
()()()()()()()()()()()()()()()()()()()()()()()\O/()()()()()(

2

------(0)---
||||(0\|/0)
-----(0V0)--
||||||\0/
-------_------
|||||||-|
------|-|
|||||||-|
------|-|

6

00ooOO(0)/\\/V

  ( )
( \\/ )
 ( V )
 \\ /

00OOoo()()()())))

0

  (\)     (0)
(0\\/0) ( \0/ )
 (0V0)   ( V )
 \\0/     \ /

1 (left gun is invalid because of the `\` in the bullet slot)

-00(0)00\0
-(O\0/o)\ 
- (OVo)o\0
-o \ /oo/ 

5

यह , इसलिए बाइट्स जीत में सबसे छोटा जवाब है।



10
+1 अगर कोई FGITWs इस चुनौती;)
बीटा

2
आपको एक परीक्षण मामले को जोड़ना चाहिए जहां 0बंदूक के बाउंडिंग बॉक्स के अंदर लेकिन बंदूक के बाहर है।
मार्टिन एंडर

@ स्टीफन ओह ठीक है, बंदूक के अंदर एक शून्य है जो इसका नहीं है। बंदूक के बाहर शून्य होना अच्छा होगा, लेकिन उसके बाउंडिंग बॉक्स के भीतर भी।
मार्टिन एंडर

"इनपुट कम से कम 4 पंक्तियों ऊंचा और 5 कॉलम चौड़ा होगा।" - अगर हमेशा बंदूक है तो इनपुट कम से कम 7 कॉलम चौड़ा होना चाहिए ।
मनश्शेख्ज़त-बहाल मोनिका

जवाबों:


19

घोंघे , 71 बाइट्स

इसे ऑनलाइन आज़माएं।

A
\/a=\)2w\V={\\u\(}c=\/b={\\c\(2}u!{(nb|.|.n.)=^o=^O=^0^ }{nb|.|.n.}^ 

4
Programming language for 2-dimensional pattern matching.आपको खुशी होगी कि मैंने यह चुनौती दी: पी
स्टीफन

25
क्या आपके पास इस भाषा का लिंक है? यह बहुत मज़ेदार है कि पश्चिम में सबसे तेज़ बंदूक घोंघा है।
PyRulez


6
@PyRulez आप TIO पेज पर भाषा के नाम पर क्लिक कर सकते हैं
स्टीफन

मुझे इसमें दिलचस्पी है कि यह कैसे काम करता है।
कृति लिथोस

6

गणितज्ञ, 170 बाइट्स

Catch@BlockMap[b="O"|"o"|"0";MatchQ[#,p=Characters@{"  (X)  ","(X\\ /X)"," (XVX) ","  \\X/  "}/." "->_/."X"->$;p/.$->b|"X"|" "]&&Throw@Count[Pick[#,p,$],b,2]&,#,{4,7},1]&

तार / वर्ण की एक सरणी लेता है। गोलियों की संख्या लौटाता है।


4

जावास्क्रिप्ट, 215 211 209 बाइट्स

-4 बाइट्स के लिए झबरा का धन्यवाद!

f=

i=>[...i].map((_,x)=>eval(String.raw`a=i.match(/(\n|^).{${x}}..\(${Z='([oO0 ])'}\).*\n.{${x}}\(${Z}\\.\/${Z}\).*\n.{${x}}.\(${Z}V${Z}\).*\n.{${x}}..\\${Z}\//);a&&alert(a.filter(i=>/^[oO0]$/.test(i)).length)`))

tests = [["  (0)   ( )\n(o\\ /o( \\ / )\n (oVo) ( V )\n  \\o/   \\ /",0],["----------------------------\n////////////////////////////\n////////////////////////////\n/////////////(o)////////////\n///////////(0\\// )//////////\n////////////( Vo)///////////\n/////////////\\ /////////////\n////////////////////////////\n----------------------------",3],["()()()()()()()()()()()()()()()()\\)/)()()()()()()()()()()()()\n()()()()()()()()()()()()()()()()(V)()()()()()()()()()()()()(\n()()()()()()()(\\0/)()()()()()()()()()()()()()()()()()()()()(\n()()()()()()()()()()()()()()()()()()()()()()()( )()()()()()(\n()()()()()()(o)()()()()()()()(00)()()()()()(( \\(/0)()()()()(\n()()()()()()()()()()()()()()()()()()()()()()(( V )()()()()()\n()()()()()()()()()()()()()()()()()()()()()()()\\O/()()()()()(",2],["------(0)---\n||||(0\\|/0)\n-----(0V0)--\n||||||\\0/\n-------_------\n|||||||-|\n------|-|\n|||||||-|\n------|-|",6],["00ooOO(0)/\\\\/V\n\n  ( )\n( \\\\/ )\n ( V )\n \\\\ /\n\n00OOoo()()()())))",0],["  (\\)     (0)\n(0\\\\/0) ( \\0/ )\n (0V0)   ( V )\n \\\\0/     \\ /",1]]

alert = x => i = x;

tests.forEach((t, index) => {
    i = 'Not Found'
    f(t[0]);
    document.getElementById('a').textContent += t[0] + '\n\n' + i + '\n\n';
    if (i != t[1]) {
        document.getElementById('a').textContent += 'Failed test ' + index + '! Expected '  + t[1] + '\n\n';
        document.getElementById('a').style = 'color: red'
    }
})
<pre id="a"></pre>

असल में, एक बंदूक से मिलान करने की कोशिश करता है nके लिए, एक लाइन ब्रेक के बाद पात्रों nसे 0स्ट्रिंग की लंबाई करने के लिए।


Zशाब्दिक के भीतर निर्दिष्ट करके , पहली बार जब आप इसका उपयोग करते हैं और इससे छुटकारा पाकर कुछ बाइट्स बचाते हैं {}
झबरा

@ शगुन थैंक्स!
आरतीर

3

पायथन 2, 219 224 227 बाइट्स

import re
f=lambda s:sum(sum(g>' 'for g in m.groups())for m in[re.match(r'.*@..\(X\)..@\(X\\./X\)@.\(XVX\).@..\\X/.*'.replace('X','([0Oo ])').replace('@',r'[^\n]*\n.{%d}'%i),'\n'+s,re.DOTALL)for i in range(0,s.find('\n'))]if m)

संपादित करें: एक बग जो मेरे लिए 5 बाइट्स तय करता है: (... अतिरिक्त के 3 बाइट्स मिला r'' एस के जरूरत नहीं थी। और ग्र्र्र! \मेरे कोड में वर्णों को सही ढंग से नहीं गिन रहा था , इसलिए 6 जोड़े गए ... !!

नई कहानियों के साथ एक स्ट्रिंग लेता है; गोलियों की संख्या का पता चला।

मूल रूप से, 0, 1, ... गन पैटर्न के साथ लाइन की शुरुआत में गन पैटर्न के लिए लगने वाले रेगेक्स को लागू करता है।


3

सी (जीसीसी) , 357 351 बाइट्स

#define M(F,C)F(i){i=s[i]==C;}
b,i;char*s,c;M(L,'(')M(R,')')M(A,'/')M(D,'\\')M(V,'V')B(i){i=b=(c=s[i])==32?b:c==111?b+1:c==79?b+1:c==48?b+1:0;}(*t[])(int)={L,B,R,L,B,D,A,B,R,L,B,V,B,R,D,B,A};main(j,v,k,l)char**v;{for(s=v[1];s[l++]!=10;);for(;k=i,s[i++];){for(j=17;j--;)if(!(t[j])(k-=j==13?l-3:j==8?l-5:j==5?2:j==2?l-4:1))break;b=j<0?putchar(b+47):1;}}

इसे ऑनलाइन आज़माएं! (गोल्फ) (विस्तारित) (357 गोल्फ) (357 विस्तारित)

मैं सोचता था कि बिल्ट-इन पैटर्न मिलान के बिना भाषा में कितना बुरा समाधान होगा। यह मेरे डर से बहुत छोटा था।

मूल रूप से, यह दृष्टिकोण बंदूक को अलग-अलग हिस्सों की एक श्रृंखला में तोड़ता है जो एक विशिष्ट सूचकांक के सापेक्ष विशिष्ट स्थानों में देखने की अपेक्षा करता है। यदि सभी भागों में पाया जाता है जहाँ वे अपेक्षित हैं, तो यह एक बंदूक है! बुलेट परीक्षण एक वैश्विक काउंटर को बढ़ाता है कि उसमें कितनी गोलियां हैं, जिसे ट्रैक करने के लिए हम प्रिंट करते हैं, जब हमने परिदृश्य में एक और एकमात्र बंदूक पाया है।

नोट 1: मैंने लगातार पंक्ति की चौड़ाई सुनिश्चित करने के लिए रिक्त स्थान के साथ परीक्षण मामलों को गद्देदार किया।

नोट 2: यदि आप रिटर्न ट्रिक के बजाय असाइन नहीं करते हैं तो 10 बाइट्स जोड़ें । स्पष्टता के लिए, मैंने विस्तारित कोड में वास्तविक रिटर्न स्टेटमेंट का उपयोग किया।


तीन मामूली अनुकूलन: - प्रिंटफ (3 बाइट्स) के बजाय सीधे बी के मूल्य के साथ पुचचर का उपयोग करें। - अगर बुलेट काउंट (1 बाइट) प्रिंट करने के लिए स्टेटमेंट के बजाय टर्नरी ऑपरेटर का उपयोग करें। - रोल बुलेट गणना प्रिंट टर्नरी (2 बाइट्स) में आरंभीकरण। पिछले एक थोड़ा बदबूदार है क्योंकि इसका मतलब है कि बी पहले सूचकांक का परीक्षण करते समय शून्य है, लेकिन चूंकि कोई भी बंदूक 0 पर वैसे भी नहीं हो सकती है, मुझे लगता है कि यह एक उचित बदलाव है।
जिव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.