Palindrome Witaj, świecie

29

Twoim zadaniem jest stworzenie programu, który drukuje „Pozdrowienia, Planeta!” dokładnie do konsoli. Wydaje się to dość proste, prawda? Cóż, oto sztuczka. Kod musi być palindromem, co oznacza, że ​​odczytuje od prawej do lewej tak samo, jak w lewej do prawej. Standardowe luki NIE są dozwolone.

lirtosiast
źródło
To nie wydaje się być „witaj świecie”.
Erik the Outgolfer
4
@ ΈρικΚωνσταντόπουλος Jest to to samo co Hello World dla wszystkich celów i celów. Celem jest wydrukowanie krótkiego ciągu składającego się z dwóch słów ze znakami interpunkcyjnymi powszechnymi również w programach Hello World. Poza wbudowanymi funkcjami, które drukują Hello World, rozwiązania będą absolutnie identyczne (oprócz rzeczywistego ciągu), niezależnie od tego, jaki ciąg zostanie wydrukowany. (I zakładam, że wyrażenie „Pozdrowienia, Planeta!” Zostało wybrane specjalnie po to, by wbudowane urządzenia były bezużyteczne.)
Martin Ender
1
@ MartinBüttner Myślę, że Hello, world!i Hello World!są to jedyne dozwolone wyjścia dla programu hello-world .
Erik the Outgolfer

Odpowiedzi:

33

/// , 37 bajtów

Greetings, Planet!/!tenalP ,sgniteerG
Dennis
źródło
10
Trudno będzie pokonać.
PhiNotPi
16

TI-BASIC, 67 bajtów

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

Działa to, ponieważ ostatni wiersz programu jest wyświetlany na ekranie, podczas gdy pierwszy ciąg jest zasadniczo traktowany jako komentarz.

Każda mała litera jest przechowywana jako 2 bajty, a pozostałe znaki to 1 bajt. Gdybym naginał reguły i drukował wielkimi literami, byłoby to 41 bajtów :

"!TENALP ,SGNITEERG"
"GREETINGS, PLANET!"
NinjaBearMonkey
źródło
Czy możesz użyć ei i(liczb) w celu dalszego zmniejszenia liczby bajtów?
Addison Crump,
1
@VTCAKAVSMoACE Rozważyłem to, ale napisali kursywą, więc wyglądają nieco inaczej.
NinjaBearMonkey
Aby wyjaśnić, pierwszy wiersz nie jest komentarzem, zostaje zapisany w zmiennej odpowiedzi.
Julian Lachniet
12

Wiem, że to trochę za późno (i trochę wybrednie), ale ...

> <> (Ryba), 47 45 47 bajtów (naprawdę 43 45, jeśli nie użyłem losowego kierunku)

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

Te odpowiedzi są nieco inne; istnieje szansa na wykonanie dowolnego kierunku kodu .

Tak więc przez „drukowanie na konsolę” założyłem, że masz na myśli drukowanie na standardowe wyjście. To powoduje błąd; błąd jest zgłaszany do stderr PO wydrukowaniu łańcucha na standardowe wyjście.

Aby udowodnić, że działało to w obie strony, użyłem reżysera „losowy kierunek”, „x”. Ryba jest językiem dwuwymiarowym, więc bez względu na to, w którą stronę wskazuje reżyser, kod nadal (ostatecznie) zostanie wykonany.

Zakładając, że pierwszy reżyser wskazuje w prawo, znaki są ładowane do „stosu” w odwrotnej kolejności, a następnie drukowany jest odwrotność rewersu (lub zwykły tekst).

Zakładając, że oba dyrektory wskazują w lewo, znaki są ponownie ładowane do „stosu” w odwrotnej kolejności (ponieważ kod ładuje go do tyłu tutaj, kierunek jest w lewo), a następnie do tyłu do tyłu (lub tekst normalny) jest drukowany.

Jeśli losowy reżyser wskazuje w górę lub w dół, nie ma to znaczenia - ryba wie, że zapętla się do dolnej lub górnej części kodu, wskazując z powrotem na randomizator. W ten sposób będzie kontynuował pętlę z randomizatorami, dopóki nie wskaże do wewnątrz, w kierunku kodu do wykonania.

Z !|o|!obu stron bit wykonuje następujące czynności:

  • !pomija następną instrukcję (zawsze będzie pomijać |)

  • |jest odbłyśnikiem; wskazuje do wewnątrz z powrotem w kierunku o.

  • o wysyła bieżący element stosu do konsoli jako postać i usuwa go ze stosu.

Zasadniczo jest to sztuczka „dwa zwierciadła w łazience ściśnięte razem”, w której produkuję, dopóki nie będę już w stanie.

Teraz używa emoji kota. >o<nieskończenie przekierowuje wyjście do wewnątrz, wciąż zgłaszając błąd, ale mogę uniknąć niepotrzebnego przeskoku w odbiciu.

Okazuje się, że miałem rację za pierwszym razem - druga próba nie była palindromiczna , ale była refleksyjna .

Ryba (bez drukowania do stderr), 64 Bytes (ew)

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

Ten koleś jest trochę dłuższy.

Ma tę samą losową funkcję strzałki (aby udowodnić, że działa w obie strony) i nie drukuje na stderr.

Różnica tutaj jest oczywista; Dosłownie drukuję każdy element na stosie, a następnie kończę wykonanie za pomocą ;.

Wykonanie !;nie kończy się natychmiast, ponieważ !pomija następny element (w tym przypadku kończy się exec) i trwa, dopóki nie trafi na drugą stronę, która działa jak ;!, w którym kończy wykonywanie, zanim cokolwiek pominie.

Jest zgodny z tym samym losowym wzorem kierunkowym, co krótsza odpowiedź.

Addison Crump
źródło
Myślę, że powinieneś zadzwonić do języka> <>, aby odróżnić go od skorupy ryby
Aaron,
@Aaron Ogólnie przyjmuje się, że Fish tutaj oznacza> <>, ale już wcześniej napotkałem ten problem - dodam go. Dzięki!
Addison Crump,
jak sądzę, jest nieprzewidywalne, czy pełny kod zostanie wyliczony czy nie. Co się stanie, jeśli licznik programu utknie między dwiema losowymi instrukcjami kierunku lub po prostu utknie w jednej z instrukcji losowego kierunku, na przykład, odwróci się, osiągnie dno, wróci do tej instrukcji i zacznie od początku?
@GLASSIC Program uruchomi się tylko raz, a cały kod nigdy nie zostanie wykonany.
Addison Crump,
11

Bubblegum , 38 bajtów

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
Dennis
źródło
10

Makaron 0,0,2 , 52 bajty

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

Rozwiązanie, które nie wykorzystuje komentarzy. (Głównie dlatego, że Macaroni nie ma komentarzy ...)

Klamka
źródło
15
Makaron nie ma komentarzy? ಠ_ಠ
Alex A.
8

CJam, 41 bajtów

Dzięki Dennisowi za trzy bajty wyłączone.

"!tenalP ,sgniteerG";"Greetings, Planet!"
The_Basset_Hound
źródło
2
Musisz przerzucić sznurki. W tej chwili wyświetlasz właściwe wyjście i drukujesz odwrócone.
NinjaBearMonkey
@NinjaBearMonkey Whoops. Ustalenie.
The_Basset_Hound
Działa również w GolfScript.
Ilmari Karonen,
7

Foo, 39 bajtów

"Greetings, Planet!"!tenalP ,sgniteerG"

Wypróbuj online.

spaghetto
źródło
!tenalP ,sgniteerG"Greetings, Planet!oszczędza kilka bajtów.
Dennis
6

JavaScript, 56 bajtów

Może to działać w dowolnej przeglądarce.

alert("Greetings, Planet!")//)"!tenalP ,sgniteerG"(trela
Downgoat
źródło
Wymiana print/tnirpz alert/trela, to działa w innych silnikach, too.
ETHproductions
@ETHproductions nie może uwierzyć, że o tym nie pomyślałem, dzięki!
Downgoat,
@ jrich masz rację, alert`Greetings, Planet!`//`!tenalP ,sgniteerG`trelama 52 bajty
2016
5

GolfScript, 41 bajtów

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

Spójrz, nie ma żadnych operacji! Wypróbuj online w Web GolfScript .

Druga połowa kodu źródłowego przechowuje ciąg w drugim ciągu.

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

wydrukuje

Greetings, Planet!Greetings, Planet!
Dennis
źródło
5

C ++, 129 bajtów

Próba zrobienia tego bez komentarzy doprowadziła mnie do głębokiego, mrocznego koszmarnego preprocesora, bez wyjścia, którego nie widziałem. Zamiast tego starałem się, aby było to jak najkrócej.

/**/
#include<cstdio>
int main(){puts("Greetings Planet!");}//*/
/*//};)"!tenalP sgniteerG"(stup{)(niam tni
>oidtsc<edulcni#
/**/
Luke
źródło
5

Python 3, 57 bajtów

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

Naprawiłem problem z nawiasami.

Python 2, 53 bajty

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

Wykorzystałem zaletę braku wymaganego nawiasu i spacji w Pythonie 2, ale nie było tak dużej różnicy.

Noomann
źródło
5

Galaretka, niekonkurująca

25 bajtów Ta odpowiedź nie konkuruje, ponieważ wyzwanie poprzedza powstanie galaretki.

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

Spójrz, nie ma komentarzy! Wypróbuj online!

Jak to działa

»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.
Dennis
źródło
4

Utknął , 41 bajtów

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

Dość podobny do odpowiedzi CJam, z wyjątkiem tego, że w przypadku zablokowania, jeśli wydano polecenie drukowania, automatyczne drukowanie stosu jest pomijane.

Kade
źródło
3

Mathematica, 52 bajty

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

Generuje również taki, Null "!tenalP ,sgniteerG"[tnirP]który nie jest drukowany.

LegionMammal978
źródło
1
Do Twojej wiadomości, wiele twoich odpowiedzi (w tym tej) zostało rzuconych w kolejce niskiej jakości, ponieważ są one wyłącznie tytułem / wynikiem i kodem. Chociaż nie ma w tym nic złego, możesz rozważyć dodanie więcej tekstu (na przykład wyjaśnienia), aby nie zostały automatycznie oflagowane.
Mego
@Mego Okay, myślałem, że są dość zrozumiałe.
LegionMammal978
1
Nie twierdzę, że brak wyjaśnień jest złą rzeczą (chociaż odpowiedzi z wyjaśnieniami mają zwykle więcej głosów pozytywnych), po prostu informuję, że twoje (prawidłowe) odpowiedzi były automatycznie oflagowane z powodu ich długości. :)
Mego
2
możesz zapisać 2 bajty za pomocą Echoin v10.3.
shrx,
3

Rozszczepienie , 45 43 bajtów

Dzięki jimmy23013 za oszczędność 2 bajtów.

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

Wypróbuj online!

Rinicjuje atom, który porusza się w prawo. "przełącza tryb łańcucha, który po prostu drukuje żądany ciąg do STDOUT przed uderzeniem ;, który niszczy atom i kończy działanie programu. Pierwsza połowa po prostu nigdy nie jest wykonywana.

Martin Ender
źródło
@ jimmy23013 Nie mam pojęcia, szczerze mówiąc. Dzięki.
Martin Ender
3

05AB1E , 16 bajtów

Kod:

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

Wyjaśnienie:

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

Wypróbuj online!

Adnan
źródło
2

STATA, 52 bajty

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

Nieco dłuższa (53 bajtowa) wersja, która nie używa komentarzy, to:

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

#d [something]zmienia ogranicznik (początkowo znak powrotu karetki) na, ;chyba że [coś] jest cr, więc pierwsze polecenie zmienia ogranicznik na ;, drugie wypisuje ciąg, a trzeci (który trwa do końca) najwyraźniej nie, chociaż nie mam pomysł dlaczego. Domyślam się, że spowoduje to błąd (nierozpoznane polecenie „! TenalP, sgniteerG” lub coś takiego), ale najwyraźniej nie.

znaczniki
źródło
2

Japt , 29 bajtów

Ten język programowania został utworzony po opublikowaniu pytania, ale nie został stworzony dla tego pytania.

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

Wypróbuj online!

Każdy z nich ?jest niedrukowalnym charakterem Unicode: odpowiednio U + 0082, U + 000F, U + 000F i U + 0082.

Ciekawostka: gdyby Japt został opublikowany miesiąc wcześniej, legalnie wygrałby to wyzwanie.

ETHprodukcje
źródło
2

APL, 41 bajtów

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

W APL drukowana jest ostatnia wartość, a znak lampy (⍝) rozpoczyna komentarz.

TuxCrafting
źródło
Witaj i witaj w PPCG! Świetna odpowiedź!
NoOneIsHere
2

GolfScript , 41 bajtów

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

Wypróbuj online!

Lordmusic Player
źródło
@muddyfish Edited. Teraz jest palindromem. Przepraszam.
Lordmusic Player
2

TCL, 80 bajtów

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

wyjaśnienie: TCL wykonuje globalny proc, unknowngdy napotka wywołanie niezdefiniowanej komendy, pierwsza linia redefiniuje procedurę na prosty program „hello world”.

Reguły cytowania TCL są dość subtelne, nawias otwierający rozpoczyna cytowane słowo, które rozciąga się na następny pasujący nawias klamrowy, umożliwiając zagnieżdżanie cytowanych słów. Nawiasy klamrowe są inaczej traktowane jak normalne znaki. pięć słów: }"!dlroW olleH", stup{, sgra, nwonknui corp. Żadna z nazwanych komend }"!dlroW olleH"nie została zdefiniowana, dlatego undefinedzamiast tego wywoływany jest proc z pierwszego wiersza.

Podobne pytanie postawiono na StackOverflow starożytności; który został później zamknięty i usunięty. Użyłem mojego rozwiązania jako języka w policzkowej próbce TCL w tej odpowiedzi i teraz otrzymuję komentarze z prośbą o wyjaśnienie, więc odtwarzam tutaj swoją odpowiedź.

SingleNegationElimination
źródło
1

Vitsy , 41 bajtów

Ten język programowania został utworzony po opublikowaniu pytania, ale nie został stworzony dla tego pytania.

„! tenalP, sgniteerG” Z „Pozdrowienia, Planeta!”

Przez Zbohatera Wyjścia wszystko w stosie na standardowe wyjście.

Wypróbuj online!

Addison Crump
źródło
1

Unefunge 98 - 49 bajtów

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

Powyższy kod zawiera dwa niedrukowalne znaki z kodem 17 (kontrola urządzenia 1) reprezentowanym przez <DC1>.

pppery
źródło
1

MSM , 73 bajty

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

Pierwsza połowa tuż przed środkiem ,tworzy odwrócony ciąg powitania, w tym dodatkowy Gpo prawej stronie. Środek ,upuszcza go, a reszta to kanoniczny program „Hello / Greeting / cokolwiek”. Potrzebne są dodatkowe znaki na obu końcach, ponieważ wiadomość zawiera znak ,. Lewy jest wykonywany i upuszcza s. Zarówno ,i spotrzebne zastępstwo dla lewego kropek konkatenacji, stąd Gów. Prawa ,strona nie jest wykonywana, ale wbudowana w ostatni ciąg.

nimi
źródło
1

CoffeeScript, 53 bajty

Podobnie jak Ruby i Lua i prawie wszystkie warianty tutaj.

alert 'Greetings, Planet!'#'!tenalP ,sgniteerG' trela
lodowisko. dozorca 6
źródło
1

Rubinowy, 43 bajty

p"Greetings, Planet!"#"!tenalP ,sgniteerG"p
Ziarno kakaowca
źródło
1

Bash, 52 48 bajtów

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

Działa również w ksh, zsh, yash, dash. Ale nie tcsh.

$ 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.
$
Steve
źródło
1
Usuń wszystkie cytaty.
manatwork,
1
Och, kochanie, odpowiedź bash była krótsza niż python = /. Wróć do deski kreślarskiej!
Ashwin Gupta,
1

Lua, 52 bajty

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

W terminalu Lua jest to tylko 44 bajty

="Greetings, Planet!"--"!tenalP ,sgniteerG"=
Digital Veer
źródło
Mój błąd. Dzięki za powiadomienie!
Cyfrowy Veer
Usuń wszystkie nawiasy. W przypadku funkcji z jednym parametrem ciągu są one opcjonalne.
manatwork,
Lua 5.3 nie wymaga =w terminalu, więc jest tam 2 bajty. Myślę, że istniał w 2015 roku, nie jestem pewien.
val mówi Przywróć Monikę
1

Droga Mleczna 1.5.10 , 43 41 39 bajtów

"Greetings, Planet!"!tenalP ,sgniteerG"

Wyjaśnienie

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

Stosowanie

python3 milkyway.py <path-to-code>
Zach Gates
źródło
Czy naprawdę potrzebujesz komentarza? Jeśli jest to oparte na stosie (bez niejawnych danych wyjściowych), to samo wyjście ze stosu powinno działać.
Addison Crump,
Masz rację! Dzięki. @FlagAsSpam
Zach Gates