(Вдохновлен этим комментарием на старый вопрос.)
Фон
Куайн ошибки (также известный как «Kimian Куайны») представляет собой программу , которая при компиляции или запуска, вызывает компилятор / интерпретатор / среда для вывода сообщения об ошибке , которое имеет идентичный текст самой программы, и ничего больше. Для целей этой задачи мы широко определяем «ошибку», чтобы включить и предупреждения.
задача
В этом вызове мы ищем Куайнчто также является ошибкой. При выполнении программа должна нормально печатать свой собственный исходный код (т. Е. Не как сообщение об ошибке / предупреждение); это должен быть правильный quine (т. е. некоторая часть программы должна кодировать другую часть вывода). Кроме того, компиляция и выполнение программы должны также приводить к тому, что исходный код программы - и ничто иное - будет напечатано реализацией в виде сообщений об ошибках или предупреждений. (Обратите внимание, что это означает, что вы не сможете использовать ошибки времени компиляции на языках, где они не позволяют программе нормально работать.) Другими словами, исходный код программы будет напечатан дважды, один раз через каждый метод.
Разъяснения
- В большинстве случаев будет очевидно, что является и не является сообщением об ошибке / предупреждением; мы не делаем различий между ними здесь. В неоднозначных случаях определите сообщение об ошибке / предупреждение как любой текст, который выводится реализацией: 1. как следствие чего-то другого, кроме выполнения команды (или любого другого наиболее близкого эквивалента в языке); или 2. это не было частью ввода в команду, которая произвела его как вывод.
- Часть ошибки / предупреждения в квине не обязательно должна быть правильной (хотя в большинстве случаев это будет случайно, так как большинство сообщений об ошибках и предупреждениях содержат значительное количество фиксированного текста).
- Допустимо, чтобы программа выводила несколько ошибок / предупреждений, которые образуют источник программы при объединении. Недопустимо выводить ошибки / предупреждения, которые не отображаются в источнике.
- В отличие от многих задач, переключатели, передаваемые компилятору, и имя файла программы, вероятно, будут иметь большое значение в этой задаче. Учитывая, что в противном случае задача может быть невозможной, я готов проявить гибкость, хотя, если вы запускаете реализацию необычным образом, помните, что правила PPCG взимают за это штраф в байтах (равный числу дополнительных символов, которые вам нужно добавить в командной строке самый короткий «нормальный» способ запуска программы), и, таким образом, вам нужно будет указать размер штрафа в своем посте. (Например, если используемый вами интерпретатор читает программу из файла и не имеет особых ограничений на имя файла, самый короткий нормальный способ запуска программы - это файл с 1-символьным именем файла; таким образом,
- Версия компилятора / интерпретатора, которую вы используете, вполне может иметь значение, поэтому в качестве части вашего представления, пожалуйста, укажите конкретный компилятор или интерпретатор, на котором работает ваша программа, и какая версия требуется. (Например, в представлении C может быть указано «C (gcc 6.2.0)» в заголовке.)
- Обратите внимание, что эта задача может быть недоступна на всех языках. В тех языках, где это возможно, самый простой способ, вероятно, состоит в том, чтобы найти сообщение об ошибке или предупреждение, для которого можно настроить некоторое подмножество текста (путем изменения имени чего-то, что указывается в сообщении; имена файлов - это общий выбор здесь, но не единственный). Я буду особенно впечатлен (и удивлен), если кто-то найдет способ сделать это, используя только сообщения об ошибках и предупреждения, текст которых зафиксирован.
Состояние победы
Это Код-гольфвызов, поэтому запись считается лучше, если она имеет меньшее количество байтов. Таким образом, если ваша программа вообще работает, вы хотите оптимизировать ее, чтобы максимально сократить число байтов. (Тем не менее, не расстраивайтесь, если уже есть более короткая запись, особенно если она на другом языке; здесь мы действительно ищем, насколько это возможно, сократить конкретный алгоритм или идею, стоящие за программой, но увидеть несколько Решения на разных языках или основанные на разных принципах всегда имеют смысл.)