फिज बज़ लाइटयर


9

कई (दो?) FizzBuzz से संबंधित चुनौतियों के मद्देनजर हाल ही में PPCG पर पोस्ट की गई, मुझे अपने साथ आने के लिए लुभाया गया है। देखो ...

फिज बज़ लाइटयर

एक प्रोग्राम या फ़ंक्शन लिखें जो पूर्णांक लेता है nऔर FizzBuzzकिसी भी संख्या को 15 से विभाज्य के लिए प्रिंट करता है , किसी Fizzभी संख्या को 3 से विभाज्य के Buzzलिए , और 5 से किसी भी संख्या के लिए विभाज्य, (और सहित) तक n। सभी के लिए आउटपुट को iएक नई पंक्ति द्वारा पालन किया जाना चाहिए। लेकिन एक मोड़ है!

आपके द्वारा प्रिंट किए जाने वाले हर तीसरी बार Buzz, बज़ लाइटयर अंत में आपके कॉल और क्रैश लैंड को आपके प्रोग्राम में प्रदर्शित करता है। इसके बाद वह अपना परिचय देता है - लेकिन जब से वह दुर्घटनाग्रस्त हुआ, उसने जो कुछ कहा वह आपके कार्यक्रम के आउटपुट के साथ मिल गया:

Buzz Lightyear, Space Ranger, Universe Protection Unit.
FizzBuzz Lightyear, Space Ranger, Universe Protection Unit.

(वह है, केवल उसी के  Lightyear, Space Ranger, Universe Protection Unit.लिए Buzzया FizzBuzz- जो भी आपके द्वारा प्रदर्शित किया गया है, उसे आगे बढ़ाएँ। प्रमुख स्थान पर ध्यान दें)

हालाँकि, बज़ लाइटियर, स्पेस रेंजर होने के नाते उनकी बहुत तीव्र सुनवाई है, और इसलिए मुद्रण FizzBuzzआपके Buzzगिनती की ओर गिना जाएगा

फिर, बज़ आपके कंप्यूटर को उस सभी बुराई आउटपुट से बचाने के लिए चारों ओर लटका हुआ है, जब तक कि आप 5 से (या 15 से विभाज्य नहीं है, क्योंकि वे 5 से विभाज्य हैं,)। इसका क्या मतलब है जब तक आपको फिर से प्रिंट Buzz(या FizzBuzz) नहीं करना है, आप कुछ भी प्रिंट नहीं करते हैं।

जब आप अंततः उस स्थिति में पहुंच जाते हैं, तो बज़ प्रस्थान करता है:

To infinity and beyond!

उदाहरण आउटपुट

यह इसके लिए अपेक्षित आउटपुट है n = 25: (ध्यान दें कि यह 19 से 16 कैसे छूट जाता है)

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz Lightyear, Space Ranger, Universe Protection Unit.
To infinity and beyond!
Fizz
22
23
Fizz
Buzz

नियम

वैकल्पिक अनुगामी न्यूलाइन स्वीकार्य है।

यह कोड गोल्फ है; जैसे, बाइट्स में, सबसे छोटा कोड, जीत।

मान लिया गया nकि वैध है और 15 से अधिक या उससे अधिक है (जो कि जब पहली बार मानक फ़िज़बज़ से चुनौती मिलती है)

जब आप "बज़ काउंटर" (जो दोनों की गिनती करता है Buzzऔर FizzBuzz) 3 हिट करता है, तो बज़ आपको बधाई देता है ; जब वह Buzz( अगले , फिर से, दोनों) BuzzऔरFizzBuzz ) छपा है।

जिस संख्या में वह प्रस्थान करता है वह अगले "बज़ काउंटर" की ओर नहीं गिना जाता है; इसके बजाय आपको Buzz0. से फिर से es की गिनती शुरू करनी चाहिए । उदाहरण के लिए, n = 25(उदाहरण आउटपुट) के साथ चलने वाला एक प्रोग्राम 1 के "बज़ काउंटर" के साथ समाप्त होना चाहिए, क्योंकि Buzzपिछली बार जब वह रवाना हुआ था तब से कितनी बार मुद्रित किया गया था।

यदि nबज़ की एक आवक और उसके एक प्रस्थान (यानी, वह अभी भी वहाँ है - आप कुछ भी नहीं छाप रहे हैं) के बीच गिरता है, तो सुशोभित समाप्ति की उम्मीद है। इसलिए, आउटपुट की अंतिम पंक्ति उसका परिचय होगी

मानक खामियों को मना किया जाता है।


1
क्या आप nबज़ लाइटेयर के आगमन और उसके प्रस्थान के बीच में आने पर अपेक्षित व्यवहार को स्पष्ट कर सकते हैं ?
23

बस कार्यक्रम छोड़ दिया। मैं नियमों को एक दूसरे में संपादित करता हूँ
osuka_

जवाबों:


5

जावास्क्रिप्ट (ईएस 6), 182 175 बाइट्स

  • -7 बाइट्स : बज़ टर्नरी एक्सप्रेशन में बज़ लाइटेयर लॉजिक को स्थानांतरित किया।

f=(n,s=i=b=_='')=>i++<n?f(n,s+`${(i%3?_:'Fizz')+(i%5?_:`Buzz${++b%3?_:` Lightyear, Space Ranger, Universe Protection Unit.${(i+=5)>n?_:`
To infinity and beyond!`}`}`)||i}
`):s
<!-- snippet demo: -->
<input oninput=o.innerHTML=f(this.value)>
<pre id=o>


3

पायथन 2 , 185 178 172 बाइट्स

for i in range(input()):
 if-~i%20<16:print i%20/19*"To infinity and beyond!"or i%3/2*"Fizz"+i%5/4*"Buzz"+i%20/14*" Lightyear, Space Ranger, Universe Protection Unit."or-~i

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

व्याख्या

निरीक्षण: बज़ लाइटियर तीसरे "बज़ नंबर" पर आता है और चौथे पर रवाना होता है। "बज़ नंबर" पाँच के गुणक हैं। इस प्रकार, बज़ की चाल 20 की लंबाई के चक्र पर होती है।

हम iइनपुट -1 के माध्यम से 0 से प्रत्येक पर लूप करते हैं । (इसका मतलब है कि iहम जो वास्तविक संख्या पर विचार कर रहे हैं, उससे हमेशा कम है।)

के -~iलिए शॉर्टकट के रूप में उपयोग करते हुए i+1, if-~i%20<16:जांचता है कि i+1, मोड 20, 15 या उससे कम है। (यदि यह 16 से 19 है, बज़ लाइटियर मौजूद है और हम कुछ भी आउटपुट नहीं करना चाहते हैं।)

अगर स्टेटमेंट के अंदर, हम To infinity and beyond!हर 20 में से प्रत्येक पर प्रिंट करना चाहते हैं - अर्थात, हर बार i%2019 है। (याद रखें कि iवास्तविक संख्या से एक कम है।) चूंकि i%2019 से अधिक कभी नहीं i%20/19होगा, वांछित में 1 होगा। मामला, <1 अन्यथा। पायथन 2, आसानी से, तार से गुणा करने पर तैरता है, इसलिए i%20/19*"..."पूर्ण स्ट्रिंग देता है यदि i%2019 है, अन्यथा ""

यदि उपरोक्त मामला लागू होता है, तो हम कुछ और प्रिंट नहीं करते हैं। लेकिन अगर पहली अभिव्यक्ति है ""(जो गलत है), तो हम orचलते रहते हैं। इसके लिए Fizz, Buzzऔर परिचय की अभिव्यक्तियाँ ऊपर से समान रूप से गणना की जाती हैं और एक साथ जोड़ दी जाती हैं।

अंत में, यदि इनमें से कोई भी मामला लागू नहीं होता है, तो हम संख्या को स्वयं के साथ प्रिंट करते हैं -~i


2

05AB1E , 97 93 90 बाइट्स

>GN"FizzBuzz"2äN35SÖÏJ)˜1(è“To infinity€ƒ—°!“)N20%©_è®15Q” Lightyear,‡²ìÓ,ªÜŠí‰¿.”×J®16‹i,

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

आगे गोल्फ के बाद आने के लिए स्पष्टीकरण।

वैकल्पिक 97 बाइट संस्करण

>G"FizzBuzz"2ä” Lightyear,‡²ìÓ,ªÜŠí‰¿.”)˜N•9¨•3äR%15%_ÏJ“To infinity€ƒ—°!“)N20ÖèN)˜é®èN20%15›i\},
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.