একটি "বিজ্জাফুজ" প্রোগ্রাম তৈরি করুন


18

Traditionalতিহ্যবাহী ফিজবজ-এ, আপনাকে 1 থেকে 100 পর্যন্ত সংখ্যাগুলি মুদ্রণ করতে বলা হবে, তবে 3 এর প্রতিটি গুণককে "ফিজ" দিয়ে প্রতিস্থাপন করুন, 5 এর একাধিক "বজ" দিয়ে এবং 3 এবং 5 উভয় (অর্থাত 15) এর প্রতিটি গুণক " FizzBuzz "।

তবে, দুষ্ট সাক্ষাত্কারকারীর হিসাবে, আমি আমার নিজস্ব বিড়াল সংস্করণটি ফিজবুজটি আবিষ্কার করেছি, যা আমি বিজফুজের নামকরণ এবং একটি কোডিং সাক্ষাত্কারে আপনাকে দেওয়ার সিদ্ধান্ত নিয়েছি।

গেমের নিয়মগুলি হ'ল:

  • প্রতিটি সংখ্যা 1 থেকে 100 পর্যন্ত মুদ্রণ করুন, যদি নম্বরটি নীচের শর্তগুলির মধ্যে একটি পূরণ করে।

    • যদি সংখ্যাটি 4 দ্বারা বিভাজ্য হয় তবে "Fizz" মুদ্রণ করুন।
    • যদি সংখ্যাটি 5 দ্বারা বিভাজ্য হয় তবে "বাজ" মুদ্রণ করুন।

    • যদি সংখ্যাটি 4 দ্বারা বিভাজ্য হয় তবে এটি সংখ্যাটি 5 দ্বারা বিভাজ্য হওয়ার পরপরই "ফিজ" এর পরিবর্তে "ফিজবজ" মুদ্রণ করুন এবং পরবর্তী নম্বরটি নিয়মিত মুদ্রণ করুন।

    • যদি সংখ্যাটি 5 দ্বারা বিভাজ্য হয় তবে সংখ্যাটি 4 দ্বারা বিভাজনীয় হওয়ার পরে , "বাজ" এর পরিবর্তে "বাজফিজ" মুদ্রণ করুন এবং পরবর্তী নম্বরটি নিয়মিত মুদ্রণ করুন।

    • সংখ্যাটি 4 এবং 5 উভয় দ্বারা বিভাজ্য সংখ্যার ঠিক আগে হলে , "বিজ্জা" মুদ্রণ করুন।

    • সংখ্যা অবিলম্বে হয়, তাহলে পরে 4 ও 5 উভয় দ্বারা একটি সংখ্যা বিভাজ্য, "আঁশ" মুদ্রণ।

    • যদি সংখ্যাটি 4 এবং 5 উভয় দ্বারা বিভাজ্য হয় তবে "বিজফজ" মুদ্রণ করুন।

যে কোনও ভাষায় এই সমস্ত নিয়ম প্রয়োগের জন্য সংক্ষিপ্ততম কোড।

উত্তর:


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
সবকিছু পুনর্নির্দিষ্ট করা হচ্ছে = সিটিআরএল + কে
জন ডিভোরাক

আপনি এই ব্যাখ্যা করতে পারেন?
জোহানেস কুহান

"খুব আকর্ষণীয় সমস্যা নয়।" হ্যাঁ, আমি এটি পোস্ট করার সময় আমার একটি হান্চ ছিল। তবুও, এটি একটি ভিন্নতা।
জো জেড।

এটি প্রোগ্রামিং চ্যালেঞ্জের চেয়ে বন্ধুদের সাথে পার্লার গেম হিসাবে আরও আকর্ষণীয় হয়ে ওঠে। ক্রম সংখ্যা বলতে চেষ্টা করে ঘুরে দেখুন । আপনি যদি পূর্ববর্তী ক্রমটি মুখস্ত না করেন তবে এটি মূলত ফিজবজ হার্ডওয়ার সংস্করণ।
জো জে।

15

পাইথন, 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]

4

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-এ ছাপতে ব্যবহার করতে পারেন) ক) যুক্তিকে শর্ট সার্কিট করে মুদ্রণের জন্য, খ) rএকে কম অক্ষরে গণনা করার অর্থটি বিপরীত করে , গ) সমস্ত কিছু এক লাইনে রেখে: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
মনিকা পুনরায়

@ ওল্ফ্রামএইচ: ধন্যবাদ! আমি কিছু পরিবর্তন নিয়ে
এগুলি

ঠিক আছে এটি আমাকে মারধর করেছে, চিত্তাকর্ষক কাজ। আমি print 1!=a+b!=4যে ডায়াবোলিকাল ভালবাসি !

1
@ লেগোস্টোর্টমুপ্র: নাহ। 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
আরে। আপনি আমার পাইথনে বন্ধনী পেয়েছেন।
রাই-

আমি মনে করি যে আইডিই আমি ব্যবহার করছিলাম সেগুলি ডিফল্টরূপে inোকানো হয়েছিল। আমি একটি উইন্ডোজ মেশিনে ছিলাম এবং উইন্ডোজে একটি পাঠ্য সম্পাদক ব্যবহার করে কোড দেওয়ার চেষ্টা করা নিষ্ঠুর।
জো জেড।

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,0বা হয় 0,4, যা এর সমতুল্য i%4 or i%5 == 0তাই এটি কেবল সেই পরিস্থিতিতে উপস্থিত হতে চলেছিল। সুতরাং এটি সম্ভব ছিল নিয়োগ এবং হিসাব মুছে ফেলার জন্য rএবং বর্তমান মান থেকে এটা আহরণ iব্যবহার aএবং b:

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}পাশাপাশি) এবং এর আগে সরিয়ে ফেলুন {
রাই-

ভিন্ন নয়, কেবলমাত্র এতটা পরিবর্তন হয়েছে যে আমি ভেবেছিলাম এটি একটি এন্ট্রির মূল্য।

ঠিক আছে, তবে আপনার এটি সাদা স্থানের জন্য গল্ফ করা উচিত।
রাই-

@ এমনিটেক কোনও উদ্বেগ নেই। []ব্যবধানে টিপসের জন্য চিয়ার্স । আমি ভাবছিলাম যে আপনি কেন {}আপনার মূল উত্তরটি ব্যবহার করেছেন ।

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বাইটগুলি সংরক্ষণের জন্য কনস্ট্রাক্ট দ্বারা প্রতিস্থাপন করা যায়
সার্জিওল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.