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.


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:



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!"

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ź.


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

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 ...)


15
Makaron nie ma komentarzy? ಠ_ಠ
Alex A.



6

JavaScript, 56 bajtów

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

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

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!

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#
/**/

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.


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.

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.


3

Mathematica, 52 bajty

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

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


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.


@ 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!


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.


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.


2

APL, 41 bajtów

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

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


Witaj i witaj w PPCG! Świetna odpowiedź!
NoOneIsHere


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ź.



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!


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>.


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.


1

CoffeeScript, 53 bajty

Podobnie jak Ruby i Lua i prawie wszystkie warianty tutaj.

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


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.
$

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"=

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>

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.