フィズバズライトイヤー


9

最近PPCGに投稿されたFizzBu​​zz関連の多くの問題(2つですか?)に直面して、私は自分で考えたくなりました。見よ...

フィズバズライトイヤー

整数を取り、15で割り切れる任意の数、3で割り切れる任意の数、5で割り切れる任意の数nを出力するプログラムまたは関数を記述します。すべての出力の後には改行が続く必要があります。しかし、ひねりがあります!FizzBuzzFizzBuzzni

3回おきに印刷するたびにBuzz、バズライトイヤーは最終的にあなたの通話に注意を払い、プログラムのクラッシュを引き起こします。それから彼は自己紹介します-しかし、彼がクラッシュしたので、彼の言ったことのいくつかはあなたのプログラムの出力と混同されます:

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

(つまり、またはに追加 Lightyear, Space Ranger, Universe Protection Unit.します-それ以外に表示したものは何でも。先頭のスペースに注意してください)BuzzFizzBuzz

ただし、バズライトイヤーは、彼がそうであるスペースレンジャーであるため、非常に鋭い聴覚を持っているため、印刷FizzBuzzはあなたのBuzz数にカウントされます。

次に、バズは、5で割り切れる別の数値(または、5で割り切れるので15)に到達するまで、その邪悪な出力のすべてからコンピューターを防御します。つまり、もう一度印刷する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以上であると仮定します(これは、チャレンジが最初に標準のfizzbuzzから逸脱したときです)

(両方をカウントし、「バズカウンタ」ときバズはあなたに挨拶BuzzしてFizzBuzz)が3に当たります。彼は次のBuzz(また、両方Buzzとを含むFizzBuzz)が印刷されたときに出発します。

彼が出発する数は、次の「バズカウンター」にはカウントされません。代わりに、Buzzesのカウントを0から再度開始する必要があります。たとえば、n = 25(出力例)で実行されているプログラムは、「バズカウンター」が1で終わる必要Buzzがあります。

nバズの到着の1つと彼の出発の1つの間にある場合(つまり、彼はまだそこにいます-あなたは何も印刷していません)、正常な終了が期待されます。したがって、出力の最後の行は彼の紹介になります

標準の抜け穴は禁止されています。


1
nバズライトイヤーの到着と彼の出発の中間にあるときに予想される動作を明確にできますか?
— nderscore 2017

単にプログラムを終了します。ルールを
— すぐに

回答:


5

JavaScript(ES6)、182 175バイト

  • -7バイト:バズライトイヤーロジックをバズ3値式に移動しました。

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

Pythonの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

オンラインでお試しください!

説明

観察:バズライトイヤーは3番目の「バズ番号」に到着し、4番目に出発します。「バズ番号」は5の倍数です。したがって、バズの動きは長さ20のサイクルで発生します。

i0からinput-1までループします。(これは、i検討している実際の数より常に1つ少ないことを意味します。)

使用-~iのためのショートカットとしてi+1、if-~i%20<16:チェック場合i+1、MOD 20、15又は下です。(16から19の場合、バズライトイヤーが存在し、何も出力しません。)

if文の中に、私たちは、印刷するTo infinity and beyond!たびに、ある- 20のすべての倍数にi%2019ある(それは覚えているiので、以下、実際の数よりも1である。)i%20、19より大きくなることはありませんi%20/19希望に1になりますケース、それ以外の場合は<1。Python 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\},
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.