Існує стара історія про каменяря, який ніколи не був задоволений тим, чим він був. Він побажав, що він може стати сонцем, і таким він був. Закритий хмарами, він побажав бути - і став - хмарою. Коли подував вітер, він побажав собі бути вітром. Зупинившись біля гори, він побажав бути горою, і таким чином став одним. Однак незабаром його зламали каменюком і побажали стати каменщиком.
Аналогічно, ваше завдання - написати програму, яка ніколи не задовольняється мовою, якою вона є. Ваша програма повинна вивести набір замінників регулярних виразів, щоб перетворити її на іншу мову. І так далі.
Правила
- Напишіть програму на обрану вами мову.
- Програма повинна вивести серію щонайменше з двох сегментів. Відрізок - це згусток тексту, розділений крапками з комою. Однак якщо крапка з комою міститься в регулярному виразі, таким чином, що її розбиття призведе до недійсного синтаксису, він не відокремлює сегменти. Дивіться приклад.
- Перший сегмент - це шаблон для регулярного вираження, а другий сегмент - шаблон заміни. Третій - це ще один шаблон «знайти», а четвертий - «замінити», і так далі.
- Застосувати схеми регулярних виразів до програми. Замініть візерунок на першому сегменті на один на другий; замініть третій візерунок на той, на четвертий, тощо.
- Результатом має стати програма іншою мовою, яка сама по собі відповідає правилам 2 - 4.
- Використовувані мови повинні утворювати нескінченний цикл, що повторюється.
- Наприклад, Python -> PHP -> C ++ -> Python -> PHP -> C ++ -> Python -> ...
- Ваш бал - це період циклу. Краватки розбиваються на найкоротшу початкову довжину коду.
- У наведеному вище прикладі оцінка три.
- У кожній ітерації циклу жодна мова не може використовуватися більше одного разу.
- Для правил 5 і 7 сумісні мови (C і C ++) і різні версії однієї мови (Python 2 і Python 3) вважаються однаковими.
- Самі програми повторювати не потрібно.
- У наведеному вище прикладі перша і четверта програми можуть бути різними.
- Будь-яка версія регулярного виразу є прийнятною, але однакова повинна бути використана для всіх програм.
- Загальний вихід для кожної програми не може перевищувати 100 символів.
- Кожен вихід повинен містити інструкції щодо фактичної зміни програми. Тобто, жодні дві програми поспіль у циклі можуть бути однаковими.
Приклад
Python -> Ruby -> Python -> ...
print "uts;Z;rint;uts;Z(?=;Z);rint"
Виходи:
uts;Z;rint;uts;Z(?=;Z);rint
Сегменти:
FIND ; REPLACE
uts ; Z
rint ; uts
Z(?=;Z ; rint (breaking the first segment in two would result in invalid syntax)
Застосовуючи заміни регулярного вираження, ми отримуємо:
print "Z;Z;rint;Z;Z(?=;Z);rint" # replace each "uts" with "Z"
puts "Z;Z;uts;Z;Z(?=;Z);uts" # replace each "rint" with "uts"
puts "rint;Z;uts;rint;Z(?=;Z);uts" # replace each "Z" followed by ";Z" with "rint"
Запуск останнього рядка дає нам вказівки повернути це назад у код Python.
\;
;)