INTERCAL là một ngôn ngữ tuyệt vời, nhưng không phải lúc nào cũng dễ hiểu mã của người khác. Điều này đặc biệt đúng với trường hợp họ sử dụng câu lệnh COME TỪ.
Định nghĩa thách thức
- Viết chương trình hoặc hàm lấy mã nguồn của chương trình INTERCAL làm luồng văn bản / dữ liệu. Nếu bạn viết một hàm, bạn cũng nên cung cấp một chương trình để gọi hàm đó, nhưng nó sẽ không được tính vào điểm số của bạn.
- Đầu ra chức năng sẽ là một luồng văn bản / dữ liệu của các bước nhảy mà chương trình thực hiện, theo các hướng dẫn sau đây. Đầu ra không cần phải được in, nhưng nó cần phải là một văn bản, không phải là một chuỗi các chuỗi (ví dụ).
Mỗi dòng đầu ra sẽ bao gồm câu lệnh sẽ COME TỪ và số dòng của câu lệnh COME TỪ của nó, cách nhau bởi a
->
. Một ví dụ:(310) DO .4 <- .3 -> 55
Bạn có thể cắt các dòng mã nguồn này, nhưng không cần thiết.
- Các trường hợp thử nghiệm sẽ chỉ bao gồm các nhãn không được tính toán (nghĩa là nhãn số nguyên).
- Đầu ra phải được sắp xếp theo thứ tự mã nguồn của các câu lệnh sẽ COME TỪ, không phải nhãn của chúng, cũng như thứ tự của các câu lệnh COME TỪ hoặc nhãn của chúng.
- Có thể cho nhiều câu lệnh COME TỪ cùng một nhãn. Trong những trường hợp như vậy, các số dòng COME TỪ phải được sắp xếp và phân tách bằng dấu phẩy.
- Có thể cho một tuyên bố để COME TỪ chính nó.
- Câu lệnh COME TỪ có thể được bắt đầu bằng câu lệnh KHÔNG. Trong những trường hợp như vậy, số dòng phải được bọc trong dấu ngoặc vuông.
- Các từ COME TỪ có thể xuất hiện trong một bình luận và phải được bỏ qua. Bạn không cần phải phân tích cú pháp đầy đủ tệp: nếu chúng được theo sau bởi một nhãn (một số trong ngoặc đơn) thì bạn có thể cho rằng đó là một tuyên bố thực sự.
Chấm điểm
Những người tham gia sẽ được ghi điểm bởi độ dài ký tự của chương trình hoặc chức năng của họ.
Các trường hợp thử nghiệm
Những trường hợp thử nghiệm này đều đến từ repo Github calvinmetcalf / intercal . Mặc dù bất kỳ ứng dụng hữu ích nào cũng sẽ chấp nhận một cách an toàn bất kỳ đầu vào nào, vì mục đích của thử thách này, bạn chỉ cần tính đến năm trường hợp thử nghiệm này.
(10) PLEASE DON'T GIVE UP -> 87
(33) DON'T GIVE UP -> 92
(15) DO (13) NEXT -> 26
(16) DO .12 <- .1 -> 6
(23) DO (21) NEXT -> 3
(7202) DO RETRIEVE .203+,202 -> 75
(4202) DO ,202SUB.201.202#7 <- ,201SUB.201.202#7 -> 108
(6202) DO ,201SUB.201.202#7 <- ,202SUB.201.202#7 -> 117
(4203) DO READ OUT ,201SUB.201.202#7 -> 133
(4302) DO .302 <- .2 -> 181
(5410) DO ,400SUB#124 <- #4 $ #17 -> 293
(3410) PLEASE (4410) NEXT -> 288
(5402) DO (412) NEXT -> 328
(4412) PLEASE (3412) NEXT -> 334
(3423) DO FORGET #2 -> 375
(4404) DO RETRIEVE .311+.312 -> 411
(5404) PLEASE DO (414) NEXT -> 430
(4434) DO FORGET #1 -> 441
(3454) DO (103) NEXT -> 451
(5502) DO .512 <- .312 -> 520
(8503) PLEASE RETRIEVE .311+.312 -> 621
(7503) DO (302) NEXT -> 515
(3622) DO (302) NEXT -> 514
(603) PLEASE FORGET #2 -> 622
(10) DO NOTHING -> 5, 11
(20) PLEASE (100) NEXT -> 6
(30) PLEASE (200) NEXT -> 12
(103) DO (104) NEXT -> 27
(104) DO (105) NEXT -> 19
(1) DO (2) NEXT -> 36
(2) DO (105) NEXT -> 194
(202) DO NOT .2 <- #2 AGAIN -> [196]
(203) DO (204) NEXT -> 167
(204) DO (205) NEXT -> 159
(8201) DO NOTHING -> 165, 271
(8202) PLEASE NOTE Fork threads, one dormant, one alive -> 53, 58
(8211) DO COME FROM (8211) -> 60
(8216) DO NOTHING -> 71
(8215) DO NOTHING -> 68
(8217) DO COME FROM (8217) AGAIN -> 118
(8299) DO COME FROM (8299) AGAIN -> 141
(8274) DO (8273) NEXT ONCE -> 158
(8259) PLEASE DO NOTHING -> 166
(8276) DO COME FROM (8276) AGAIN -> 199
(8278) PLEASE DO COME FROM (8278) AGAIN -> 237
2
Nó gây trở ngại cho tôi rằng chưa có ai tham khảo Cotton Eyed Joe :-).
—
mınxomaτ
INTERCAL is a wonderful language
hạ cấp cho ngôn ngữ gây khó chịu.
Bạn có chắc chắn muốn ghi điểm theo chiều dài nhân vật? Các thách thức thường được ghi bằng độ dài byte ở đây.
—
Gây tử vong vào
@Firthize Tôi nghĩ về cả hai cách. Những lợi thế chung của việc ghi điểm nhân vật như mã hóa số lượng lớn như các ký tự unicode có thể sẽ không hữu ích, nhưng tôi nghĩ rằng nếu ai đó có thể tận dụng việc ghi điểm tôi sẽ quan tâm để xem họ có thể làm gì.
—
tò mò
Chúng ta có thể cho rằng nhãn ở đầu một dòng không? Như vậy mà
—
orlp
^(\d+)
lấy nhãn?