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 n
dan mencetak FizzBuzz
angka berapa pun yang dapat dibagi 15, Fizz
untuk angka apa pun yang dapat dibagi 3, dan Buzz
untuk angka apa pun yang habis dibagi 5, hingga (dan termasuk) n
. Output untuk semua i
harus 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 Buzz
atau 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 FizzBuzz
akan diperhitungkan dalam Buzz
hitungan 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 n
valid 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 Buzz
dan FizzBuzz
) mencapai 3; dia pergi ketika yang berikutnya Buzz
(termasuk, lagi, keduanya Buzz
dan FizzBuzz
) dicetak.
Jumlah keberangkatannya tidak diperhitungkan ke "Buzz counter" berikutnya; Anda harus mulai menghitung Buzz
es lagi dari 0. Misalnya, program yang berjalan dengan n = 25
(contoh keluaran) harus diakhiri dengan "Buzz counter" dari 1, karena itulah berapa kali Buzz
dicetak sejak terakhir kali ia pergi.
Jika n
jatuh 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.
n
berada di antara kedatangan Buzz Lightyear dan kepergiannya?Jawaban:
Javascript (ES6),
182175 bytesumber
Python 2 ,
185178172 byteCobalah 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
i
dari 0 hingga input-1. (Ini berartii
selalu satu kurang dari jumlah aktual yang kami pertimbangkan.)Menggunakan
-~i
sebagai jalan pintas untuki+1
,if-~i%20<16:
periksa apakahi+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 kalii%20
19. (Ingat itui
satu kurang dari angka yang sebenarnya.) Karenai%20
tidak akan pernah lebih besar dari 19,i%20/19
akan menjadi 1 dalam yang diinginkan case, <1 sebaliknya. Python 2, dengan mudah, memotong mengapung ketika mengalikan dengan string, jadii%20/19*"..."
berikan string penuh jikai%20
19, jika tidak""
.Jika kasus di atas berlaku, kami tidak mencetak apa pun. Tetapi jika ekspresi pertama adalah
""
(yang salah), kita gunakanor
untuk terus berjalan. Ekspresi untukFizz
,,Buzz
dan 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
.sumber
05AB1E ,
979390 byteCobalah online!
Penjelasan yang akan datang setelah bermain golf lebih lanjut.
Alternatif versi 97 byte
sumber