INTERCAL - чудова мова, але зрозуміти код інших людей не завжди легко. Особливо це стосується випадків, коли вони використовують оператор COME FROM.

Визначення виклику
- Напишіть програму або функцію, яка приймає вихідний код програми INTERCAL як текст / потік даних. Якщо ви пишете функцію, рекомендується також надати програму для виклику функції, але вона не враховуватиме ваш рахунок.
- Виведенням функції буде текстовий / інформаційний потік стрибків, які робить програма відповідно до наступних інструкцій. Виведення не потрібно друкувати, але це повинен бути один текст, а не масив рядків (наприклад).
Кожен рядок виводу буде складатися з оператора, який буде COME FROM та номера рядка його оператора COME FROM, розділеного a
->. Приклад:(310) DO .4 <- .3 -> 55Ви можете обрізати ці рядки вихідного коду, але це не обов'язково.
- Тестові випадки будуть складатися лише з не обчислених міток (тобто цілих міток).
- Вихід повинен бути відсортований за порядком вихідного коду висловлювань, які будуть ПРИЙДІТЬСЯ, а не їх міткою, а також порядком операторів COME FROM або їх міток.
- З однієї мітки МОЖЛИВО отримати кілька заяв. У таких випадках номери рядків ПРИЙДІТЬСЯ повинні бути відсортовані та розділені комами.
- Можливо, заява ПОВІДКЛЮЄТЬСЯ сам.
- Оператор COME FROM може бути префіксом оператора NOT. У таких випадках номер рядка повинен бути загорнутий у квадратні дужки.
- Слова ДОСЛІДЖУЮТЬСЯ в коментарі та їх слід ігнорувати. Вам не потрібно повністю розбирати файл: якщо за ними дотримується мітка (число в дужках), ви можете припустити, що це справжнє твердження.
Оцінка балів
Вступники оцінюватимуться за довжиною символів програми чи функції.
Тестові справи
Усі ці тестові випадки походять від calvinmetcalf / intercal Github repo . Хоча будь-яка корисна програма буде безпечно приймати будь-яку інформацію, для цілей цього виклику вам потрібно лише врахувати ці п’ять тестових випадків.
(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
Мене бентежить те, що ще ніхто не робив посилання на Cotton Eyed Joe :-).
—
mınxomaτ
INTERCAL is a wonderful languageприхильний до образливої мови.
Ви впевнені, що хочете оцінити за довжиною символів? Тут виклики зазвичай оцінюються за довжиною байтів.
—
Фаталізувати
@Fatalize Я думав про це обома способами. Загальні переваги підрахунку символів, такі як кодування великої кількості як символів Unicode, ймовірно, не будуть корисними, але я подумав, що якщо хтось може скористатись скорингом, мені буде цікаво подивитися, що вони можуть зробити.
—
цікаводанні
Чи можна припустити, що мітка знаходиться на початку рядка? Такий, що
—
orlp
^(\d+)хапає етикетку?