Паліндром Привіт, світ


29

Ваше завдання - створити програму, яка друкує "Привітання, планета!" точно до консолі. Здається, досить просто, правда? Ну ось ось хитрість. Код повинен бути паліндром, тобто він читається справа наліво так само, як зліва направо. Стандартні лазівки НЕ дозволені.


Це, здається, не "привіт світ".
Ерік Аутгольфер

4
@ ΈρικΚωνσταντόπουλος Це те саме, що Hello World для всіх намірів і цілей. Мета - надрукувати короткий рядок, що складається з двох слів із розділовими знаками, поширеними також у програмах Hello World. Крім вбудованих модулів, які друкують Hello World, рішення будуть абсолютно однаковими (крім фактичної рядки) незалежно від фактичного рядка, який друкується. (І я припускаю, що фраза "Вітаю, планета!" Була обрана спеціально, щоб зробити вбудовані пристрої непотрібними.)
Мартін Ендер

1
@ MartinBüttner Я думаю, що це Hello, world!і Hello World!є єдиними випусками, дозволеними для програми привітного світу .
Ерік Атголфер

Відповіді:



16

TI-BASIC, 67 байт

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

Це працює, тому що останній рядок програми відображається на екрані, а перший рядок по суті трактується як коментар.

Кожна мала літера зберігається як 2 байти, а решта символів - 1 байт. Якби я зігнув правила і надрукував усі літери, це було б 41 байт :

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

Чи можете ви використати eта i(числа) для подальшого зменшення кількості байтів?
Аддісон Кримп

1
@VTCAKAVSMoACE Я вважав це, але вони виділені курсивом, тому вони виглядають трохи по-іншому.
NinjaBearMonkey

Щоб зрозуміти, перший рядок не є коментарем, він зберігається в змінній відповіді.
Julian Lachniet

12

Я знаю, це трохи пізно (і трохи вибагливо), але ...

> <> (Риба), 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) і продовжує, поки він не потрапить на іншу сторону, яка діє як ;!, в якій закінчує виконання, перш ніж пропустити що-небудь.

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


Я думаю, вам слід назвати мову> <>, щоб відрізнити її від рибної шкаралупи
Аарон

@Aaron Загалом передбачається, що Риба тут означає> <>, але я вже стикався з цією проблемою - я додам її. Спасибі!
Аддісон Кримп

як я здогадуюсь, це непередбачувано, коли повний код буде виправданий чи ні. Що робити, якщо лічильник програм застряг між двома вказівками випадкових напрямків або просто застряг у одній із випадкових вказівок, наприклад, він знижується, досягає дна, повертається до цієї інструкції і починає все спочатку?

@GLASSIC Програма виведе лише один раз, і весь код ніколи не буде виконаний.
Аддісон Кримп

11

Bubblegum , 38 байт

0000000: 73 2f 4a 4d 2d c9 cc 4b 2f d6 51 08 c8 49 cc 4b 2d 51 04  s/JM-..K/.Q..I.K-Q.
0000013: 04 51 2d 4b cc 49 c8 08 51 d6 2f 4b cc c9 2d 4d 4a 2f 73  .Q-K.I..Q./K..-MJ/s




6

JavaScript, 56 байт

Це може працювати в будь-якому браузері.

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

Заміна print/tnirpз alert/trela, він працює і в інших системах, теж.
ETHproductions

@ETHproductions не можу повірити, що я не думав про це, дякую!
Пуховик


@jrich маєте рацію, alert`Greetings, Planet!`//`!tenalP ,sgniteerG`trelaце 52 байти
1616

5

GolfScript, 41 байт

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

Подивися ма, ні-ні! Спробуйте його в Інтернеті у веб-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

Математика, 52 байти

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

Також генерує документ, Null "!tenalP ,sgniteerG"[tnirP]який не друкується.


1
FYI, багато ваших відповідей (цей у тому числі) потрапляли до черги низької якості, оскільки вони є виключно заголовком / оцінкою та кодом. Хоча в цьому немає нічого поганого, ви можете розглянути можливість додавання більше тексту (наприклад, пояснення), щоб вони не отримали автоматичний позначення.
Мего

@Mego Гаразд, подумав, що вони досить зрозумілі.
LegionMammal978

1
Я не кажу, що відсутність пояснень - це погана річ (хоча відповіді з поясненнями, як правило, отримують більше оновлень), я просто даю вам знати, що ваші (дійсні) відповіді отримували автоматичний позначення через їх тривалість. :)
Mego

2
Ви можете зберегти 2 байти з Echoв v10.3.
shrx

3

Fission , 45 43 байт

Завдяки jimmy23013 за збереження 2 байт.

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

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

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


@ jimmy23013 У мене немає поняття, якщо чесно. Спасибі.
Мартін Ендер


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коли стикається з викликом невизначеної команди, перший рядок переосмислює, що надає просту програму "привіт світ".

Правила котирування TCL є досить тонкими, відкрита дужка запускає слово з цитуванням, яке поширюється на наступну відповідну близьку дужку, дозволяючи вкладені слова, які цитуються. Брекети в іншому випадку трактуються як звичайні символи. п'ять слів: }"!dlroW olleH", stup{, sgra, nwonknuі corp. Жодна команда не названа}"!dlroW olleH" не була визначена, тому undefinedзамість неї визивається Proc з першого рядка.

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




1

Відключення 98 - 49 байт

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

Код вище містить два недрукованих символи з кодом 17 (керування пристроєм 1), представленим символом <DC1>.


1

МСМ , 73 байти

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

Перша половина безпосередньо перед серединою ,створює зворотну привітання, включаючи додатковий Gправоруч. Середина ,скидає його, а решта - це канонічна програма "Привіт / привітання / що завгодно". Додаткові символи з обох кінців потрібні, оскільки повідомлення містить a ,. Лівий виконується і опускається 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
Видаліть усі цитати.
манатство

1
О, шановний, баш відповідь була коротшою, ніж python = /. Назад до дошки для малювання!
Ешвін Гупта

1

Луа, 52 байти

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

У терміналі Lua це лише 44 байти з

="Greetings, Planet!"--"!tenalP ,sgniteerG"=

Моє ліжко. Дякуємо за попередження!
Digital Veer

Видаліть усі дужки. Для функцій з одним параметром рядка вони необов’язкові.
манатство

=У терміналі 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
Zach Gates
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.