Период 2 Обратный Куайн

10

Ваша задача - написать программу, которая выводит собственный исходный код в обратном порядке. Однако, когда обратный код запускается, он должен вывести исходный код в правильном направлении.

пример

Скажем , ваша программа abc. При запуске он должен выводить cba. cbaпри запуске должен выводить abc.

правила

Ваша программа должна следовать всем правилам правильного квинуса (кроме вывода исходного кода). Палиндромы запрещены.

Случайное примечание: я знаю об этом, но я считаю, что этот вызов отличается, потому что преобразованный код должен иметь одинаковые свойства.

internet_user
источник
Связанные
HyperNeutrino
Также связано.
Мартин Эндер

Ответы:

9

RProgN , 3 байта

1
2

Спасибо @MartinEnder за напоминание об этом ответе .

Попробуйте онлайн!

Как это работает

Это использует потенциальный недостаток в нашем определении правильной квайн :

Должна быть возможность идентифицировать раздел программы, который кодирует другую часть программы. («Разное» означает, что две части появляются в разных позициях.)

Кроме того, квайн не должен иметь доступ к своему собственному источнику, прямо или косвенно.

Это, очевидно, имеет место в данном случае, поскольку вывод является обратным коду, а код не является палиндромом.

RProgN - обратная нотация программиста - использует стек LIFO и печатает на нем элементы в порядке их выталкивания. Два жетона 1 и 2 , разделенные пробелами и / или символами новой строки, отображаются в обратном порядке и печатаются через строку.

Это печатает обратную программу

2
1

который, в свою очередь, печатает оригинал.

! Enilno TY YRT

Деннис
источник
Мне нравится URL.
Кристофер
4
Мы должны исправить это ... Я отправлю новый ответ (на основе этого комментария ) на мета-вопрос, но, вероятно, он не получит достаточно внимания, чтобы конкурировать с существующими ответами.
ETHproductions
2
@ETHproductions: сделай это. Я чувствую, что есть несколько проблем с нашим текущим правильным определением квин. (Возможно, мой язык 7 - это исследование краевых случаев на предмет правильной квинты; в дополнение к этому конкретному случаю он может обрабатывать довольно много других.) FWIW, я не уверен, что это правильный обратный квин даже нашими нынешними определение; 1 и 2 четко кодируются сами по себе, поэтому единственный потенциальный интерес представляет то, что кодирует символ новой строки. (Это отличается от a 1\n1, в котором два 1s кодируют друг друга; возможно, это правильный quine, но не надлежащий обратный quine.)
9

Befunge-98 , 33 байта

b3*>1#;-:0g,:#;_@_;#:,g0:-;#1>*b3

Попробуйте онлайн!

IQuick 143
источник
Хороший первый ответ. Но используйте, #чтобы сделать заголовок. Также зайдите на Tryitonline.net и получите переводчика онлайн
Кристофер
2
Также зайдите под кнопкой сохранения и используйте отправку Codegolf.
Кристофер
Я сначала отредактировал его на TIO. Я просто забыл добавить ссылку, но теперь она добавлена, и спасибо за подсказку Header
IQuick 143
Обратите внимание, что опция «codegolf submission» в TIO дает вам стартовый шаблон, включая заголовок.
Орджан Йохансен
Я думал, что gбыло запрещено в кавычках Befunge, поскольку это читает источник программы непосредственно из памяти?
7

Деление 2 , 10 байт

"L;L'!+!'_

Попробуйте онлайн!

Это печатает:

_'!+!'L;L"

Попробуйте онлайн!

И наоборот.

объяснение

Это модификация обратного квина . Это работает в наших интересах здесь, который !используется для печати, а также находится всего в одном коде от цитаты ". Это облегчает создание секции печати цитат палиндромной ( '!+!'). Давайте начнем с первого кода:

"L;L'!+!'_

Эта программа имеет две точки входа в точке Ls, каждая из которых создает левый атом. Тем не менее, правильный сразу попадает в тот, ;который разрушает его. Левый вводит строковый режим и оборачивается до конца, так что печатает весь код (кроме ") сзади-спереди. Это уже дает нам _'!+!'L;L. Осталось только распечатать ". _может быть проигнорировано, '!устанавливает массу атома равной 33 (кодовая точка !), +увеличивает ее "и !печатает. Это все, что сделано на выходе. В 'Lустанавливает атомы массы до точки коды , Lно это не имеет значения. ;уничтожает также и этот атом, и так как не осталось ни одного атома, программа завершается.

Теперь наоборот:

_'!+!'L;L"

Опять же, у нас есть две точки входа, но один атом немедленно уничтожается. На этот раз мы !+!'сначала перемещаемся по разделу, поэтому начнем с печати цитаты. '_Снова не имеет значения, но нам нужен _(или какой -либо другой бесполезный персонаж) здесь , чтобы избежать возможности 'избежать ". Атом доходит до конца, перебирает исходный код один раз в строковом режиме, чтобы напечатать остальную часть программы в обратном порядке, Lзатем игнорируется и ;уничтожает атом и завершает программу.

Мартин Эндер
источник