INTERCAL adalah bahasa yang luar biasa, tetapi tidak selalu mudah untuk memahami kode orang lain. Ini khususnya terjadi jika mereka menggunakan pernyataan COME FROM.
Definisi tantangan
- Tulis program atau fungsi yang mengambil kode sumber program INTERCAL sebagai aliran teks / data. Jika Anda menulis suatu fungsi, disarankan agar Anda juga menyediakan program untuk memanggil fungsi tersebut, tetapi itu tidak akan dihitung dalam skor Anda.
- Output fungsi akan menjadi aliran teks / data dari lompatan yang dibuat oleh program, sesuai dengan instruksi berikut. Outputnya tidak perlu dicetak, tetapi harus berupa teks tunggal, bukan array string (misalnya).
Setiap garis output akan terdiri dari pernyataan yang akan COME FROM dan nomor baris pernyataan COME FROM, dipisahkan oleh a
->
. Sebuah contoh:(310) DO .4 <- .3 -> 55
Anda dapat memangkas baris kode sumber ini, tetapi tidak perlu.
- Kasing uji hanya akan terdiri dari label nonkomputasi (yaitu label integer).
- Output harus diurutkan berdasarkan urutan kode sumber pernyataan yang akan DATANG DARI, bukan label mereka, maupun urutan pernyataan DATANG DARI atau label mereka.
- Dimungkinkan untuk beberapa pernyataan untuk DATANG DARI label yang sama. Dalam kasus seperti itu, nomor baris COME FROM harus diurutkan, dan dipisahkan dengan koma.
- Mungkin untuk pernyataan DATANG DARI itu sendiri.
- Pernyataan COME FROM dapat diawali dengan pernyataan BUKAN. Dalam kasus seperti itu, nomor baris harus dibungkus dengan tanda kurung.
- Kata-kata COME FROM dapat muncul dalam komentar dan harus diabaikan. Anda tidak perlu mem-parsing file sepenuhnya: jika mereka diikuti oleh label (angka dalam tanda kurung) maka Anda dapat menganggap itu adalah pernyataan nyata.
Mencetak gol
Peserta akan dinilai berdasarkan panjang karakter dari program atau fungsi mereka.
Uji kasus
Semua test case ini berasal dari calvinmetcalf / intercal Github repo . Meskipun aplikasi yang bermanfaat akan menerima input apa pun dengan aman, untuk keperluan tantangan ini Anda hanya perlu memperhitungkan lima kasus uji ini.
(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
INTERCAL is a wonderful language
downvoted untuk bahasa ofensif.^(\d+)
mengambil labelnya?Jawaban:
JavaScript, 232 byte
Untuk dipanggil dengan
Penjelasan
sumber