स्तंभों में अद्वितीय पात्रों के साथ फ़िज़ बज़


21

उनके गलियों और 1, 2, Fizz, 4, Buzz में अंकों से प्रेरित

परिचय

आपका कार्य निम्न आउटपुट उत्पन्न करना है:

1
2
Fizz
4
  Buzz
    Fizz
7
8
      Fizz
        Buzz
 11
          Fizz
   13
    14
            FizzBuzz
     16
      17
              Fizz
       19
                  Buzz
                    Fizz
 22
    23
                      Fizz
                        Buzz
   26
                          Fizz
     28
      29
                            FizzBuzz
       31
      32
                              Fizz
34
                                  Buzz
                                    Fizz
 37
  38
                                      Fizz
                                        Buzz
        41
                                          Fizz
  43
   44
                                            FizzBuzz
      46
       47
                                              Fizz
         49
                                                  Buzz

चुनौती

यह चुनौती फ़िज़्ज़ बज़ चुनौती पर आधारित है, और यहाँ एक पुनर्कथन है: 1 से 100 समावेशी संख्याओं का उत्पादन, प्रत्येक संख्या अपनी लाइन पर, लेकिन यदि संख्या 3 से अधिक है, तो आपको इसके बजाय "फ़िज़" का उत्पादन करना चाहिए मूल संख्या, यदि संख्या 5 से अधिक है, तो आपको मूल संख्या के बजाय "बज़" का उत्पादन करना चाहिए। यदि संख्या 15 से अधिक है, तो आपको मूल संख्या के बजाय "FizzBuzz" आउटपुट करना चाहिए।

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

उदाहरण के लिए, 1,2,Fizz,4किसी भी खरोज की जरूरत नहीं है, क्योंकि वे पहले से ही प्रत्येक स्तंभ में विशेष अक्षर (स्तंभ 1: है 12F4, कॉलम 2: i, स्तम्भ 3: z, column4: z), लेकिन जब जोड़ने Buzzहम दो रिक्त स्थान से मांगपत्र करने की जरूरत है क्योंकि अन्यथा हम दो होता zहै 3rd और 4th कॉलम दोनों में। चूंकि लक्ष्य प्राप्त करने के लिए दो स्थान पर्याप्त हैं, इसलिए आपको इसे तीन स्थानों से इंडेंट नहीं करना चाहिए। 7और 8किसी भी इंडेंटेशन की आवश्यकता नहीं है लेकिन जब आउटपुट करते हैं 11तो हमें एक स्थान पर इंडेंट करने की आवश्यकता होती है क्योंकि 1 कॉलम में पहले से ही ए है 113फिर तीन स्थानों द्वारा इंडेंट करने की आवश्यकता है क्योंकि अब 1, 2 और 3 के सभी कॉलम में ए है 1। शेष लाइनों के लिए इंडेंटेशन उसी नियम का पालन करते हैं।

चुनौती को सरल बनाने के लिए, ऊपरी सीमा को 50 में बदल दिया गया है।

चश्मा

  • आप एक कार्यक्रम या एक समारोह लिख सकते हैं। न तो उनमें से कोई भी गैर-खाली इनपुट लेना चाहिए। खाली इनपुट लेना ठीक है।

  • चूंकि यह केसी चुनौती है, इसलिए आपको परिचय अनुभाग में निर्दिष्ट आउटपुट की आवश्यकता है। एक एकल अनुगामी न्यूलाइन ठीक है। कोई नई शीर्षक या अतिरिक्त शीर्ष स्थान नहीं। प्रत्येक पंक्ति के लिए कोई अतिरिक्त अनुगामी स्थान नहीं।

  • आपका कार्यक्रम त्रुटि के साथ बाहर निकल सकता है या तब तक खाली-खाली STDERR आउटपुट हो सकता है जब तक STDOUT विनिर्देश के अनुरूप हो।

  • यह इंट्रा-भाषा , सबसे कम संख्या में बाइट्स वाला कार्यक्रम इसकी भाषा में जीतता है।

  • डिफ़ॉल्ट कमियां लागू होती हैं।


2
दिए गए आउटपुट बिल्कुल कल्पना से मेल नहीं खाते, उदाहरण के लिए लाइनें 12, 20, 35 और 50।
बब्बलर

1
लेकिन पहली दो पंक्तियों में दूसरा चरित्र गाड़ी वापसी है।
संक्रांति

मैंने रिक्त स्थान को छोड़ दिया है, अब मुझे नई सूचियों को भी बाहर करना चाहिए।
वीजुन झोउ

जवाबों:


9

पायथन 2 , 127 बाइट्स

i=0;exec"print ord('<<<<>@<<BD=F?@HABJCNP=@RT?VABXCBZ<^`=>bdDf>?hBCjEn'[i])%60*' '+(i%3/2*'Fizz'+i%5/4*'Buzz'or`-~i`);i+=1;"*50

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

एक पचास-बाइट लुकअप टेबल कोड को आकार देने के लिए आवश्यक तर्क से कम चोट लगती है कि प्रत्येक कॉलम में कौन से वर्ण हुए हैं।


1
लॉजिक बेहतर होता अगर हमें इसके बजाय 100 तक प्रिंट करना जरूरी होता ...
बुबलर

5

पायथन 2 , 167 166 163 161 157 बाइट्स

a=eval(`[{0}]*99`);i=0
exec"f=i%3/2*'Fizz'+i%5/4*'Buzz'or`i+1`;i+=1;g=0\nwhile any(b>{c}for b,c in zip(a[g:],f)):g+=1\nmap(set.add,a[g:],f);print' '*g+f;"*50

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

संपादन:

  • while से छोटा है for..range()1 बाइट ।
  • 3 बाइट्स से शेविंग करने के लिए @ovs को धन्यवाद। मैं हमेशा भूल जाता हूँexec ...
  • अनुकूलित i%3/2लिन के उत्तर (-2 बाइट्स) से चाल।
  • @ लिन ने सुझाव दिया a=map(set,[[]]*99), लेकिन मुझे एक ही तरीका है evalऔर reprउसी बाइट्स (-4 बाइट्स) के साथ।

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


4

सी (जीसीसी) , 145 144 बाइट्स (हेक्स के लिए 143)

i;main(){for(;i++<50;printf("%*s%s%.d\n","000402800:81>34@56B7BH14JH3N56P76R0RX12ZX8^23`67b9b"[i]-48,i%3?"":"Fizz",i%5?"":"Buzz",i%3*i%5?i:0));}

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

0000h: 69 3B 6D 61 69 6E 28 29 7B 66 6F 72 28 3B 69 2B ; i;main(){for(;i+
0010h: 2B 3C 35 30 3B 70 72 69 6E 74 66 28 22 25 2A 73 ; +<50;printf("%*s
0020h: 25 73 25 2E 64 5C 6E 22 2C 22 FE FE FE 02 FE 00 ; %s%.d\n","......
0030h: 06 FE FE 08 06 FF 0C 01 02 0E 03 04 10 05 10 16 ; ................
0040h: FF 02 18 16 01 1C 03 04 1E 05 04 20 FE 20 26 FF ; ........... . &.
0050h: 63 28 26 06 2C 00 01 2E 04 05 30 07 30 22 5B 69 ; c(&.,.....0.0"[i
0060h: 5D 2B 32 2C 69 25 33 3F 22 22 3A 22 46 69 7A 7A ; ]+2,i%3?"":"Fizz
0070h: 22 2C 69 25 35 3F 22 22 3A 22 42 75 7A 7A 22 2C ; ",i%5?"":"Buzz",
0080h: 69 25 33 2A 69 25 35 3F 69 3A 30 29 29 3B 7D    ; i%3*i%5?i:0));}

3

रूबी , 129 बाइट्स

puts (1..50).map{|n|" "*(".<<<<>@<<BD=F?@HABJCNP=@RT?VABXCBZ<^`=>bdDf>?hBCjEn"[n].ord%60)+("FizzBuzz
"[i=n**4%-15,i+13]||n.to_s)}

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

लुकअप टेबल अप्रोच और फ़िज़बज़ एल्गोरिथ्म के लिए डबल क्रेडिट यहाँ लिन को जाता है ।

FizzBuzz एल्गोरिथ्म बहुत दिलचस्प है, और यह उल्लेखनीय संयोग पर टिका है कि जब 4 वें शक्ति के लिए उठाए गए सभी सकारात्मक, गैर-संमिश्र संख्या 15 (3 और 5 के अलावा) से कम होती है, तो 15. की एक बहु से अधिक 1 होती है। तथ्य:

 n     n**4  n**4%15  n**4%-15
 1        1     1       -14
 2       16     1       -14
 3       81     6        -9
 4      256     1       -14
 5      625    10        -5
 6     1296     6        -9
 7     2401     1       -14
 8     4096     1       -14
 9     6561     6        -9
10    10000    10        -5
11    14641     1       -14
12    20736     6        -9
13    28561     1       -14
14    38416     1       -14
15    50625     0         0

मूल्य 3**4%15 और 5**4%15बिल्कुल 4 अलग हैं: स्ट्रिंग "फ़िज़" की लंबाई। हम उन्हें एक स्ट्रिंग के अंत से सूचकांक में उपयोग करके इसका फायदा उठा सकते हैं, कम से कम 9 अक्षर लंबाई में। 3 के गुणक स्ट्रिंग की शुरुआत से अनुक्रमित करेंगे, और 5 के गुणक अंत से 5 वर्णों को अनुक्रमित करेंगे। हर दूसरी संख्या स्ट्रिंग की शुरुआत से पहले सूचकांक करने का प्रयास करेगी, और असफल हो जाएगी, वापस लौट जाएगी nil। फिर 15, निश्चित रूप से, 0 वें वर्ण से अनुक्रमित। तथ्य यह है कि "FizzBuzz" केवल 8 अक्षर लंबा है एक छोटी बाधा है; हम इसे पिन करने के लिए एक नई लाइन वर्ण का उपयोग करते हैं, जिसे बाद में अनदेखा किया जाएगा puts

यह संभव है कि लुकअप टेबल को अधिक प्रक्रियात्मक दृष्टिकोण से आउट-गोल्फ किया जा सकता है, लेकिन मेरा प्रयास 190 बाइट्स के पड़ोस में था।


2
दिलचस्प। यह ध्यान दिया जाना चाहिए कि तथ्य यह है कि सभी संख्या 15 से 15 तक जब 1 मोडुलो 15 के बराबर 4 शक्ति तक उठाया जाता है, तो फ़र्मेट की छोटी प्रमेय से व्युत्पन्न किया जा सकता है।
वीजुन झोउ

2

[जावास्क्रिप्ट (Node.js) REPL], 144 बाइट्स

(f=(i,s=[['Fizz'][i%3]]+[['Buzz'][i%5]]||i+[],b=i>1?f(i-1):[])=>[...s].some((p,j)=>b.some(w=>w[j]==p&0!=p))?f(i,' '+s):b.push(s)&&b)(50).join`

`

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

चेतावनी कार्यक्रम स्वयं अस्वीकार्य समय चलाता है

जावास्क्रिप्ट (Node.js) , अरनौल्ड द्वारा 132 बाइट्स

f=(a=n=[],s=`${b=++n%5?'':'Buzz',n%3?b||n:'Fizz'+b}
`)=>n>50?'':a.some(x=>[...x].some((c,i)=>c!=0&c==s[i]))?f(a,' '+s):s+f([s,...a])

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


आपका उत्तर TIO लिंक के समान नहीं है
जो किंग

@ JoKing TIO आउटपुट ऐरे से आता है, और मुझे नहीं पता कि इसकी अनुमति है या नहीं
l4m2

2

जावा (JDK 10) , 185 बाइट्स

v->{for(int n=0,l;n<50;System.out.printf((l>0?"%"+l:"%")+"s%s%n","",(n%3<1?"Fizz":"")+(n%5<1?"Buzz":n%3<1?"":n)))l="####%'##)+$-&'/()1*57$'9;&=()?*)A#EG$%IK+M%&O)*Q,U#".charAt(n++)-35;}

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

क्रेडिट


1

हास्केल , 190 187 186 178 176 बाइट्स

unlines$foldl(\a x->a++[[z|z<-iterate(' ':)x,all(\m->null[p|(p,q)<-m`zip`z,p==q&&p>' '])a]!!0])[]$h<$>[1..50]
a%b=a`mod`b<1
h n|n%15="FizzBuzz"|n%3="Fizz"|n%5="Buzz"|1<2=show n

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

थोड़ा अधिक पठनीय (और एनोटेट) संस्करण:

-- check if a is evenly divisible by b
a%b=a`mod`b<1
-- produce correct FizzBuzz output for a number
h n|n%15="FizzBuzz"|n%3="Fizz"|n%5="Buzz"|1<2=show n
-- test if all chars distinct between two strings
x#y=null[a|(a,b)<-x`zip`y,a==b&&a>' ']
-- given a new string and all previous strings
-- shift the new string to the right until all
-- chars are distinct
x!y=[z|z<-iterate(' ':)y,all(z#)x]!!0
g=h<$>[1..50]
f'=foldl step[]g
  where step acc x = acc++[acc!x]

संपादित करें: मैंने अधिक बाइट्स को बचाने के लिए गोल्फ संस्करण में कुछ कार्यों को चालू किया।


@ लाईकोनी राइट। फिक्स्ड।
क्रिस्चियन लुपस्कू

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