Эта задача является продолжением « Гольф взаимного квайна ».
Используя три языка на ваш выбор, создайте программу Ouroboros третьего порядка .
То есть на языке A напишите программу pA, которая выводит программу pB на языке B. Программа pB должна выводить программу pC на языке C, которая, в свою очередь, выводит исходную программу pA на языке A.
Никакие два языка в A, B и C не могут быть одинаковыми или подмножествами или надмножествами друг друга. Ни один из pA, pB или pC не может быть идентичным.
Например, программа на Haskell выводит Perl-программу, которая выводит Java-программу, которая выводит исходную программу на Haskell, будет действительной.
С другой стороны, программа C # 4, которая выводит программу C # 3, которая выводит программу C # 2, недействительна. Даже комбинация Perl -> Ruby -> Bash была бы недействительной, если бы, скажем, программа Perl и программа Ruby были идентичны.
Это код гольф, поэтому выигрывает самая короткая программа ПА.
Ответы:
Python -> Perl -> Ruby, 48 символов
Адаптация моего предыдущего ответа . Бег
с Python генерирует этот фрагмент Perl
который генерирует следующий код Ruby
который затем печатает оригинальный фрагмент Python:
источник
Perl -> PHP -> HTML + JavaScript, 105 символов
Я хотел сделать цепочку языков как-то осмысленной, поэтому я решил написать PHP-скрипт, который генерирует HTML-страницу, содержащую JavaScript. Для третьего языка я выбрал Perl, просто потому что мне нравится Perl. :)
Некоторые могут рассмотреть эти четыре языка, но я не считаю HTML отдельно от JavaScript - это язык разметки, а не язык программирования. Во всяком случае, вот три версии:
Perl (105 символов):
PHP (165 символов):
HTML + JavaScript (235 символов):
(PS. Да, я знаю, что я мог бы сделать шаг PHP практически пустяком, например, просто сгенерировать код HTML + JS на Perl и добавить
<?php
к нему, но это было слишком похоже на читерство. В этом решении код на самом деле обрабатывается в PHP, а не просто дословно копируется.)источник
Недогрузка → sed → Perl, 23 байта
Вероятно, можно снизить это с лучшим выбором языков. Возможно, неконкурентоспособен, потому что правило «программы sed может принимать пустую строку в качестве аргумента» датирует конкурс.
Программа недогрузки:
генерирует программу sed:
который генерирует программу Perl:
(примечание: здесь есть два завершающих символа новой строки), которые снова генерируют исходную программу Underload:
Основная цель здесь - найти языки, в которых строки могут быть вложенными (то есть вы можете просто заключить строку в кавычки, заключив ее в разделители, вместо того, чтобы избегать ее); Недостаточная загрузка есть у
()
Perlq()
, а в sed строка продолжается до пробела (что неявно вкладывается, если в программе нет пробела). Вероятно, есть язык esolang или игра в гольф с инструкцией «напечатать остальную часть текущей строки, а не с последующими строками», которая была бы идеальной здесь, но я не тратил столько времени на ее поиск; в этом случае вы можете сэкономить 8 байтов минус длина инструкции. (Желе почти работает, но его“
инструкция сама по себе не цитируется. Кроме того, она откладывает вызов.)Вы можете уменьшить это до 22 байтов следующим образом:
(с одним последним символом новой строки, как обычный текстовый файл, а не с нулем, которое вы обычно получаете в гольфе). Тем не менее, для этого требуется интерпретатор недогрузки, который нормально работает с переводом новой строки как с запретом. Попробуй онлайн!, Но я думаю, что это уже позади.
источник