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