INTERCAL ist eine wunderbare Sprache, aber es ist nicht immer einfach, den Code anderer Leute zu verstehen. Dies ist insbesondere dann der Fall, wenn sie die Anweisung COME FROM verwenden.
Herausforderungsdefinition
- Schreiben Sie ein Programm oder eine Funktion , die den Quellcode eines INTERCAL-Programms als Text- / Datenstrom verwendet. Wenn Sie eine Funktion schreiben, wird empfohlen, dass Sie auch ein Programm zum Aufrufen der Funktion bereitstellen, das jedoch nicht für Ihre Punktzahl angerechnet wird.
- Die Funktionsausgabe ist ein Text- / Datenstrom der Sprünge, die das Programm gemäß den folgenden Anweisungen ausführt. Die Ausgabe muss nicht gedruckt werden, sondern muss ein einzelner Text sein, kein Array von Zeichenfolgen (zum Beispiel).
Jede Ausgabezeile besteht aus der Anweisung COME FROM und der Zeilennummer der Anweisung COME FROM, die durch a getrennt ist
->
. Ein Beispiel:(310) DO .4 <- .3 -> 55
Sie können diese Quellcodezeilen kürzen, dies ist jedoch nicht erforderlich.
- Die Testfälle bestehen nur aus nicht berechneten Beschriftungen (dh ganzzahligen Beschriftungen).
- Die Ausgabe muss nach der Quellcodereihenfolge der Anweisungen sortiert werden, die COME FROM sein sollen, nicht nach ihrer Bezeichnung oder der Reihenfolge der COME FROM-Anweisungen oder ihrer Bezeichnungen.
- Es ist möglich, dass mehrere Anweisungen von derselben Bezeichnung kommen. In solchen Fällen müssen die Zeilennummern von COME FROM sortiert und durch Kommas getrennt werden.
- Es ist möglich, dass eine Anweisung von selbst kommt.
- Einer COME FROM-Anweisung kann eine NOT-Anweisung vorangestellt werden. In solchen Fällen muss die Zeilennummer in eckige Klammern gesetzt werden.
- Die Wörter COME FROM können in einem Kommentar erscheinen und müssen ignoriert werden. Sie müssen die Datei nicht vollständig analysieren: Wenn auf sie eine Beschriftung (eine Zahl in Klammern) folgt, können Sie davon ausgehen, dass es sich um eine echte Aussage handelt.
Wertung
Die Teilnehmer werden nach der Charakterlänge ihres Programms oder ihrer Funktion bewertet .
Testfälle
Diese Testfälle stammen alle aus dem Calvinmetcalf / Intercal Github Repo . Obwohl jede nützliche Anwendung jede Eingabe sicher akzeptiert, müssen Sie für die Zwecke dieser Herausforderung nur diese fünf Testfälle berücksichtigen.
(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
für beleidigende Sprache herabgestimmt.^(\d+)
das Etikett packt?Antworten:
JavaScript, 232 Bytes
Mit angerufen werden
Erläuterung
quelle