Я знаю, це трохи пізно (і трохи вибагливо), але ...
> <> (Риба), 47 45 47 байт (дійсно 43 45, якщо я не використовував рандомізований напрямок)
x"!tenalP ,sgniteerG"!|o|!"Greetings, Planet!"x
Ці відповіді трохи відрізняються один від одного; є ймовірність виконання будь-якого напрямку коду .
Отже, "друкуючи на консоль", я припускав, що ви маєте на увазі друк на stdout. Це кидає помилку; помилка перекидається на stderr ПІСЛЯ рядок надруковано на stdout.
Щоб довести, що це спрацювало в обох напрямках, я використав режисер "випадковий напрямок", "х". Риба - це двовимірна мова, тому незалежно від того, яким способом вказує режисер, код все одно (зрештою) буде виконаний.
Якщо припустити, що перший режисер вказує праворуч, символи завантажуються в "стек" у зворотному порядку, потім друкується зворотний бік зворотного (або звичайний текст).
Якщо припустити, що обидва режисери вказують ліворуч, символи знову завантажуються до «стека» у зворотному порядку (оскільки код завантажує його назад, напрямок - ліворуч), то зворотний бік зворотнього (або нормальний текст) друкується.
Якщо рандомізований режисер вказує вгору або вниз, це не має значення - риба знає перекинутись на нижню або перевернуту коду, вказуючи назад на рандомізатор. Таким чином, він буде продовжувати циклічно з рандомизаторами, поки він не вкаже всередину, до коду для виконання.
!|o|!
Біт робить наступне, по обидва боки:
!
пропускає наступну інструкцію (завжди буде пропускати |
)
|
- рефлектор; він вказує всередину назад o
.
o
виводить поточний елемент стека для консолі як символ і видаляє його зі стека.
Отже, по суті, це трюк "два дзеркала у ванній кімнаті, притиснуті разом", куди я виходжу, поки не можу більше.
Тепер використовуємо котячі емоджи. >o<
переспрямовує висновок всередину нескінченно, все одно кидаючи помилку, але я можу піти, не використовуючи пропуск у роздум.
Виявляється, я мав рацію перший раз - друга спроба не була паліндромною , але була рефлексивною .
Риба (без друку на stderr), 64 байти (ew)
x"!tenalP ,sgniteerG"!;oooooooooooooooooo;!"Greetings, Planet!"x
Цей чувак трохи довший.
Він має однакову рандомізовану функцію стрілки (щоб довести, що вона працює обома способами) і не друкується на stderr.
Різниця тут очевидна; Я буквально роздруковую кожен елемент у стеку, а потім закінчую виконання ;
.
Виконання !;
не закінчується негайно, оскільки !
пропускає наступний елемент (в цьому випадку закінчується exec) і продовжує, поки він не потрапить на іншу сторону, яка діє як ;!
, в якій закінчує виконання, перш ніж пропустити що-небудь.
Він слідує тій же рандомізованій схемі напрямку, що й коротша відповідь.