INTERCAL es un lenguaje maravilloso, pero no siempre es fácil entender el código de otras personas. Este es particularmente el caso si usan la declaración COME FROM.
Definición de desafío
- Escriba un programa o función que tome el código fuente de un programa INTERCAL como una secuencia de texto / datos. Si escribe una función, se recomienda que también proporcione un programa para llamar a la función, pero no contará para su puntaje.
- La salida de la función será un flujo de texto / datos de los saltos que realiza el programa, de acuerdo con las siguientes instrucciones. La salida no necesita ser impreso, pero sí necesidad de ser un solo texto, no una matriz de cadenas (por ejemplo).
Cada línea de salida consistirá en la instrucción que será COME FROM y el número de línea de su instrucción COME FROM, separados por a
->
. Un ejemplo:(310) DO .4 <- .3 -> 55
Puede recortar estas líneas de código fuente, pero no es necesario.
- Los casos de prueba solo consistirán en etiquetas no calculadas (es decir, etiquetas enteras).
- La salida debe ordenarse por el orden del código fuente de las declaraciones que serán COME FROM, no su etiqueta, ni el orden de las declaraciones COME FROM o sus etiquetas.
- Es posible que varias declaraciones provengan de la misma etiqueta. En tales casos, los números de línea COME FROM deben ser ordenados y separados por comas.
- Es posible que una declaración provenga de sí misma.
- Una declaración COME FROM puede tener como prefijo una declaración NOT. En tales casos, el número de línea debe estar entre corchetes.
- Las palabras VENIDAS pueden aparecer en un comentario y deben ignorarse. No necesita analizar completamente el archivo: si van seguidos de una etiqueta (un número entre paréntesis), puede suponer que es una declaración real.
Puntuación
Los participantes serán calificados por la longitud del personaje de su programa o función.
Casos de prueba
Todos estos casos de prueba provienen del repositorio calvinmetcalf / intercal Github . Aunque cualquier aplicación útil aceptará con seguridad cualquier entrada, para los propósitos de este desafío, solo necesita tener en cuenta estos cinco casos de prueba.
(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
rechazado por lenguaje ofensivo.
^(\d+)
agarra la etiqueta?