Ciao mondo! senza ripetizione


27

In qualsiasi linguaggio di programmazione esistente prima che questa domanda fosse posta, scrivi un programma (non una funzione) che emette i caratteri Hello world!seguiti da una nuova riga. Il tuo programma:

  • non dovrebbe usare nessun personaggio più di una volta (incluso lo spazio)
  • dovrebbe usare solo caratteri ASCII
  • non dovrebbe usare alcuna libreria integrata
  • non dovrebbe ricevere input (utente, file, nome file, variabile di sistema, internet, niente)
  • non dovrebbe produrre altro

Il vincitore è chi ha più voti dopo 14 giorni e rispetta le sei regole.

La sesta regola è che non è possibile utilizzare H9 +, HQ9 +, HQ9 + B, HQ9 ++, HQ9 + 2D, Hello, Hello +, Hello ++, Hexish, CHIQRSX9 + o Fugue. Inoltre, tutte le risposte che richiedono implementazioni più recenti di questa sfida devono essere contrassegnate come non concorrenti.


Dichiarazione di non responsabilità: questa domanda è stata pubblicata partendo dal presupposto che Hello World! con una ripetizione limitata non ha causato alcun danno al computer o al cervello durante la ricerca di risposte.


se stiamo sfuggendo ai codici carattere, il carattere "\" può essere usato più di una volta?
WallyWest,

4
E il piet?
Victor Stafusa,

@Victor "dovrebbe usare solo caratteri ASCII"
Timtech,

3
È stato un grande enigma, e mi è piaciuto farlo :-).
Konrad Borowski,

9
"Dovrebbe usare solo caratteri ASCII" - che restrizione draconiana. Ciò rimuove un'intera classe di lingue che non usano ASCII.
Timwi,

Risposte:


33

Perl 6 (29 28 caratteri)

Questo è stato in qualche modo fastidioso, ma alla fine sono riuscito a creare un programma per questo compito. Grazie alla fantastica community # perl6 , per avermi aiutato in questo compito. Mi ci sono volute due ore, spero che ti piaccia. L'output è completamente conforme alle specifiche, inclusa una nuova riga.

say
Q[@A`DO world!]~|<HeLhg>

Esistono quattro token di interesse.

  • say

    Questo genera l'argomento con una nuova riga alla fine. La nuova riga dopo il comando stesso è necessaria come sostituzione dello spazio.

  • Q[@A`DO world!]

    Questa è la prima stringa. Q[]è per stringhe non elaborate (come r""in Python). Può richiedere qualsiasi delimitatore (o coppia di essi), in questo caso []. In questo caso, lo uso per le virgolette, non ho bisogno del comportamento di stringa non elaborata.

  • ~|

    Questo è stringwise ( ~) bitwise o ( |) operatore.

  • <HeLhg>

    <>è letterale list, che occupa un elenco di elementi separato da spazi. In questo caso, ha un elemento, e usato come uno scalare, dà una stringa.


3
Stupefacente! Ho bisogno di imparare. Qualche sintassi Perl 6! Concordo anche con il tuo commento, è stato sicuramente un problema divertente!
Dom Hastings,

4
Woah ... la mia mente è sconvolta: O +1
Maniglia della porta

12

Perl 5 con -M5.010, 29 byte

say+He.v108
x2,q(O world!)^$"

Provalo online!

Ho acquisito molte conoscenze da quando ho provato per la prima volta. Ancora non così breve come le altre risposte, ma il meglio che posso inventare!


La sfida ha lettere minuscole w.
Ørjan Johansen,

@ ØrjanJohansen Grazie, mi sono dimenticato!
Dom Hastings,

11

Perl 5.10+: 24 caratteri

say+He,YZX^q(567 world!)

OK, penso che sia così breve come arriva in Perl.

Esegui con perl -M5.010(o solo perl -E) per abilitare la sayfunzione Perl 5.10+ .


Seriamente colpito! Ho passato anni cercando di aggirare il ll...
Dom Hastings,

9

Golfscript 42 33

Potrei anche giocare a golf, considerando che ho dovuto adattare parte del codice e tutti i dati nello stesso blocco senza alcun modo di delimitare i due, penso che questo sia un risultato piuttosto breve. A differenza della mia prima presentazione, il codice di blocco è ora una parte completamente integrata dei dati, quindi {1non solo inizia il blocco e inserisce uno 1stack, ma sono anche i dati che definiscono il He così via. La creazione dell'array ora include la stringa di input vuota, il che significa che non devo ritagliare l'inizio poiché c'è solo un carattere tra la stringa vuota e la H, quel carattere viene tagliato quando prendo ogni secondo carattere e il vuoto la stringa alla fine viene emessa come nulla.

{1wZ$Qei^Ak 3h-)ulmsogr7}.`*]2%n+

Demo online: http://golfscript.apphb.com/?c=ezF3WiRRZWleQWsgM2gtKXVsbXNvZ3I3fS5gKl0yJW4r

[{1$^(r iFNGDJUHv98oIMgtplbh4m}.`\*]6>2%n+

Definisce un blocco di codice. Crea una copia del blocco di codice e lo converte in stringa. Utilizza il blocco di codice per scorrere la stringa. Per ogni iterazione il codice farà una copia del precedente valore char, lo Xor con il valore char corrente e sottrae 1. Alla stringa risultante vengono quindi rimossi i primi 6 caratteri e ogni secondo carattere rimosso. Alla fine viene aggiunto un feed di riga.

"r iFNGDJUHv98oIMgtplbh4m" è solo due variabili non dichiarate, non fanno nulla, ma sono accuratamente costruite per produrre il risultato desiderato.

Demo online: http://golfscript.apphb.com/?c=W3sxJF4ociBpRk5HREpVSHY5OG9JTWd0cGxiaDRtfS5gXCpdNj4yJW4r



6

Befunge-98 , 34 31 byte

f"v!dlrow
+c<>a,kb@#*98e':g05-3

Provalo online!

Utilizza diversi metodi per evitare i caratteri duplicati.

Innanzitutto, usiamo una stringa di avvolgimento letterale per evitare di usare due "secondi. Questo aggiunge "mondo!" allo stack.

Andando a sinistra sulla seconda riga, aggiungiamo 9 in più fper rendere oil "Ciao". Abbiamo get il personaggio da cella 5,0 ( l) e poi duplicarlo. La 'si usa per andare a prendere alla lettera e. Moltiplica 9 per 8 per ottenere 72, il valore ASCII di H. Quindi stampiamo tutto usando ck,, e capovolgiamo la direzione con il >per riutilizzare il ,per stampare il newline ( a).


Molto bene, ma questa sfida è senza virgola.
Ørjan Johansen,

Oh lol, questo rende tutto più semplice ... Grazie @ ØrjanJohansen
Jo King,

Hai due di +e d.
Ørjan Johansen,

@ ØrjanJohansen oops. dovrebbe essere risolto ora
Jo King,

3

Elisir , 37 byte

IO.puts~c(He#{[?n-2,108]}\x6f world!)

Provalo online!

Non posso garantire che questo avrebbe funzionato nel 2014 quando questa sfida è stata pubblicata, e l'Elixir era ancora pre-1.0 (e quindi, se è formalmente "in competizione", ma guardando le loro note di rilascio, penso che dovrebbe essere OK). Ad ogni modo, sono felice di aver finalmente trovato una soluzione valida a questo compito usando un linguaggio di uso generale convenzionale diverso dal Perl!

Procedura dettagliata

IO.puts     #Print with trailing newline
~c(...)     #Sigil: charlist with interpolation
He          #Start of literal string...
#{...}      #Interpolated block
[?n-2,108]  #A list of codepoints for 2 'l's
\x6f        #Hex code for 'o'
world!      #...and done!

0

Stax (non concorrenziale), 8 byte

`dx/&\p4

Provalo online!

Solo una stringa compressa letterale. Fortunatamente Stax mi lascia andare senza il backtick di chiusura.

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.