एक "BizzFuzz" कार्यक्रम बनाएँ


18

पारंपरिक FizzBuzz में, आपको संख्या 1 से 100 तक प्रिंट करने के लिए कहा जाता है, लेकिन 3 के प्रत्येक गुणक को "Fizz", 5 के प्रत्येक बहु को "Buzz" के साथ, और 3 और 5 (यानी 15) दोनों में से प्रत्येक में बदल दिया जाता है। FizzBuzz "।

हालाँकि, एक दुष्ट साक्षात्कारकर्ता के रूप में, मैंने FizzBuzz के अपने स्वयं के मुड़ संस्करण का आविष्कार किया है, जिसे मैंने BizzFuzz का नाम देने और एक कोडिंग साक्षात्कार में आपको देने का निर्णय लिया है।

खेल के नियम हैं:

  • प्रत्येक नंबर को 1 से 100 तक प्रिंट करें, सिवाय इसके कि नंबर नीचे की किसी एक शर्त को पूरा करता है।

    • यदि संख्या 4 से विभाज्य है, तो "फ़िज़" प्रिंट करें।
    • यदि संख्या 5 से विभाज्य है, तो "बज़" प्रिंट करें।

    • यदि संख्या 4 से विभाज्य है, लेकिन इसके तुरंत बाद की संख्या 5 से विभाज्य है, तो "फ़िज़बज़" के बजाय "फ़िज़बज़" प्रिंट करें, और अगले नंबर को नियमित रूप से प्रिंट करें।

    • यदि संख्या 5 से विभाज्य है, लेकिन इसके तुरंत बाद की संख्या 4 से विभाज्य है, तो "बज़" के बजाय "बज़फिज़" को प्रिंट करें, और अगले नंबर को नियमित रूप से प्रिंट करें।

    • यदि संख्या 4 और 5 दोनों से विभाज्य संख्या से तुरंत पहले है, तो "Bizz" प्रिंट करें।

    • यदि संख्या 4 और 5 दोनों से विभाज्य संख्या के तुरंत बाद है, तो "फ़ज़" प्रिंट करें।

    • यदि संख्या 4 और 5 दोनों से विभाज्य है, तो "BizzFuzz" प्रिंट करें।

किसी भी भाषा में इन सभी नियमों को लागू करने का सबसे छोटा कोड जीतता है।

जवाबों:


4

गोल्फस्क्रिप्ट ( 83 80 चार्ट )

(टिप्पणियों में एनबी हॉवर्ड का सुझाव 78 वर्णों को कम करने की अनुमति देता है, लेकिन कुछ लाइनों पर रिक्त स्थान के साथ)।

यह चरित्र का उपयोग करता है \0, इसलिए यहाँ यह xxd प्रारूप में है:

0000000: 3130 302c 7b29 2e32 3025 2742 6946 750a  100,{).20%'BiFu.
0000010: 0046 750a 0000 0046 6942 750a 0000 0000  .Fu....FiBu.....
0000020: 4669 0a00 0042 750a 0000 4669 0a00 0000  Fi...Bu...Fi....
0000030: 4275 4669 0a00 0000 0042 690a 2731 2c2f  BuFi.....Bi.'1,/
0000040: 3d32 2f27 7a7a 272a 5c6e 2b6f 727d 2f0a  =2/'zz'*\n+or}/.

और बेस 64:

MTAwLHspLjIwJSdCaUZ1CgBGdQoAAABGaUJ1CgAAAABGaQoAAEJ1CgAARmkKAAAAQnVGaQoAAAAA
QmkKJzEsLz0yLyd6eicqXG4rb3J9Lwo=

^ का उपयोग करना स्टैंड-इन के रूप में \0, यह है

100, {)। 20% 'Bifu
 ^ फू
 ^ ^ ^ FiBu
 ^ ^ ^ ^ फाई
 ^ ^ बू
 ^ ^ फाई
 ^ ^ ^ Bufi
 ^ ^ ^ ^ द्वि
'1, / = 2 /' ZZ '* \ N + या} /

अभी भी एक विशेष रूप से दिलचस्प समस्या नहीं है।


एक स्पष्टीकरण का अनुरोध किया गया था:

समावेशी मूल्यों के 0लिए 99:

100,{
...
}/

मूल्य बढ़ाना (हम चाहते 1हैं 100) और यह भी पता करें कि वेतन वृद्धि मूल्य क्या है mod 20:

).20%

\0वर्णों के चारों ओर जादू स्ट्रिंग विभाजित करें :

MAGIC_STRING 1,/

उस सरणी का ( x mod 20) वें तत्व लें , इसे 2-वर्ण वाले विखंडू में विभाजित करें, और उन्हें वापस एक साथ गोंद करें zz। नोट: स्ट्रिंग या तो खाली है (जिस स्थिति में कोई विराम नहीं हैं, इसलिए हम खाली स्ट्रिंग के साथ समाप्त होते हैं) या एक [BF][iu]उपसर्ग का अनुक्रम है जिसके बाद एक नई रेखा होती है ।

=2/'zz'*

बढ़े हुए नंबर की दूसरी कॉपी लें, जिसे हमने स्टैक पर रखा था, और एक नई लाइन जोड़ें। अब हम जो भी स्ट्रिंग रखेंगे वह एक नई रेखा के साथ समाप्त होगी।

\n+

फॉलबैक ऑपरेशन लागू करें। (यह ||जावास्क्रिप्ट या COALESCEएसक्यूएल में समान है )।

or

@ मिनिटेक, टाइपो ने कॉपी-पेस्ट न करके पेश किया क्योंकि सब कुछ उल्टा करने से गर्दन में दर्द होता है। फिक्स्ड।
पीटर टेलर

2
सब कुछ reindenting = CTRL + K
जॉन ड्वोरक

क्या आप इसे समझा सकते हैं?
जोहान्स कुह्न

"बहुत दिलचस्प समस्या नहीं है।" हाँ, मेरे पास एक कूबड़ था जो मामला था जब मैंने इसे पोस्ट किया था। फिर भी, यह एक भिन्नता है।
जो जेड।

यह प्रोग्रामिंग चुनौती के बजाय दोस्तों के साथ पार्लर गेम के रूप में अधिक दिलचस्प हो जाता है। संख्याओं को क्रम से कहने का प्रयास करें । यह मूल रूप से FizzBuzz हार्डकोर संस्करण है यदि आप पहले से अनुक्रम याद नहीं करते हैं।
जो जेड।

16

अजगर, 114

a='Fizz'
b='Buzz'
c='Bizz'
d='Fuzz'
e=c+d
f=a+b
g=b+a
i=1
exec"print eval('ediifiiiaibiaiigiiic'[i%20]);i+=1;"*100

मूल समाधान ( 131 ):

f='Fizz'
for i in range(1,101):x=i%20;print('Bizz'*(x%19<1)+'Fuzz'*(x<2)or(i%4<1)*f+'Buzz'*(i%5<1or x==4)+f*(x==15)or i,i)[x%11==5]

6

3

अजगर 2, 131

F,B,Z,I='Fizz','Buzz','Fuzz','Bizz'
for i in range(1,101):print{5:Z,19:I,i%4:B,i%5*4:F,3:B+F,16:F+B,0:I+Z,1:i,4:i}.get(i%4+i%5*4,i)

1
आप इसे 154 तक नीचे मुद्रित कर सकते हैं) a) लॉजिक शॉर्ट सर्किटिंग ऑन द एक्सप्रेशन, प्रिंट करने के लिए, b) rइसे कम वर्णों में गणना करने के अर्थ को उलटते हुए , c) एक लाइन पर सब कुछ डालते हुए:r,F,B,Z,I=1,'Fizz','Buzz','Fuzz','Bizz'\nfor i in range(1,101):a,b=i%4,i%5*4;print~-r and i or{5:Z,19:I,a:B,b:F,3:B+F,16:F+B,0:I+Z}.get(a+b,i);r=3!=a+b!=16
Monica

@WolframH: धन्यवाद! मैंने 143 करने के लिए कुछ बदलावों के साथ इसे लागू किया।
Ry-

ठीक है यह मुझे हरा, प्रभावशाली काम है। मैं प्यार करता हूँ print 1!=a+b!=4कि शैतानी है!

1
@LegoStormtroopr: नाह। exec/ evalकॉम्बो पैशाचिक है;)
Ry-

हाँ, यह हरा करने के लिए मुश्किल होने वाला है। हालांकि, प्रिंट सेक्शन को बदलकरprint{5:Z,19:I,a:B,b:F,3:B+F,16:F+B,0:I+Z,1:i,4:i}.get(a+b,i)

1

पायथन में एक अनियंत्रित संदर्भ कार्यान्वयन जो हर नियम को शाब्दिक रूप से लागू करता है (420 वर्ण):

n = 1
while(n <= 100):
    if(n % 20 == 0):
        print "BizzFuzz"
    elif((n - 1) % 20 == 0):
        print "Fuzz"
    elif((n + 1) % 20 == 0):
        print "Bizz"
    elif(n % 5 == 0 and (n + 1) % 4 == 0):
        print "BuzzFizz"
        print n + 1
        n += 1
    elif(n % 4 == 0 and (n + 1) % 5 == 0):
        print "FizzBuzz"
        print n + 1
        n += 1
    elif(n % 4 == 0):
        print "Fizz"
    elif(n % 5 == 0):
        print "Buzz"
    else:
        print n
    n += 1

3
अरे। मेरे पाइथन में आपको कोष्ठक मिला।
Ry-

मुझे लगता है कि आईडीई मैं उन्हें डिफ़ॉल्ट रूप से डाला गया था। मैं एक विंडोज़ मशीन पर था, और विंडोज पर एक टेक्स्ट एडिटर का उपयोग करके कोड की कोशिश करना क्रूर है।
जो जेड।

1

पायथन, 150

यह मिनीटेकस (पहले) उत्तर से व्युत्पन्न है, लेकिन मैंने इसे अपना बनाने के लिए पर्याप्त निचोड़ लिया है:

F,B,Z,I='Fizz','Buzz','Fuzz','Bizz'
for i in range(1,101):a,b=i%4,i%5*4;print i if a+b in [1,4] else {5:Z,19:I,a:B,b:F,3:B+F,16:F+B,0:I+Z}.get(a+b,i)

नीचा संस्करण बहुत अधिक पठनीय नहीं है, लेकिन जो rकि मिनिटेक का उपयोग कर रहा था, केवल तभी ट्रिगर होता है जब अगली पुनरावृत्ति पर योग या तो a,bथा , जो कि इसके बराबर है, इसलिए यह केवल उन परिस्थितियों में प्रकट होने वाला था। तो यह संभव था असाइनमेंट और की गणना दूर करने के लिए और के वर्तमान मूल्य से यह प्राप्त का उपयोग कर और :1,00,4i%4 or i%5 == 0riab

F,B,Z,I='Fizz','Buzz','Fuzz','Bizz'
for i in range(1,101):
 a,b=i%4,i%5*4;
 print i if a+b in [1,4] else {5:Z,19:I,a:B,b:F,3:B+F,16:F+B,0:I+Z}.get(a+b,i)

इसमें @ वुल्फरामएच के सुझाव भी शामिल हैं।


एर, यह वास्तव में अलग नहीं है। वैसे भी, [1,4](और उपयोग (1,4)या {1,4}इसके अलावा) के आसपास और पहले रिक्त स्थान को दूर करें {
Ry-

अलग-अलग नहीं, बस इतना बदल गया कि मुझे लगा कि यह एक एंट्री के लायक है।

ठीक है, लेकिन आपको इसे व्हॉट्सएप के लिए गोल्फ करना चाहिए।
Ry-

@ मिनिटेक कोई चिंता नहीं। []रिक्ति पर टिप के लिए चीयर्स । मैं सोच रहा था कि आपने {}अपने मूल उत्तर का उपयोग क्यों किया ।

1

आर: 170 अक्षर

a=b=1:100
o=!a%%4
i=!a%%5
w=o&i
a[o]="Fizz"
a[i]="Buzz"
a[c(i,F)&c(F,o)]="FizzBuzz"
a[c(F,i)&c(o,F)]="BuzzFizz"
a[w[-1]]="Bizz"
a[c(F,w)]="Fuzz"
a[w]="BizzFuzz"
cat(a[b])

1

जावास्क्रिप्ट 127 बाइट्स

f='Fizz';b='Buzz';F='Fuzz';B='Bizz';z=n=>(n?z(n-1):0,console.log([f,b,B,F,B+F,f+b,b+f,n]["43775777071707767772"[n%20]]));z(100)

व्याख्या

f = 'Fizz';
b = 'Buzz';
F = 'Fuzz';
B = 'Bizz';

z = n => (
    n?z(n-1):0,  // If n is greater than 0, we keep going downwards, this happens before printing.
    console.log(
        // These are the values that we a want to print, it is
        // very important that it is written inline inside the
        // function, otherwise, we couldn't have 'n' in it
        [f,b,B,F,B+F,f+b,b+f,n][
          // The game cycles every 20 steps, so we can build a
          // look up table that we'll use to index into the other
          // table. We take advantage of implicit string -> Number
          // conversion inside the index operator, and use a
          // string instead of an array, saving 1 byte per entry
          "43775777071707767772"[n%20]])
);

z(100);

0

Tcl, 185 वर्ण

while {[incr i]<101} {puts [expr {$i%4?$i%5?($i-1)%4|($i-1)%5?($i+1)%4|($i+1)%5?$i:"Fuzz":"Bizz":($i-1)%4?($i+1)%4?"Buzz":"BuzzFizz":$i:($i-1)%5?($i+1)%5?$i%5?"Fizz":"FizzBuzz":$i:$i}]}

कभी-कभी whileलूप को timeबाइट्स को बचाने के लिए निर्माणों द्वारा प्रतिस्थापित किया जा सकता है
सर्जियोल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.