INTERCAL est un langage merveilleux, mais il n'est pas toujours facile de comprendre le code des autres. C'est particulièrement le cas s'ils utilisent l'instruction COME FROM.
Définition du défi
- Écrivez un programme ou une fonction qui prend le code source d'un programme INTERCAL comme un flux de texte / données. Si vous écrivez une fonction, il est recommandé de fournir également un programme pour appeler la fonction, mais cela ne comptera pas dans votre score.
- La sortie de la fonction sera un flux de texte / données des sauts effectués par le programme, selon les instructions suivantes. La sortie n'a pas besoin d'être imprimée, mais elle doit être un texte unique, pas un tableau de chaînes (par exemple).
Chaque ligne de sortie comprendra l'instruction qui sera COME FROM et le numéro de ligne de son instruction COME FROM, séparés par un
->
. Un exemple:(310) DO .4 <- .3 -> 55
Vous pouvez couper ces lignes de code source, mais ce n'est pas nécessaire.
- Les cas de test seront uniquement constitués d' étiquettes non calculées (c'est-à-dire d'étiquettes entières).
- La sortie doit être triée par l'ordre du code source des instructions qui seront COME FROM, pas par leur étiquette, ni par l'ordre des instructions COME FROM ou leurs étiquettes.
- Il est possible que plusieurs instructions proviennent de la même étiquette. Dans de tels cas, les numéros de ligne COME FROM doivent être triés et séparés par des virgules.
- Il est possible qu'une instruction vienne de elle-même.
- Une instruction COME FROM peut être précédée d'une instruction NOT. Dans ce cas, le numéro de ligne doit être placé entre crochets.
- Les mots COME FROM peuvent apparaître dans un commentaire et doivent être ignorés. Vous n'avez pas besoin d'analyser complètement le fichier: s'ils sont suivis d'une étiquette (un nombre entre parenthèses), vous pouvez supposer qu'il s'agit d'une véritable déclaration.
Notation
Les participants seront notés par la longueur des caractères de leur programme ou fonction.
Cas de test
Ces cas de test proviennent tous du dépôt calvinmetcalf / intercal Github . Bien que toute application utile accepte en toute sécurité toute entrée, pour les besoins de ce défi, vous devez uniquement tenir compte de ces cinq cas de test.
(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 pour un langage offensant.
^(\d+)
saisit l'étiquette?