Fizz Buzz Lightyear

9

Setelah banyaknya (dua?) Tantangan terkait FizzBuzz yang baru-baru ini diposting di PPCG, saya tergoda untuk membuat sendiri. Melihat...

Fizz Buzz Lightyear

Tulis program atau fungsi yang mengambil bilangan bulat ndan mencetak FizzBuzzangka berapa pun yang dapat dibagi 15, Fizzuntuk angka apa pun yang dapat dibagi 3, dan Buzzuntuk angka apa pun yang habis dibagi 5, hingga (dan termasuk) n. Output untuk semua iharus diikuti oleh baris baru. Tapi ada twist!

Untuk setiap ketiga kalinya Anda mencetak Buzz, Buzz Lightyear akhirnya mengindahkan panggilan Anda dan crash mendarat di program Anda. Dia kemudian memperkenalkan dirinya - tetapi karena dia crash mendarat, beberapa dari apa yang dia katakan dicampur dengan output program Anda:

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

(Yaitu, hanya menambahkan  Lightyear, Space Ranger, Universe Protection Unit.ke Buzzatau FizzBuzz- apa pun itu Anda akan ditampilkan sebaliknya. Perhatikan ruang terkemuka)

Namun, Buzz Lightyear, sebagai Space Ranger dia, memiliki pendengaran yang sangat akut, sehingga pencetakan FizzBuzzakan diperhitungkan dalam Buzzhitungan Anda .

Lalu, Buzz bertahan untuk melindungi komputer Anda dari semua keluaran jahat itu, hingga Anda menekan nomor lain yang dapat dibagi 5 (atau 15, karena itu juga dapat dibagi 5,). Apa artinya itu sampai Anda harus mencetak Buzz(atau FizzBuzz) lagi, Anda tidak mencetak apa pun.

Ketika Anda akhirnya mencapai kondisi itu, Buzz berangkat:

To infinity and beyond!

Contoh Output

Ini adalah output yang diharapkan untuk n = 25: (perhatikan bagaimana ia melompati 16 hingga 19)

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

Aturan

Newline tambahan opsional dapat diterima.

Ini adalah kode golf; dengan demikian, kode terpendek, dalam byte, menang.

Asumsikan yang diberikan nvalid dan lebih besar dari atau sama dengan 15 (saat itulah tantangan pertama menyimpang dari fizzbuzz standar)

Buzz menyambut Anda ketika "penghitung Buzz" (yang menghitung keduanya Buzzdan FizzBuzz) mencapai 3; dia pergi ketika yang berikutnya Buzz(termasuk, lagi, keduanya Buzzdan FizzBuzz) dicetak.

Jumlah keberangkatannya tidak diperhitungkan ke "Buzz counter" berikutnya; Anda harus mulai menghitung Buzzes lagi dari 0. Misalnya, program yang berjalan dengan n = 25(contoh keluaran) harus diakhiri dengan "Buzz counter" dari 1, karena itulah berapa kali Buzzdicetak sejak terakhir kali ia pergi.

Jika njatuh di antara salah satu kedatangan Buzz dan salah satu keberangkatannya (yaitu, dia masih di sana - Anda tidak mencetak apa-apa), penghentian yang anggun diharapkan. Oleh karena itu, baris terakhir dari output akan menjadi perkenalannya

Celah standar dilarang.

osuka_
sumber
1
Bisakah Anda mengklarifikasi perilaku yang diharapkan saat nberada di antara kedatangan Buzz Lightyear dan kepergiannya?
nderscore
Cukup keluar dari program. Saya akan mengedit aturan dalam detik
osuka_

Jawaban:

5

Javascript (ES6), 182 175 byte

  • -7 byte : Pindahkan Buzz Lightyear logic ke ekspresi ternary Buzz.

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>

nderscore
sumber
3

Python 2 , 185 178 172 byte

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

Cobalah online!

Penjelasan

Amati: Buzz Lightyear tiba di "nomor buzz" ketiga dan berangkat pada yang keempat. "Nomor Buzz" adalah kelipatan dari lima. Dengan demikian, gerakan Buzz terjadi pada siklus panjang 20.

Kami mengulangi masing-masing idari 0 hingga input-1. (Ini berarti iselalu satu kurang dari jumlah aktual yang kami pertimbangkan.)

Menggunakan -~isebagai jalan pintas untuk i+1, if-~i%20<16:periksa apakah i+1, mod 20, adalah 15 atau kurang. (Jika 16 hingga 19, Buzz Lightyear hadir dan kami tidak ingin menghasilkan apa pun.)

Di dalam pernyataan if, kami ingin mencetak To infinity and beyond!pada setiap kelipatan 20 - yaitu, setiap kali i%2019. (Ingat itu isatu kurang dari angka yang sebenarnya.) Karena i%20tidak akan pernah lebih besar dari 19, i%20/19akan menjadi 1 dalam yang diinginkan case, <1 sebaliknya. Python 2, dengan mudah, memotong mengapung ketika mengalikan dengan string, jadii%20/19*"..." berikan string penuh jika i%2019, jika tidak "".

Jika kasus di atas berlaku, kami tidak mencetak apa pun. Tetapi jika ekspresi pertama adalah ""(yang salah), kita gunakan oruntuk terus berjalan. Ekspresi untukFizz ,, Buzzdan pengantar dihitung sama dengan yang di atas dan ditambahkan bersama-sama.

Akhirnya, jika tidak ada kasus ini yang berlaku, kami mencetak nomor itu sendiri -~i.

DLosc
sumber
2

05AB1E , 97 93 90 byte

>GN"FizzBuzz"2äN35SÖÏJ)˜1(è“To infinity€ƒ—°!“)N20%©_è®15Q” Lightyear,‡²ìÓ,ªÜŠí‰¿.”×J®16‹i,

Cobalah online!

Penjelasan yang akan datang setelah bermain golf lebih lanjut.

Alternatif versi 97 byte

>G"FizzBuzz"2ä” Lightyear,‡²ìÓ,ªÜŠí‰¿.”)˜N•9¨•3äR%15%_ÏJ“To infinity€ƒ—°!“)N20ÖèN)˜é®èN20%15›i\},
Emigna
sumber