Có vẻ như GolfScript thắng tất cả những thứ này. Vì vậy, bạn không thể đánh bại họ, tham gia với họ.
Viết một thông dịch viên Golfscript tự chứa
Tôi đang sử dụng định nghĩa khép kín có nghĩa là, một chương trình duy nhất: - Vì vậy, không chuyển khóa cho một số chương trình bên ngoài để thực hiện công việc cho bạn.
Các trường hợp thử nghiệm:
Chuỗi và khối được biểu diễn dưới dạng danh sách mã ASCII. Các loại không được kiểm tra với các thử nghiệm này, nhưng dù sao cũng phải đúng.
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]]);
"The time is #{Time.now}"
không? Làm thế nào về số chính xác tùy ý?