Terinspirasi oleh Digit di jalur mereka dan 1, 2, Fizz, 4, Buzz
pengantar
Tugas Anda adalah untuk menghasilkan persis output berikut:
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Tantangan
Tantangan ini didasarkan pada tantangan Fizz Buzz, dan inilah rekapnya: mengeluarkan angka dari 1 hingga 100 inklusif, masing-masing angka pada barisnya sendiri, tetapi jika jumlahnya kelipatan 3, Anda harus menampilkan "Fizz" alih-alih nomor aslinya, jika nomornya adalah kelipatan 5, Anda harus menampilkan "Buzz" alih-alih nomor aslinya. Jika angka adalah kelipatan 15, Anda harus menampilkan "FizzBuzz" daripada nomor aslinya.
Namun, selain persyaratan di atas, Anda juga harus membuat indentasi setiap baris menggunakan spasi untuk membuat setiap kolom berisi karakter unik (tidak termasuk spasi dan baris baru) saja. Spasi yang ditambahkan ke setiap baris adalah minimum yang diperlukan untuk membuat semua baris muncul sebelum (termasuk) memiliki karakter unik di setiap kolom.
Misalnya, 1,2,Fizz,4
tidak perlu lekukan apapun karena mereka sudah memiliki karakter yang unik di setiap kolom (kolom 1: 12F4
, column2: i
, column3: z
, column4: z
), tapi saat menambahkan Buzz
kita perlu indent oleh dua ruang karena kalau tidak kita akan memiliki dua z
's di kolom ke-3 dan ke-4. Karena dua ruang sudah cukup untuk mencapai tujuan, Anda tidak boleh membuat indentasi dengan tiga ruang. 7
dan 8
tidak memerlukan indentasi apa pun tetapi ketika mengeluarkan 11
kita perlu membuat indentasi dengan satu spasi karena kolom 1 sudah memiliki a 1
. 13
maka perlu indentasi oleh tiga spasi karena sekarang kolom 1, 2 dan 3 semua memiliki a 1
. Lekukan untuk baris yang tersisa mengikuti aturan yang sama.
Untuk membuat tantangan lebih sederhana, Batas atas telah diubah menjadi 50.
Spesifikasi
Anda dapat menulis suatu program atau fungsi. Tak satu pun dari mereka harus mengambil input yang tidak kosong. Mengambil input kosong tidak masalah.
Karena ini adalah tantangan KC, Anda perlu menghasilkan output seperti yang ditentukan di bagian Pendahuluan. Satu baris tambahan baru baik-baik saja. Tidak ada judul baru atau ruang judul tambahan. Tidak ada spasi tambahan untuk setiap baris.
Program Anda dapat keluar dengan kesalahan atau memiliki output STDERR yang tidak kosong selama STDOUT sesuai dengan spesifikasi.
Ini adalah golf kode intra-bahasa , program dengan jumlah byte terkecil yang menang dalam bahasanya.
Celah default berlaku.
sumber
Jawaban:
Python 2 , 127 byte
Cobalah online!
Tabel lookup lima puluh byte tampaknya kurang baik ukuran kode kurang dari logika yang diperlukan untuk melacak karakter yang telah terjadi di setiap kolom.
sumber
Python 2 ,
167166163161157 byteCobalah online!
Suntingan:
while
lebih pendek darifor..range()
1 byte.exec
...i%3/2
Trik yang diadaptasi dari jawaban Lynn (-2 byte).a=map(set,[[]]*99)
, tapi saya menemukan cara lain menggunakaneval
danrepr
dengan byte yang sama (-4 byte).Gunakan daftar set untuk melacak karakter yang digunakan untuk setiap kolom, dan mengatur ketidaksetaraan untuk keanggotaan. Sisanya mengikuti spesifikasi yang diberikan.
sumber
C (gcc) ,
145144 byte (143 untuk hex)Cobalah online!
sumber
Ruby , 129 byte
Cobalah online!
Kredit ganda jatuh ke Lynn di sini, untuk pendekatan tabel pencarian dan algoritma fizzbuzz .
Algoritma FizzBuzz sangat menarik, dan bergantung pada kebetulan yang luar biasa bahwa semua angka positif, non-komposit kurang dari 15 (selain 3 dan 5), ketika dinaikkan ke kekuatan 4, adalah 1 lebih dari kelipatan 15. Dalam fakta:
Nilai-nilai
3**4%15
dan5**4%15
persis 4 terpisah: panjang string "Fizz". Kami dapat memanfaatkan ini dengan menggunakannya untuk mengindeks dari ujung string, setidaknya 9 karakter. Perkalian 3 akan diindeks dari awal string, dan kelipatan 5 akan diindeks dari 5 karakter dari akhir. Setiap angka lainnya akan berusaha mengindeks dari sebelum awal string, dan gagal, kembalinil
. Kemudian 15, tentu saja, indeks dari karakter ke-0. Fakta bahwa "FizzBuzz" hanya 8 karakter adalah hambatan kecil; kami menggunakan karakter baris baru untuk membalutnya, yang nantinya akan diabaikan olehputs
.Ada kemungkinan bahwa tabel pencarian dapat keluar-golf dengan pendekatan yang lebih prosedural, tetapi upaya saya berada di lingkungan 190 byte.
sumber
[JavaScript (Node.js) REPL], 144 byte
`
Cobalah online!
Program peringatan itu sendiri menjalankan waktu yang tidak dapat diterima
JavaScript (Node.js) , 132 bytes oleh Arnauld
Cobalah online!
sumber
Java (JDK 10) , 185 byte
Cobalah online!
Kredit
sumber
Haskell ,
190 187 186 178176 bytesCobalah online!
Versi yang sedikit lebih mudah dibaca (dan beranotasi):
Sunting: Saya akhirnya menggarisbawahi beberapa fungsi dalam versi golf untuk menghemat lebih banyak byte.
sumber
Jstx , 122 byte
Cobalah online!
sumber