Programma la tua frase preferita


28

Scegli una citazione o una frase di esattamente 5 parole, ad esempio Programming puzzles and code golf!.

Scrivi un programma che, una volta aggiunto a se stesso n volte, genera le prime n + 1 parole della tua frase in ordine.

Ad esempio, se il codice del programma era MYPROGe la frase era Programming puzzles and code golf!, in esecuzione ...

  • MYPROG dovrebbe produrre Programming
  • MYPROGMYPROG dovrebbe produrre Programming puzzles
  • MYPROGMYPROGMYPROG dovrebbe produrre Programming puzzles and
  • MYPROGMYPROGMYPROGMYPROG dovrebbe produrre Programming puzzles and code
  • MYPROGMYPROGMYPROGMYPROGMYPROG dovrebbe produrre Programming puzzles and code golf!

L'aggiunta di più di 4 volte non è definita, il programma potrebbe fare qualsiasi cosa.

Regole

  • La tua frase deve essere inglese grammaticalmente significativo. Idealmente, dovrebbe essere correttamente capitalizzato e punteggiato.
  • La tua frase può essere di qualsiasi lunghezza ma la sua entropia, calcolata da http://www.shannonentropy.netmark.pl/ , non può essere inferiore a 3.5 .
    (Incolla la tua frase, premi Calcola e cerca l'ultima H (X) .)
  • La tua frase può contenere solo caratteri ASCII stampabili (esadecimale da 20 a 7E). Il codice può contenere solo ASCII stampabili e schede e nuove righe.
  • La tua frase deve contenere esattamente 5 parole uniche e 4 spazi. Tutti i non spazi contano come parti di parole. Gli spazi sono i confini della parola. Potrebbero non essere in testa o in coda; ci dovrebbe essere uno dopo tutto, ma l'ultima parola.
  • L'output dovrebbe contenere anche uno spazio tra le parole. L'output in ogni passaggio accluso può contenere spazi finali ma non spazi iniziali.
  • Uscita su stdout. Non ci sono input.

punteggio

Il tuo punteggio è la lunghezza in byte del tuo programma iniziale non allegato. (es. MYPROGpunteggi 6)

Poiché si tratta di code-golf, vince il punteggio più basso.


21
aww, i requisiti di entropia e unicità uccidono la mia idea di "bufalo" come voce.
Sparr

4
Mi sarei divertito così tanto in Piet fino a quando "Il tuo codice può contenere solo ASCII stampabili e schede e nuove righe". :(
Sp3000,

3
@ Sp3000 Ti invitiamo a inserire una risposta onoraria. Mi piacerebbe vedere una soluzione Piet :)
Calvin's Hobbies,

Questa è l'unica situazione in cui la purezza di Haskell è esattamente il problema ...
Rhymoid

inglese significativo grammaticale Troppo poco chiaro che cosa sia "inglese significativo grammaticale" a causa delle diverse interpretazioni grammaticali e significative.
MilkyWay90

Risposte:


6

CJam - 24

"TheguywasnotI"Lm3<]S*:L

Provalo su http://cjam.aditsu.net/

Spiegazione:

Lmrimuove le lettere contenute in L (inizialmente "") da "TheguywasnotI"
3<prende le prime 3 lettere
]raccoglie il contenuto dello stack in un array si
S*unisce all'array usando lo spazio come un separatore
:Lassegna la stringa risultante a L (lasciandola anche nello stack )

Vecchia versione (28 byte):

"He is but a dog."S/W):W=]S*

Spiegazione:

S/divide per
W):Wincrementi di spazio W (inizialmente W = -1)
=ottiene la parola W'th
]raccoglie il contenuto dello stack in un array che
S*unisce l'array usando lo spazio come separatore


Questa lingua è davvero interessante. Come si suol dire, "impari ogni giorno una nuova lingua" ... o qualcosa del genere. Buon lavoro!
Brobin,

Accettando questa invece della risposta altrettanto breve di Dennis poiché questa è stata pubblicata per prima.
Calvin's Hobbies,

28

Piet (risposta onoraria)

inserisci qui la descrizione dell'immagine

Serpeggia verso il basso, correndo verso destra attraverso il blu e rientrando nel verde. Stampa "Mosche della frutta come una banana".

Ho usato PietCreator per farlo, ma puoi provarlo qui . Il rifacimento dei programmi Piet è una seccatura, quindi ho iniziato con 35x35 e ho continuato in quel modo, il che significa che ho usato molti più codici di quanti ne avessi bisogno.

Versioni di dimensioni reali

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


11

> <> (42)

I pesci sono davvero i più grandi animali domestici. Alcune persone mantengono i bug come animali domestici a causa di una incomprensibile mancanza di logica. Questo programma fa del suo meglio per ragionare con queste persone.

!v'?od gub yna nac tahW;'00p!
<<|ov!
voo <

Nota che questo non è un newline finale nel programma. L'output completo è invertito nella prima riga; la frase completa è "Cosa può fare qualsiasi bug?" (entropia 3.58418).

Spiegazione completa:

Questo è uno dei programmi più divertenti> <> che ho scritto, poiché questo è il primo che utilizza la riflessione. La prima riga è dove si trova la carne del programma.

!vè una no-op, poiché !fa saltare la prossima istruzione.

'?od gub yna nac tahW;' memorizza la frase completa nella pila (è all'indietro perché ogni lettera viene inserita nella pila nell'ordine scritto, quindi deve essere invertita per essere spuntata bene).

00pè dove inizia la vera magia. Nota che non ha solo memorizzato la frase, ha anche memorizzato un ;. 00pinserisce il carattere superiore nello stack nel programma in posizione (0, 0), quindi ora il primo carattere del programma è a ;.

La fine !salta quel punto e virgola e sposta il cursore su v, che dirige il flusso del programma verso il basso.

Da qui in poi, è tutto solo stampa di routine. Poiché non è presente una nuova riga finale, le successive appendici del programma aggiungono semplicemente le ultime due righe, in effetti, poiché la prima riga sarà alla destra di voo <, e quindi non verrà mai eseguita.

Alla fine, il cursore è diretto in basso a sinistra nel programma e torna indietro in alto a sinistra, dove è ;stato inserito in precedenza, terminando il programma.


Un minuto fa questo non era tecnicamente valido, ma ho appena cambiato le specifiche in modo che le nuove righe (e le schede) siano consentite nel codice (che è quello che volevo originariamente).
Calvin's Hobbies,

Oh mio Dio, mi mancava totalmente quello che si applicava alla fonte, non solo alla frase. Sono contento che fosse l'intento,> <> i programmi dipendono abbastanza dai newline.
Mike Precup,

Se vuoi giocare un po 'verso il basso, potresti usare una frase con 11 lettere e senza caratteri ripetuti, come La "It is by a rope."tua frase ripete i caratteri, quindi ha un'entropia inferiore rispetto a quella che potrebbe.
isaacg,

Il problema è che praticamente ogni output deve avere la stessa lunghezza per stampare bene, poiché> <> non è in grado di rilevare facilmente gli spazi. Non sono riuscito a trovarne uno più corto.
Mike Precup,

2
@isaacg Personalmente preferisco la frase di Mike;)
Calvin's Hobbies,

10

Python 66

i='i'in dir()and i+1;print("Tfpcfhaialetgny"[i::5],end=" ."[i>3]);

Entropia: 3.61635

ouput:

The fat pig can fly.

Grazie a @JasonS e @grc per i suggerimenti sull'accorciamento della parte di rilevazione variabile.

Aggiornamento: vedi la risposta di JasonS per un malvagio trucco avvolgente che lo ha spinto a 55 byte. :)


i=locals().get('i',-1)+1;è -5 byte
Jason S

Sconfiggimi! Stavo per usare i='i'in dir()and i+1. Modifica: regole modificate.
GRC

Bene, questo è un altro -4
Jason S

60 byte con Python 2:i='i'in dir()and i+1;print"Tfpcfhaialetgny"[i::5]+" ."[i>3],
nyuszika7h,

9

Python 3, 55 (bonus 67)

# 55 bytes, H(X)=3.72, Based on bitpwner's 66. "Mix dog and cat fur."
i=0;print("Mdacfionauxgdtr"[i::5],end=" ."[i>3]);i+=1;i

# 67 bytes, H(X)=4.28. "Thanks for supporting Python development."
q=b"qx!%%0077C";a,b,*q=q;print((str(credits)*2)[49:][a:b],end='');q

# 60 bytes, H(X) = 3.51. "Fix the bed old pal"
s="Fixthebedoldpal";a,b,c,*s=s;print(a+b+c,end='. '[s>[]]);s

Vuoi dire che si avvolge?

OK, qualche spiegazione su # 2 (spoiler)

  • creditsè un built-in Python che contiene testo che vorrei usare. È di un tipo speciale con un formattato in reprmodo che tu possa semplicemente digitarlo nell'interprete interattivo e vedere un bel risultato, quindi devo str()farlo. Ho trascorso un bel po 'di tempo a guardare i builtin per questo, e "Grazie per supportare lo sviluppo di Python" come frase era troppo bello per lasciarsi sfuggire.

  • Dato che c'è molto testo e voglio solo le mie 5 parole, voglio memorizzare le posizioni di inizio e fine di ogni sottostringa. Questo è nei byte all'inizio. bytesgli oggetti in python3 agiscono come matrici di numeri interi quando si utilizzano operazioni di sequenza su di essi.

  • Ma il codice può contenere solo caratteri stampabili, quindi ho dovuto trovare un offset (49) che avrebbe reso tutti i miei valori di posizione stampabili come caratteri.

  • "Grazie" è vicino all'inizio della stringa mentre le altre parole sono più vicine alla fine, il che significa che i miei valori di posizione erano troppo distanti per essere tutti compresi nell'intervallo stampabile. Mulitplied la stringa per 2 fa un'altra copia di "Grazie" che è più vicino alle altre parole.

  • Prendere la [49:]sezione della stringa è un byte di sorgente in meno rispetto all'aggiunta di 49 sia a che a b.

  • Il costrutto usato in tutte e tre le risposte è x=<value>;dostuff and increment;x. Il trailing xnon fa assolutamente nulla, ma quando combinato con la prossima copia del codice si trasforma in ciò xx=<value>che impedisce la xsovrascrittura del contatore.

  • a,b,*q=q è il normale disimballaggio della sequenza di Python 3.


+1. Trucco malvagio. :) Posso aggiornarlo alla mia risposta?
Vectorized

Bene, ho usato il tuo mezzo
Jason S

Attualmente mi meraviglio della tua seconda risposta. Così tanti trucchi racchiusi in esso.
Vectorized

2
Potete per favore dirmi, come funziona la seconda risposta?
sajas,

8

Python 2 (37)

Dopo che Sarah è diventata presidente del suo capitolo locale sulla Mensa, è diventata al centro dell'attenzione romantica da parte degli uomini in cerca di un partner intelligente. Ad ogni appuntamento, Sarah avrebbe cercato di stabilire una connessione personale, ma gli uomini l'avrebbero solo sondata su astruse domande filosofiche. Frustrata dal fatto che a nessuno importasse del suo lato emotivo, esclamò ...

i=4;print"mniIMeosQy!t"[i::5],;i-=1;i

Produzione:

My
My IQ
My IQ is
My IQ is not
My IQ is not me!

L'entropia è H(x)=3.5esattamente.

Ringraziamo Jason S., la cui risposta ho sostanzialmente usato all'ingrosso. Il iitrucco avvolgente è meraviglioso.


Bello! Puntelli per trovare una frase più breve con l'entropia giusta. Ho mollato. Ho anche dimenticato che py2 antepone gli printspazi anziché aggiungerli
Jason S

Questo è incredibilmente breve per una risposta Python! Molto bene.
isaacg,

Puoi rimuovere la virgola che hai nel mezzo del programma per scendere a 36 caratteri.
xleviator,

8

C - 65

Abuso di commenti :)

char*z="Ah, \0the \0good \0ol' \0times!";
for(printf(z);*z++;);//

Per questo motivo, le nuove righe sono importanti e il codice deve essere aggiunto come segue:

char *z="Ah, \0the \0good \0ol' \0times!";
for(printf(z);*z++;);//char *z="Ah, \0the \0good \0ol' \0times!";
for(printf(z);*z++;);//...

Questa è una bella soluzione!
MilkyWay90,

4

CJam, 24 byte

"LwOtmiaKoezs"W):W>5%]S*

Se eseguito cinque volte, mi risulta che Liz stia bene . Punteggiatura non inclusa, scusate.

Come funziona

"LwOtmiaKoezs"  " Push that string. ";
W):W            " Push W (initially -1), increment and save the result in W. ";
>               " Shift that many characters from the string. ";
5%              " Select every fifth character, starting with the first. ";
]S*             " Wrap the stack in an array and join its strings using spaces. ";

Bella idea, anche se la frase è un po 'debole: p
aditsu

Lo ammetto, ma doveva essere xxx xxx xx xx xx , senza lettere ripetute. Questa è l'unica frase che ho potuto escogitare che aveva almeno un po 'di senso ...
Dennis

Che ne dici di "Sun era OK per me"? Puoi anche sostituire "Sun" con un'altra parola o nome.
aditsu,

Va meglio, grazie.
Dennis,

3

Pyth , 32

p?kqZ4d@P"It is by a rope."dZ~Z1

Frase: "È da una corda".

Entropia: 3.5

Come funziona:

p significa stampare con il separatore specificato.

Il primo argomento ?kqZ4d, fornisce il separatore. ?kqZ4dsignifica k if Z==4 else d. kè '', mentre dè ' '.

Il secondo argomento, il valore da stampare, viene generato da splitting ( P) su space ( d) e l'indicizzazione in quell'elenco ( @) in Z.

Infine, Zche viene inizializzato automaticamente su 0, viene incrementato di 1 ( ~Z1).


2
Non riuscivo a pensare a un contesto in cui questa fase si sarebbe naturalmente inserita in ^^
flawr

1
@flawr "Dove ho vissuto la palla?" "È con una corda."
isaacg,

3

Golfscript, 53

Questo è stato divertente.

{'1'-print}:puts;.'You; are; not; a; duck.'';'/\,=\1+

Frase: "Non sei un'anatra". (che è completamente vero; entropia 3.5110854081804286)

Spiegazione:

Lo stack inizierà come ''al primo "run" (poiché non viene fornito alcun STDIN). '1'vengono aggiunti a questo per indicare quante volte il codice è stato incollato.

{'1'-print}:puts;             # Hacky stuff (see below)
.                             # Stack: '' ''
'You; are; not; a; duck.'';'/ # Initialize the array of words
\,                            # Get the length of the string of '1's (0)
                              # Stack: '' [words] 0
=                             # Stack: '' 'You'
\1+                           # Stack: 'You' '1'

Ora cosa succede alla seconda manche:

{'1'-print}:puts;             # Hacky stuff (see below)
.                             # Stack: 'You' '1' '1'
'You; are; not; a; duck.'';'/ # Initialize the array of words
\,                            # Get the length of the string of '1's (1)
                              # Stack: 'You' '1' [words] 1
=                             # Stack: 'You' '1' ' are'
\1+                           # Stack: 'You' ' are' '11'

E così via.

"Ma" stai pensando "come fai a non ottenere l'1s in uscita?" Ah, questa è la parte divertente di hacky. Golfscript implementa puts(che viene chiamato quando termina il programma) in questo modo:

{print n print}:puts;

L'ho semplicemente cambiato in

{'1'-print}:puts;

In modo che le 1s vengano eliminate dall'output finale.


3

J - 42 caratteri

Potrei scegliere una frase più breve, ma perché? Non sarebbe il mio preferito.

(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '

Questo funziona a causa della dualità monade / diade di J: ogni verbo può essere invocato come una monade — con un argomento alla sua destra — o come una diade — con un argomento a sinistra e un altro a destra.

Considera la seguente sessione con J REPL:

   'You multiplied 6 by 9. '
You multiplied 6 by 9.
   'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '
You multiplied 6 by 9. You multiplied 6 by 9.
   ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '   NB. break into words
+---+----------+-+--+--+---+----------+-+--+--+
|You|multiplied|6|by|9.|You|multiplied|6|by|9.|
+---+----------+-+--+--+---+----------+-+--+--+
   (#\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '             NB. count off
1 2 3 4 5 6 7 8 9 10
   (6 | #\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '         NB. mod 6
1 2 3 4 5 0 1 2 3 4
   (1 = 6 | #\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '
1 0 0 0 0 0 1 0 0 0
   (#~ 1 = 6 | #\) ;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. '  NB. select
+---+----------+
|You|multiplied|
+---+----------+
   (#~ 1 = 6 | #\)&.;: 'You multiplied 6 by 9. ' , 'You multiplied 6 by 9. ' NB. undo ;:
You multiplied

Lì, ,viene trattato come una diade, perché è tra due argomenti, ed (#~1=6|#\)&.;:è una monade perché non ha argomento a sinistra. Quindi se avessimo un verbo che potrebbe comportarsi come ,se diadico e (#~1=6|#\)&.;:monadico, saremmo impostati.

Come avrai già intuito, esiste una simile congiunzione e sembra :. Monadic f :gè equivalente a f, ed è equivalente a gquando diadico. Questo risolve il problema.

Esempi, che puoi provare tu stesso su tryj.tk :

   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied 6
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied 6 by
   (#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '(#~1=6|#\)&.;: :,'You multiplied 6 by 9. '
You multiplied 6 by 9.

E sì, la natura dell'inverso di lo ;:rende in modo che non ci siano spazi finali.

Utilizzando It is by a rope.come la frase dà 35 char: (#~1=6|#\)&.;: :,'It is by a rope.'. Non abbiamo bisogno dello spazio finale come facciamo per la mia frase, per ;:ragioni arcane e basate su.


3

BBC Basic, 40 anni

Include una nuova riga. Sarebbe 30 se le parole chiave potessero essere considerate tokenizzate anziché ASCII.

Ho sorpreso la mia ragazza a letto con il lattaio, quindi l'ho scaricata e sto dormendo con sua sorella per vendetta. As my ex do I!(cinque "parole" di due lettere con caratteri unici) non erano abbastanza entropia, quindi alla fine ho aggiunto lo smiley con la lingua per rendere esattamente l'entropia 3.5. Dopotutto, in realtà ho una vita abbastanza normale, non una strana trama della soap opera.

  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P

Ripetendo il programma 5 volte otteniamo

  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P
  READa$:PRINTa$;" ";
  DATAAs,my,ex,do,I:-P

READVengono eseguite solo le 5 istruzioni e i primi 5 elementi di dati vengono letti dalla prima DATAistruzione. il resto dei dati è ridondante. Produzione:

  (once)
  As 
  (5 times)
  As my ex do I:-P 

2

Ruby, 50 anni

puts'The fat pig can fly.'[0..File.size($0)/12-1]#

Questo utilizza la propria lunghezza per determinare quante parole stampare. Le sue ripetizioni sono altrimenti ignorati dal termina con il carattere di commento, #. Frase presa in prestito da bitpwner : è molto conveniente avere una breve frase con lo stesso numero di lettere in ogni parola.

Dal momento che ogni parola + finale è di 4 caratteri, la formula sarebbe, ad esempio per un programma di 56 lunghezze:, (File.size($0)/56)*4 - 1ma posso dividere in anticipo 56/4 = 14, quindi File.size($0)/14 - 1, salvando alcuni caratteri. 50non è un multiplo di 4, ma 12è abbastanza vicino per l'intervallo necessario.


2

Chip , 165 + 3 = 168 byte

+3 per la bandiera -w

| ,z `Z`Z  `Z
| |ZZZ>Z>ZZZ>ZZZZ
>((((((((((((((((
|)-)))-)-)))-))))g
|)d)xx-x-)xx-))x)e
||b+))-x-x))-x)xc
|`v))xa(-x(x-((^d
|*`.))d| b | b
|Z~<b( |~Zf|
>~T| | |   |

"Ho vinto un seme rosso" (3.5) (in realtà non ho vinto nulla del genere) (... ancora)

Nota la nuova riga finale, quindi la copia concatenata appare sotto il codice esistente.

Provalo online! (l'originale)
Provalo online! (l'originale, più tutte e quattro le copie)

Questo è un po 'di confusione. Si è scoperto che la parte più delicata era la condizione di terminazione. (La mia prima iterazione ha stampato le parole, seguite da un flusso infinito di byte null ...).

Come funziona

Prima la frase:
12 caratteri unici + 4 spazi = esattamente 3,5 entropie.

E il codice:
ogni copia stampa la prima parola, quindi dice alla copia seguente per stampare la parola successiva. Se esiste solo un'istanza, non esiste una seconda copia, quindi non viene stampato nulla tranne la prima parola.

Se ci sono due copie, entrambe stamperanno contemporaneamente la prima parola (i byte sono OR insieme, quindi va bene), quindi solo la seconda copia stamperà la seconda parola.

Se sono presenti tutte e cinque le copie, tutte verranno stampate la prima parola, ecc. Ecc. E la quinta copia stamperà l'ultima parola da sola.

Il circuito di terminazione terminerà il programma non appena tutte le copie non verranno stampate attivamente.


1

Ruby, 63 anni

+1;puts"See Dick and Jane run!"[/(.*?( |!)){#$.}/]if($.+=1)==$.

1

Perl, 37

print qw(My IQ is not me!)[$i++].' ';

Simile a quello che aveva il comperendinous, ma sfruttando il qw di perl per salvare qualche altro personaggio.


1

Lunghezza del messaggio Rebmu + 27

Dovevamo andare con "Il mio QI non sono io!" sarebbe 43. Ma sostengo questo messaggio:

uV?'s[S[{The}{rebellion}{against}{software}{complexity.}]]proTKsPROsp

Rebol equivalente / rosso:

unless value? 's [
    s: [{The}{rebellion}{against}{software}{complexity.}]
]

print/only take s
print/only space

Rebol ha 3 condizionali di base: IF, EITHER e UNLESS. UNLESS equivale a SE NON, ma può essere più chiaro: "Fai sempre quanto segue A MENO che questa condizione sia vera."

In questo caso la condizione è che testiamo per vedere se al simbolo S è stato dato un valore nel contesto attuale. Dobbiamo usare una citazione su di essa, perché il tentativo di utilizzare una S non quotata in un'espressione condizionale lo valuterebbe e potrebbe sollevare un errore. ( value?non cita il suo parametro di default perché potresti voler avere quale simbolo stai controllando essere in una variabile, ad es. sym: 'squindi if value? sym [...]verificherebbe effettivamente se S è stato definito, non SYM)

Solo la prima incolla del programma assegnerà la serie di stringhe a S. Le paste successive prenderanno una stringa dal capo della serie e la passeranno a STAMPA / SOLO che stamperà il suo argomento senza aggiungere un avanzamento riga.

(Nota: STAMPA / SOLO è un modo sostitutivo suggerito per dire PRIN, che viene preso in considerazione in Rebol 3 e Red; una sostituzione di stampa è ora in fase di test in Rebmu.)


1

AHK , 44 byte

i++
Send % SubStr("He is an OK ex",i*3-2,3)

Nota la nuova riga alla fine. L'unica cosa intelligente qui è che la stringa è composta da tutte le parole di 3 lettere, quindi non dobbiamo dividere nulla. Invece, basterà tirare una sottostringa basata su i. L'output è sullo schermo attivo come se fosse stato digitato sulla tastiera.


0

Javascript (53)

Ho preso il testo da aditsu in quanto non sto facendo nulla di fantasia con il testo, quindi le parole scelte sono in qualche modo irrilevanti per la soluzione (tranne per il conteggio dei byte).

var i=i|0;alert("He 0is 0but 0a 0dog".split(0)[i++]);

Non alertconta in questo caso? Modifica: probabilmente leggendo le regole non funziona, poiché non sto unendo le stringhe agli spazi. Aggiungerò spazi per renderlo giusto.

Si noti inoltre che il costoso varè effettivamente rilevante in questo caso.


Qualcuno può spiegare perché var i|=0;NON funziona qui ???
Flawr

@flawr Non puoi farlo |=o simile con var. Senza var, ottieni a ReferenceError: i is not defined. var i=i|0si espande var i=undefined|0e undefined|0sembra essere 0.
nyuszika7h,

Questo funziona a causa del sollevamento. var i=i|0è equivalente a var i;i=i|0. Ecco perché non ottieni l'errore di riferimento. La ragione per cui sarà impostato a 0 la prima volta è ciò che ha detto @ nyuszika7h.
Ingo Bürk,

1
Ma questo avviserà le parole separatamente.
orgoglioso haskeller il

0

Perl, 43 56

print substr'Mine was not Red 5!',4*$i++,4;

Accetto di non poter vincere questo. Il mio tentativo originale spiega perché:

@a=('This',' code',' is',' too',' long.');print$a[$i++];

0

Lua, 77

Una soluzione abbastanza semplice:

i=(i or 0)+1;io.write((i==1 and""or" ")..("Thebigfoxwasup."):sub(3*i-2,3*i))

(H (X) = 4.23)


0

Javascript, 138

g=this;clearTimeout(g.t);g.i|=0;i++;g.t=setTimeout(
    function(){console.log(["I'll","sleep","when","I'm","dead."].slice(0,i).join(' '))},0);

(la nuova riga aggiuntiva viene aggiunta solo per la leggibilità)

Stampe I'll sleep when I'm dead. Utilizza un timer per assicurarsi che l'output venga stampato una sola volta


0

Pure Bash, 51 byte

a=(All you need is Love!)
printf "${i:+ }${a[i++]}"

H (X) = 3.59447

Questo potrebbe essere risolto un po 'di più tirando fuori una delle frasi più brevi, ma sono felice di continuare con la citazione più famosa di Lennon di Cartesio . (Mi dispiace @Descartes, ma tutte le parole devono essere uniche).

Produzione:

$ ./phrase.sh 
All$ cat phrase.sh phrase.sh phrase.sh > phrase3.sh
$ chmod +x phrase3.sh 
$ ./phrase3.sh 
All you need$ 
$ cat phrase.sh phrase.sh phrase.sh phrase.sh phrase.sh > phrase.sh
$ chmod +x phrase5.sh 
$ ./phrase5.sh 
All you need is Love!$ 

Si occupa di inserire spazi tra le parole, ma senza spazi iniziali o finali.

Si basa sul fatto che in bash, variabili non definite, quando espanse come stringhe hanno il valore "", ma quando espanse aritmeticamente hanno il valore 0.


Le 5 parole devono essere uniche ...
trichoplax

Dato che il tuo codice sembra abbastanza versatile da gestire qualsiasi frase di 5 parole, sono sicuro che puoi pensare a una che abbia l'entropia richiesta di 3,5 (troppe lettere doppie in questa ...).
trichoplax,

@githubphagocyte Speravo che mi avresti dato il vantaggio di arrotondare ;-) Ok, l'ho risolto con un extra !ora - sembra fare il trucco.
Trauma digitale

0

PHP 89 78 caratteri

È un po 'prolisso e sicuramente non vincerà, ma è stato comunque divertente. Ecco cosa mi è venuto in mente

Frase:

code golf is pretty fun

Entropia = 3.82791

Codice:

<?
$i=(isset($i)?$i+1:0);
$w=["code","golf","is","really","fun"];
echo $w[$i].";

golfed:

<?$i=(isset($i)?$i+1:0);$w=["code","golf","is","really","fun"];echo $w[$i].

0

Python3 - 122 byte

Apri le porte dell'alloggiamento del pod [HAL]

Immagino che guadagnerò un po 'di credito secchione con questo. Se solo la domanda consentirebbe un'altra parola ...

Quello che fa il mio programma è prendere il nome del file (p.py è la base) e controlla quante volte viene ripetuto il nome della base. Prende quindi sezioni da una stringa nvolte. nessendo il numero di ps nel nome file.

import sys,re
for i in range(len(re.findall(re.compile('p'),sys.argv[0]))):print('Otpbdphoaoeedyon   r    s'[i::5],end='')

~ $ python p.py
Open

~ $ python pp.py
Open the

~ $ python ppp.py
Open the pod

~ $ python pppp.py
Open the pod bay

~ $ python ppppp.py
Open the pod bay doors

Il vantaggio di regex è che il programma può essere chiamato come preferisci e funzionerà comunque (purché tu cambi il nome di base nel codice): il mio programma originale era chiamato golfed.py.


0

05AB1E , 21 byte (non competitivo)

“€Œ‰‹€‡Øš‹É.“ª#¾è¼?ð?

Provalo online!

usi:

This works for literally anything. 
H(x) = 4.02086

Spiegazione

“€Œ‰‹€‡Øš‹É.“ª#¾è¼?ð?
“€Œ‰‹€‡Øš‹É.“ª        # Pushes "This works for literally anything."
              #       # Split on spaces
               ¾è     # get element at index of counter_variable (default 0)
                 ¼    # Increment the counter_variable
                  ?   # Print the selected element
                   ð? # Prints a space

Non l'ho visto, pubblicato quasi lo stesso con “€í€Ü€…‚¿‹·“hehe
Magic Octopus Urn


0

SmileBASIC, 54 byte

DATA"Does"," anybody"," have"," a"," key?
READ W$?W$;

Avrei preferito "La sabbia può essere mangiata". ma questo non riesce in qualche modo al test entropico. Ovviamente avrei potuto scegliere una frase più breve, ma questo è noioso.

La READparola chiave legge un valore DATAe lo memorizza in una variabile. Usando di READnuovo otterrai l'elemento successivo e così via.


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.