「BizzFuzz」プログラムを作成する


17

従来のFizzBu​​zzでは、1から100までの数字を印刷するように求められますが、3の倍数をすべて「Fizz」に、5の倍数を「Buzz」に、3と5の倍数(つまり15)を「 FizzBu​​zz」。

しかし、邪悪なインタビュアーとして、私は独自のツイストバージョンのFizzBu​​zzを発明しました。これをBizzFuzzと名付け、コーディングインタビューで提供することにしました。

ゲームのルールは次のとおりです。

  • 番号が以下の条件のいずれかを満たす場合を除き、1から100までの各番号を印刷します。

    • 数値が4で割り切れる場合は、「Fizz」と印刷します。
    • 数値が5で割り切れる場合は、「バズ」を印刷します。

    • 数が4で割り切れる場合は、その数のすぐ後にそれが5で割り切れる、代わりに「フィズ」の「FizzBu​​zz」を印刷し、定期的に次の番号を印刷します。

    • 数が5で割り切れる場合は、その数のすぐ後にそれが4で割り切れる、代わりに「バズ」の「BuzzFizz」を印刷し、定期的に次の番号を印刷します。

    • 数字が4と5で割り切れる数字の直前ある場合は、「Bizz」と印刷します。

    • 数値が4と5の両方で割り切れる数値の直後ある場合は、「ファズ」と印刷します。

    • 数値が4と5の両方で割り切れる場合、「BizzFuzz」を印刷します。

これらのすべてのルールを任意の言語で実装する最短のコードが優先されます。

回答:


4

GolfScript(83 80文字)

(コメントでのNBハワードの提案は、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}/.

およびbase64:

MTAwLHspLjIwJSdCaUZ1CgBGdQoAAABGaUJ1CgAAAABGaQoAAEJ1CgAARmkKAAAAQnVGaQoAAAAA
QmkKJzEsLz0yLyd6eicqXG4rb3J9Lwo=

代用として^を使用すると\0

100、{)。20% 'BiFu
 ^ Fu
 ^ ^ ^ FiBu
 ^ ^ ^ ^ Fi
 ^ ^ Bu
 ^ ^ Fi
 ^ ^ ^ BuFi
 ^ ^ ^ ^ Bi
'1、/ = 2 /' zz '* \ n + or} /

まだ特に興味深い問題ではありません。


説明が要求されました:

099含む場合:

100,{
...
}/

値をインクリメントし(必要に応じ1100)、インクリメントされた値が何であるかを調べますmod 20

).20%

文字の周りにマジックストリングを分割します\0

MAGIC_STRING 1,/

その配列の(x mod 20番目の要素を取得し、それを2文字のチャンクに分割し、で貼り付けzzます。注:文字列は空(この場合、チャンクがないため、空の文字列になります)か、一連の[BF][iu]プレフィックスの後に改行が続きます。

=2/'zz'*

スタックに保持したインクリメントされた数値のもう1つのコピーを取得し、改行を追加します。これで、保持する文字列が改行で終了します。

\n+

フォールバック操作を適用します。(これは||JavaScriptまたはCOALESCESQLに似ています)。

or

@minitech、すべてを再インデントすることは首の痛みであるため、コピーアンドペーストではないタイプミス。修繕。
ピーターテイラー

2
すべてを再インデント= CTRL + K
ジョンドボラック

これを説明できますか?
ヨハネ

「あまりおもしろい問題ではありません。」ええ、私はそれを投稿したときに当てはまる予感がありました。それでも、それはバリエーションです。
ジョーZ.

また、プログラミングの課題よりも、友人とのパーラーゲームとしてより興味深いものになります。順番に数字を言ってみてください。シーケンスを事前に覚えていない場合、基本的にはFizzBu​​zz Hardcore Editionです。
ジョーZ.

13

Python、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]

3
evalのを真に美しい虐待

3

Python 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
することができますゴルフの意味を反転させる)、B、印刷する式に)ロジック短絡を使用して、154にこのダウンr1行にすべてを置く)、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
復活モニカ

@WolframH:ありがとう!143にするためにいくつかの変更を加えたものを適用しました。
Ry

[OK]を、これは私が打つ、印象的な作品を持っています。私は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文字)実装するPythonの未使用の参照実装:

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
ねえ。あなたは私のPythonで括弧を取得しました。
Ry-

使用していたIDEがデフォルトで挿入されたと思います。私はWindowsマシンを使用していましたが、Windowsでテキストエディターを使用してコーディングしようとするのは残酷です。
ジョーZ。13年

1

Python、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)

degolfedバージョンはそれほど読みやすいものではありませんが、rそのミニテックが使用していたのは、次の反復で和if またはのa,bいずれ1,00,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)

@WolframHの提案も含まれています。


えー、それは本当に違いはありません。とにかく、周りのスペースを奪う[1,4](及び、使用(1,4)または{1,4}前以外)をして{
Ry-

違いはありませんが、入る価値があると思うほど十分に変更しました。

さて、ホワイトスペースのためにゴルフをするべきです。
Ry-

@minitech心配ありません。[]間隔のヒントに乾杯。{}元の回答でなぜ使用したのかと思いまして。

1

R: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])

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バイトを節約するための構造に置き換えることができます
-sergiol
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.