Ваша задача проста: написать программу, которая может быть запущена на двух языках. Это должен быть обычный quine (печатает свой собственный исходный код) на языке 1, и должен быть quine ошибок (генерирующий сообщение об ошибке, идентичное его собственному исходному коду) на языке 2.
Это код-гольф , поэтому выигрывает самое короткое действительное представление (в байтах).
Правила:
- Языки могут быть произвольно похожи. Суперсеты / похожие версии / похожие диалекты не запрещены.
- Правила ошибки Quine те же, что и в статье «Сделать ошибку Quine!». ,
code-golf
quine
polyglot
error-message
Esolanging Fruit
источник
источник
Ответы:
Befunge-93 (FBBI) / C (tcc) , 93 + 62 = 155 байт
Попробуйте онлайн !: Befunge-93 , C
Спасибо randomdude999 за то, что для работы с именем файла требуются соответствующие кавычки.
Должен быть сохранен под именем файла
^"\n>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p
, где\n
находится новая строка. Из-за этого TIO для C работает не совсем так, как предполагалось. Проверено на работу на Lubuntu.Объяснение (С):
Программа не может скомпилироваться, и tcc с удовольствием выдает имя файла как часть сообщения об ошибке. Есть несколько ошибок компиляции, которые вы можете получить, основываясь на начале кода.
^
в начале дает намdeclaration expected
, который является коротким и не содержит никаких проблемных символов, таких как"
. С другой стороны, разработчики gcc и clang очень пессимистичны и решили выводить сразу несколько ошибок, что не очень хорошо, поэтому мы не используем их компиляторы.Пояснение (Befunge-93):
Befunge удобен для quines тем, что его код также можно использовать в качестве символьных данных благодаря
"
команде, которая переключает строковый режим. Вначале мы выполняем некоторые бесполезные операции со стеком, а затем выдаемp
(команда put), которая помещает символ NUL в (0, 1). Затем мы отражаем указатель инструкции слева и начинаем читать все как строку. Это должно быть сделано слева, из-за природы LIFO стека. После оборачивания и достижения"
символа снова, строка заканчивается. Обратите внимание, что символ NUL заменил$
символ, создавая разделитель в середине строки. Затем мы помещаем 3 числа в стек и перепрыгиваем через NUL (потому что он, к сожалению, вешает интерпретатор при запуске в качестве инструкции). Статическая часть сообщения об ошибке должна быть выполнена здесь. Большинство ее символов - no-ops, ноp
команда использует три аргумента (следовательно, поэтому мы выдвинули 3 числа, в противном случае часть строки была бы здесь съедена), а символы:
&1
помещают в стек всего 4 значения, которым мы противодействуем с инструкциями ap
и$
(pop и discard). Затем выполняется некоторая арифметика, чтобы подтолкнуть ASCII-коды,^"\n>#001p#"
и, наконец, цикл выводит все значения в стеке в виде символов, пока не найдет символ NUL и не завершится.источник
/
. Я не могу проверить это прямо сейчас.<define>:1: error: missing terminating " character
.Applesoft BASIC / Commodore LCD BASIC , 13 байтов
В эмуляторе Apple] [нажмите RESETклавишу, чтобы войти в основной режим.
В ЖК-эмуляторе Commodore нажмите, RightArrowEnterчтобы войти в приложение BASIC.
В обоих случаях не вводите
?SYNTAX ERROR
все заглавные буквы, потому что они автоматически пишутся с заглавной буквы.источник