^"
>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p:1: error: declaration expected
Попробуйте онлайн !: 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 значения, которым мы противодействуем с инструкциями a p
и $
(pop и discard). Затем выполняется некоторая арифметика, чтобы подтолкнуть ASCII-коды, ^"\n>#001p#"
и, наконец, цикл выводит все значения в стеке в виде символов, пока не найдет символ NUL и не завершится.