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


29

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


Это не похоже на «привет мир».
Эрик Outgolfer

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

1
@ MartinBüttner я думаю , что Hello, world!и Hello World!являются единственными выходами разрешенного привета-мировой программы.
Эрик Outgolfer

Ответы:



16

TI-BASIC, 67 байт

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

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

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

"!TENALP ,SGNITEERG"
"GREETINGS, PLANET!"

Можете ли вы использовать 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 Программа будет выводиться только один раз, и весь код никогда не будет выполнен.
Эддисон Крамп



8

CJam, 41 байт

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

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

2
Вы должны перевернуть строки. Прямо сейчас вы получаете правильный вывод и распечатываете обратный.
NinjaBearMonkey

@NinjaBearMonkey К сожалению. Закрепление.
The_Basset_Hound

Также работает в GolfScript.
Ильмари Каронен


6

JavaScript, 56 байт

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

alert("Greetings, Planet!")//)"!tenalP ,sgniteerG"(trela

Заменив 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, но не было такой большой разницы.


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]который не печатается.


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" или что-то в этом роде), но, видимо, нет.


2

Japt , 29 байт

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

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

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

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

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


2

APL, 41 байт

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

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


Здравствуйте и добро пожаловать в 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 в этом ответе и теперь получаю комментарии с просьбой объяснить, поэтому я воссоздаю свой ответ здесь.



1

Витси , 41 байт

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

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

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

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


1

Unefunge 98 - 49 байт

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

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


1

МСМ , 73 байта

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

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


1

CoffeeScript, 53 байта

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

alert 'Greetings, Planet!'#'!tenalP ,sgniteerG' trela


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

Удалить все скобки. Для функций с одним строковым параметром они являются необязательными.
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
Зак Гейтс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.