Ваша задача - написать программу, которая выводит собственный исходный код в обратном порядке. Однако, когда обратный код запускается, он должен вывести исходный код в правильном направлении.
пример
Скажем , ваша программа abc
. При запуске он должен выводить cba
. cba
при запуске должен выводить abc
.
правила
Ваша программа должна следовать всем правилам правильного квинуса (кроме вывода исходного кода). Палиндромы запрещены.
Случайное примечание: я знаю об этом, но я считаю, что этот вызов отличается, потому что преобразованный код должен иметь одинаковые свойства.
Ответы:
RProgN , 3 байта
Спасибо @MartinEnder за напоминание об этом ответе .
Попробуйте онлайн!
Как это работает
Это использует потенциальный недостаток в нашем определении правильной квайн :
Это, очевидно, имеет место в данном случае, поскольку вывод является обратным коду, а код не является палиндромом.
RProgN - обратная нотация программиста - использует стек LIFO и печатает на нем элементы в порядке их выталкивания. Два жетона 1 и 2 , разделенные пробелами и / или символами новой строки, отображаются в обратном порядке и печатаются через строку.
Это печатает обратную программу
который, в свою очередь, печатает оригинал.
! Enilno TY YRT
источник
1\n1
, в котором два1
s кодируют друг друга; возможно, это правильный quine, но не надлежащий обратный quine.)Befunge-98 , 33 байта
Попробуйте онлайн!
источник
#
чтобы сделать заголовок. Также зайдите на Tryitonline.net и получите переводчика онлайнg
было запрещено в кавычках Befunge, поскольку это читает источник программы непосредственно из памяти?Деление 2 , 10 байт
Попробуйте онлайн!
Это печатает:
Попробуйте онлайн!
И наоборот.
объяснение
Это модификация обратного квина . Это работает в наших интересах здесь, который
!
используется для печати, а также находится всего в одном коде от цитаты"
. Это облегчает создание секции печати цитат палиндромной ('!+!'
). Давайте начнем с первого кода:Эта программа имеет две точки входа в точке
L
s, каждая из которых создает левый атом. Тем не менее, правильный сразу попадает в тот,;
который разрушает его. Левый вводит строковый режим и оборачивается до конца, так что печатает весь код (кроме"
) сзади-спереди. Это уже дает нам_'!+!'L;L
. Осталось только распечатать"
._
может быть проигнорировано,'!
устанавливает массу атома равной 33 (кодовая точка!
),+
увеличивает ее"
и!
печатает. Это все, что сделано на выходе. В'L
устанавливает атомы массы до точки коды ,L
но это не имеет значения.;
уничтожает также и этот атом, и так как не осталось ни одного атома, программа завершается.Теперь наоборот:
Опять же, у нас есть две точки входа, но один атом немедленно уничтожается. На этот раз мы
!+!'
сначала перемещаемся по разделу, поэтому начнем с печати цитаты.'_
Снова не имеет значения, но нам нужен_
(или какой -либо другой бесполезный персонаж) здесь , чтобы избежать возможности'
избежать"
. Атом доходит до конца, перебирает исходный код один раз в строковом режиме, чтобы напечатать остальную часть программы в обратном порядке,L
затем игнорируется и;
уничтожает атом и завершает программу.источник