INTERCAL - замечательный язык, но не всегда легко понять код других людей. Это особенно верно, если они используют оператор COME FROM.
Определение проблемы
- Напишите программу или функцию, которая использует исходный код программы INTERCAL в качестве потока текста / данных. Если вы пишете функцию, рекомендуется также предоставить программу для вызова функции, но она не будет учитываться при подсчете очков.
- Вывод функции будет потоком текста / данных о переходах, которые делает программа, в соответствии со следующими инструкциями. Вывод не должен быть напечатан, но это должен быть один текст, а не массив строк (например).
Каждая строка вывода будет состоять из оператора COME FROM и номера строки его оператора COME FROM, разделенных символом
->
. Пример:(310) DO .4 <- .3 -> 55
Вы можете обрезать эти строки исходного кода, но это не обязательно.
- Тестовые случаи будут состоять только из невычисленных меток (т. Е. Целочисленных меток).
- Вывод должен быть отсортирован по порядку исходного кода операторов, которые будут COME FROM, а не по их меткам, ни по порядку операторов COME FROM, ни по их меткам.
- Возможно, что несколько операторов ПРИХОДЯТ ОТ одной и той же метки. В таких случаях номера строк COME FROM должны быть отсортированы и разделены запятыми.
- Возможно утверждение, чтобы прийти от самого себя.
- Оператору COME FROM может предшествовать оператор NOT. В таких случаях номер строки должен быть заключен в квадратные скобки.
- Слова COME FROM могут появляться в комментарии и должны игнорироваться. Вам не нужно полностью разбирать файл: если за ним следует метка (число в скобках), то вы можете предположить, что это реальное утверждение.
счет
Участники будут оцениваться по длине символа их программы или функции.
Контрольные примеры
Все эти тесты взяты из 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
Меня сбивает с толку тот факт, что никто еще не упомянул Джона Коттон Глаза :-).
—
minxomaτ
INTERCAL is a wonderful language
понижен за оскорбительные выражения.
Вы уверены, что хотите набрать длину символов? Проблемы обычно оцениваются по длине в байтах.
—
Роковой
@Fatalize Я думал об этом в обоих направлениях. Общие преимущества оценки символов, такие как кодирование больших чисел в виде символов Юникода, вероятно, не будут полезны, но я подумал, что если кто-то сможет воспользоваться преимуществами оценки, мне будет интересно посмотреть, что они могут сделать.
—
curiousdannii
Можем ли мы предположить, что метка находится в начале строки? Такой, что
—
2015 года
^(\d+)
хватит ярлык?