Palindrome Hello, World


29

Il tuo compito è creare un programma che stampa "Saluti, Pianeta!" esattamente alla console. Sembra abbastanza semplice, giusto? Bene, ecco il trucco. Il codice deve essere un palindromo, nel senso che legge da destra a sinistra come da sinistra a destra. Non sono ammesse scappatoie standard .


Questo non sembra essere "ciao mondo".
Erik the Outgolfer,

4
@ ΈρικΚωνσταντόπουλος È lo stesso di Hello World a tutti gli effetti. L'obiettivo è stampare una stringa corta composta da due parole con la punteggiatura comune anche nei programmi Hello World. A parte i built-in che stampano Hello World, le soluzioni saranno assolutamente identiche (a parte la stringa effettiva) indipendentemente dalla stringa effettivamente stampata. (E presumo che la frase "Saluti, Pianeta!" Sia stata scelta appositamente per rendere inutili i componenti integrati.)
Martin Ender,

1
@ MartinBüttner Penso che Hello, world!e Hello World!siano le uniche uscite consentite per un programma ciao-mondo .
Erik the Outgolfer,

Risposte:



16

TI-BASIC, 67 byte

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

Questo funziona perché l'ultima riga di un programma viene visualizzata sullo schermo, mentre la prima stringa viene essenzialmente trattata come un commento.

Ogni lettera minuscola viene memorizzata come 2 byte e i caratteri rimanenti sono 1 byte. Se dovessi piegare le regole e stampare in maiuscolo, sarebbe 41 byte :

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

Puoi usare ee i(i numeri) per ridurre ulteriormente il conteggio dei byte?
Addison Crump,

1
@VTCAKAVSMoACE L'ho considerato, ma sono in corsivo, quindi sembrano leggermente diversi.
NinjaBearMonkey,

Per essere chiari, la prima riga non è un commento, viene memorizzata nella variabile di risposta.
Julian Lachniet,

12

So che è un po 'tardi (e un po' schizzinoso), ma ...

> <> (Pesce), 47 45 47 byte (in realtà 43 45, se non stavo usando la direzione randomizzata)

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

Queste risposte sono leggermente diverse l'una dall'altra; esiste la possibilità che entrambe le direzioni del codice vengano eseguite.

Quindi, "stampando su console", ho pensato che intendessi stampare su stdout. Questo genera un errore; l'errore viene generato su stderr DOPO che la stringa viene stampata su stdout.

Per dimostrare che questo ha funzionato in entrambi i modi, ho usato il regista "direzione casuale", "x". Fish è un linguaggio bidimensionale, quindi, indipendentemente dal modo in cui il regista indica, il codice verrà comunque (eventualmente) eseguito.

Supponendo che il primo regista punti a destra, i personaggi vengono caricati nella "pila" in ordine inverso, quindi viene stampato il retro del contrario (o il testo normale).

Supponendo che entrambi i registi puntino a sinistra, i personaggi vengono, ancora una volta, caricati nello "stack" in ordine inverso (poiché il codice lo carica qui all'indietro, la direzione è a sinistra), quindi il contrario dell'inverso (o il testo normale) viene stampato.

Se il regista randomizzato punta verso l'alto o verso il basso, questo non ha importanza: fish sa fare un giro nella parte inferiore o esterna del codice, indicando di nuovo il randomizzatore. In questo modo, continuerà a girare con i randomizzatori fino a quando non punta verso l'interno, verso il codice da eseguire.

Il !|o|!bit fa quanto segue, da entrambi i lati:

  • !salta la prossima istruzione (salterà sempre |)

  • |è un riflettore; punta verso l'interno di nuovo verso o.

  • o genera l'elemento corrente dello stack per consolarlo come personaggio e lo rimuove dallo stack.

Quindi, in sostanza, questo è il trucco "due specchi in un bagno uniti", in cui esco fino a quando non ci riesco più.

Ora usando un'emoji gatto. >o<reindirizza l'output verso l'interno all'infinito, generando ancora l'errore, ma posso cavarmela senza usare un salto in riflessione.

Ho scoperto che avevo ragione la prima volta: il secondo tentativo non era palindromico , ma era riflessivo .

Pesce (senza stampa su stderr), 64 byte (ew)

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

Questo tipo è un po 'più lungo.

Ha la stessa funzione di freccia randomizzata (per dimostrare che funziona in entrambi i modi) e non stampa su stderr.

La differenza qui è evidente; Stampo letteralmente ogni oggetto nella pila, quindi termino l'esecuzione con ;.

L'operazione !;non termina immediatamente, poiché !salta l'elemento successivo (end exec, in questo caso) e continua fino a quando non colpisce l'altro lato, che funge da ;!, in cui termina l'esecuzione prima di saltare qualsiasi cosa.

Segue lo stesso modello di direzione randomizzato della risposta più breve.


Penso che dovresti chiamare la lingua> <> per distinguerla dalla conchiglia di pesce
Aaron

@Aaron Si presume generalmente che Fish qui significhi> <>, ma ho già riscontrato questo problema prima - lo aggiungerò. Grazie!
Addison Crump,

come immagino, è imprevedibile se il codice completo verrà escogitato o meno. Cosa succede se il contatore del programma è bloccato tra due istruzioni di direzione casuali o semplicemente bloccato in una delle istruzioni di direzione casuale, ad esempio, si gira, raggiunge il fondo, torna a quell'istruzione e ricomincia da capo?

@GLASSIC Il programma verrà emesso una sola volta e l'intero codice non verrà mai eseguito.
Addison Crump,

11

Bubblegum , 38 byte

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

Maccheroni 0.0.2 , 52 byte

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

Una soluzione che non utilizza commenti. (Soprattutto perché i maccheroni non hanno commenti ...)


15
I maccheroni non hanno commenti? ಠ_ಠ
Alex A.




5

GolfScript, 41 byte

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

Guarda mamma, niente da fare! Provalo online in Web GolfScript .

La seconda metà del codice sorgente memorizza la stringa nella seconda stringa.

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

stamperebbe

Greetings, Planet!Greetings, Planet!

5

C ++, 129 byte

Provare a farlo senza commenti mi ha portato in un incubo oscuro e preprocessore senza via d'uscita che potevo vedere. Invece ho solo mirato a farlo il più breve possibile.

/**/
#include<cstdio>
int main(){puts("Greetings Planet!");}//*/
/*//};)"!tenalP sgniteerG"(stup{)(niam tni
>oidtsc<edulcni#
/**/

5

Python 3, 57 byte

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

Ho risolto il problema con la parentesi.

Python 2, 53 byte

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

Ho sfruttato la mancanza di parentesi e spazi richiesti in Python 2, ma non c'era una grande differenza.


5

Gelatina, non competitiva

25 byte Questa risposta non è competitiva, poiché la sfida precede la creazione di Jelly.

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

Guarda, no, nessun commento! Provalo online!

Come funziona

»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

Bloccato , 41 byte

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

Abbastanza simile alla risposta di CJam, tranne in Bloccato se viene emesso un comando di stampa, la stampa automatica dello stack viene soppressa.


3

Mathematica, 52 byte

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

Genera anche un Null "!tenalP ,sgniteerG"[tnirP]che non viene stampato.


1
Cordiali saluti, molte delle vostre risposte (compresa questa) sono state gettate nella coda di bassa qualità perché sono solo un titolo / punteggio e codice. Sebbene non ci sia nulla di sbagliato in questo, potresti prendere in considerazione l'aggiunta di altro testo (come una spiegazione) in modo che non vengano contrassegnati automaticamente.
Mego

@Mego Okay, ho pensato che fossero abbastanza autoesplicativi.
LegionMammal978,

1
Non sto dicendo che la mancanza di una spiegazione sia una cosa negativa (anche se le risposte con spiegazioni tendono a ottenere più voti), sto solo facendo sapere che le tue risposte (valide) venivano contrassegnate automaticamente a causa della loro lunghezza. :)
Mego

2
puoi salvare 2 byte con Echoin v10.3.
Shrx,

3

Fissione , 45 43 byte

Grazie a jimmy23013 per aver salvato 2 byte.

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

Provalo online!

Rinizializza un atomo che si sposta verso destra. "attiva / disattiva la modalità stringa che stampa semplicemente la stringa desiderata su STDOUT prima di colpire ;, il che distrugge l'atomo e termina il programma. La prima metà semplicemente non viene mai eseguita.


@ jimmy23013 Non ne ho idea, a dire il vero. Grazie.
Martin Ender,

3

05AB1E , 16 byte

Codice:

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

Spiegazione:

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

Provalo online!


2

STATA, 52 byte

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

Una versione leggermente più lunga (53 byte) che non utilizza commenti è:

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

#d [something]cambia il delimitatore (inizialmente un ritorno a capo) a ;meno che [qualcosa] sia cr, quindi il primo comando cambia il delimitatore in ;, il secondo stampa la stringa e il terzo (che continua fino alla fine) è apparentemente un nop, anche se non ho idea del perché. Avrei immaginato che ciò avrebbe generato un errore (comando non riconosciuto "! TenalP, sgniteerG" o qualcosa del genere), ma apparentemente no.


2

Japt , 29 byte

Questo linguaggio di programmazione è stato creato dopo la pubblicazione della domanda, ma non è stato creato per questa domanda.

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

Provalo online!

Ognuno ?è un carattere Unicode non stampabile: U + 0082, U + 000F, U + 000F e U + 0082, rispettivamente.

Curiosità: se Japt fosse stato pubblicato un mese prima, avrebbe legittimamente vinto questa sfida.


2

APL, 41 byte

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

In APL, viene stampato l'ultimo valore e il carattere della lampada (⍝) inizia un commento.


Ciao e benvenuto in PPCG! Bella risposta!
NoOneIsHere


2

TCL, 80 byte

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

spiegazione: TCL esegue un proc globale unknown quando incontra una chiamata a un comando indefinito, la prima riga ridefinisce quel proc in un semplice programma "ciao mondo".

Le regole di quotazione di TCL sono piuttosto sottili, una parentesi graffa aperta inizia una parola tra virgolette che si estende alla successiva parentesi graffa corrispondente corrispondente , consentendo parole nidificate, tra virgolette. Le parentesi graffe vengono altrimenti trattate come caratteri normali. cinque parole: }"!dlroW olleH", stup{, sgra, nwonknue corp. Non }"!dlroW olleH"è stato definito alcun comando denominato , pertanto undefinedviene richiamato proc dalla prima riga.

Una domanda simile è stata posta sullo StackOverflow dell'antichità; che da allora è stato chiuso ed eliminato. In questa risposta ho usato la mia soluzione come un esempio di lingua TCL nella guancia e ora ricevo commenti che chiedono una spiegazione, quindi ricrea qui la mia risposta.



1

Vitsy , 41 byte

Questo linguaggio di programmazione è stato creato dopo la pubblicazione della domanda, ma non è stato creato per questa domanda.

"! tenalP, sgniteerG" Z "Saluti, Pianeta!"

Il Zpersonaggio emette tutto nello stack su STDOUT.

Provalo online!


1

Unefunge 98 - 49 byte

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

Il codice sopra contiene due caratteri non stampabili con il codice 17 (controllo dispositivo 1) rappresentato da <DC1>.


1

MSM , 73 byte

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

La prima metà, poco prima del centro, ,crea una stringa di saluto inversa che include l'aggiunta Gsulla destra. Il centro lo ,lascia cadere e il resto è un programma canonico "Ciao / Saluto / qualunque cosa". Sono necessari i caratteri aggiuntivi su entrambe le estremità, poiché il messaggio contiene a ,. Quello sinistro viene eseguito e rilascia il s. Entrambi ,e snecessitano di una sostituzione per i punti di concatenazione a sinistra, quindi la Gs. La ,destra non viene eseguita, ma incorporata nella stringa finale.


1

CoffeeScript, 53 byte

Simile a Ruby e Lua e praticamente tutte le varianti qui.

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


1

Bash, 52 48 byte

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

Funziona anche in ksh, zsh, yash, dash. Ma non 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
Rimuovi tutte le virgolette.
arte

1
Oh cara, una risposta bash era più breve di python = /. Torna al tavolo da disegno!
Ashwin Gupta,

1

Lua, 52 byte

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

Nel terminale Lua, ha solo 44 byte con

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

Colpa mia. Grazie per l'avviso!
Digital Veer,

Rimuovi tutte le parentesi. Per le funzioni con un singolo parametro stringa sono opzionali.
arte

Lua 5.3 non richiede =nel terminale, quindi è di 2 byte. Penso che esistesse nel 2015, non sono sicuro.
dice Val Reinstate Monica il

1

Via Lattea 1.5.10 , 43 41 39 byte

"Greetings, Planet!"!tenalP ,sgniteerG"

Spiegazione

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

uso

python3 milkyway.py <path-to-code>

Hai davvero bisogno di un commento? Se questo è basato sullo stack (senza output implicito), dovrebbe funzionare solo l'output dello stack.
Addison Crump,

Hai ragione! Grazie. @FlagAsSpam
Zach Gates
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.