Как часть его ответа, чтобы сделать ошибку Quine! @Falko предложил следующий алгоритм:
Как создать собственное решение за 2 минуты?
- Откройте новый файл в IDE по вашему выбору.
- Ударь голову по клавиатуре перед собой.
- Compile.
- Замените код сообщением об ошибке компилятора.
- Повторите шаги 3 и 4, пока код не сходится.
Держу пари, что в большинстве случаев такая процедура заканчивается довольно быстро!
задача
Ваша задача - доказать, что он неправ.
Напишите полную программу, которая удовлетворяет следующему:
При компиляции или интерпретации он выдает сообщение об ошибке, которое при компиляции или интерпретации по очереди также приводит к сообщению об ошибке.
Повторяя шаг 1 снова и снова, вы в конечном итоге встретите фиксированную точку, т. Е. Ошибку quine.
Дополнительные правила
Последнее сообщение об ошибке должно иметь положительную длину. Однако предыдущие сообщения об ошибках и исходный код могут быть пустыми.
Длина исходного исходного кода не должна превышать 1024 байта.
Ни исходный код, ни код, сгенерированный на любом из этапов, не могут привести к выводу без ошибок.
Вывод должен быть четко идентифицирован как сообщение об ошибке, которое должно быть сгенерировано компилятором / интерпретатором из-за синтаксической ошибки, ошибки времени выполнения, неопределенной ссылки и т. Д.
Ваша программа может не получать никаких входных данных или требовать каких-либо флагов для создания цикла.
Ваша программа может полагаться на конкретную реализацию своего языка или его версии.
счет
Ваша оценка - это конечное число шагов, которые требует ваш исходный код перед созданием ошибки quine. Представление с самым высоким счетом выигрывает.
Длина исходного исходного кода будет использоваться в качестве разрыва связи. Чем короче, тем лучше.
пример
In Chicken , программа
генерирует следующее сообщение об ошибке:
TypeError: Cannot read property 'NaN' of undefined
Если это сообщение об ошибке, в свою очередь, интерпретируется, оно выдает сообщение об ошибке
Error on line 1: expected 'chicken'
который, если интерпретировать в свою очередь, производит сам.
Таким образом, оценка пустой программы Chicken равна 2.
Контрпример
Код PHP
ab<?=c
генерирует сообщение об ошибке
PHP Parse error: syntax error, unexpected '?' in Command line code on line 1
который производит себя, когда интерпретируется.
Однако второй исходный код печатает сообщение в STDOUT, делая эту последовательность недействительной.
Segmentation fault (core dumped)
.Ответы:
Баш, 9223372036854775810
Вдохновленный ответом Doorknob.
Его следует запускать
bash < file.sh
или использовать одно и то же имя файла для каждой программы, чтобы избавиться от разных имен файлов в сообщениях об ошибках.Первые несколько ошибок (с
LANG=C
):И наконец:
что является ошибкой
источник
bc
или пишу свой собственный код для декремента.Пип 0.15.05.29 , более 10 000
Технически не действителен, потому что требуется
-w
флаг для вывода предупреждения. При этом Pip by design не отображает никаких ошибок во время выполнения, если они не приводят к аварийному завершению программы (например, бесконечная рекурсия); проблемы с этим кодом - вещи, на которые определенно будут жаловаться другие языки.Точное количество шагов зависит только от назначенного значения
i
, поэтому оно может быть сколь угодно большим (до тех пор, пока интерпретатору Python не хватит памяти). Кроме того, для завершения вышеуказанной последовательности потребуется больше времени, чем возраст вселенной. (Вопрос же указать «медленный»!)Объяснение:
Потребовалось немного прочесать интерпретатор, прежде чем я обнаружил ошибку, которая позволила бы мне вставить произвольный код в предупреждение. После этого он существенно изменил стандартные приемы квайна. Пример здесь использует
i
-значение5
для целей объяснения.После настройки
i
сохраните строкуd
и затем попытайтесь выполнитьS
оператор wap. Своп ожидает две переменные (точнее, lvalues).s
хорошо, но второе выражениеi?dRo--iRsRPda
. Еслиi
это правда (ненулевое, для наших целей), троичное вычисляется какdRo--iRsRPd
, которое используетd
более раннее, чтобы сформировать почти quine - только сi
уменьшенным. Это выражение не является lvalue, поэтому Пип жалуется:... который затем начинает все заново. (
Attempting to swap non-lvalue
это набор операций, которые не выполняются:At
вычисляется значение ASCIIt = 10
,n-l
вычитается новая строка минус каждое значение пустого списка, а все строчные буквы являются просто переменными.)Процесс продолжается таким же образом, вплоть до:
Когда это выполняется,
i
теперь ложно. Тернарное выражение оценивает ветвь elsea
- которая является lvalue. Таким образом, своп больше не жалуется. Вместо этого мы получаем:И после выполнения этого, наконец, мы имеем фактическую синтаксическую ошибку:
... с этого момента, так как «программа» начинается с
R
, Пип продолжит жаловаться, чтоR
не является унарным оператором навсегда.Лучшее решение, которое не использует,
-w
имеет длину 3:источник
-w
считается языком программирования в соответствии с мета-консенсусомЮлия, 3
Простой, просто чтобы получить мяч катится ...
Начальная программа:
Ошибка 1:
Это не может быть определено, но если это испанский , это также неожиданно. Никто не ожидает испанской инквизиции.
Ошибка 2:
Ошибка 3:
Третье сообщение об ошибке при отправке в виде программы приводит к той же ошибке, следовательно, оценка 3.
Работа в процессе! Конечно, я могу сделать лучше, чем 3.
источник
R, 5
Начальная программа:
Ошибка 1:
Ошибка 2:
Ошибка 3:
Ошибка 4:
Ошибка 5 (Quine):
источник
Баш, 3
Очень рудиментарный скрипт для его проверки:
источник
stdout
. Если естьstdout
иstderr
, это не будет работать должным образом.Руби, 5
Начальная программа
1
2
3
4
5 (Куайн)
источник
Ява, 5
Они очень длинные ... поэтому я проверил равенство строк с помощью скрипта Python и сгенерировал этот отформатированный пост, поэтому мне не пришлось бы вручную вставлять вкладки на 400 строк.
Начальная программа
1
2
3
4
5 (Quine) - опущено из-за длины сообщения.
источник
javac -version
)?Javascript, 3 уровня ошибок
Это не то, что «колун» или что-то в этом роде, но я нашел это довольно странным ...
Ошибка 0 (оригинал):
Ошибка 1:
Ошибка 2:
Ошибка 3 (quine):
Все это было возвращено в Internet Explorer 11.0.9600.17416, поскольку ошибки были переведены на английский язык.
Снимок экрана:
* Сообщения об ошибках отображаются на португальском языке и могут быть легко переведены на английский
источник
JS в Firefox 66.0; 3 уровня ошибок
Входные данные:
6?4;
Ошибка № 1 = Вход № 2:
missing : in conditional expression
Ошибка № 2 = Вход № 3:
expected expression, got keyword 'in'
Ошибка № 3 = Вход № 4 = Ошибка № 4:
unexpected token: identifier
Это самое высокое, что я получил.
источник