Tujuan dari kode golf ini adalah untuk membuat juru bahasa untuk bahasa pemrograman HQ9 +
Ada 4 perintah dalam bahasa pemrograman ini:
- H - mencetak "Halo, dunia!"
- Q - mencetak kode sumber program
- 9 - mencetak lirik lagu "99 botol bir"
- + - menambah akumulator
Aturan:
- Karena akumulator tidak ditentukan, Anda dapat mengabaikan perintah +
- Program Anda harus meminta input (input ini akan menjadi kode sumber) atau kode sumber dibaca dari file
- Anda tidak diperbolehkan memasukkan lirik "99 botol bir" ke dalam file, dan membaca teks dari file tersebut
- Anda tidak diperbolehkan menggunakan algoritma kompresi seperti GZip atau BZip untuk mengompresi teks lagu: Anda harus membuat algoritma kompresi Anda sendiri. Ini tidak harus berupa algoritme yang rumit, tetapi cobalah untuk mengompresi teks sebanyak mungkin (ingat: ini adalah kode-golf, kode dengan byte paling sedikit menang)
- Jika kode sumber berisi karakter yang bukan H , Q , 9 atau + , maka keluaran "Kode sumber berisi karakter yang tidak valid" sebelum menjalankan perintah apa pun! Ini berarti bahwa, jika kode sumbernya adalah
H1
contoh, maka jangan menghasilkanHello, world!
sebelum Anda mengeluarkanSource code contains invalid characters
. Tidak, segera outputSource code contains invalid characters
- Jika penerjemah Anda menerima karakter huruf besar dan kecil, maka Anda mendapatkan -8 ke jumlah karakter Anda
Semoga berhasil!
code-golf
interpreter
hq9+
ProgramFOX
sumber
sumber
Jawaban:
APL (Dyalog) (326 - 8 = 318)
Rekatkan di jendela editor dan panggil
H
. Input diambil dari keyboard.sumber
Mathematica,
349 346341 karaktersumber
If[StringMatchQ[3, "a"], x, y]
C,
599587487481467 karakterSaya yakin ini bisa dikalahkan. Saya menggunakan C setelah semua. Ada alasan mengapa Anda tidak melihat banyak entri golf yang menang ditulis dalam C. Ini sekarang 467 karakter berkat pelecehan kriminal
#define
.Tentukan file sumber HQ9 + sebagai argumen baris perintah.EDIT: Sekarang menerima sumber dari stdin, bukan file. Mulai program, mulai ketikkan kode, CTRL- Csetelah selesai menjalankannya.
Itu mengkompilasi setidaknya di MinGW / GCC dengan:
gcc -o hq9+.exe hq9+.c
Seharusnya bekerja di MSVC, tapi saya tidak merasa ingin membuat solusi lengkap hanya untuk ini. :)
Atau:
sumber
C
dan pasangan sebelumnyaR;
. Bisa juga mencukur 8 karakter denganp[s++]=0;
setelah loop input untuk mempermudah pencetakanp
.Python 2 -
452453443 byteBleh. Sudah bleh, tapi kemudian saya menemukan bug yang saya biaya byte untuk memperbaikinya. Bleh.
(Dulu saya tidak termasuk
+
dalam output untukQ
. Input dariQ+++
memberi outputQ
, misalnya.)Menyimpan beberapa karakter dengan tidak keluar pada input yang tidak valid seperti yang saya kira seharusnya.
Versi yang dijelaskan akan segera hadir.Aku menyerah. Aku bahkan nyaris tidak mengerti bagaimana cara kerja monster ini lagi. Jika ada permintaan saya akan mencoba lagi tetapi sampai saat itu tidak terjadi.sumber
exit
menggunakan karakter yang tidak valid, cukup tampilkan pesannya, sehingga Anda dapat menyimpan 7 karakter di sana.99 bottles of beer on the wall, 99 bottles of beer. Take one down, pass it around, *99* bottles of beer on the wall.
Seharusnya dikatakan:99 bottles of beer on the wall, 99 bottles of beer. Take one down, pass it around, *98* bottles of beer on the wall.
+
. Anda seharusnya mengabaikan+
, tidak memberikan kesalahanHQHH
harus mengatakanHello World!HQHHHelloWorld!Hello World!
Perl, 325 - 8 = 317
Diperluas:
sumber
Ruby,
364360 - 8 = 352Masih memiliki banyak ruang untuk perbaikan. Kode 99 botol dicuri dari sini .
sumber
No more bottles of beer on the wall
setelah1 bottle
seksi. maka ituGo to the store...
1 bottle of beer on the wall, 1 bottle of beer on the wall, take one down, pass it around, no more bottles of beer on the wall. No more bottles of beer on the wall, no more bottles of beer, go to the store, buy some more, 99 bottles of beer on the wall.
Haskell, 298
ini cukup mudah.
%
mengembalikan output perintah (diberi kode sumber untuk digunakanQ
).d
mengembalikan lagu 99 botol dengan garis sampah di awal karena alasan golf. semuanya terbungkus dalam suatu interaksi (Anda mungkin ingin menggunakang
alih-alihmain
saat menguji)sumber
<interactive>:8:5: parse error on input ‘=’
.let
untuk menyisipkan definisi (ini terputus ketika memasukkan beberapa definisi yang tidak dipisahkan oleh;
) atau menjalankan kode dari file.main
, ia mengatakan bahwa kode sumber berisi karakter yang tidak valid ketika saya mencoba mengeksekusiH
. Ketika saya mencoba menjalankang
alih-alihmain
, itu langsung memberikan kesalahan.main
tidak berfungsi karena baris baru yang ditambahkan bukan perintah hukum. Itu sebabnya saya merekomendasikan menggunakang
sebagai gantinya. Adapung
,putStrLn $ g "H"
tidak berfungsi dengan baik?J - 444 byte
Saya suka nomornya, jadi berhentilah bermain golf. Ini dia, fungsi ekspresi tunggal!
Contoh:
sumber
Fortran 528
470481Membutuhkan kompilasi dengan-fpp
flag (+3 untuk mencetak skor) 1 untuk menggunakan arahan preprocessing (yang menghemat lebih dari 3 karakter, jadi saya benar-benar setuju dengan itu). Itu juga case-sensitive, jadi ada -8: D. Disimpan 5 karakter dengan tidak memprosesendif
seperti yang digunakan sekali saja .Membutuhkan file untuk memiliki
.F90
ekstensi (masuk akal untuk memanggilnyahq9+.F90
) sehingga kompilator memaksa preprocessing. Kode ini peka terhadap huruf besar-kecil; membuatnya case-insensitive menambahkan sekitar 16 karakter, jadi tidak benar-benar layak untuk menyimpan 8 karakter. Jawaban saya sebelumnya tidak menjelaskan perubahan bentuk jamakbottles
untuk9
; versi ini mengoreksinya (dan sayangnya menambahkan lebih banyak karakter).Terlihat jauh lebih baik ungolfed & non-preprocessed (mungkin karena Anda dapat melihat apa yang terjadi):
sumber
.cc
agar tidak perlu-lstdc++
flag.Python 2, 340 - 8 = 332
sumber
Lua 443 - 8 = 435
464 - 8 = 456Saya berhasil menyimpan 21 karakter dengan menggunakan banyak
if-end
s alih-alihif-elseif-end
. Saya juga memiliki beberapa ruang putih ekstra yang mengambang setelah beberapa)
.Saya cukup senang dengan yang satu ini, meskipun tidak jauh lebih pendek dari jawaban Fortran saya . 99 botol kode bir telah dimodifikasi dari jawaban ini oleh Alessandro . Tidak ada yang kita miliki
sumber
if s in'Hh'
in
adalah untuk iterator for-loop dan bukan perbandingan; Anda akan mendapatkan kesalahan jika menempel di sana. Ada tiga pilihan di sini: (1) gunakanmatch
di setiap baris, (2) penggunas=='h'or s=='H'
di setiap baris, (3) lakukan dengan cara yang saya lakukan. Jelas (3) lebih pendek dari (1) dan (2).Julia, 362
sumber
Tcl, 515
Hanya sedikit bermain golf, masih lebih kecil dari C dan 99 botol bir yang benar.
sumber
regexp
. Anda bisa mendapatkan 99 bir saya di codegolf.stackexchange.com/a/109818/29325JavaScript (ES6), 385
Tidak memilih untuk case-insensitive, akan membutuhkan terlalu banyak karakter. Bahkan tidak dekat dengan beberapa entri lainnya, tetapi tetap menyenangkan!
JavaScript, 344
Saya membuat versi dengan versi lagu yang kurang lengkap:
tetapi setelah melihat entri lain (dan melihat lirik yang sebenarnya, siapa yang tahu!), saya pikir itu sedikit keluar!
sumber
Go to the store, buy some more, *99* bottles of beer on the wall
, bukan*No more* bottles of beer on the wall
Q
tidak berhasil untuk saya.Q
seharusnya melakukan itu waktu dan memberikan kode sumber fungsi bukan input ... Itu awalnya alasan saya untuk melakukannya di JS, bagian itu akan mudah, namun sekarang saya tahu itu tidak diperlukan sama sekali!C, 562 byte
Sebagai program lengkap. Argumen pertama adalah program HQ9 +. Dengan akumulator yang sebenarnya. Saya menantang diri saya sendiri untuk tidak menggunakan pernyataan define.
Versi tidak disatukan:
sumber
Java, 546 byte
Ini adalah pengiriman kode golf pertama saya. Saya yakin kita bisa berbuat lebih banyak dengannya. Bunyinya input sebagai argumen baris perintah. Kode bir "dipinjam" dari jawaban java "99 Botol Bir" (creative commons)
Beritahu saya jika args baris perintah tidak dapat diterima. Ini sangat menyenangkan!
sumber
Excel VBA, 489 Bytes
Tidak ada indentasi:
(indentasi agar mudah dibaca)
Ganti nama standar Module1 ke M
call dengan
h "+++++++++Your Code"
Ini juga akan berfungsi pada aplikasi kantor lainnya, mengubah ActiveWorkbook ke tipe dokumen yang sesuai
sumber
For n=1 To
keFor n=1To
(menghapus spasi kosong sebelumnyaTo
) dan 4 byte dengan mengubah semua instanceDebug.? 2;
keDebug.?2;
(menghapus spasi dengan?
kata kunci)