Період 2 Зворотна квітка


10

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

Приклад

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

Правила

Ваша програма повинна дотримуватися всіх правил належної квінти (крім виведення вихідного коду). Паліндроми заборонені.

Випадкова примітка: мені відомо про це, але я вважаю, що ця проблема відрізняється тим, що перетворений код повинен мати однакові властивості.



Відповіді:


9

RProgN , 3 байти

1
2

Дякую @MartinEnder, що нагадав мені про цю відповідь .

Спробуйте в Інтернеті!

Як це працює

Це використовує потенційний недолік у нашому визначенні належної квінки :

Повинно бути можливим визначити розділ програми, який кодує іншу частину програми. ("Різне" означає, що обидві частини відображаються в різних положеннях.)

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

Очевидно, що тут справа, оскільки вихід є зворотним кодом, а код - не паліндром.

RProgN - зворотне позначення програміста - використовує стек LIFO і друкує елементи на ньому в порядку, в якому вони спливають. Два лексеми 1 і 2 , розділені пробілами та / або новими рядками, виводяться у зворотному порядку і друкуються розділеними новою лінією.

Це надрукує перевернуту програму

2
1

який, у свою чергу, друкує оригінал.

! enilno ti yrT


Мені подобається URL.
Крістофер

4
Ми мусимо це виправити ... Я б опублікував нову відповідь (грунтуючись на цьому коментарі ) на мета-питання, але він, ймовірно, не отримав би достатньої уваги, щоб конкурувати з існуючими відповідями.
ETHproductions

2
@ETHproductions: Зробіть це. Я відчуваю, що з нашим сучасним правильним визначенням quine є кілька проблем. (Можливо, моя мова 7 - це дослідження у кращих випадках щодо належної родинності; крім цього конкретного випадку воно може справляти ще чимало інших.) визначення; 1 і 2 чітко кодуються самі собою, тому єдиний потенційний інтерес полягає в тому, що кодує новий рядок. (Це відрізняється від а 1\n1, в якому два 1s кодують один одного; можливо, це правильна квінка, але не належна зворотна квінка.)

9

Befunge-98 , 33 байти

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

Спробуйте в Інтернеті!


Приємна перша відповідь. Але скористайтеся #заголовком, щоб зробити вас. Також заходьте на Tryitonline.net і знайдіть онлайн-перекладача
Крістофер

2
Також перейдіть під кнопку збереження та використовуйте код для подання кодового гольфу.
Крістофер

Я відредагував це в TIO, в першу чергу я просто забув додати посилання, але тепер його додав і дякую за підказку заголовка
IQuick 143

Зауважте, що опція «подання кодового гольфу» на TIO дає вам початковий шаблон, включаючи заголовок.
Ørjan Johansen

Я думав, що gце заборонено в лайках Befunge, оскільки він читає джерело програми безпосередньо з пам'яті?

7

Ділення 2 , 10 байт

"L;L'!+!'_

Спробуйте в Інтернеті!

Це відбитки:

_'!+!'L;L"

Спробуйте в Інтернеті!

І навпаки.

Пояснення

Це модифікація зворотної квінки . Тут ми працюємо на нашу користь, яка !використовується для друку, а також є лише однією кодовою точкою від цитати ". Це полегшує зробити розділ друку цитат паліндромним (the '!+!'). Почнемо з першого коду:

"L;L'!+!'_

Ця програма має дві точки входу на Ls, які кожен створює лівий атом. Однак правильний негайно потрапляє на те, ;що руйнує його. Лівий переходить у рядковий режим і завертається до кінця, щоб він надрукував увесь код (крім ") зі спини вперед. Це вже дає нам _'!+!'L;L. Залишилося лише надрукувати ". _можна ігнорувати, '!встановлює масу атома до 33 (кодова точка !), +збільшує його "та !друкує. Ось і все зроблено. В 'Lвстановлює атоми маси до точки коди , Lале це не має значення. ;знищує і цей атом, і оскільки атомів не залишилось, програма припиняється.

Тепер навпаки:

_'!+!'L;L"

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.