INTERCAL是一种很棒的语言,但是要理解他人的代码并不总是那么容易。如果他们使用COME FROM语句,则尤其如此。
挑战定义
- 编写一个程序或函数,以INTERCAL程序的源代码作为文本/数据流。如果编写函数,建议您还提供一个程序来调用该函数,但它不会计入您的分数。
- 根据以下说明,函数输出将是程序进行的跳转的文本/数据流。输出不需要打印,但确实需要是单个文本,而不是字符串数组(例如)。
输出的每一行都将包含将为COME FROM的语句及其COME FROM语句的行号,并以分隔
->
。一个例子:(310) DO .4 <- .3 -> 55
您可以修剪这些行的源代码,但这不是必须的。
- 测试用例将仅由未计算的标签(即整数标签)组成。
- 输出必须按照将是COME FROM的语句的源代码顺序(而不是其标签)或COME FROM语句或其标签的顺序进行排序。
- 多个语句可能来自同一标签。在这种情况下,必须对COME FROM行号进行排序,并用逗号分隔。
- 有可能使用COME FROM语句本身。
- COME FROM语句可以以NOT语句为前缀。在这种情况下,行号必须用方括号括起来。
- 单词COME FROM可以出现在注释中,必须忽略。您不需要完全解析文件:如果在文件后跟标签(括号中的数字),则可以认为它是一个真实的语句。
计分
参赛者将通过其程序或功能的字符长度进行评分。
测试用例
这些测试用例全部来自calvinmetcalf / intercal Github存储库。尽管任何有用的应用程序都可以安全地接受任何输入,但是出于此挑战的目的,您只需要考虑这五个测试用例。
(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
令我感到困惑的是,还没有人提到棉眼乔 :-)。
—
mınxomaτ
INTERCAL is a wonderful language
因冒犯性语言而被低估。
您确定要按字符长度得分吗?挑战通常在此处按字节长度计分。
—
致命
@Fatalize我双向考虑过。字符计分的共同优点(例如将大量数字编码为Unicode字符)可能不会有用,但是我认为,如果有人可以利用计分,我很想知道他们可以做什么。
—
curiousdannii 2015年
我们可以假设标签在一行的开头吗?这样
—
orlp 2015年
^(\d+)
抢标签吗?