Quine / Помилка Quine Polyglot


14

Ваше завдання просте: Напишіть програму, яку можна запустити двома мовами. Він повинен бути звичайним quine (друкує власний вихідний код) мовою 1, а також повинен бути quine помилки (генерує повідомлення про помилку, ідентичне її власного вихідного коду) мовою 2.

Це , тому виграє найкоротше дійсне подання (у байтах).

Правила:

  • Мови можуть бути довільно схожими. Суперсети / подібні версії / подібні діалекти не заборонені.
  • Правила quine-помилки такі ж, як і у Make Error Quine! .


Чи дозволено два різних діалекти БАЗОВИХ?
MD XF

@MDXF Якщо вони мають таку саму поведінку, за винятком того, що один виводить STDERR замість цього, ні. Інакше так.
Esolanging Fruit

Тож моя відповідь справедлива.
MD XF

@MDXF Це дійсно.
Esolanging Fruit

Відповіді:


2

Befunge-93 (FBBI) / C (tcc) , 93 + 62 = 155 байт

^"
>#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.

Пояснення (C):

Програма не може компілювати, і tcc радісно виводить ім’я файлу як частину повідомлення про помилку. На основі початку коду можна отримати кілька помилок компіляції. ^на початку дає нам declaration expected, що є коротким і не містить таких проблемних символів ". З іншого боку, розробники gcc і clang дуже песимістичні, і вони вирішили вивести відразу кілька помилок, що не дуже приємно, тому ми не використовуємо їх компілятори.

Пояснення (Befunge-93):

Befunge зручна для quines тим, що його код також може використовуватися як символьні дані, завдяки "команді, яка перемикає рядковий режим. На початку ми виконуємо кілька марних операцій стеку, потім видаємо pкоманду (put), яка розміщує символ NUL у (0, 1). Потім ми відображаємо вказівник інструкцій зліва і починаємо читати все як рядок. Це потрібно зробити ліворуч, через характер LIFO стека. Після обгортання та досягнення "символу знову, рядок закінчується. Зауважте, що символ NUL замінив на$символу, створюючи розмежувач посередині через рядок. Потім натискаємо 3 числа на стек і перестрибуємо через NUL (адже він, на жаль, висить інтерпретатора, коли запускається як інструкція). Тут повинна бути виконана статична частина повідомлення про помилку. Більшість його символів не мають жодного оперу, але pкоманда споживає три аргументи (отже, чому ми натиснули 3 числа, інакше частина рядка буде з'їдена тут), а :& 1символи висувають до стека 4 значення, якими ми протидіємо з інструкцією a pта $(pop та discard). Потім виконується деяка арифметика для натискання кодів ASCII для, ^"\n>#001p#"і, нарешті, цикл виводить усі значення на стеку як символи, поки не знайде символ NUL і не припиниться.


Потрібно знайти ОС, яка підтримує таке ім'я файлу, і перелічити його. Я знаю, що Windows не підтримує цього.
mbomb007

@ mbomb007 Імовірно, Linux зазвичай приймає будь-який друкований символ у назві файлу, крім /. Я зараз не можу це перевірити.
негативна сімка

1
Яку версію tcc ви використовували? Я використовую 0.9.27-3 прямо з Arch repos, і я отримую помилку <define>:1: error: missing terminating " character.
випадковість999

1
Гаразд, я знайшов точну версію tcc, що використовується в TIO, і мені надійшло те саме повідомлення про помилку, але лише в тому випадку, якщо цитати імені файлу відповідають. Неперевершені цитати здається цілком необхідними, щоб ця відповідь функціонувала. Ось щось, що може вам допомогти: Linux також дозволяє отримувати нові рядки у назви файлів. Це вихід tcc при додаванні нового рядка та цитати до кінця імені файлу: (довге посилання) . Це означає, що вам потрібно знайти спосіб друкувати новий рядок та речі на другому рядку.
randomdude999

@ randomdude999 Дякую Я оновив рішення для обліку цього. Дійсно цікаво, що незрівнянна цитата викликає таку проблему ...
негативно сім

0

Екран Applesoft BASIC / Commodore LCD BASIC , 13 байт

?SYNTAX ERROR

У програмі Apple] [емулятор натисніть RESETклавішу, щоб увійти в режим BASIC.
У РК-емуляторі Commodore натиснітьRightArrowEnter щоб потрапити в програму BASIC.
В обох випадках не вводьте ?SYNTAX ERRORвсі шапки, оскільки вони автоматично використовують великі літери.


2
статус, який не змагається, зарезервований для публікацій на мовах, які були зроблені після виклику. Якщо він недійсний за правилами, видаліть його. Спочатку чекаємо підтвердження ОП, тому що я думаю, що це має бути дійсним (якщо припустити, що це працює).
HyperNeutrino

@HyperNeutrino Спасибі, відредаговано.
MD XF

1
Тоді доведеться підозрювати і цього. Це питання є досить брутальним, ніж виглядає ...
Ørjan Johansen

1
@ ØrjanJohansen Ну, я не дуже впевнений у цьому. Технічно на РК-дисплеї Commore не було стандартного потоку байтів помилок, тож це справді помилка?
MD XF

1
@ ØrjanJohansen це ? Я думаю, це може означати, що неможливо сказати, чи це дійсно, чи ні. Ми могли чекати підтвердження від ОП?
MD XF
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.