Selamat datang di dunia golf kompiler. Tugas Anda adalah menulis sebuah program yang menghasilkan program lain untuk memainkan varian FizzBuzz pada spec.
Kompiler Anda
Tulis kompiler yang menghasilkan varian dari program FizzBuzz untuk spesifikasinya. Spesifikasi varian ini dinyatakan dalam bentuk array bilangan bulat / string.
- Masukan mungkin dalam bentuk apa pun yang sesuai dengan bahasa Anda. (Contoh saya menggunakan n: xxxx, tetapi ini hanya untuk tujuan ilustrasi.)
- Setiap input integer hanya dapat digunakan satu kali per permintaan kompiler Anda.
- Bilangan bulat dari setiap pasangan akan memiliki nilai setidaknya satu.
- String dari setiap pasangan hanya akan dibuat dari empat huruf ASCII.
- Output harus berupa program lengkap tunggal yang sesuai dengan aturan di bawah ini.
- Outputnya bisa dalam bentuk apa pun, asalkan merupakan program tekstual. (Jadi tidak ada ekspresi lambda yang kembali.)
Perilaku tidak ditentukan untuk input yang tidak sesuai dengan aturan di atas.
Program FizzBuzz yang Anda hasilkan
Program yang dihasilkan oleh kompiler Anda akan mengambil bilangan bulat tunggal, n , sebagai input. Ini akan menampilkan urutan angka mulai dari satu hingga dan termasuk n , mengganti angka dengan string FizzBuzz saat diperlukan.
- Program yang dihasilkan harus dalam bahasa yang sama dengan kompiler.
- Input n mungkin dalam bentuk apa pun sesuai dengan bahasa Anda.
- n akan memiliki nilai setidaknya satu.
- Angka yang merupakan kelipatan dari setidaknya satu dari input bilangan bulat ke kompiler harus diganti oleh semua string yang dipasangkan dengan bilangan bulat yang digabungkan.
- Nomor yang tidak akan digantikan oleh string FizzBuzz harus berupa output dalam ASCII desimal.
Sebagai contoh;
> GenFizzBuzz 3:Fizz 5:Buzz
> a.out 5
1
2
Fizz
4
Buzz
Mencetak gol
Entri Anda akan dinilai berdasarkan panjang program yang dihasilkan kompiler Anda ditambahkan ke panjang kompiler Anda. Jalankan kompiler Anda berkali-kali dengan masing-masing parameter berikut dan tambahkan panjang program yang dihasilkan bersama dengan panjang kompiler untuk menemukan skor Anda.
- Hitung saja. (Tanpa input - Program yang dihasilkan akan menghitung 1 hingga n tanpa penggantian.)
- Hanya Golf. (1: Golf - Program yang dihasilkan akan menampilkan "Golf" n kali.)
- FizzBuzz Klasik. (3: Fizz, 5: Buzz)
(Perhatikan bahwa kompiler Anda diperlukan untuk menghasilkan kode untuk input apa pun yang valid, bukan hanya yang terdaftar ini.)
Jawaban:
Python 3 -
168162 + 230 = 392Oh, Python, Anda berusaha sangat keras, tetapi mengalikannya
import sys;sys.argv
dengan 4 benar-benar menyakitkan!Program keluaran:
Input yang diharapkan untuk program utama adalah urutan tupel Python yang dapat dievaluasi atau
'()'
tanpa input. (Kau mengatakan "nyaman".) Contoh masukan:'()'
,'("Golf",1),'
,'("Fizz",3),("Buzz",5)'
Catatan mengutip untuk shell dan trailing koma selama satu masukan.Memperbaiki kesalahan 1 pagi dengan mengubah dari dikt (pemesanan tidak ditentukan!) Ke tupel.
Masukan yang diharapkan untuk program lain hanyalah angkanya
sumber
perl6
37634084 + 115 = 199UPDATE: beralih dari perl5 ke perl6 untuk mendapatkan
say
tanpause feature
.PEMBARUAN: tiga kasus uji, bukan lima
Ada ratusan solusi untuk FizzBuzz yang sudah bermain golf, dan banyak kontes berakhir dengan hasil yang sama, jadi dari situlah saya memulai. Kompiler saya hanya menghasilkan versi khusus dari solusi itu. Beberapa karakter tambahan dimasukkan ke akun untuk variasi "hitung saja".
kompiler, mengharapkan argumen seperti: "Fizz 3" "Buzz 5"
program yang dikompilasi, perkirakan argumennya seperti ini: 100
program yang dikompilasi untuk kasus uji lama:
sumber
Pyth - 51 + (38 + 43 + 50) = 182 byte
Mungkin bisa golf compiler beberapa byte. Tautan pada mereka semua adalah tautan permanen ke penerjemah online.
Kompiler - 51 byte
Hanya melakukan pemformatan string dengan input tuple. Mengambil input seperti:
Tidak ada - 38 byte
Just Golf - 43 byte
Classic Fizz Buzz - 50 byte
sumber
C ++ 11 ~ 486 + (234 + 244 + 255) = 1219
Partisipasi pertama di sini, tantangan ini bukan yang paling sulit jadi saya pikir saya akan mencobanya. Meskipun menggunakan C ++, dan bahkan dengan penambahan C ++ 11 masih merupakan bahasa yang cukup verbose, tapi saya yakin ada ruang untuk perbaikan.
Kompiler (486):
Ini mengasumsikan argumen dalam bentuk
3Fizz 5Buzz
dll.Hitung (234):
Golf (244):
FizzBuzz (255):
Informasi tambahan
Diuji dengan GCC 4.8.1, tidak ada cheat compiler.
Berikut ini adalah makefile kecil untuk mengotomatisasi pembuatan case uji dan menjalankannya (digunakan
make run
):sumber
map<int,string> f
bisa jadimap<int,string>f
. Anda dapat menginisialisasij=1
pada saat yang bersamaan denganz
.Ruby 99 + (86 + 94 + 103) = 382
Pemakaian:
sumber
Stax , 23 + 5 + 17 + 29 = 74
Jalankan dan debug itu
Jawaban terpendek sejauh ini.Tidak mengherankan dikalahkan oleh Jelly. Template string yang disediakan di Stax sangat rapi dan menyediakan fungsi seperti printf. Program yang dihasilkan oleh kompiler hampir selalu sesingkat yang terbaik dapat dicapai dengan codegolfing secara manual, tanpa menggunakan pengepakan.Kompilator itu sendiri panjangnya 23 byte .
Setara ASCII adalah:
Input yang diberikan
[]
, menghasilkan yang ini (5 byte)Jalankan dan debug itu
Input yang disediakan
[[1,"Golf"]]
, menghasilkan yang ini (17 byte)Jalankan dan debug itu
Input yang disediakan
[[3,"Fizz"],[5,"Buzz"]]
, menghasilkan yang ini (29 byte)Jalankan dan debug itu
sumber
Gangguan umum,
636577Saya mengambil jawaban saya yang lain dan membungkusnya dengan kuasiquote sambil menambahkan parameter input. Saya mencetak formulir yang dihasilkan sebagai satu-baris dan menghapus karakter spasi yang tidak perlu. Kompiler sedikit lebih lama dari versi sebelumnya, tetapi skor yang dihasilkan berkurang.
Skor
Nilai yang dikembalikan:
Cantik
Format input adalah daftar
(number string)
pasangan. Sebagai contoh:... mencetak ke output standar:
... yang, cukup dicetak, adalah:
Menguji fungsi yang dihasilkan:
sumber
Perl 5 , 77 + 93, 170 byte
Coba kompiler online!
Coba hitung saja secara online!
Coba golf saja secara online!
Coba dengarkan buzz online!
sumber
Jelly ,
88848373 byteSejauh ini jawaban terpendek (mengalahkan "jawaban terpendek" sebelumnya sebesar 1 byte)
Penyusun:
Cobalah online! (penyusun)
Cobalah online! (verifikasi bytecount)
Statistik:
sumber
C, total 1080 byte
Kompiler [369 byte]
Fizz Buzz [241]
Golf [237]
Hitung [233 byte]
sumber
dc , 434 byte
Cobalah online!
Input untuk kompiler (168 byte) harus ditempatkan pada stack sebagai integer, string, integer, string, dan sebagainya (
3 [Fizz] 5 [Buzz]
). Itu harus diberikan dalam urutan yang ingin dicetak dan buzz mereka dicetak, yang mungkin sedikit curang (setelah menerapkan semacam gelembungdc
sebelumnya, saya percaya itu akan menelan biaya sekitar 100 byte) tetapi juga memungkinkan pengguna untuk , katakanlah, masih memiliki 'Fizz' berjalan pada 3 dan 'Buzz' berjalan pada 5, tetapi memiliki 15 menghasilkan 'BuzzFizz'.Saya yakin ini bisa sedikit lebih golf; makro utama dalam program akhir (
M
) bergantung pada dua makro (F
danP
) yang agak tidak perlu tanpa input. Sekarang kompiler memeriksa input dan output yang berbeda (jauh lebih kecil) versi makro ini jika tidak ada, tapi saya tidak yakin seluruh pengaturan optimal.Compiler itu sendiri cukup mudah, hanya memeriksa untuk melihat apakah ada 'aturan' pada stack, dan jika demikian ia mencetak kode yang menyimpan kedalaman stack
z
, menyimpan stack dalam array yang diindeks 0a
, dan kemudian mencetak generalisasi Kode FizzBuzz. Jika tidak ada apa-apa di stack, itu benar-benar hanya mencetak versi modifikasi dari kode FizzBuzz. Kasus uji:Tidak ada input (46 byte):
3 [Fizz] 5 [Buzz] (117 byte):
1 [Golf] (103 byte):
Mereka semua mengharapkan nilai n pada stack, ini akan disimpan
n
. Yang memiliki 'aturan' menempatkannya dalam arraya
, dengan string pada indeks ganjil dan bilangan bulat pada genap. Makro utamaM
,, menambah apa pun yang ada di tumpukan, menjalankan makroF
yang memeriksa nilai terhadap arraya
, memeriksa apakahF
set registerb
ke true atau tidak dan mencetak bagian atas tumpukan jika demikian atau baris baru jika tidak, resetb
ke kepalsuan, lalu menyimpan berjalan sendiri jikan
belum tercapai. MakroF
, diberikan aturan, menelusuri seluruh array mencari kecocokan. Itu bertambah dua karena bilangan bulat dan string kami dijalin melalui array, dan pada pertandingan itu disebut makroB
. MakroB
hanya mengambil string (posisi saat ini dalam array kurang satu), dan mencetaknya. Itu jugab
menjadi kebenaran. Kompiler kami tidak perlu repot mencetakB
tanpa input, dan pada dasarnya membuat tidakF
ada.sumber
vim, 122 (kompiler) + 73 (kosong) + 90 (golf) + 123 (fizzbuzz) = 392 byte
Penyusun
Masukkan format
Kode yang dihasilkan untuk kasus FizzBuzz
Kode yang Dihasilkan, Beranotasi
<C-V>
adalah 0x16.<ESC>
adalah 0x1b.<C-A>
adalah 0x01.Sesi contoh
sumber
SlooSarksi .Lang, 179
sumber