गेंदबाजी फॉर्म तैयार करें


44

आपका लक्ष्य दस-पिन गेंदबाजी में एक गठन की ASCII कला को प्रदर्शित करना है जहां केवल कुछ पिन रहते हैं। सबसे कम बाइट्स जीतता है।

दसियों पिन एक त्रिकोणीय गठन में हैं:

O O O O         
 O O O   
  O O       
   O

पिन 1 से 10 के रूप में लेबल किए गए हैं:

7 8 9 10    
 4 5 6            
  2 3    
   1

ड्राइंग पिन के रूप में Oऔर लापता पिन के रूप में ., गठन 1 3 5 6 9 10है:

. . O O         
 . O O    
  . O       
   O

इनपुट:

एक अंतरिक्ष-पृथक स्ट्रिंग जो क्रमांक 1 के एक गैर-रिक्त उपसमूह को सूचीबद्ध करती है, हालांकि क्रम में 10।

आउटपुट:

संबंधित गठन को प्रिंट करें या इसे लाइनब्रेक के साथ एक स्ट्रिंग के रूप में आउटपुट करें।

गठन स्क्रीन के बाईं ओर फ्लश होना चाहिए। जब तक दृश्यमान छवि सही है तब तक कोई भी व्हाट्सएप ठीक है। पहले और बाद में खाली लाइनें भी ठीक हैं।

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

>> 1 2 3 4 5 6 7 8 9 10

O O O O    
 O O O    
  O O    
   O

>> 7 10

O . . O    
 . . .   
  . .   
   .

>> 3 5 7 9 10

O . O O    
 . O .    
  . O    
   .

>> 1

. . . .    
 . . .    
  . .    
   O       

क्या आप गारंटी दे सकते हैं कि कम से कम एक पिन होगा? यह मेरे लिए पात्रों को बचाएगा यदि मैं खाली इनपुट पर चोक कर सकता हूं।
अंडरग्राउंडोरेल

1
@undergroundmonorail यह पहले से ही गारंटी है: "nonempty सबसेट"
xnor

मैं पूरी तरह से चूक गया, धन्यवाद :)
भूमिगत

[कोड-गेंदबाजी]? : पी
mbomb007

जवाबों:


17

ब्रेनफक - 617 616 604 बाइट्स

+>>>>,[>++++[<-------->-]<[>>>>],]<<<<[>+<<+<+>>-]<[>+<-]+<+<<[>+>-<<-]>[<+>-]>[,+++++[>+++++<-]>>[<->-]<[>>>>>[>>>>]+[<<<<]<-]>>[<+>-]<<<]>[>>[,<]<<+++++++++<]<<<[-[+>>-<]>[>>[<+<+>>-]<<<<[>+>-<<-]>[<+>-]>[<<[<<<<]>>>>[[<<<<+>>>>-]>>>>]<<<<+>>-]>[>+<-]]<<<[-[+>]+<<<<]>>>>-<<<<<]>>>>>+++++[>----<-]>->[<+>>+<-]<[<<<[<<<<]+[>>>>]<-]>>[<+>-]<[<<<<]>>>++++[<-------->-]>[-[,+++>]+>>>[<<<->>]>]<<<<<[>-]>[>>]>>+[<++++[<++++++++>-]<]>>[+++++++++++++>>>>]<<<<----<+++[<<+<<[<<+<<]+[>>>>]<<<<-]<<<<[-<<<<]>[.,>>]<<<<<[<<<<]<++++++++++<<.<+<<+<<+<<+<<+<[.,>>]<<<<<[<<]>++++++++++<+<<+<<+<..<+<[.,>>]<[<<]<...<<.

इसने मुझे दो दिनों का बेहतर हिस्सा दिया। मुझे लगता है कि यह इसके लायक था। वहाँ शायद भागों है कि क्या सेल कुछ में संग्रहीत किया जाता है या जो कुछ भी बदलकर और अधिक गोल्फ हो सकता है, लेकिन अभी मैं सिर्फ खुश हूँ मैं इसे काम कर रहा हूँ।

यदि यह प्रश्न निर्दिष्ट नहीं करता है कि इनपुट सॉर्ट किया जाएगा तो यह कार्यक्रम पूरी तरह से अलग होगा। जिस तरह से यह काम करता है वह इनपुट के आसपास 10 पिन की एक सूची का निर्माण करता है। यह भ्रामक है लेकिन शायद यह इसे बेहतर तरीके से समझाएगा:

If you input these pins:           [2, 3, 6, 8, 9]
First, the program does this:      [2, 3, 6, 8, 9] + [10]
Then this:                         [2, 3, 6] + [7] + [8, 9, 10]
Then this:                         [2, 3] + [4, 5] + [6, 7, 8, 9, 10]
Finally, this:                     [1] + [2, 3, 4, 5, 6, 7, 8, 9, 10]
To build this:                     [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

यह करते समय, यह याद रखता है कि उपयोगकर्ता ने कौन सा पिन वहां रखा है और कौन सा इसे वहां रखा है। यदि इनपुट सॉर्ट नहीं किया गया था, तो इस रणनीति का उपयोग करना बहुत मुश्किल होगा।

एक और बात जो छांटना आसान बनाती है, वह है संख्या 10 का पता लगाना। क्योंकि ब्रेनफक अलग-अलग बाइट्स के साथ काम करता है, न कि "नंबर" प्रति से, यह गधे में दर्द हो सकता था, लेकिन हल किए गए इनपुट ने मुझे सौदा करना बहुत आसान बना दिया। साथ में। इसका कारण यह है कि मैंने कार्यक्रम में डेटा कैसे संग्रहीत किया है। मैं समय पर इनपुट एक चरित्र लेता हूं और परिणाम से 32 घटाता हूं। यदि कोशिका उसके बाद गैर-शून्य है, तो मैं 4 कोशिकाओं को आगे बढ़ाता हूं। दोहराने से पहले। इसका मतलब यह है कि मुझे हर 4 सेल में नॉन-स्पेस बाइट मिलती है, और मैं प्रभावी रूप से पिन को उनकी संख्या + 16 के रूप में संग्रहीत करता हूं। हालांकि, 10 को दो बाइट्स टाइप करने में लगते हैं, इसलिए मुझे इसे विशेष मामला बनाना पड़ा। यदि इनपुट सॉर्ट नहीं किया गया था, तो मुझे पिंस के माध्यम से देखना होगा, लेकिन जब से यह सॉर्ट किया गया है, यह दिखाई देने पर हमेशा अंतिम पिन होगा। मैं जांचता हूं कि क्या (इनपुट के अंतिम बाइट + 1) == (इनपुट के दूसरे अंतिम बाइट) और यदि ऐसा है, तो यह 10 होना चाहिए। मुझे अंतिम बाइट से छुटकारा मिलता है और दूसरा अंतिम सेट करता है जो मेरे सिस्टम को समझता है "10"। किरदार'1'और '0'एक भी बाइट में फिट नहीं है, लेकिन संख्या 26 सुनिश्चित करता है!

बस कुछ काम करने के लिए ट्रिक्स के साथ आना इस भाषा का उपयोग करने का मेरा पसंदीदा हिस्सा है। :)

यदि आप रुचि रखते हैं कि यह कार्यक्रम और अधिक विस्तार से कैसे काम करता है, तो आप इस कार्यक्रम को उन टिप्पणियों के साथ देख सकते हैं जो मैंने इसे लिखने के लिए उपयोग किया था, यह सुनिश्चित करने के लिए कि मुझे याद है कि सब कुछ क्या किया था। यहां तक ​​कि ब्रेनफॉक में टिप्पणियां लिखना कठिन है, क्योंकि कोई टिप्पणी वाक्य रचना नहीं है। इसके बजाय, हर चरित्र को छोड़कर जो <[+.,-]>बिना ऑप्स हैं। गलती से .या ,अपनी टिप्पणी सहित बग को लागू करना आसान है ! यही कारण है कि व्याकरण इतना विस्की है और अर्धविराम हर जगह हैं।

संपादित करें: यह कितना आसान है कि इसे पेंच करना एक उदाहरण के रूप में: मैंने टिप्पणियों में "गैर-स्थान" का उपयोग किया! जब मैंने स्रोत से सभी गैर-बीएफ वर्णों को छीन लिया, तो जो कार्यक्रम मैं करता था वह अंदर रखा गया था -। सौभाग्य से यह कुछ भी नहीं टूटा, लेकिन अब मैंने इसे बाइट बचाने के लिए हटा दिया है। :)

संपादित करें II: जब से मैंने इस एक, हाहा को छुआ है, यह एक समय हो गया है। इस साइट पर एक अन्य ब्रेनफक जवाब में, मैंने देखा कि मैंने गलती से टिप्पणी संस्करण में एक अल्पविराम का उपयोग किया था। चूंकि इनपुट पहले ही समाप्त हो चुका था, इसलिए यह वर्तमान सेल को 0 पर सेट करता है (यह कार्यान्वयन पर निर्भर है, लेकिन मेरे अनुभव में यह सबसे आम व्यवहार है)। मैंने बग को ठीक कर दिया, लेकिन यह मुझे सोच में पड़ गया। सेल को 0 पर सेट करने का मुहावरेदार तरीका है [-](लगभग while (*p) { *p--; }), जो दो बाइट्स लंबा है। किसी भी समय सभी इनपुट पढ़ा गया है, मैं ,इसके बजाय उपयोग कर सकता हूं । इसने मुझे उस उत्तर में 2 बाइट्स बचाए, और इस एक में 12!

one flag at the very left; will be important later
+>>>>

all nonspace bytes of input separated by 3 empty cells; pin number `n` stored with value `n` plus 16
,[>++++[<-------->-]<[>>>>],]<<<<

test if last pin is 10
[>+<<+<+>>-]<[>+<-]+<+<<[>+>-<<-]>[<+>-]>

[
    if not: find 10 minus the number it is; put that many placeholder pins (cells with value 1) at the end
    ,+++++[>+++++<-]>>[<->-]<[>>>>>[>>>>]+[<<<<]<-]>>[<+>-]<<<
]>


[
    if so: get rid of '0' byte; convert '1' byte to 26 (10 plus 16)
    >>[,<]<<+++++++++<
]<<<

pointer now sitting on the cell with the second greatest pin that was inputted (ie not a placeholder)

;;;;;;;

[
    check for flag placed at the very beginning of the program; if present: break
    -[+>>-<]>
    [
        find ((pin to our right) minus 1) minus pin to our left
        move all pins left of us 4*(that value) cells and insert placeholder pins
        >>[<+<+>>-]<<<<[>+>-<<-]>[<+>-]>[<<[<<<<]>>>>[[<<<<+>>>>-]>>>>]<<<<+>>-]>[>+<-]
    ]

    find first non placeholder pin to our left
    there has to be one because we haven't hit the flag yet
    <<<[-[+>]+<<<<]>>>>-<<<<<
]>>>>>+

we have now added placeholder pins at the end and in the middle; all that's left is the beginning

subtract 17 from lowest pin and put that many placeholders to the left
++++[>----<-]>->[<+>>+<-]<[<<<[<<<<]+[>>>>]<-]>>[<+>-]

subtract 32 from an empty cell 2 to the left of the lowest pin; will be useful later
<[<<<<]>>>++++[<-------->-]>

placeholder pins have the value 1; real pins have a value somewhere between 17 and 26
normalize it by stepping through and setting every pin with value != 1 to 3 (0's ascii code is 2 higher than period so this will make it easier to print later)
[-[,+++>]+>>>[<<<->>]>]<<<<<[>-]>[>>]>>

start writing 32s across the board; hitting every second cell
that's every pin and the cell 2 to the right of each pin
this is done in such a way that it will only halt if adding 32 to a cell sets it to 0; which is why we subtracted 0 from an empty cell earlier
it will catch us and prevent an infinite loop
+[<++++[<++++++++>-]<]

now write 13 to each pin; this adds up to 46 or 48; which are exactly the ascii values we want
>>[+++++++++++++>>>>]

we happen to have made a 14; turn it into a 10 for a newline
<<<<----

we're so close now; i can taste it
we have a list of 10 pins; each one with the ascii value that needs to be written
we have 32 everywhere because we'll need spaces
we even have a newline

the only problem now is that our list looks like this:
;;;;;;;;;;;;;;;;;;;;;;;;
;;1 2 3 4 5 6 7 8 9 10;;
;;;;;;;;;;;;;;;;;;;;;;;;

and we need to print in this order:
;;;;;;;;;;;;;;;;;;;;;;;;
;;7 8 9 10 4 5 6 2 3 1;;
;;;;;;;;;;;;;;;;;;;;;;;;

it's a pretty simple fix
once we print a pin we obviously don't need to remember it any more
so we simply print the last 4 pins on the list; destroying them on the way
then we print the last 3; which have become the ones we want
then two; then one
<+++[<<+<<[<<+<<]+[>>>>]<<<<-]<<<<[-<<<<]

print pins 7 8 9 10
>[.,>>]

print pins 4 5 6
<<<<<[<<<<]<++++++++++<<.<+<<+<<+<<+<<+<[.,>>]

print pins 3 2
<<<<<[<<]>++++++++++<+<<+<<+<..<+<[.,>>]

print the final pin!! :)
<[<<]<...<<.

14

अजगर 2, 108 बाइट्स

def f(x):
 for i in 4,3,2,1:print" "*(4-i)+" ".join(".O"[i*~-i/2-~z in map(int,x.split())]for z in range(i))

के साथ बुलाओ f("3 5 7 9 10")

iपंक्ति संख्या है, जिसमें पहली पंक्ति 4 है और 1 अंतिम है। zउस पंक्ति पर nth पिन है, जिसका अर्थ है कि यह पंक्ति में पहला पिन है और i-1इसका अर्थ है कि यह पंक्ति में अंतिम पिन है।

मुख्य हैक है i*~-i/2-~z, जो कनवर्ट करता है (i, z) -> pin number। उदाहरण के लिए, (4, 0) -> 7चूंकि पिन 7 पंक्ति 4 (पहली पंक्ति) पर पहला पिन है। व्युत्पत्ति इस प्रकार है:

  • हम एक फ़ंक्शन iको पंक्ति पर पहली पिन पर ले जाना चाहते हैं i, अर्थात 4 -> 7, 3 -> 4, 2 -> 2, 1 -> 1। यह द्वारा संतुष्ट है (i**2-i)/2 + 1, और इस प्रकार (i**2-i)/2 + 1 + zइनपुट के लिए सही पिन नंबर देता है(i, z)

  • फिर सरल करें:

(i**2-i)/2 + 1 + z
  = (i*(i-1))/2 + 1 + z
  = i*~-i/2 + 1 + z
  = i*~-i/2-~z

पायथ , 33 बाइट्स

V4~Z-4N+*dNjdm@".O"}+d-11Zrz7U-4N

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

कार्यक्रम मोटे तौर पर इसका अनुवाद करता है:

z = input()
Z = 0

for N in range(4):
  Z += 4-N
  print(" "*N + " ".join(".O"[d+11-Z in map(int, z.split())] for d in range(4-N)))

(सुझावों के लिए isaacg का धन्यवाद)


आपका Pyth कोड दो तरह से रखा जा सकता है: V4के बराबर है FNU4, और rz7के बराबर है mvkcz\
isaacg

अहा धन्यवाद। मुझे अभी भी आदत नहीं है कि हर समय डॉक्स की जांच किए बिना पाइथ में है और नहीं है।
Sp3000

एक पूर्ण कार्यक्रम के रूप में 107 बाइट्स
21

9

अजगर , ३१

V4+*dNjdm?\O}+7+dZrz7\.rN4~Z-N4

इसे यहाँ आज़माएँ ।

V4 [0,1,2,3] के चर के रूप में N के साथ लूप के लिए सेट करता है।

*dNप्रारंभिक स्थान प्रदान करता है, क्योंकि dअंतरिक्ष है।

पिन स्थानों को खोजने के लिए, यह +7+dZ7 + d + Z का उपयोग करता है ।

d है:

0 1 2 3
 1 2 3
  2 3
   3

Zपहली पंक्ति में 0 है, जबकि दूसरी में -4, तीसरी में -7 और दूसरी में -9 है। यह becasue Z0 के रूप में शुरू होता है, और 4 से ~Z-N4घटता Zहै, फिर 3, फिर 2।

फिर, यह जाँचता है कि क्या पिन स्थान इनपुट में है, का उपयोग करके }+7+dZrz7rz7सूची के वांछित रूप में वांछित पिन है।

तब, यह बनाता है Oयदि यह मौजूद था, और .अन्यथा। यह अंतरिक्ष अलग है, के साथ jd, और स्पष्ट रूप से मुद्रित।


5

पर्ल 5: 51 (50 + 1 के लिए -p)

जिसके rलिए ध्वज का उपयोग करना s///हाल ही के पर्ल 5 परिवर्धन में से एक है।

#!perl -p
$_="7890
 456
  23
   1
"=~s!\d!'. '^a
x/$&\b/!egr

5

CJam, 48 41 बाइट्स

वाह, यह बहुत लंबा हो गया

"6789345 12  0"S*7/N*[l~]:(s"O"erA,s"."er

इसका परीक्षण यहां करें।

व्याख्या

पहले हम लेआउट उत्पन्न करते हैं:

"6789345 12  0"       "Push this string.";
               S*     "Riffle with spaces.";
                 7/   "Split into substrings of length 7.";
                   N* "Join with newlines.";

यह प्रदान करता है

6 7 8 9
 3 4 5 
  1 2  
   0

और अब हम इनपुट के अनुसार अंक वर्णों को प्रतिस्थापित करते हैं:

[l~]                 "Read the input and turn it into an array of integers.";
    :(s              "Decrement each number and turn the array into a string of digits.";
       "O"           "Push this string.";
          er         "Character transliteration, replaces the input digits with O.";
            A,s      "Create the string '0123456789'.";
               "."   "Push this string.";
                  er "Character transliteration, replaces all remaining digits with periods.";

"789A456S23SS1":~S*7/N*[l~]'OerB,'.erथोड़ा छोटा है।
डेनिस

@ डेनिस धन्यवाद। मुझे पूरी तरह से यकीन नहीं है कि अगर erआटो बैक करने के लिए ऑटोकास्टिंग किया गया था।
मार्टिन एंडर जूल

अरे हाँ। यह 0.6.4 में लागू किया गया था, जो इस प्रश्न से छोटा है। "789A456S23SS1":~S*7/N*[l~]"O"erB,"."er0.6.2 में ठीक काम करता है।
डेनिस

5

पायथन 2, 97 94

यह अनुवाद फ़ंक्शन का उपयोग करता है, जो एक स्ट्रिंग में चरित्र-से-चरित्र प्रतिस्थापन बनाने की अनुमति देता है। Perl में tr की तरह, टाइप करने के लिए ज्यादा लंबे समय को छोड़कर। मुझे 9 वीं से 99 वीं शक्ति तक स्ट्रिंग बनाकर दशमलव अंकों की एक सूची मिलती है।

lambda a:u"7890\n 456\n  23\n   1".translate({ord(n):u'.O'[n+' 'in a+' ']+' 'for n in`9**99`})

5

जावास्क्रिप्ट, 155

पहला गोल्फ, शायद छोटा हो सकता है।

function f(i){q='replace',s='7 8 9 0\n 4 5 6\n  2 3\n   1';alert(s[q](RegExp(i[q]('10','0')[q](/ /g,'|'),'g'),function(a){return a?'O':a})[q](/\d+/g,'.'))}

के साथ बुलाना

f('1 2 3 4 5 6 7 8 9 10')
f('1 5 10')
f('')

संपादित करें

ES6 संस्करण, 130

f=i=>{q='replace',s='7 8 9 0\n 4 5 6\n  2 3\n   1';alert(s[q](RegExp(i[q]('10','0')[q](/ /g,'|'),'g'),a=>a?'O':a)[q](/\d+/g,'.'))}

संपादित करें

ES6 संस्करण, 79 विफल रहता है

f=i=>alert('7890\n 456\n  23\n   1'.replace(/\d/g,a=>i.indexOf(a)<0?'. ':'O '))

ईएस 6 संस्करण, 72 77, कोई चेतावनी नहीं, बस रिटर्न

f=i=>'7890\n 456\n  23\n   1'.replace(/\d/g,a=>i.search(a+'\\b')<0?'. ':'O ')

1
79 और 72 टूट गए हैं, दोनों इनपुट 10 के लिए विफल
edc65

@ edc65 whoops, धन्यवाद, निश्चित।
लाल-एक्स

ओह, शब्द सीमा चरित्र का चतुर उपयोग, मैं लगभग एक ही समान (उपयोग को छोड़कर .match) के साथ आया था । यह उन सभी में सबसे सुरुचिपूर्ण है।
निंजाजेको १।

4

रूबी, 91

x=(1..10).map{|i|i.to_s==$*[0]?($*.shift;?0):?.}
4.times{|i|puts (x.pop(4-i)*' ').center 8}

बस .s और 0s के साथ कमांड लाइन के तर्कों को प्रतिस्थापित करता है और उन्हें 4 चक्रों के लूप का उपयोग करके प्रिंट करता है।

पठनीय संस्करण

x = (1..10).map do |i|
  if i.to_s == ARGV[0]
    ARGV.shift
    "0"
  else
    "."
  end
end

4.times do |i|
  row = x.pop(4 - i)
  puts row.join(' ').center 8
end

4

GNU sed, 75

  • @ बर्डन के लिए 6 बाइट्स को सहेजा गया।

स्कोर में -rविकल्प के लिए 1 अतिरिक्त शामिल है :

s/^/7 8 9 10\
 4 5 6\
  2 3\
   1 /
:
s/([0-9]+)(.*)\1/O\2/
t
s/[0-9]+/./g

इनपुट के माध्यम से:

$ echo 3 5 7 9 10 | sed -rf ./bowling.sed
O . O O
 . O .
  . O
   .    
$ 

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


जीएनयू sed, खाली लेबल की अनुमति देता है ताकि आप द्वारा दो बाइट्स बचा सकता है छोड़ने lरों
जॉर्डन

इसके अलावा, आप बदलते हैं 0करने के लिए 10, पंक्ति 2 पर 1/करने के लिए 1 /आन लाइन 5, और [0-9]करने के लिए [0-9]+लाइनों 7 पर और 9 आप पहली पंक्ति ड्रॉप कर सकते हैं 4 बाइट के लिए।
जॉर्डन


3

सीजेएम, 40 39 बाइट्स

4,Sf*'-A*[q~]{('ot}/3,{)/(\s}%Sf*W%]zN*

मुझे पता है कि एक छोटा रास्ता है, अभी इसे समझने का समय नहीं है।

यह काम किस प्रकार करता है:

4,Sf*'-A*[q~]{('ot}/3,{)/(\s}%Sf*W%]zN*
4,                                          "Get the array [0,1,2,3]";
  Sf*                                       "Covert each number to that many spaces to";
                                            "get ["", " ", "  ", "   "] array";
     '-A*                                   "String '----------'";
         [q~]                               "Input numbers in an array";
             {    }/                        "For each input number";
              ('ot                          "Put 'o' at the corresponding index";
                    3,                      "Array [0,1,2]";
                      {     }%              "For each of the above number";
                       )                    "Increment the number";
                        /                   "Split the string into pieces of that length";
                         (\s                "Take the first string and join the rest back";
                              Sf*           "Riffle each string in array with space";
                                 W%         "Reverse the array of strings";
                                   ]z       "Zip together the space array and this one";
                                     N*     "Join by new line";

इसे यहाँ ऑनलाइन आज़माएँ


3

एपीएल (35)

⊖4 7⍴'.O'[1+⎕∊⍨⍳10]\⍨17110357⊤⍨28/2

परीक्षा:

      ⊖4 7⍴'.O'[1+⎕∊⍨⍳10]\⍨17110357⊤⍨28/2
⎕:
      1 3 5 6 9 10
. . O O
 . O O 
  . O  
   O   

स्पष्टीकरण:

  • 17110357⊤⍨28/2: 28-बिट प्रतिनिधित्व 17110357:

          4 7⍴17110357⊤⍨28/2
    0 0 0 1 0 0 0
    0 0 1 0 1 0 0
    0 1 0 1 0 1 0
    1 0 1 0 1 0 1
    
  • \⍨: प्रत्येक के लिए 0, एक स्थान दें, और प्रत्येक के लिए 1, बाईं ओर स्ट्रिंग से एक आइटम लें।

  • ⎕∊⍨⍳10: कीबोर्ड से एक पंक्ति पढ़ें और उसका मूल्यांकन करें ( ), फिर 1 से 10 तक हर नंबर की जांच करें ( ⍳10क्या यह इनपुट में निहित है या नहीं ∊⍨) ( )।
  • '.O'[1+... ]: प्रत्येक मूल्य में 1 जोड़ें (0s और 1s के बजाय 1s और 2s देते हुए), और फिर प्रत्येक 1 को .प्रत्येक 2 और हर 2 से प्रतिस्थापित करें O
  • 4 7⍴: उत्पन्न स्ट्रिंग को 4-बाय -7 मैट्रिक्स में बदल दें
  • : इसे क्षैतिज रूप से फ्लिप करें

3

पॉवर्सशैल: 109

इनपुट $ i में है

(7..10),(4..6),(2,3),1|%{$c=0}{$_|%{$o=(" "*$c++)}{$o="$o $(if($i.split() -contains $_){'O'}else{'.'})"};$o}

वह मजेदार था। पाइप लाइन कैसे काम करती है, इसके बारे में सामानों का एक समूह सीखा।


3

हास्केल: 163 160 बाइट्स

यह अंतरिक्ष की एक पंक्ति को अलग संख्या से स्वीकार करता है stdin

m=map
y?x|x`elem`y="O "|0<1=". "
f y=putStr.unlines.zipWith(++)(m(`replicate`' ')[0..])$m(concat.m(y?))[[7..10],[4..6],[2,3],[1]]
main=getLine>>=f.m read.words

Ungolfed:

layout :: [[Int]]
layout = [[7,8,9,10]
         ,[ 4,5,6  ]
         ,[  2,3   ]
         ,[   1    ]
         ]

indentBy :: Int -> String
indentBy n = replicate n ' '

indentLines :: [String] -> [String]
indentLines
  = zipWith (++)
            (map indentBy [0..])

bowling :: [Int] -> String
bowling pins
  = unlines
  . indentLines
  $ map (concatMap showPlace)
        layout
  where
    showPlace :: Int -> String
    showPlace index
      | index `elem` pins = "O "
      | otherwise         = ". "

parseInput :: String -> [Int]
parseInput = map read . words

main :: IO ()
main = do
  pins <- fmap parseInput getLine
  putStr (bowling pins)

और एक बोनस:

C: 250 बाइट्स

यह संस्करण इसकी कमांड लाइन तर्कों को संख्याओं की सूची होने की उम्मीद करता है।

#define w int
main(w
z,char**a){w
b[10]={1,3,2,6,5,4,10,9,8,7};w
q=9;for(w
k=4;k>0;--k){w
i;for(i=0;i<4-k;++i)printf(" ");for(i=0;i<k;++i,--q){w
g=0;w
c;for(w
p=1;p<z;++p){sscanf(a[p],"%d",&c);g|=b[q]==c;}c=g?'O':'.';printf("%c ",c);}printf("\n");}}

2

पर्ल, 73

$_="7 8 9 10\n 4 5 6\n  2 3\n   1";for$v(<>=~/\d+/g){s/$v/O/g};s/\d+/./g;print

और एक नासमझ बोनस अप्रोच, जो कि 90 वर्णों को पैन नहीं करता है:

srand(1488068);$i=<>;print+(($i=~/$_\b/?O:".")." "x rand 5)=~s/  /\n /r for 7..10,4..6,2,3,1

2

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

समारोह:

f=(i=0;Reverse@Table[Row@Table[If[MemberQ[ToExpression/@StringSplit@#,++i],O,"."],{n}],{n,4}]~Column~Center&)

के द्वारा बुलाया गया:

f@"3 5 7 9 10"

यदि अनाम कार्यों की अनुमति है, तो इसे 105 बाइट्स तक छोटा किया जा सकता है :

i=0;Reverse@Table[Row@Table[If[MemberQ[ToExpression/@StringSplit@#,++i],O,"."],{n}],{n,4}]~Column~Center&

यदि इनपुट में स्पेस-सीमांकित स्ट्रिंग नहीं होना चाहिए, लेकिन फॉर्म में संख्याओं की एक सरणी हो सकती है {3,5,7,9,10}, तो इसे 79 बाइट्स तक छोटा किया जा सकता है :

i=0;Reverse@Table[Row@Table[If[MemberQ[#,++i],O,"."],{n}],{n,4}]~Column~Center&

2

शुद्ध बैश (कोई कोर्यूटिल नहीं), 85

सरल पैटर्न प्रतिस्थापन:

f="7 8 9 0
 4 5 6
  2 3
   1"
a=${@/10/0}
f="${f//[${a// /}]/O}"
echo "${f//[0-9]/.}"

सूची कमांड-लाइन आर्ग्स के माध्यम से इनपुट है।


2

प्रतिबल - ११bol

s: array/initial 10"."b:""foreach n to-block input[s/:n:"0"]for n 4 1 -1[prin b print take/last/part s n append b" "]

Ungolfed:

s: array/initial 10 "."
b: ""
foreach n to-block input [s/:n: "0"]
for n 4 1 -1 [prin b print take/last/part s n append b " "]

2

ब्रेनफक, 179 बाइट्स

++++++++++[-[<<+>>-]+<<]>,[<[-]-[>-<-----]>++[-[>>+<<-]>>]>+++[<<],>,]<[,>>---[>
>]<<+++[<<]]>->>->>>>->>>>>>->[[>>]>,<<+[++[>+++++++++++<-]<+]>>[++.>-.>]>++++++
++++[>>]<<[.[<]<]<]

प्रारूपित:

++++++++++
[
  -[<<+>>-]
  +<<
]
>,
[
  <[-]
  -[>-<-----]
  >++
  [
    -[>>+<<-]
    >>
  ]
  >+++[<<]
  ,>,
]
<
[
  ,>>---[>>]
  <<+++[<<]
]
>->>->>>>->>>>>>->
[
  [>>]
  >,<
  <+
  [
    ++[>+++++++++++<-]
    <+
  ]
  >>[++.>-.>]
  >++++++++++[>>]
  <<[.[<]<]
  <
]

एक अनुगामी न्यूलाइन के बिना इनपुट की अपेक्षा करता है।

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

टेप को दस नोड्स के साथ शुरू किया गया है, जिनमें से प्रत्येक में एक शून्य के बाद एक होता है। एक पिन का प्रारंभिक मूल्य है, और शून्य नेविगेशन की सुविधा देता है और अंतरिक्ष चरित्र के लिए प्लेसहोल्डर के रूप में कार्य करता है। इनपुट में प्रत्येक संख्या के लिए, उस पिन को 3 से बढ़ा दिया गया है; ध्यान दें कि ord('O') - ord('.') = 33, और मुद्रण चरण के दौरान, पिन का मान 11. से गुणा किया जाएगा (यह गुणन अंतरिक्ष वर्ण उत्पन्न करने के लिए भी उपयोग किया जाता है।) टेप पर बाईं से दाईं ओर पिन का क्रम बस है1 तक है 10। यदि इनपुट के साथ समाप्त होता है 10, तो एक सुधार किया जाता है, क्योंकि 10शुरू में इसे एक के रूप में माना जाता है1

इनपुट संसाधित होने के बाद, प्रत्येक पंक्ति के बाद एक नकारात्मक एक रखा जाता है। फिर पंक्तियों को एक लूप में मुद्रित किया जाता है, पहले से संसाधित पंक्तियों की संख्या द्वारा निर्धारित प्रमुख रिक्त स्थान की संख्या के साथ।


1

क्लोजर, 216 वर्ण (ऊग)

मुझे यकीन है कि इसे आगे बढ़ाया जा सकता है।

(let[s(map #(dec(read-string %))(.split(slurp *in*)" +"))](println(apply str(replace(apply hash-map(interleave(map #(char(+ 48 %))(range 10))(map #(if(some #{%}s)"O"".")(range 10))))"6 7 8 9\n 3 4 5\n  1 2\n   0"))))

इस तरह का उपयोग करें:

echo -n "2 4 9 8 10 5" | clojure a-file-which-contains-this-program.clj

1

AWK: 96 बाइट्स

{gsub(/ /,"");a="6 7 8 9\n 3 4 5\n  1 2\n   0";gsub("["$0"]","O",a);gsub(/[0-9]/,".",a);print a}

ध्यान दें:

  • इनपुट मूल्य पर रिक्तियाँ विभाजक वैकल्पिक हैं (लेकिन यह आवश्यकतानुसार उनके साथ भी काम करता है)
  • संख्याओं के क्रम में नहीं होना चाहिए
  • इनपुट STDIN पर पढ़ा जाता है

1

सी # - 192 बाइट्स

क्योंकि C #!

मैंने गणित के साथ आउटपुट बनाने की कोशिश शुरू की, लेकिन उच्च-स्तरीय भाषाओं के लिए सरल प्रतिस्थापन-टोकन-इन-स्ट्रिंग पद्धति सबसे अच्छी लगती है। Linq निर्भरता लंबी है, लेकिन अभी भी एक काउंटर रखने और रेंज चेक करने से कम है।

using System.Linq;class A{static void Main(string[]a){var s=@"7 8 9 0
 4 5 6
  2 3
   1";for(int c=11;c-->1;)s=s.Replace((char)(48+c%10),a.Contains(""+c)?'O':'.');System.Console.Write(s);}}

संपादित करें: यूनिक्स लाइन रिटर्न (-3 बाइट्स)


1

स्काला, 150 148

def t(n:Any)=("G H I J D E F   B C     A"/:('A'to'J'))((j,i)=>j.replace(i,(if((n+" ").indexOf((i-64)+" ")>=0)'0'else'.'))).grouped(7).maxBy(println)

स्ट्रिंग्स के स्पेस-सीमांकित सेट को स्वीकार करता है


1

जावास्क्रिप्ट ईएस 6, 78 बाइट्स

F=i=>'7890\n 456\n  23\n   1'.replace(/\d/g,e=>'0.'[+!~i.search(e+'\\b')]+' ')

परीक्षण करने के लिए निम्नलिखित स्निपेट का उपयोग करें। यह परीक्षण में आसानी के लिए संकेत और अलर्ट और नियमित रूप से फ़ंक्शन नोटेशन का उपयोग करता है।

i=prompt()
alert('7890\n 456\n  23\n   1'.replace(/\d/g,function(e){return'0.'[+!~i.search(e+'\\b')]+' '}))


1

वीबी / बेसिक-229

मेरा लक्ष्य जावा ^ ^ को हराना था

Dim f
Sub m()
f = " 1 2 3 4 5 6 7 8 9 10"
a = l(7, 10) + l(4, 6) + l(2, 3) + l(1, 1)
MsgBox a
End Sub
Function l(b, e)
r = Space(3 - (e - b))
For i = b To e
r = r + IIf(InStr(f, Str(i)), "0 ", ". ")
Next
l = r + vbCr
End Function

chr (13) के बजाय vbCr संपादित करें

आर = आर + स्पेस (3 - (ई - बी))

आशुलिपि अगर

उप के बजाय फ़ंक्शन का उपयोग

उप मुख्य () -> उप मीटर ()


क्या आप कृपया अपने उत्तर में बाइट्स में कोड की लंबाई शामिल कर सकते हैं?
प्रोग्रामफॉक्स

मैं करूँगा, लेकिन मैं अभी भी कोड के साथ थोड़ा
फिडिंग कर रहा हूं

1

जावा - 223 वर्ण

public class Pins {public static void main(String[] args) {String s = "7 8 9 0\n 4 5 6\n  2 3\n   1";for (String arg : args) {s = s.replace(arg.replace("10", "0"), "o");}s = s.replaceAll("\\d", ".");System.out.println(s);}}

मुझे ऐसा करने का यह तरीका पसंद आया, तब मुझे महसूस हुआ कि मुझे एक छोटी सी हैक की जरूरत है, फिर भी मेरे समाधान की तरह है।

public class Pins {
public static void main(String[] args) {
    String s = "7 8 9 0\n 4 5 6\n  2 3\n   1";
    for (String arg : args) {
        s = s.replace(arg.replace("10", "0"), "o");
    }
    s = s.replaceAll("\\d", ".");
    System.out.println(s);
}
}

1

के, 57 बाइट्स

अभी बहुत प्रतिस्पर्धी नहीं है, लेकिन यह एक शुरुआत है:

`0:((!4)#\:" "),',/'|0 1 3 6_(". ";"O ")@|/(1+!10)=/:(),.

उपयोग उदाहरण:

  `0:((!4)#\:" "),',/'|0 1 3 6_(". ";"O ")@|/(1+!10)=/:(),."3 5 7 9 10"
O . O O 
 . O . 
  . O 
   . 
  `0:((!4)#\:" "),',/'|0 1 3 6_(". ";"O ")@|/(1+!10)=/:(),."1"
. . . . 
 . . . 
  . . 
   O 

मैं इनपुट स्ट्रिंग का मूल्यांकन करके शुरू करता हूं .- सौभाग्य से, अंतरिक्ष में अलग-अलग संख्याएँ K में एक मान्य सूची शाब्दिक हैं। खाली सूची के परिणाम के लिए खाली करने से मैं यह सुनिश्चित कर सकता हूं कि यह एक ही पिन के मामले में भी एक सूची है। फिर मैं पिन के पदों का प्रतिनिधित्व करते हुए एक बूलियन वेक्टर बनाता हूं:

  (1+!10)=/:3 5 7 9 10
(0 0 1 0 0 0 0 0 0 0
 0 0 0 0 1 0 0 0 0 0
 0 0 0 0 0 0 1 0 0 0
 0 0 0 0 0 0 0 0 1 0
 0 0 0 0 0 0 0 0 0 1)
  |/(1+!10)=/:3 5 7 9 10
0 0 1 0 1 0 1 0 1 1

फिर मैं प्रत्येक पिन स्थिति के लिए अंतरिक्ष-गद्देदार वर्ण प्राप्त करने के लिए तार की एक सूची में अनुक्रमण करता हूं।

  (". ";"O ")@0 0 1 0 1 0 1 0 1 1
(". "
 ". "
 "O "
 ". "
 "O "
 ". "
 "O "
 ". "
 "O "
 "O ")

मैं उस अनुक्रम को पंक्तियों में काटता हूं ( _), उन्हें उल्टा करता हूं ( |) और प्रत्येक टुकड़े को एक साथ जोड़ देता हूं ( ,/'):

  ,/'|0 1 3 6_(". ";"O ")@0 0 1 0 1 0 1 0 1 1
("O . O O "
 ". O . "
 ". O "
 ". ")

अब यह उस पैटर्न की तरह दिखने लगा है, जैसा हम चाहते हैं। जो कुछ बचा है, वह प्रत्येक पंक्ति ( ((!4)#\:" "),') के लिए कुछ प्रमुख स्थानों से निपटने और पंक्तियों को stdout ( 0:) में प्रिंट करने के लिए है ।


1

पास्कल (एफपीसी) , 165 बाइट्स

var f:string='. . . .'#10' . . .'#10'  . .'#10'   .';i:byte;z:array[1..10]of byte=(25,18,20,10,12,14,1,3,5,7);begin repeat read(i);f[z[i]]:='O'until eof;write(f)end.

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

मानक इनपुट से संख्या लेता है, मानक आउटपुट के लिए प्रिंट करता है।

पास्कल (एफपीसी) , 175 बाइट्स

function f(q:array of byte):string;var i:byte;z:array[1..10]of byte=(25,18,20,10,12,14,1,3,5,7);begin f:='. . . .'#10' . . .'#10'  . .'#10'   .';for i in q do f[z[i]]:='O'end;

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

एक फ़ंक्शन जो समान कार्य करता है, पिन पदों की एक सरणी लेता है और एक स्वरूपित स्ट्रिंग लौटाता है।


1

पॉवरशेल, 84 बाइट्स

$p='6789
 345
  12
   0'
-split$args|%{$p=$p-replace($_-1),'O '}
$p-replace'\d','. '

टेस्ट स्क्रिप्ट:

$f = {

$p='6789
 345
  12
   0'
-split$args|%{$p=$p-replace($_-1),'O '}
$p-replace'\d','. '

}

# one space at the end of each line with pins
@(
,("1 2 3 4 5 6 7 8 9 10",
@"
O O O O 
 O O O 
  O O 
   O 
"@)

,("7 10",
@"
O . . O 
 . . . 
  . . 
   . 
"@)

,("3 5 7 9 10",
@"
O . O O 
 . O . 
  . O 
   . 
"@)

,("1",
@"
. . . . 
 . . . 
  . . 
   O 
"@)
) | % {
    $s, $expected = $_
    $result = &$f $s
    $result-eq$expected
    $result
}

आउटपुट:

True
O O O O
 O O O
  O O
   O
True
O . . O
 . . .
  . .
   .
True
O . O O
 . O .
  . O
   .
True
. . . .
 . . .
  . .
   O

0

जावा - 371 316 294 चार्ट

public class Bowling{public static void main(String[] a){boolean[] o=new boolean[10];int i;for(String s:a){i=Integer.parseInt(s)-1;o[i]=true;}for(int j=9;j>=0;j--){p((o[j]?"0 ":". "));p(j==6?"\n ":"");p(j==3?"\n  ":"");p(j==1?"\n   ":"");}p("\n");}static void p(String l){System.out.print(l);}}

पहली बार ऐसा करते हुए, मुझे पूरा यकीन है कि यह बहुत चमकदार है, लेकिन मैं नौसिखिया हूं। यह भी काम करता है जब संख्याओं का आदेश नहीं दिया जाता है। नंबरिंग गलत है लेकिन मेरे पास यह पता लगाने का समय नहीं है कि इसे कैसे ठीक किया जाए ...

public class Bowling {
    public static void main(String[] args) {
        boolean[] ordened = new boolean[10];
        int i;
        for (String s : args) {
            i = Integer.parseInt(s) - 1;
            ordened[i] = true;
        }
        for (int j = 9; j >= 0; j--) {
            p((ordened[j] ? "0 " : ". "));
            p(j == 6 ? "\n " : "");
            p(j == 3 ? "\n  " : "");
            p(j == 1 ? "\n   " : "");
        }
        p("\n");
    }
    static void p(String l){
        System.out.print(l);
    }
}

java B 1 2 3 5 10उदाहरण के लिए इनपुट दिया गया है। आउटपुट तब होगा:

0 . . . 
 . 0 . 
  0 0 
   0 

1
नंबर लगाना गलत है।
ऑप्टिमाइज़र

मैं इसे ठीक करने की कोशिश
करूंगा

0

जाप -Rx , 29 19 18 17 बाइट्स

5ÇÆ".O"gUø°TøÃÔû

कोशिश करो


व्याख्या

                      :Implicit input of integer array U
5Ç                    :Map each Z in the range [0,5)
  Æ                   :  Map the range [0,Z)
          °T          :    Increment T (initially 0)
        Uø            :    Does U contain T? (false=0, true=1)
   ".O"g              :    Get the character in the string ".O" at that index
            Ã         :  End mapping
             ¸        :  Join with spaces
              Ã       :End mapping
               Ô      :Reverse
                û     :Centre pad each element with spaces to the length of the longest
                      :Implicitly join with newlines, trim (not strictly necessary) and output
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.