INTERCAL è un linguaggio meraviglioso, ma non è sempre facile comprendere il codice di altre persone. Questo è particolarmente vero se usano l'istruzione COME FROM.

Definizione della sfida
- Scrivi un programma o una funzione che prende il codice sorgente di un programma INTERCAL come flusso di testo / dati. Se si scrive una funzione, si consiglia di fornire anche un programma per chiamare la funzione, ma non verrà conteggiato ai fini del punteggio.
- L'output della funzione sarà un flusso di testo / dati dei salti eseguiti dal programma, secondo le seguenti istruzioni. L'output non deve essere stampato, ma deve essere un singolo testo, non una matrice di stringhe (ad esempio).
Ogni riga di output sarà costituita dall'istruzione che verrà COME DA e dal numero di riga della sua istruzione COME DA, separati da una
->. Un esempio:(310) DO .4 <- .3 -> 55Puoi tagliare queste righe di codice sorgente, ma non è necessario.
- I casi di test saranno costituiti solo da etichette non calcolate (ovvero, etichette intere).
- L'output deve essere ordinato in base all'ordine del codice sorgente delle istruzioni che verranno COME FROM, non alla loro etichetta, né all'ordine delle istruzioni COME FROM o delle loro etichette.
- È possibile che più istruzioni provengano dalla stessa etichetta. In tali casi, i numeri di riga COME FROM devono essere ordinati e separati da virgole.
- È possibile che un'affermazione venga DALLA stessa.
- Un'istruzione COME FROM può essere preceduta da un'istruzione NOT. In tali casi il numero di riga deve essere racchiuso tra parentesi quadre.
- Le parole COME FROM possono apparire in un commento e devono essere ignorate. Non è necessario analizzare completamente il file: se sono seguiti da un'etichetta (un numero tra parentesi), si può presumere che sia un'affermazione reale.
punteggio
Ai partecipanti verrà assegnato un punteggio in base alla lunghezza dei caratteri del loro programma o funzione.
Casi test
Questi casi di test provengono tutti dal repo Github calvinmetcalf / intercal . Sebbene qualsiasi applicazione utile accetti in modo sicuro qualsiasi input, ai fini di questa sfida è necessario tenere conto solo di questi cinque casi di 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 languagedeclassato per linguaggio offensivo.
^(\d+)afferra l'etichetta?