Sepertinya GolfScript memenangkan semua ini. Jadi Anda tidak bisa mengalahkan mereka, bergabunglah dengan mereka.
Tulis Interpreter Golfscript Self-Contained
Saya menggunakan definisi mandiri berarti, satu program: - Jadi, jangan memberikan tanggung jawab kepada beberapa program eksternal untuk melakukan pekerjaan untuk Anda.
Kasus uji:
String dan blok direpresentasikan sebagai daftar kode ASCII. Jenis tidak diperiksa dengan tes ini, tetapi harus tetap benar.
test("[50] [60]+", [[50, 60]]);
test("{a} {b}+", [[97, 32, 98]]);
test("'a' 'b'+", [[97, 98]]);
test("' ' 0+", [[32, 48]]);
test("' ' [50]+", [[32, 50]]);
test("{a} 0+", [[97, 32, 48]]);
test("{a} [50]+", [[97, 32, 53, 48]]);
test("5 ~", [-6]);
test('"1 2+"~', [3]);
test('{1 2+}~', [3]);
test('[1 2 3]~', [1, 2, 3]);
test('1`', [[49]]);
test("[1 [2] 'asdf']`", [[91, 49, 32, 91, 50, 93, 32, 34, 97, 115, 100, 102, 34, 93]]);
test('"1"`', [[34, 49, 34]]);
test("{1}`", [[123, 49, 125]]);
test("0!", [1]);
test("[]!", [1]);
test("{}!", [1]);
test("''!", [1]);
test("5!", [0]);
test("[[]]!", [0]);
test("{{}}!", [0]);
test("'asdf'!", [0]);
test("1 2 3 4 @", [1, 3, 4, 2]);
test("1 # 2", [1]);
test("1 2 3 4 5 1 $", [1, 2, 3, 4, 5, 4]);
test("'asdf' $", [[97, 100, 102, 115]]);
test("[5 4 3 1 2]{-1*}$", [[5, 4, 3, 2, 1]]);
test("5 7 +", [12]);
test("'a'{b}+", [[97, 32, 98]]);
test("[1 2 3][4 5]+", [[1, 2, 3, 4, 5]]);
test("1 2-3+", [1, -1]);
test("1 2 -3+", [1, -1]);
test("1 2- 3+", [2]);
test("[5 2 5 4 1 1][1 2]-", [[5, 5, 4]]);
test("2 4*", [8]);
test("2 {2*} 5*", [64]);
test("[1 2 3]2*", [[1, 2, 3, 1, 2, 3]]);
test("3'asdf'*", [[97,115,100,102,97,115,100,102,97,115,100,102]]);
test("[1 2 3]' '*", [[49, 32, 50, 32, 51]]);
test("[1 2 3][4]*", [[1,4,2,4,3]]);
test("'asdf'' '*", [[97,32,115,32,100,32,102]]);
test("[1 [2] [3 [4 [5]]]]' '*", [[49, 32, 2, 32, 3, 4, 5]]);
test("[1 [2] [3 [4 [5]]]][6 7]*", [[1, 6, 7, 2, 6, 7, 3, [4, [5]]]]);
test("[1 2 3 4]{+}*", [10]);
test("'asdf'{+}*", [414]);
test("7 3 /", [2]);
test("[1 2 3 4 2 3 5][2 3]/", [[[1], [4], [5]]]);
test("[1 2 3 4 5] 2/", [[[1, 2], [3, 4], [5]]]);
test("0 1 {10<} { .@+ } /", [8, [1, 1, 2, 3, 5, 8]]);
test("[1 2 3]{1+}/", [2, 3, 4]);
test("7 3 %", [1]);
test("'assdfs' 's'%", [[[97], [100, 102]]]);
test("'assdfs' 's'/", [[[97], [], [100, 102], []]]);
test("[1 2 3 4 5] 2%", [[1, 3, 5]]);
test("[1 2 3 4 5] -1%", [[5, 4, 3, 2, 1]]);
test("[1 2 3] {1+}%", [[2, 3, 4]]);
test("5 3 |", [7]);
test("[5 5 1] [1 3] |", [[5, 1, 3]]);
test("5 3 &", [1]);
test("[1 1 2 2][1 3]&", [[1]]);
test("5 3 ^", [6]);
test("[1 1 2 2][1 3]^", [[2, 3]]);
test("1 2 [\\]", [[2, 1]]);
test("1 2 3 \\", [1, 3, 2]);
test("1 2 3; ", [1, 2]);
test("3 4 <", [1]);
test('"asdf" "asdg" <', [1]);
test("[1 2 3] 2 <", [[1, 2]]);
test("{asdf} -1 <", [[97, 115, 100]]);
test("3 4 >", [0]);
test('"asdf" "asdg" >', [0]);
test("[1 2 3] 2 >", [[3]]);
test("{asdf} -1 >", [[102]]);
test("3 4 =", [0]);
test('"asdf" "asdg" =', [0]);
test("[1 2 3] 2 =", [3]);
test("{asdf} -1 =", [102]);
test("3,", [[0,1,2]]);
test("10,,", [10]);
test("10,{3%},", [[1, 2, 4, 5, 7, 8]]);
test("1 2 .", [1,2,2]);
test("2 8?", [256]);
test(" 5 [4 3 5 1] ?", [2]);
test(" 6 [4 3 5 1] ?", [-1]);
test("[1 2 3 4 5 6] {.* 20>} ?", [5]);
test("5(", [4]);
test("[1 2 3](", [[2, 3], 1]);
test("5)", [6]);
test("[1 2 3])", [[1, 2], 3]);
test("5 {1 0/} or", [5]);
test("5 {1 1+} and", [2]);
test("0 [3] xor", [[3]]);
test("2 [3] xor", [0]);
test("5{1-..}do", [4, 3, 2, 1, 0, 0]);
test("5{.}{1-.}while", [4, 3, 2, 1, 0, 0]);
test("5{.}{1-.}until", [5]);
test("1 2 3 if", [2]);
test("0 2 {1.} if", [1, 1]);
test("[[1 2 3][4 5 6][7 8 9]]zip", [[[1, 4, 7], [2, 5, 8], [3, 6, 9]]]);
test("[1 1 0] 2 base", [6]);
test("6 2 base", [[1, 1, 0]]);
code-golf
golfscript
Adam Speight
sumber
sumber
"The time is #{Time.now}"
? Bagaimana dengan angka presisi yang berubah-ubah?Jawaban:
Ruby, 5490 byte
Yah, saya bisa golf interpreter GolfScript dari 8283 byte ke 5490 ...
sumber
Javascript, 2227 byte
@ Peter Taylor: Tantangan Diterima!
Catatan: Berisi beberapa karakter kontrol, tidak ada yang di luar ASCII. Berikut adalah link langsung ke file: gs.js . Kode menyediakan fungsi
a
yang mengambil kode Golfscript sebagai parameter tunggal dan mengembalikan tumpukan yang dihasilkan sebagai array, dengan string dan blok diwakili sebagai ASCII.Perbedaan dari penerjemah resmi:
print
(akan mudah untuk ditambahkan)Saya juga telah membuat banyak kasus uji dan menyiapkan formulir kecil untuk menjalankan kode Golfscript: http://copy.sh/golfscript/
Berikut ini beberapa contohnya:
Ini adalah perpustakaan Golfscript standar saya, saran dipersilahkan:
sumber
;[1 2]{+}*
tampaknya berulang selamanya daripada mengevaluasi hampir secara instan ke3
. Semua yang saya coba sejauh ini berhasil. Akan melakukan beberapa pengujian lagi nanti.;[1 2]{+}*
berfungsi untuk saya (juga semua kasus uji lulus), tetapi bug ini mungkin muncul karena keadaan global. Saya mencari di dalamnya ...11:10 10 *
tidak ditampilkan121
sebagaimana mestinya. Juga tampaknya menangani tumpukan kosong secara tidak konsisten:;5 p 4 * p
seharusnya tidak bekerja sama sekali tetapi memberi20
.p
tidak didefinisikan