pengantar
Dalam upaya kami baru-baru ini untuk mengumpulkan katalog solusi terpendek untuk latihan pemrograman standar, berikut ini adalah tantangan FizzBuzz vanilla PPCG yang pertama. Jika Anda ingin melihat tantangan katalog lain, ada "Hello World!" dan "Apakah angka ini prima?" .
Tantangan
Tulis program yang mencetak angka desimal dari 1 hingga 100 inklusif. Tetapi untuk kelipatan tiga cetak "Fizz" bukan nomor dan untuk kelipatan lima cetak "Buzz". Untuk angka yang merupakan kelipatan dari tiga dan lima cetak "FizzBuzz".
Keluaran
Output akan berupa daftar angka (dan Fizzes, Buzzes dan FizzBuzzes) yang dipisahkan oleh baris baru (baik \n
atau \r\n
). Newline tambahan dapat diterima, tetapi newline terkemuka tidak. Terlepas dari pilihan Anda pada baris baru, hasilnya akan terlihat persis seperti ini:
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
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz
Satu-satunya pengecualian untuk aturan ini adalah output konstan dari juru bahasa Anda yang tidak dapat ditekan, seperti salam, kode warna ANSI atau lekukan.
Aturan selanjutnya
Ini bukan tentang menemukan bahasa dengan pendekatan terpendek untuk bermain FizzBuzz, ini tentang menemukan pendekatan terpendek dalam setiap bahasa. Karenanya, tidak ada jawaban yang akan ditandai sebagai diterima.
Kiriman dinilai dalam byte dalam pengkodean yang sudah ada sebelumnya, biasanya (tetapi tidak harus) UTF-8. Beberapa bahasa, seperti Folder, agak sulit untuk dinilai - jika ragu, silakan tanyakan di Meta.
Tidak ada yang bisa dicetak ke STDERR.
Tidak seperti aturan kami yang biasa, jangan ragu untuk menggunakan bahasa (atau versi bahasa) meskipun itu lebih baru daripada tantangan ini. Jika ada yang ingin menyalahgunakan ini dengan menciptakan bahasa tempat program kosong menghasilkan keluaran FizzBuzz, maka selamat telah membuka jalan untuk jawaban yang sangat membosankan.
Perhatikan bahwa harus ada penerjemah agar pengajuan dapat diuji. Diperbolehkan (dan bahkan dianjurkan) untuk menulis sendiri penerjemah ini untuk bahasa yang sebelumnya tidak diterapkan.
Jika bahasa pilihan Anda adalah varian sepele dari bahasa lain (berpotensi lebih populer) yang sudah memiliki jawaban (pikirkan dialek BASIC atau SQL, kerang Unix atau turunan Brainfuck sepele seperti Alphuck dan ???), pertimbangkan untuk menambahkan catatan ke yang sudah ada menjawab bahwa solusi yang sama atau sangat mirip juga merupakan yang terpendek dalam bahasa lain.
Karena output sudah diperbaiki, Anda dapat membuat hardcode output (tetapi ini mungkin bukan pilihan terpendek).
Anda dapat menggunakan solusi yang sudah ada sebelumnya, selama Anda menghargai penulis asli program.
Celah standar tidak diizinkan.
Sebagai catatan tambahan, tolong jangan turunkan jawaban yang membosankan (tetapi valid) dalam bahasa yang tidak banyak memiliki golf; ini masih berguna untuk pertanyaan ini karena mencoba mengkompilasi katalog selengkap mungkin. Namun, lakukan sebagian besar upvote jawaban dalam bahasa di mana penulis benar-benar harus berusaha golf kode.
Katalog
var QUESTION_ID=58615;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk";var OVERRIDE_USER=30525;var answers=[],answers_hash,answer_ids,answer_page=1,more_answers=true,comment_page;function answersUrl(index){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(index,answers){return"https://api.stackexchange.com/2.2/answers/"+answers.join(';')+"/comments?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){answers.push.apply(answers,data.items);answers_hash=[];answer_ids=[];data.items.forEach(function(a){a.comments=[];var id=+a.share_link.match(/\d+/);answer_ids.push(id);answers_hash[id]=a});if(!data.has_more)more_answers=false;comment_page=1;getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){data.items.forEach(function(c){if(c.owner.user_id===OVERRIDE_USER)answers_hash[c.post_id].comments.push(c)});if(data.has_more)getComments();else if(more_answers)getAnswers();else process()}})}getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;var OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(a){return a.owner.display_name}function process(){var valid=[];answers.forEach(function(a){var body=a.body;a.comments.forEach(function(c){if(OVERRIDE_REG.test(c.body))body='<h1>'+c.body.replace(OVERRIDE_REG,'')+'</h1>'});var match=body.match(SCORE_REG);if(match)valid.push({user:getAuthorName(a),size:+match[2],language:match[1],link:a.share_link,});else console.log(body)});valid.sort(function(a,b){var aB=a.size,bB=b.size;return aB-bB});var languages={};var place=1;var lastSize=null;var lastPlace=1;valid.forEach(function(a){if(a.size!=lastSize)lastPlace=place;lastSize=a.size;++place;var answer=jQuery("#answer-template").html();answer=answer.replace("{{PLACE}}",lastPlace+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link);answer=jQuery(answer);jQuery("#answers").append(answer);var lang=a.language;lang=jQuery('<a>'+lang+'</a>').text();languages[lang]=languages[lang]||{lang:a.language,lang_raw:lang.toLowerCase(),user:a.user,size:a.size,link:a.link}});var langs=[];for(var lang in languages)if(languages.hasOwnProperty(lang))langs.push(languages[lang]);langs.sort(function(a,b){if(a.lang_raw>b.lang_raw)return 1;if(a.lang_raw<b.lang_raw)return-1;return 0});for(var i=0;i<langs.length;++i){var language=jQuery("#language-template").html();var lang=langs[i];language=language.replace("{{LANGUAGE}}",lang.lang).replace("{{NAME}}",lang.user).replace("{{SIZE}}",lang.size).replace("{{LINK}}",lang.link);language=jQuery(language);jQuery("#languages").append(language)}}
body{text-align:left!important}#answer-list{padding:10px;width:290px;float:left}#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table>
sumber
Nothing can be printed to STDERR.
Apakah ini benar hanya ketika berjalan, atau juga ketika kompilasi (dengan asumsi itu adalah langkah terpisah?)Jawaban:
Python 2, 56
sumber
i=1;exec"print'FizzBuzz'[i%-3&4:12&8-i%5]or i;i+=1;"*100
. Adakah yang mau memaksa paksa ekspresi pencarian untuk mencoba mengoptimalkan bit bashing?Hexagony , 91 byte
Terima kasih untuk hadiahnya :)
Wow, saya tidak akan pernah membayangkan bisa mengalahkan solusi Hexagony Martin . Tetapi — siapa yang akan melemparkannya — saya menyelesaikannya. Setelah beberapa hari gagal karena saya tidak punya pewarna Hexagony atau EsotericIDE untuk memeriksa solusi saya. Saya mendapatkan beberapa aspek dari spesifikasi yang salah, jadi saya menghasilkan beberapa "solusi" yang salah hanya menggunakan pena dan kertas dan editor teks. Akhirnya saya mengatasi kemalasan saya dan mengkloning kedua repositori, mengunduh VisualStudio dan mengompilasinya. Wow, alat apa yang bermanfaat bagi mereka! Seperti yang Anda lihat, saya jauh dari seseorang yang Anda panggil programmer (maksud saya, ayolah! Saya bahkan belum menginstal VisualStudio, dan tidak memiliki petunjuk tentang cara menyusun program);)
Masih butuh waktu beberapa saat untuk menemukan solusi yang berfungsi, dan itu cukup penuh dan kacau, tapi di sini semuanya dalam kemuliaan:
Fizzbuzz dalam ukuran 6 segi enam:
Tata letak heksagonal:
Dan membawakan lagu yang indah, terima kasih kepada Timwi Colorer Timwi :
Jadi, inilah animasi GIF yang panjangnya 110 detik pada 2 fps, menunjukkan aliran program selama 6 angka pertama
1, 2, Fizz, 4, Buzz, Fizz
pertama, 220 kutu pertama dari program (klik pada gambar untuk ukuran penuh):Ya ampun, berkat perangkat lunak pengomposisian Natron, animasi pointer masih membosankan untuk dibuat, tetapi masih dapat dikelola. Menyimpan 260 gambar memori tidak terlalu menghibur. Sayangnya EsotericIDE tidak dapat melakukannya secara otomatis. Ngomong-ngomong, nikmati animasinya!
Lagi pula, begitu Anda membungkus kepala Anda di sekitar model memori dan pembungkus jalur yang agak berlawanan dengan intuisi yang melintasi batas segi enam, Hexagony tidak terlalu sulit untuk dikerjakan. Tapi bermain golf itu bisa menyebalkan. ;)
Itu menyenangkan!
sumber
3}1"$.!$>)}g4_'{$))}\<$\.\.@\;F\$/;z;u;<%<_>_..$>B/<>}))'%<>{>;e"-</_%;\/{}/>.\)(z;i;..>('
. Sekarang ada tambahan (setelah z, yang dapat "dibatalkan" dengan a) atau dengan meletakkan z di sana. Sekarang a) yang mendorong semua perintah pada jalur oranye 1 centang kemudian, dan kembali dengan no-op yang ada di baris 3. Btw Saya juga menginstal Visual Studio hanya karena Hexagony Colorer dan Esoteric IDE: PLabirin , 94 byte
Sub-100! Ini menyenangkan.
Penjelasan
Mari kita mulai dengan primer singkat tentang Labyrinth - jangan lewatkan ini jika Anda sudah terbiasa dengan dasar-dasarnya:
Labirin memiliki dua tumpukan - tumpukan utama dan tumpukan tambahan. Kedua tumpukan memiliki jumlah nol yang tak terbatas di bagian bawah, misalnya
+
pada tumpukan kosong menambahkan dua nol, sehingga mendorong nol.Kontrol aliran di Labirin ditentukan oleh persimpangan, yang melihat bagian atas tumpukan untuk menentukan ke mana harus pergi berikutnya. Negatif berarti belok kiri, nol berarti lurus ke depan dan positif berarti belok kanan ... tetapi jika kita menabrak dinding maka kita berbalik arah. Sebagai contoh, jika hanya lurus ke depan dan belok kiri adalah mungkin tetapi bagian atas tumpukan positif, maka karena kita tidak bisa belok kanan, kita belok kiri.
Digit di Labyrinth pop
x
dan push10*x + <digit>
, yang membuatnya mudah untuk membangun jumlah besar. Namun, ini berarti bahwa kita memerlukan instruksi untuk menekan 0 untuk memulai nomor baru, yang ada_
di Labyrinth.Sekarang mari kita ke kode aktual!
Merah
Eksekusi dimulai dari
"
di sudut kiri atas, yang merupakan NOP. Berikutnya adalah)
, yang menambah bagian atas tumpukan, mendorong 1 pada lintasan pertama dan menambahn
pada setiap lintasan berikutnya.Selanjutnya kita duplikat
n
dengan:
. Karenan
positif, kami berbelok ke kanan, menjalankan}
(menggeser bagian atas tumpukan utama ke pembantu) dan:
. Kami menemui jalan buntu, jadi kami berbalik dan mengeksekusi}
dan:
sekali lagi, meninggalkan tumpukan sepertiSekali lagi,
n
positif dan kami berbelok ke kanan, mengeksekusi_101/
yang membagin
dengan 101. Jikan
adalah 101 lalun/101 = 1
dan kita berubah menjadi@
, yang mengakhiri program. Kalau tidak, situasi kita saat ini adalahOranye 1 (mod 3)
3
mengubah nol atas menjadi 3 (10*0 + 3 = 3
) dan%
melakukan modulo. Jikan%3
positif, kami berbelok ke kanan menjadi kuning"
. Kalau tidak kita lakukan70.105.122:..
, yang outputFizz
. Perhatikan bahwa kita tidak perlu menekan angka nol baru_
karenan%3
nol dalam kasus ini, jadi kita dapat mengeksploitasi angka nol tanpa batas di bagian bawah tumpukan. Kedua jalur bertemu lagi dengan warna biru muda.Biru muda
Bagian atas tumpukan saat ini
n%3
, yang bisa menjadi positif, sehingga_;
hanya mendorong nol dan segera muncul untuk memastikan kami terus maju, daripada beralih ke@
. Kami kemudian gunakan=
untuk menukar bagian atas tumpukan utama dan tambahan, memberikan:Oranye 2 (mod 5)
Ini adalah situasi yang mirip dengan sebelumnya, kecuali jika
66.117.122:..
output adalah nol.Buzz
n%5
Biru tua
Bagian sebelumnya meninggalkan tumpukan seperti
{
menggeser bagiann%3
belakang ke tumpukan utama dan*
melipatgandakan kedua modulos.Jika salah satu modulo adalah nol, produknya nol jadi kami langsung menjadi kuning.
=
menukar bagian atas tumpukan dan_
mendorong angka nol untuk memastikan kita terus maju, memberiJika tidak, jika kedua modulos bukan nol, maka produk tersebut bukan nol dan kami berbelok ke kanan menjadi hijau.
=
menukar bagian atas tumpukan, memberisetelah itu kita gunakan
:
untuk menduplikasin
, belok kanan, lalu gunakan!
untuk outputn
.Ungu
Pada titik ini, tumpukan utama memiliki satu atau dua item, tergantung pada jalur mana yang diambil. Kita perlu menyingkirkan nol dari jalur kuning, dan untuk itu kita gunakan
+
, yang berkinerjan + 0
dalam urutan untuk kedua kasus. Akhirnya,\
menghasilkan baris baru dan kami kembali di awal.Setiap iterasi mendorong tambahan
(n%5)*(n%3)
ke tumpukan tambahan, tetapi jika tidak kita melakukan hal yang sama lagi.sumber
Perl 5, 49 byte
Skrip 46 byte + 3 byte
-E"..."
Menggunakan
say
(yang mengharuskan-E"..."
) dapat mengurangi ini lebih jauh menjadi 46 byte karenasay
secara otomatis menyertakan baris baru (Terima kasih @ Dennis !):Perl 5, 50 byte
sumber
say
.-E"..."
8 byte? Spasi + Dasbor + Opsi + Argumen (+ Mengutip).-E
0 byte, tetapi karena jawaban primo diberi skor tidak termasuk tanda kutip, saya memilih untuk membuatnya adil dan menyertakan tanda kutip di tambang dan +1 untuk-E
. Alasan itu diterima sebagai gratis adalah Perl biasanya dijalankan melaluiperl -e
danperl -E
tidak ada lagi byte (saya pikir-M5.010
atauuse 5.010
bisa bebas juga, tetapi mungkin tidak membaca kembali posting meta). Saat menambahkan-p
atau-n
ini dihitung sebagai +1 seperti yang akan Anda jalankanperl -pe
. Semoga itu bisa membantu! Referensi meta: meta.codegolf.stackexchange.com/a/7539Ruby, 50 byte
Membutuhkan versi 1.8, yang tampaknya populer di kalangan pegolf:
Di Ruby modern, Anda ganti
?d
dengan100
untuk solusi 51-byte.Ini tampaknya menjadi rekor dunia.
sumber
?d
hanya100
. TheFizzBuzz
String memiliki baris baru di dalamnya, ini berlaku di Ruby.string[i, s]
adalah slice, mulai dari karakteri
(0-diindeks), berlangsung untuks
karakter, mengabaikan indeks yang menunjuk di luar string. Jika argumen untukputs
sudah memiliki baris baru, itu dipotong. Rumusnya harus sederhana untuk dibaca? Itu melakukan semua pekerjaan di sini. Saya tidak akan menemukannya tanpa bantuan beberapa pegolf Ruby yang benar-benar pro.?e.times
sebagai gantinya.[i=n**4%-15,i+13]
bagian itu? Sepertinya tidak bisa membungkus kepala saya di sekitarnyai==-14
irisannya di luar batas maka kita dapatkannil
. Jikai==-9
kita mengirisi+13==4
karakter mulai dari karakter ke-9 dari akhir, maka'Fizz'
. Jikai==-5
kita mengiris 8 karakter mulai dari karakter ke-5 dari akhir, maka'Buzz\n'
. (Kami mencoba untuk mengiris 8 tetapi hanya ada 5, jadi kami mendapatkan 5.) Dan sebagainya.Java, 130 byte
Ini untuk versi Java terbaru (7+). Dalam yang lebih lama Anda dapat mencukur lebih banyak menggunakan
enum
trik, tapi saya tidak berpikir logikanya lebih pendek dari ini (86 dalammain
).sumber
class F{public static
->interface F{static
di java 8enum F{;public...
, sehingga Anda tidak akan benar-benar menghemat byte.Pyth, 30
Coba di sini
Penjelasan:
sumber
Retina ,
31713913413270636055 byteCobalah online!
Penjelasan
Ini
.
adalah flag senyap global yang mematikan output implisit di akhir program.100{
membungkus sisa program dalam satu loop yang dieksekusi untuk 100 iterasi. Akhirnya, panggung itu sendiri hanya menyisipkan a_
di awal string, yang secara efektif menambah counter loop unary.Lebih banyak konfigurasi.
*\(
membungkus sisa program dalam sebuah grup, mencetak hasilnya dengan linefeed tambahan, tetapi juga menempatkan seluruh grup dalam proses kering, yang berarti bahwa hasilnya akan dibuang setelah pencetakan, sehingga penghitung putaran kami tidak benar-benar dimodifikasi .a
adalah pengubah regex khusus yang mengaitkan regex ke seluruh string (yang menyimpan byte saat menggunakan^
dan$
secara eksplisit).Tahap atom itu sendiri mengurus
Fizz
. Dapat dibagi dengan3
mudah dapat diperiksa di unary: hanya menguji apakah nomor dapat ditulis sebagai pengulangan___
. Jika ini masalahnya, kami menambahkanFi;
string. Titik koma sedemikian sehingga masih ada batas kata di depan nomor untuk tahap berikutnya. Jika kita mengubah garis keFizz___...
posisi di antaraz
dan_
tidak akan dianggap sebagai batas, karena regex memperlakukan kedua huruf dan garis bawah sebagai karakter kata. Namun, tanda titik koma juga memungkinkan kami menghapuszz
duplikasi dariFizz
danBuzz
.Kami melakukan hal yang sama persis untuk keterbagian oleh
5
danBu;
, meskipun kami tidak perlu menjaga_
sekitar saat ini. Jadi kami akan mendapatkan hasil sepertiIni membuatnya sangat mudah untuk menyingkirkan garis bawah hanya di baris-baris yang berisi
Fizz
, sementara juga mengisizz
s:Artinya, kita mengubah setiap titik koma menjadi
zz
tetapi kita juga mengkonsumsi semua_
setelahnya. Pada titik ini kita sudah selesai dengan FizzBuzz di unary. Tetapi tantangannya menginginkan hasil desimal.&
menunjukkan kondisi: tahap ini hanya dijalankan jika string berisi garis bawah. Oleh karena itu,Fizz
,Buzz
danFizzBuzz
iterasi disentuh. Di semua iterasi lain (yaitu yang tidak dapat dibagi oleh 3 atau 5), kami hanya menghitung jumlah karakter, mengonversi hasilnya menjadi desimal.sumber
gs2 , 1
Sebuah kutipan dari Mauris, pencipta GS2:
Pembaruan : Menambahkan jawaban 27 byte yang tidak digunakan
f
.sumber
Perl 5, 45 byte
Membutuhkan
-E
opsi, dihitung sebagai satu. Ini harus dijalankan dari baris perintah, yaitu:Tanda kutip perintah tidak diperlukan, jika salah satu menghindari menggunakan spasi, atau karakter lain yang dapat bertindak sebagai pemisah baris perintah (
|
,<
,>
,&
, dll).Perl 5, 48 byte
Jika opsi baris perintah dihitung sebagai masing-masing,
-l
akan menghemat satu byte (dengan mengganti$/
). Namun, menurut Peraturan Perlgolf Klasik , ini akan dihitung 3: satu untuk-
, satu untukl
, dan satu untuk ruang yang diperlukan.sumber
say
, dengan-E
sakelar, yang memiliki jarak edit 1 hingga-e
, sehingga harus dihitung sebagai 1 byte.say
, saya berasumsi bahwa-E
dapat digunakan di tempat-e
yang akan membawa Anda ke 44 daripada 46. Saya tidak berpikir adil bahwa saya mencetak gol berbeda dengan Anda, apa mekanisme penilaian yang disukai? Saya biasanya menggunakanprint
untuk menghindari ini! Paling dekat dengan konsensus adalah ini ?say
bernilai 1. Khusus untuk , jika kode Anda dapat ditulis pada satu baris menghindari pemisah OS, skor 1 untuk-E
. Jika Anda perlu menggunakan tanda kutip, misalnya-E"$a||$b"
, skor 3. Jika Anda tidak bisa mendapatkannya pada satu baris, beri nilai 5 untuk-M5.01
. Tetapi pada saat itu Anda mungkin lebih baik menggunakan-l
. Saya tidak setuju bahwa itu harus gratis secara default, karena dua alasan: 1) peningkatan itu sepele dan tidak menarik, dan 2) tidak ada versi penerjemah yang diaktifkan secara default.lilin lebah ,
1048981 bytePengemasan yang lebih padat diizinkan untuk memotong 8 byte lebih banyak.
Solusi terpendek (81 byte), aliran program yang sama, pengemasan berbeda.
Mengubah konsep memungkinkan saya untuk mengurangi kode sebanyak 15 byte. Saya ingin menyingkirkan tes mod 5 ganda dalam solusi, jadi saya menerapkan flag.
Penjelasan singkat:
jika
n%3=0
Fizz dicetak, dan bendera disetel. Bendera diwujudkan hanya dengan mendorong nilai lstack atas ke gstack (instruksif
).Jika
n%5=0
, makan%3=0
(FizzBuzz case) ataun%3>0
(Buzz case). Dalam kedua kasus, Buzz akan dicetak, dan bendera diatur ulang dengan membuka tumpukan hingga kosong (instruksi?
).Sekarang kasus menarik:
Jika
n%5>0
, maka kita punyan%3=0
(mencetak Fizz case, n tidak boleh dicetak) ataun%3>0
(Fizz tidak dicetak, jadi n harus dicetak). Saatnya memeriksa bendera. Ini diwujudkan dengan mendorong panjang gstack di atas gstack (instruksiA
). Jikan%3 was 0
maka panjang gstack adalah> 0. Jikan%3 was >0
, panjang gstack adalah 0. Lompatan bersyarat sederhana memastikan n hanya akan dicetak jika panjang gstack adalah 0.Sekali lagi, setelah mencetak n, Fizz, dan / atau Buzz dan baris baru, gstack akan muncul dua kali untuk memastikan kosong. gstack adalah kosong
[]
, yang mengarah ke[0]
setelah instruksiA
(panjang dorong gstack pada gstack), atau mengandung satu nol ([0]
, hasil dari n% 3), yang mengarah ke[0 1]
, karena [0] memiliki panjang 1. Popping dari tumpukan kosong tidak mengubah tumpukan, jadi aman untuk meletus dua kali.Jika Anda melihat lebih dekat Anda dapat melihat bahwa, pada prinsipnya, saya melipat
ke
yang membantu menyingkirkan semua ruang yang terbuang antara
A
dan<
di akhir baris berikut dalam solusi yang lebih lama di bawah ini:Solusi konsep baru (89 byte) termasuk penjelasan animasi:
Tata letak heksagonal:
Animasi 326 kutu pertama di 2 fps, dengan tumpukan lokal dan global, dan output ke STDOUT.
Sebagai perbandingan, di bawah ini adalah hamparan jalur dari solusi yang lebih lama dan lebih kompleks. Mungkin itu juga solusi yang lebih cantik, dari sudut pandang visual;)
sumber
> <> ,
68666564 byteSatu-satunya trik adalah melipatgandakan sisa sebagai syarat untuk mencetak nomor. Dengan begitu, jika salah satunya adalah 0 kita tidak akan mencetak nomornya.
Anda bisa mencobanya di sini .
Menyimpan satu byte berkat Sp3000 dan lainnya berkat randomra. Terimakasih banyak!
sumber
o
ujung baris kedua ke ruang kosong di awal baris, saya percaya.foooo Buzz
?GS2 ,
2827 (tanpaf
)Hex:
Penjelasan:
Memasukkan 3 dan 5 ke dalam konstanta string tidak berfungsi karena
\x05
mengakhiri string literal.Catatan: Masalah ini dapat diselesaikan dalam 1 byte dengan gs2 menggunakan built-in
f
.sumber
C, 85 byte
-2 Berkat mual.
sumber
gcc
tidak mengenali baris baru di dalam string sebagai \ n. Ini memberi saya kesalahan kompilasi. Apakah saya perlu meneruskan parameter apa pun ke kompiler? BTW, Anda ketinggalan<=
dalam posting Anda (saya menghitung 88 byte dengan <= ... jadi saya anggap itu hilang).main(i)
, cobai;main()
. Kemudian Anda dapat menyingkirkannyai--
di awalfor()
loop. Anda tidak perlu jeda baris juga. Itu harus membawa hitungan byte ke 85.(i%3&&i%5)*i
dengani%3*i%5?i:0
aku akan tidurCJam, 35 byte
Cobalah online di juru bahasa CJam .
Bagaimana itu bekerja
sumber
100{):I3%!"Fizz"*I5%!"Buzz"*+Ie|N}/
MUMPS,
5654 byteApa ini
w:$X<3 i
, Anda bertanya?$X
adalah variabel ajaib ("intrinsik") yang menyimpan posisi horisontal kursor output (sebagai sejumlah karakter dari tepi kiri terminal).w
adalah bentukWRITE
perintah yang disingkat . Sintaksnyacommand:condition args
adalah postconditional - "jikacondition
, lalu lakukancommand args
".Jadi kami sedang memeriksa apakah kursor keluaran telah maju lebih dari dua karakter (yang berarti bahwa setidaknya satu
"Fizz"
atau"Buzz"
telah ditulis ke terminal), dan jika tidak, tulisi
ke terminal. The$X
variabel - dan karenanya, semacam ini ketidakterpisahan mendalam dari terminal - adalah fitur kelas pertama gondok. Astaga.sumber
Jelly ,
2420 byteCobalah online!
Bagaimana itu bekerja
sumber
brainfuck, 206 byte
Diformat:
Cobalah online
Tata letak memori
di mana
f
siklus oleh 3,b
siklus dengan 5,d1
adalah angka satu,d2
adalah angka sepuluh,s
adalah bendera untuk apakah akan mencetak puluhan digit,d
siklus dengan 10,c
adalah ruang salin untukd
,t
adalah ruang kerja yang menampung 0 atau data sampah atau bendera untuk tidak -divisible-by-3, dana
menentukan terminasi program dengan mengimbangi pointer setelah Buzz telah dicetak 20 kali.sumber
C #,
128126125124 byte89 byte tanpa kode boilerplate.
Selesai dengan penggunaan pemformatan bersyarat C # .
Dengan dua pemisah bagian
;
, Fizz atau Buzz dicetak jika nilai dari kondisinya nol.Menyimpan total 4 byte berkat @RubberDuck, @Timwi dan @Riokmij.
sumber
Write
dan menambahkan baris baru langsung ke string, bukan?i%3*i%5>0?i:0
bukani%3*i%5==0?0:i
.for
pernyataan dengan menggunakanfor(var i=0;i++<100;)
$"{(i%3*i%5>0?i:0):#}...\n"
)class A{static void Main(){for(var i=0;i<100;)System.Console.Write($"{(++i%3*i%5<1?0:i):#}{i%3:;;Fizz}{i%5:;;Buzz}\n");}}
Clojure,
11310610110091 byteGolf pertamaku!
Tidak Terkumpul:
sumber
println
cara yang sama seperti pada solusi Java , mis.(doall(map #(let[t(=(mod % 3)0)](println(str(if t"Fizz""")(if(=(mod % 5)0)"Buzz"(if t""%)))))(range 1 101)))
(if t"Fizz""")
dapat disederhanakan(if t"Fizz")
. :)brainfuck ,
411 350 277258 byteSuntingan:
-61 byte dengan menyimpan nilai "Fizz Buzz" sebagai
"BuziF""BuziG" dan mengulangi bagian pencetakan nomor.-71 byte dengan mengulangi bagian pencetakan nomor modulo, membelah penghitung lingkaran dan penghitung angka, dan menggunakan kembali sel baris baru sebagai nilai mod, antara lain
-19 byte dengan menyadari bahwa tidak ada angka 0 dalam angka FizzBuzz. Juga ditambahkan penjelasan
+[-[>+<<]>-]>--[>+>++>++>++++++>+>>>++++++[<<<]>-]<+++++[>+>+>->>->++>>>-->>>++[<<<]>>>-]>[>]+++>>[>+<<<-[<]<[>+++>+<<-.+<.<..[<]<]>>-[<<]>[.>.>..>>>>+[<]+++++<]>[>]>>[[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[-<+>]>,>[>]<[>-[<+>-----]<---.,<]++++++++++>]<.<<<<,>-]
Cobalah online!
Alih-alih memeriksa apakah nomor itu sendiri dapat dibagi oleh 5 atau 3, saya memiliki dua penghitung melacak modulo angka, mengurangi mereka untuk setiap nomor dan mencetak kata yang sesuai ketika mereka mencapai 0.
Bagaimana itu bekerja:
sumber
PowerShell,
78686154 BytesSunting: Disimpan 10 byte berkat feersum
Sunting2: Menyadari bahwa dengan trik feersum, saya tidak perlu lagi memformulasikan $ t sebagai string-of-code-blocks
Sunting3: Disimpan 7 byte lagi berkat Danko Durbić
Semangat serupa dalam semangat untuk jawaban Kode Rosetta , tetapi bermain golf cukup sedikit.
Penjelasan
1..100|%{...}
Buat koleksi 1 hingga 100, lalu untuk setiap objek dalam koleksi itu, lakukan(...,$_)
buat koleksi baru dari dua elemen: 0)$t=...
mengatur variabel$t
sama dengan string; 1)$_
jumlah loop saat ini"Fizz"*!($_%3)
ambil nomor-kita-saat ini, mod dengan 3, maka BUKAN hasilnya. Lipat gandakan "Fizz" dengan itu, dan tambahkan ke string (dan mirip dengan 5). PowerShell memperlakukan angka bukan nol sebagai$TRUE
, dan dengan demikian BUKAN dari angka bukan nol adalah 0, yang berarti bahwa hanya jika angka kita saat ini adalah kelipatan dari 3 akan "Fizz" ditambahkan ke string.[!$t]
mengindeks ke dalam koleksi yang baru saja kita buat, berdasarkan pada nilai string$t
- tidak kosong, cetak, atau cetak nomor kita saat iniAtau, juga 54 byte
Terima kasih kepada TesselatingHeckler
Mirip dalam konsep, ini menggunakan
-replace
operator sebaris dan ekspresi reguler untuk menukar string kosong^$
dengan nomor kami saat ini. Jika string tidak kosong, itu tidak bisa ditukar.Atau, juga 54 byte
Ini adalah struktur loop yang sama seperti di atas, tetapi di dalamnya mengurutkan pasangan (n, string), dan bergantung pada fakta bahwa string kosong mengurutkan sebelum angka, tetapi string FizzBuzz mengurutkan setelah nomor. Kemudian indeks hasil sortir kedua.
sumber
||
operator, seperti di C #, kita mungkin bisa turun ke 43 byte dengan sesuatu yang mirip dengan1..100|%{"Fizz"*!($_%3)+"Buzz"*!($_%5)||$_}
... diragukan, karena|
operator khusus yang begitu penting di PowerShell, tapi aku bisa bermimpi ...1..100|%{'Fizz'*!($_%3)+'Buzz'*!($_%5)-replace'^$',$_}
54?if($t){$t}else{$_}
dengan sesuatu seperti($t,$_)[!$t]
1..100|%{(($t="Fizz"*!($_%3)+"Buzz"*!($_%5)),$_)[!$t]}
yang juga 54 seperti saran @ TessellatingHecklerJavaScript, 62 byte
Saya rasa saya ini adalah solusi Javascript terpendek sekarang.
sumber
console.log
; itu jauh lebih menjengkelkan daripada harus menekan "OK" pada 100 kotak pop-up berturut-turut. Bisakah Anda mengubah ini? Itu hanya akan menjadi 62 byte, masih tiga lebih baik dari milikku.C, 74 byte
The
0
argumen untukprintf
bukan""
yang mencurigakan, tetapi tampaknya bekerja pada kebanyakan platform saya mencobanya.puts
segfault ketika Anda mencoba hal yang sama. Tanpa itu, Anda mendapatkan 75 byte.Ada solusi 73-byte yang bekerja pada golf anarki , dan saya menemukan satu penggalian di tempat yang tepat di internet, tetapi mereka bergantung pada perilaku platform-spesifik. (Seperti yang bisa Anda tebak, itu sesuatu dari bentuk
puts("Buzz"±...)
.)sumber
./fizzbuzz $(seq 40)
: PScratch,
203185 bytesByte dihitung dari representasi tekstual golf , per pos meta ini . Scratch tidak terlalu hemat ruang.
say
adalah hal yang paling dekat dengan stdout yang dimiliki Scratch: sprite menampilkan gelembung ucapan yang berisi apa pun yang dikatakannya. Dalam praktiknya, sebuahwait n secs
blok diperlukan untuk benar-benar membaca output ini, tetapi untuk keperluan tantangan ini kode ini memenuhi persyaratan.sumber
y =
(dalam kedua kejadian)set y to ...
yang hilangR,
8883777170 byteSaya yakin ini bisa diperbaiki... dan itu dengan kredit ke @flodel. Beberapa byte selanjutnya disimpan berkat saran dari @njnnja dan lainnya dari @ Joesumber
x=1:100;i=!x%%3;j=!x%%5;x[i]="Fizz";x[j]="Buzz";x[i&j]="FizzBuzz";cat(x,sep="\n")
write
ketimbangcat
meskipunwrite
panggilan dapat mengambil 1 bukannya string kosong sehinggax=y=1:100;y[3*x]='Fizz';y[5*x]='Buzz';y[15*x]='FizzBuzz';write(y[x],1)
adalah sepele 1 byte golf untuk 70 byte.Haskell, 84 byte
Semakin dekat dengan 81 byte henkma , tetapi belum sampai di sana.
d = drop.(*4).mod n
adalah kunci di sini:d 3 "Fizz"
adalahdrop (n`mod`3 * 4) "Fizz"
. Ini adalah"Fizz"
saatn `mod` 3
0 dan""
sebaliknya.sumber
(%)=drop.(*4).mod n;main=mapM putStrLn[max(show n)$3%"Fizz"++5%"Buzz"|n<-[0..100]]
.n
tidak dalam ruang lingkup. Hmmain=mapM putStrLn[max(show n)$3%"Fizz"++5%"Buzz"|n<-[0..100],(%)<-[drop.(*4).mod n]]
PHP, 54 byte
Berlaku untuk v5.5 dan seterusnya. The
õ
karakter 245, sedikit terbalik\n
.Saya menganggap pengaturan penerjemah default, karena tanpa ini. Jika Anda tidak yakin, Anda dapat menonaktifkan inisialisasi lokal Anda dengan
-n
seperti padaphp -n fizzbuzz.php
.Versi yang akan menjalankan bebas kesalahan dengan mutlak file konfigurasi apa pun adalah 62 byte :
sumber
short_open_tag
adalah off,E_NOTICE
aktif. Tidak satu pun dari ini adalah pengaturan default.80386 kode mesin + DOS, 75 byte
Hexdump kode:
Kode sumber (sintaks TASM):
Kode ini dihitung dari 1 hingga 100 in
ax
, membangun pesan keluaran dari akhir hingga awal. Akhir pesan (baris baru dan$
karakter yang digunakan DOS untuk tanda akhir pesan) muncul di awal kode:Ini dijalankan sebagai instruksi yang tidak berbahaya (
or ax, 240ah
). Saya bisa meletakkannya di tempat yang lebih konvensional, seperti setelah akhir kode, tetapi memilikinya di alamat 0x100 memiliki manfaat.Kode ini juga menggunakan 2 penghitung tambahan:
dl
dh
Ketika penghitung mencapai 0, itu mendorong string
Fizz
atauBuzz
ke akhir pesan output. Jika ini terjadi,bx
akan berkurang, danbh
akan menjadi nol. Ini digunakan sebagai kondisi untuk menghasilkan angka dalam bentuk desimal.Catatan: Saya menggunakan data 32-bit di sini. Ini tidak akan berfungsi pada komputer pra-386.
sumber
mov [mem], 'Fizz'
untuk menyimpanFizz
dalam urutan itu dalam memori, sesuaidb
arahan. Lihat saya overcomplicated "efisien" YASM FizzBuzz misalnya .std
, lalustosb
/stosd
? Anda harus menggantitest bh,bh
dengancmp di, 100h
atau sesuatu. Alih-alih menyimpan / mengembalikan penghitung di AL, Anda bisa menyimpannya di BL dan hanya clobber eax kapan pun Anda mau. Misalnyasub bx, 4
/mov dword ptr [bx], 'zzuB'
adalah 3 + 7 byte, kan?mov eax, 'zzuB' / stosd
adalah 6 + 2 byte (awalan ukuran operan pada keduanya). Akan lebih baik jika jawabannya termasuk pembongkaran sehingga ukuran instruksi terlihat.stosd
tetapi saya tidak bisa melakukan pengurangan skor sendiri. Karenastosd
penguranganDI
setelah itu Anda tidak bisa kehilangansub di, 4
dan kemudian Anda memilikiDI
4 byte pada akhirnya. Saya dapat-6 bytes
menggunakan beberapa perubahan kecil lainnya yang akhirnya saya posting sebagai jawaban yang terpisah (hanya karena saya tidak mungkin dapat memasukkan semua komentar). Pujian!dc,
6462 byteTidak Terkumpul:
sumber