Палиндром Привет, Мир

29

Ваша задача - создать программу, которая печатает "Привет, Планета!" именно к консоли. Кажется достаточно простым, верно? Ну, вот в чем фокус. Код должен быть палиндромом, то есть он читается справа налево так же, как слева направо. Стандартные лазейки НЕ допускаются.

lirtosiast
источник
Это не похоже на «привет мир».
Эрик Outgolfer
4
@ ΈρικΚωνσταντόπουλος Это то же самое, что Hello World для всех намерений и целей. Цель состоит в том, чтобы напечатать короткую строку, состоящую из двух слов, с пунктуацией, обычной для программ Hello World. Помимо встроенных модулей, которые печатают Hello World, решения будут абсолютно идентичны (кроме реальной строки) независимо от фактической строки, которая будет напечатана. (И я предполагаю, что фраза «Приветствую, Планета!» Была выбрана специально, чтобы сделать встроенные модули бесполезными.)
Мартин Эндер
1
@ MartinBüttner я думаю , что Hello, world!и Hello World!являются единственными выходами разрешенного привета-мировой программы.
Эрик Outgolfer

Ответы:

33

/// , 37 байт

Greetings, Planet!/!tenalP ,sgniteerG
Деннис
источник
10
Это будет сложно победить.
PhiNotPi
16

TI-BASIC, 67 байт

"!tenalP ,sgniteerG"
"Greetings, Planet!"

Это работает, потому что последняя строка программы отображается на экране, в то время как первая строка по существу рассматривается как комментарий.

Каждая строчная буква хранится как 2 байта, а остальные символы - 1 байт. Если бы я изменил правила и напечатал все заглавные буквы, это было бы 41 байт :

"!TENALP ,SGNITEERG"
"GREETINGS, PLANET!"
NinjaBearMonkey
источник
Можете ли вы использовать eи i(числа) для дальнейшего уменьшения количества байтов?
Аддисон Крамп
1
@VTCAKAVSMoACE Я учел это, но они выделены курсивом, поэтому выглядят немного по-другому.
NinjaBearMonkey
Для ясности, первая строка не является комментарием, она сохраняется в переменной ответа.
Джулиан Лакниет,
12

Я знаю, что это немного поздно (и немного привередливо), но ...

> <> (Рыба), 47 45 47 байт (на самом деле 43 45, если я не использовал случайное направление)

x"!tenalP ,sgniteerG"!|o|!"Greetings, Planet!"x

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

Итак, под «печатью на консоль» я предположил, что вы имели в виду печать на стандартный вывод. Это выдает ошибку; ошибка выводится в stderr ПОСЛЕ того, как строка выводится на стандартный вывод.

Чтобы доказать, что это сработало в обоих направлениях, я использовал «случайное направление» режиссера «х». Fish - это двумерный язык, поэтому, независимо от того, куда указывает директор, код все равно будет (в конечном итоге) выполняться.

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

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

Если рандомизированный директор указывает вверх или вниз, это не имеет значения - рыба знает, что зацикливается на нижней или нижней части кода, указывая на рандомизатор. Таким образом, он продолжит цикл с рандомизаторами, пока не будет направлен внутрь, к коду для выполнения.

С !|o|!обеих сторон бит выполняет следующее:

  • !пропускает следующую инструкцию (всегда пропускает |)

  • |является отражателем; это указывает внутрь назад к o.

  • o выводит текущий элемент стека на консоль как символ и удаляет его из стека.

Так что, по сути, это трюк «два зеркала в ванной прижаты друг к другу», когда я выхожу, пока не могу больше.

Теперь с помощью кошки смайликов. >o<перенаправляет вывод внутрь бесконечно, все еще выбрасывая ошибку, но я могу обойтись без использования пропуска в отражении.

Оказывается, я был прав с первого раза - вторая попытка не была палиндромной , но она была рефлексивной .

Рыба (без печати на stderr), 64 байта (ов)

x"!tenalP ,sgniteerG"!;oooooooooooooooooo;!"Greetings, Planet!"x

Этот чувак немного дольше.

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

Разница здесь очевидна; Я буквально распечатываю каждый элемент в стеке, а затем заканчиваю выполнение кнопкой ;.

Операция !;не завершает выполнение немедленно, так как !пропускает следующий элемент (в данном случае end exec) и продолжается до тех пор, пока не достигнет другой стороны, которая действует так ;!, что завершает выполнение, прежде чем что-либо пропустить.

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

Аддисон Крамп
источник
Я думаю, вы должны назвать язык> <>, чтобы отличить его от раковины рыбы
Аарон
@Aaron Обычно считается, что Fish здесь означает> <>, но я сталкивался с этой проблемой раньше - я добавлю ее. Благодарность!
Эддисон Крамп
как я предполагаю, это непредсказуемо, будет ли полный код оправдан или нет. Что если программный счетчик застрял между двумя инструкциями случайного направления или просто застрял в одной из команд случайного направления, например, он поворачивает вниз, достигает дна, возвращается к этой инструкции и начинает все сначала?
@GLASSIC Программа будет выводиться только один раз, и весь код никогда не будет выполнен.
Эддисон Крамп
10

Макароны 0.0.2 , 52 байта

print "Greetings, Planet!""!tenalP ,sgniteerG" tnirp

Решение, которое не использует комментарии. (В основном потому, что у макарон нет комментариев ...)

Дверная ручка
источник
15
У макарон нет комментариев? ಠ_ಠ
Алекс А.
8

CJam, 41 байт

Спасибо Деннису за три байта.

"!tenalP ,sgniteerG";"Greetings, Planet!"
The_Basset_Hound
источник
2
Вы должны перевернуть строки. Прямо сейчас вы получаете правильный вывод и распечатываете обратный.
NinjaBearMonkey
@NinjaBearMonkey К сожалению. Закрепление.
The_Basset_Hound
Также работает в GolfScript.
Ильмари Каронен
6

JavaScript, 56 байт

Это может работать в любом браузере.

alert("Greetings, Planet!")//)"!tenalP ,sgniteerG"(trela
Downgoat
источник
Заменив print/tnirpна alert/trela, он работает и в других двигателях.
ETHproductions
@ETHproductions не могу поверить, что я не думал об этом, спасибо!
Вниз
@ jrich ты прав, alert`Greetings, Planet!`//`!tenalP ,sgniteerG`trelaэто 52 байта
A
5

GolfScript, 41 байт

"Greetings, Planet!":"!tenalP ,sgniteerG"

Смотри, ма, нет, нет! Попробуйте онлайн в Web GolfScript .

Вторая половина исходного кода хранит строку во второй строке.

"Greetings, Planet!":"!tenalP ,sgniteerG"
"!tenalP ,sgniteerG"

будет печатать

Greetings, Planet!Greetings, Planet!
Деннис
источник
5

C ++, 129 байт

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

/**/
#include<cstdio>
int main(){puts("Greetings Planet!");}//*/
/*//};)"!tenalP sgniteerG"(stup{)(niam tni
>oidtsc<edulcni#
/**/
Люк
источник
5

Python 3, 57 байт

print('Greetings, Planet!')#)'!tenalP ,sgniteerG'(tnirp

Я исправил проблему с круглыми скобками.

Python 2, 53 байта

print'Greetings, Planet!'#'!tenalP ,sgniteerG'tnirp

Я использовал преимущество отсутствия необходимых скобок и пробелов в Python 2, но не было такой большой разницы.

Noomann
источник
5

Желе неконкурентоспособное

25 байт. Этот ответ не является конкурирующим, поскольку задача предшествует созданию желе.

»1ị“RsẈḄ,#ʠU“Uʠ#,ḄẈsR“ị1»

Смотри, нет комментариев! Попробуйте онлайн!

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

»1ị“RsẈḄ,#ʠU“Uʠ#,ḄẈsR“ị1»  Main link. No arguments.

   “        “        “  »  Decompress all three strings; yield a list of strings.
    RsẈḄ,#ʠU               (decompresses to 'Greetings, Planet!')
             Uʠ#,ḄẈsR      (decompresses to ' WafdkmC Posited,')
                      ị1   (decompresses to 'Taarhus')

»1                         Take the maximum of the default argument (0) and 1.
  ị                        Select the string at the index to the left.
Деннис
источник
4

Застрял , 41 байт

"Greetings, Planet!"p"!tenalP ,sgniteerG"

Очень похоже на ответ CJam, за исключением Stuck, если выдается команда печати, автоматическая печать стека подавляется.

Када
источник
3

Mathematica, 52 байта

Print@"Greetings, Planet!""!tenalP ,sgniteerG"@tnirP

Также генерирует, Null "!tenalP ,sgniteerG"[tnirP]который не печатается.

LegionMammal978
источник
1
К вашему сведению, многие ваши ответы (включая этот) были брошены в очередь низкого качества, потому что они являются исключительно заголовком / счетом и кодом. Хотя в этом нет ничего плохого, вы можете добавить больше текста (например, пояснения), чтобы они не были автоматически помечены.
Мего
@Mego Хорошо, подумал, что они говорят сами за себя.
LegionMammal978
1
Я не говорю, что отсутствие объяснения - это плохо (хотя ответы с объяснениями, как правило, вызывают больше голосов), я просто сообщаю вам, что ваши (действительные) ответы автоматически помечались из-за их длины. :)
Мего
2
Вы можете сохранить 2 байта с Echoв v10.3.
Shrx
3

Деление , 45 43 байта

Спасибо jimmy23013 за сохранение 2 байта.

;"!tenalP ,sgniteerG"R"Greetings, Planet!";

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

Rинициализирует атом, который перемещается вправо. "переключает строковый режим, который просто печатает нужную строку в STDOUT перед нажатием ;, что разрушает атом и завершает программу. Первая половина просто никогда не выполняется.

Мартин Эндер
источник
@ jimmy23013 Понятия не имею, если честно. Спасибо.
Мартин Эндер
3

05AB1E , 16 байтов

Код:

”!º¥,ÁÙ””ÙÁ,¥º!”

Объяснение:

”!º¥,ÁÙ”          # Compressed string which results in "! Crm, Everywhere".
        ”ÙÁ,¥º!”  # Compressed string which results in "Greetings, Planet!".
                  # Top of stack is implicitly outputted.

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

Аднан
источник
2

STATA, 52 байта

di "Greetings, Planet!"//"!tenalP ,sgniteerG" id

Немного длиннее (53 байта) версия, которая не использует комментарии:

#d
di "Greetings, Planet!";"!tenalP ,sgniteerG" id
d#

#d [something]изменяет разделитель (первоначально возврат каретки), ;если только [что-то] не имеет значения cr, поэтому первая команда изменяет разделитель на ;, вторая печатает строку, а третья (которая продолжается до конца), по-видимому, nop, хотя у меня нет идея почему. Я бы догадался, что это вызовет ошибку (нераспознанная команда "! TenalP, sgniteerG" или что-то в этом роде), но, видимо, нет.

bmarks
источник
2

Japt , 29 байт

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

`!t?ÓP ,?Ä>ÎG`;`GÎ>Ä?, PÓ?t!`

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

Каждый из ?них является непечатаемым символом Unicode: U + 0082, U + 000F, U + 000F и U + 0082 соответственно.

Интересный факт: если бы Japt был опубликован на месяц раньше, он бы законно выиграл этот вызов.

ETHproductions
источник
2

APL, 41 байт

'Greetings, Planet!'⍝'!tenalP ,sgniteerG'

В APL печатается последнее значение, и символ лампы (⍝) начинает комментарий.

TuxCrafting
источник
Здравствуйте и добро пожаловать в PPCG! Отличный ответ!
NoOneIsHere
2

TCL, 80 байт

proc unknown args {puts "Hello World!"}
}"!dlroW olleH" stup{ sgra nwonknu corp

Объяснение: TCL выполняет глобальный процесс, unknownкогда он сталкивается с вызовом неопределенной команды, первая строка переопределяет этот процесс для простой программы "hello world".

Правила цитирования в TCL довольно тонкие, открывающая скобка начинает заключенное в кавычки слово, которое продолжается до следующей подходящей закрывающей скобки, позволяя использовать вложенные слова в кавычках. В противном случае скобки рассматриваются как обычные символы. пять слов: }"!dlroW olleH", stup{, sgra, nwonknuи corp. Именованная команда }"!dlroW olleH"не была определена, поэтому undefinedвместо нее вызывается proc из первой строки.

Аналогичный вопрос был размещен на StackOverflow древности; который с тех пор был закрыт и удален. Я использовал свое решение в качестве примера языка TCL в этом ответе и теперь получаю комментарии с просьбой объяснить, поэтому я воссоздаю свой ответ здесь.

SingleNegationElimination
источник
1

Витси , 41 байт

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

"! tenalP, sgniteerG" Z "Привет, Планета!"

В Zперсонаже выходы все в стеке на STDOUT.

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

Аддисон Крамп
источник
1

Unefunge 98 - 49 байт

"!tenalP ,sgniteerG<DC1>"k,@,k"<DC1>Greetings, Planet!"

Приведенный выше код содержит два непечатаемых символа с кодом 17 (управление устройством 1), представленным <DC1>.

pppery
источник
1

МСМ , 73 байта

GGreetings, Planet!.................,.................!tenalP ,sgniteerGG

Первая половина непосредственно перед серединой ,создает обратную строку приветствия, включая дополнительную Gсправа. Середина ,опускает его, а остальное - каноническая программа «Привет / Приветствие / что угодно». Дополнительные символы на обоих концах необходимы, потому что сообщение содержит ,. Левый исполнен и сбрасывает s. Оба ,иs нуждаются в замене для левой точки сцепления, следовательно, Gs. ,На право не выполняется, но строить в конечной строке.

Ними
источник
1

CoffeeScript, 53 байта

Похож на Ruby и Lua и почти все варианты здесь.

alert 'Greetings, Planet!'#'!tenalP ,sgniteerG' trela
rink.attendant.6
источник
1

Рубин, 43 байта

p"Greetings, Planet!"#"!tenalP ,sgniteerG"p
Какао бобы
источник
1

Баш, 52 48 байт

echo Greetings, Planet!||!tenalP ,sgniteerG ohce

Также работает в ksh, zsh, yash, dash. Но не ТШП.

$ cat x.sh
echo Greetings, Planet!||!tenalP ,sgniteerG ohce
$ bash x.sh
Greetings, Planet!
$ ksh x.sh
Greetings, Planet!
$ zsh x.sh
Greetings, Planet!
$ yash x.sh
Greetings, Planet!
$ dash x.sh
Greetings, Planet!
$ tcsh x.sh
tenalP: Event not found.
$
Стив
источник
1
Удалить все цитаты.
manatwork
1
О боже, ответ bash был короче чем python = /. Вернуться к доске для рисования!
Эшвин Гупта
1

Луа, 52 байта

print"Greetings, Planet!"--"!tenalP ,sgniteerG"tnirp

В терминале Lua это только 44 байта с

="Greetings, Planet!"--"!tenalP ,sgniteerG"=
Digital Veer
источник
Виноват. Спасибо за предупреждение!
Digital Veer
Удалить все скобки. Для функций с одним строковым параметром они являются необязательными.
manatwork
Lua 5.3 не требуется =в терминале, так что там 2 байта. Я думаю, что он существовал в 2015 году, но не уверен.
Вэл говорит восстановить Монику
1

Млечный Путь 1.5.10 , 43 41 39 байт

"Greetings, Planet!"!tenalP ,sgniteerG"

объяснение

"Greetings, Planet!"                       # push the string to the stack
                    !                      # output the TOS
                     tenalP ,sgniteerG"    # throws an error and exits

использование

python3 milkyway.py <path-to-code>
Зак Гейтс
источник
Вам действительно нужен комментарий? Если это основано на стеке (без неявного вывода), тогда должен работать только вывод стека.
Эддисон Крамп
Вы правы! Спасибо. @FlagAsSpam
Зак Гейтс