Programmez votre phrase préférée


28

Choisissez une citation ou une phrase qui fait exactement 5 mots, par exemple Programming puzzles and code golf!.

Écrivez un programme qui, une fois ajouté à lui-même n fois, sort les n + 1 premiers mots de votre phrase dans l'ordre.

Par exemple, si votre code de programme était MYPROGet que votre phrase était Programming puzzles and code golf!, en cours d'exécution ...

  • MYPROG devrait sortir Programming
  • MYPROGMYPROG devrait sortir Programming puzzles
  • MYPROGMYPROGMYPROG devrait sortir Programming puzzles and
  • MYPROGMYPROGMYPROGMYPROG devrait sortir Programming puzzles and code
  • MYPROGMYPROGMYPROGMYPROGMYPROG devrait sortir Programming puzzles and code golf!

Ajouter plus de 4 fois n'est pas défini, votre programme peut faire n'importe quoi.

Règles

  • Votre phrase doit être grammaticalement significative en anglais. Idéalement, il devrait être correctement capitalisé et ponctué.
  • Votre phrase peut être de n'importe quelle longueur mais son entropie, telle que calculée par http://www.shannonentropy.netmark.pl/ , ne doit pas être inférieure à 3,5 .
    (Collez votre phrase, appuyez sur Calculer et recherchez le dernier H (X) .)
  • Votre phrase ne peut contenir que des caractères ASCII imprimables (hex 20 à 7E). Votre code ne peut contenir que des caractères ASCII imprimables et des tabulations et des sauts de ligne.
  • Votre phrase doit contenir exactement 5 mots uniques et 4 espaces. Tous les non-espaces comptent comme des parties de mots. Les espaces sont les limites des mots. Ils peuvent ne pas être en tête ou en queue; il devrait y en avoir un après tout, mais le dernier mot.
  • La sortie doit également contenir un espace entre les mots. La sortie à chaque étape d'ajout peut contenir des espaces de fin mais pas d'espaces de début.
  • Sortie vers sortie standard. Il n'y a aucune entrée.

Notation

Votre score est la longueur en octets de votre programme initial non ajouté. (par exemple, MYPROGnote 6)

Comme il s'agit de code-golf, le score le plus bas l'emporte.


21
aww, les exigences d'entropie et d'unicité tuent mon idée de "buffle" comme entrée.
Sparr

4
J'allais tellement m'amuser dans Piet jusqu'à ce que "Votre code ne puisse contenir que des ASCII imprimables et des tabulations et des sauts de ligne." :(
Sp3000

3
@ Sp3000 Vous êtes invités à fournir une réponse honorifique. J'aimerais voir une solution Piet :)
Calvin's Hobbies

C'est la seule situation où la pureté de Haskell est exactement le problème ...
Rhymoid

grammatical anglais significatif Trop peu clair ce qu'est "l'anglais grammatical significatif" en raison des différentes interprétations grammaticales et significatives.
MilkyWay90

Réponses:


6

CJam - 24

"TheguywasnotI"Lm3<]S*:L

Essayez-le sur http://cjam.aditsu.net/

Explication:

Lmsupprime les lettres contenues dans L (initialement "") de "TheguywasnotI"
3<prend les 3 premières lettres
]recueille le contenu de la pile dans un tableau
S*rejoint le tableau en utilisant l'espace comme un séparateur
:Lattribue la chaîne résultante à L (la laissant également sur la pile )

Ancienne version (28 octets):

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

Explication:

S/se divise par
W):Wincréments d' espace W (initialement W = -1)
=obtient le Wème mot
]recueille le contenu de la pile dans un tableau
S*rejoint le tableau en utilisant l'espace comme séparateur


Cette langue est vraiment intéressante. Comme on dit, "Vous apprenez une nouvelle langue chaque jour" ... ou quelque chose comme ça. Bon travail!
Brobin

Accepter cela au lieu de Dennis ' réponse tout aussi courte car cela a été publié en premier.
Les loisirs de Calvin le

28

Piet (réponse honorifique)

enter image description here

Serpente son chemin vers le bas, sortant à droite par le bleu et rentrant par le vert. Imprime "Les fruits volent comme une banane".

J'ai utilisé PietCreator pour faire cela, mais vous pouvez l'essayer ici . Refaire les programmes Piet est une douleur, alors j'ai commencé à 35x35 et j'ai continué comme ça, ce qui signifie que j'ai utilisé beaucoup plus de codels que ce dont j'avais besoin.

Versions à taille réelle

enter image description here enter image description here enter image description here enter image description here enter image description here


11

> <> (42)

Les poissons sont vraiment le meilleur animal de compagnie. Certaines personnes gardent les insectes comme animaux de compagnie en raison d'un manque de logique incompréhensible. Ce programme fait de son mieux pour raisonner avec de telles personnes.

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

Notez qu'il n'y a pas de nouvelle ligne de fin dans le programme. La sortie complète est inversée dans la première ligne; la phrase complète est "Que peut faire un bug?" (entropie 3.58418).

Explication complète:

C'est l'un des programmes> <> les plus amusants que j'ai écrits, car c'est le premier qui utilise la réflexion. La première ligne est l'endroit où se trouve la viande du programme.

!vest un no-op, car !la prochaine instruction est ignorée.

'?od gub yna nac tahW;' stocke la phrase complète sur la pile (c'est à l'envers parce que chaque lettre est poussée sur la pile dans l'ordre écrit, donc elle doit être inversée pour être bien sortie).

00pc'est là que la vraie magie commence à se produire. Notez qu'il n'a pas seulement stocké la phrase, il a également stocké a ;. 00pinsère le premier caractère sur la pile dans le programme à la position (0, 0), donc maintenant le premier caractère du programme est a ;.

La fin !ignore ce point-virgule et déplace le curseur sur v, ce qui dirige le flux du programme vers le bas.

À partir de maintenant, ce ne sont que des routines d'impression. Puisqu'il n'y a pas de nouvelle ligne, les ajouts successifs du programme ajoutent simplement les deux dernières lignes, en effet, puisque la première ligne sera à droite de voo <, et ne sera donc jamais exécutée.

À la fin, le curseur est dirigé vers le bas à gauche du programme et revient en haut à gauche, là où le a ;été inséré plus tôt, mettant fin au programme.


Il y a une minute, cela n'était techniquement pas valide, mais je viens de modifier les spécifications afin que les sauts de ligne (et les tabulations) soient autorisés dans le code (ce que je voulais à l'origine).
Calvin's Hobbies

Oh, mon mauvais, totalement raté que cela s'applique à la source, pas seulement la phrase. Je suis heureux que c'était l'intention,> <> les programmes s'appuient assez fortement sur les sauts de ligne.
Mike Precup

Si vous voulez jouer un peu plus bas, vous pouvez utiliser une phrase avec 11 lettres et sans caractères répétés, comme "It is by a rope."Votre phrase répète des caractères, de sorte qu'elle a une entropie plus faible qu'elle ne le pourrait.
isaacg

Le problème est que chaque sortie doit avoir la même longueur pour pouvoir être imprimée correctement, car> <> ne peut pas détecter facilement les espaces. Je n'ai pas pu en trouver un plus court.
Mike Precup

2
@isaacg Personnellement, je préfère la phrase de Mike;)
Calvin's Hobbies

10

Python 66

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

Entropie: 3.61635

Sortie:

The fat pig can fly.

Merci @JasonS et @grc pour les conseils sur le raccourcissement de la partie détection variable.

Mise à jour: voyez la réponse de JasonS pour une astuce enveloppante qui l'a réduit à 55 octets. :)


i=locals().get('i',-1)+1;est de -5 octets
Jason S

Battez-moi! J'allais utiliser i='i'in dir()and i+1. Modifier: les règles ont changé.
grc

Eh bien, c'est un autre -4
Jason S

60 octets avec 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

Tu veux dire que ça s'enroule?

OK, quelques explications sur # 2 (spoilers)

  • creditsest un module intégré python qui contient du texte que j'aimerais utiliser. C'est d'un type spécial avec un formaté reprpour que vous puissiez simplement le taper dans l'interpréteur interactif et voir une belle sortie, donc je dois le faire str(). J'ai passé pas mal de temps à regarder les buildins pour cela, et "Merci d'avoir soutenu le développement de Python" comme une phrase était trop bonne pour être passée.

  • Puisqu'il y a beaucoup de texte et que je veux seulement mes 5 mots, je veux stocker les positions de début et de fin de chaque sous-chaîne. C'est dans les octets au début. bytesles objets en python3 agissent comme des tableaux d'entiers lorsque vous utilisez des opérations de séquence sur eux.

  • Mais le code ne peut contenir que des caractères imprimables, j'ai donc dû trouver un décalage (49) qui rendrait toutes mes valeurs de position imprimables en tant que caractères.

  • "Merci" est près du début de la chaîne tandis que les autres mots sont plus proches de la fin, ce qui signifie que mes valeurs de position étaient trop éloignées pour être toutes dans la plage imprimable. Multiplier la chaîne par 2 crée une autre copie de "Merci" qui est plus proche des autres mots.

  • Prendre la [49:]tranche de la chaîne est un octet source de moins que d'ajouter 49 à la fois à a et à b.

  • La construction utilisée dans les trois réponses est x=<value>;dostuff and increment;x. La fin xne fait rien du tout, mais lorsqu'elle est combinée avec la prochaine copie du code, elle se transforme en xx=<value>ce qui empêche lax compteur d'être écrasé.

  • a,b,*q=q est un déballage de séquence Python 3 parfaitement normal.


+1. Truc méchant. :) Puis-je le mettre à jour avec ma réponse?
vectorisé

Eh bien, j'ai utilisé votre milieu
Jason S

Je m'émerveille actuellement de votre 2e réponse. Autant de trucs emballés dedans.
2014 vectorisé

2
Pouvez-vous me dire comment fonctionne la deuxième réponse?
sajas

8

Python 2 (37)

Après que Sarah est devenue présidente de sa section locale de Mensa, elle est devenue le centre d'attention romantique des hommes à la recherche d'un partenaire intelligent. À chaque rendez-vous, Sarah tentait d'établir un lien personnel, mais les hommes la sondaient simplement sur des questions philosophiques abstruses. Frustrée que personne ne se soucie de son côté émotionnel, elle s'est exclamée ...

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

Sortie:

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

L'entropie est H(x)=3.5exactement.

Nous remercions Jason S., dont j'ai essentiellement utilisé la réponse en gros. L' iiastuce enveloppante est merveilleuse.


Agréable! Accessoires pour trouver une phrase plus courte avec l'entropie droite. J'ai abandonné. J'ai également oublié que py2 printajoute des espaces plutôt que de les ajouter
Jason S

C'est incroyablement court pour une réponse Python! Bien joué.
isaacg

Vous pouvez supprimer la virgule que vous avez au milieu de votre programme pour descendre à 36 caractères.
xleviator

8

C - 65

Commentaire abus :)

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

Pour cette raison, les nouvelles lignes sont importantes et le code doit être ajouté comme suit:

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

C'est une bonne solution!
MilkyWay90

4

CJam, 24 octets

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

S'il est exécuté cinq fois, il imprime que Liz était OK pour moi . Ponctuation non incluse, désolé.

Comment ça marche

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

Idée
sympa

Je l'avoue, mais il fallait que ce soit xxx xxx xx xx xx , sans lettres répétées. C'est la seule phrase que j'ai pu prononcer qui ait au moins un peu de sens ...
Dennis

Que diriez-vous de "Sun était OK pour moi"? Vous pouvez également remplacer "Soleil" par un autre mot ou nom.
aditsu

C'est mieux, merci.
Dennis

3

Pyth , 32

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

Phrase: "C'est par une corde."

Entropie: 3,5

Comment ça marche:

p signifie imprimer avec le séparateur spécifié.

Le premier argument,, ?kqZ4ddonne le séparateur. ?kqZ4dsignifie k if Z==4 else d. kest '', tout dest ' '.

Le deuxième argument, la valeur à imprimer, est généré par splitting ( P) sur space ( d), et l'indexation dans cette liste ( @) à Z.

Enfin, Zqui est automatiquement initialisé à 0, est incrémenté de 1 ( ~Z1).


2
Je ne pouvais pas penser à un contexte où cette phase s'intégrerait naturellement ^^
flawr

1
@flawr "Où ai-je vécu le ballon?" "C'est par une corde."
isaacg

3

Golfscript, 53

Celui-ci était amusant.

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

Phrase: "Vous n'êtes pas un canard." (ce qui est tout à fait vrai; entropie 3.5110854081804286)

Explication:

La pile démarrera comme ''lors de la première "exécution" (car aucun STDIN n'est fourni). '1'des s sont ajoutés à cela pour indiquer combien de fois le code a été collé.

{'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'

Maintenant, que se passe-t-il lors de la deuxième 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'

Etc.

"Mais," vous pensez, "comment faire pour que les 1 ne sortent pas?" Ah, c'est la partie amusante et hacky. Golfscript implémente puts(qui est appelé à la fin du programme) comme ceci:

{print n print}:puts;

Je l'ai simplement changé en

{'1'-print}:puts;

Pour que les 1s soient supprimés de la sortie finale.


3

J - 42 caractères

Je pourrais opter pour une phrase plus courte, mais pourquoi? Ce ne serait pas mon préféré.

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

Cela fonctionne en raison de la dualité monade / dyade de J: chaque verbe peut être invoqué comme une monade - avec un argument à sa droite - ou comme une dyade - avec un argument à gauche et un autre à droite.

Considérez la session suivante avec le 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à, ,est traitée comme une dyade, car elle est entre deux arguments, et (#~1=6|#\)&.;:est une monade car elle n'a pas d'argument de gauche. Donc, si nous avions un verbe qui pourrait agir comme, dyadique et (#~1=6|#\)&.;:monadique, nous serions prêts.

Comme vous l'avez peut-être déjà deviné, une telle conjonction existe et elle ressemble :. Monadic f :gest équivalent àf , et il est équivalent àg dyadique. Cela résout le problème.

Exemples, que vous pouvez essayer par vous-même sur 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.

Et oui, la nature de l'inverse de ;: fait qu'il n'y ait pas d'espaces de fin.

En utilisant It is by a rope.comme l'expression donne 35 ombles: (#~1=6|#\)&.;: :,'It is by a rope.'. Nous n'avons pas besoin de l'espace de fuite comme nous le faisons pour ma phrase, pour des ;:raisons obscures basées sur.


3

BBC Basic, 40

Comprend une nouvelle ligne. Serait de 30 si les mots clés pouvaient être considérés comme tokenisés au lieu de ASCII.

J'ai attrapé ma copine en train de dormir avec le laitier, alors je l'ai jetée et je dors avec sa sœur par vengeance. As my ex do I!(cinq "mots" de deux lettres avec des caractères uniques) n'était pas assez d'entropie, j'ai donc ajouté le smiley à la fin pour faire l'entropie exactement 3,5. Après tout, en réalité j'ai une vie assez normale, pas une intrigue de feuilleton bizarre.

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

Répéter le programme 5 fois

  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

Seules les 5 READinstructions sont exécutées et les 5 premières données sont lues à partir de la première DATAinstruction. le reste des données est redondant. Sortie:

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

2

Rubis, 50

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

Il utilise sa propre longueur pour déterminer le nombre de mots à imprimer. Ses répétitions sont par ailleurs ignorées par se terminant par le caractère de commentaire, #. Phrase empruntée à bitpwner : il est très pratique d'avoir une courte phrase avec le même nombre de lettres dans chaque mot.

Étant donné que chaque mot + fin est de 4 caractères, la formule serait, par exemple, pour un programme de 56 longueurs:, (File.size($0)/56)*4 - 1mais je peux diviser à l'avance 56/4 = 14, donc File.size($0)/14 - 1, enregistrer quelques caractères. 50n'est pas un multiple de 4, mais 12est suffisamment proche pour la plage nécessaire.


2

Puce , 165 + 3 = 168 octets

+3 pour le drapeau -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| | |   |

"J'ai gagné un costume rouge" (3.5) (en fait, je n'ai rien gagné de tel) (... pour l'instant)

Notez la nouvelle ligne de fin, donc la copie concaténée apparaît sous le code existant.

Essayez-le en ligne! (l'original)
Essayez-le en ligne! (l'original, plus les quatre exemplaires)

C'est un peu un désordre emmêlé. Il s'est avéré que le bit le plus délicat était la condition de terminaison. (Ma première itération a imprimé le (s) mot (s), suivi d'un flux sans fin d'octets nuls ...).

Comment ça marche

D'abord la phrase:
12 caractères uniques + 4 espaces = exactement 3,5 entropies.

Et le code:
chaque copie imprime le premier mot, puis indique à la copie ci-dessous d'imprimer le mot suivant. S'il n'y a qu'une seule instance, il n'y a pas de deuxième copie, donc rien sauf le premier mot n'est imprimé.

S'il y a deux copies, les deux imprimeront le premier mot simultanément (les octets sont OU ensemble, donc ça va), alors seule la deuxième copie imprimera le deuxième mot.

Si les cinq copies sont présentes, toutes imprimeront le premier mot, etc, etc, et la cinquième copie imprimera le dernier mot par lui-même.

Le circuit de terminaison mettra fin au programme dès que toutes les copies ne s'imprimeront pas activement.


1

Rubis, 63

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

1

Perl, 37

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

Semblable à ce que comperendinous avait, mais en profitant du qw de perl pour enregistrer quelques caractères de plus.


1

Longueur du message Rebmu + 27

Devions-nous aller avec "Mon QI n'est pas moi!" ce serait 43. Mais je soutiens ce message:

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

Rebol équivalent / rouge:

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

print/only take s
print/only space

Rebol a 3 conditions de base: SI, SOIT ET MOINS. UNLESS est équivalent à IF NOT mais peut être plus clair: "Effectuez toujours les actions suivantes, à moins que cette condition ne soit vraie."

Dans ce cas, la condition est que nous testons pour voir si le symbole S a reçu une valeur dans le contexte actuel. Nous devons utiliser un guillemet dessus, car tenter d'utiliser un S non guidé dans une expression conditionnelle l'évaluerait et pourrait déclencher une erreur. ( value?ne cite pas son paramètre par défaut parce que vous voudrez peut-être que le symbole que vous vérifiez soit dans une variable, par exemple sym: 'salors if value? sym [...]vérifierait si S a été défini, pas SYM)

Seul le premier collage du programme affectera la série de chaînes à S. Les pâtes successives prendront une chaîne de la tête de la série et la passeront à PRINT / ONLY qui imprimera son argument sans ajouter de saut de ligne.

(Remarque: PRINT / ONLY est un moyen de remplacement suggéré pour dire PRIN, qui est envisagé dans Rebol 3 et Red; un remplacement d'impression est maintenant testé dans Rebmu.)


1

AHK , 44 octets

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

Notez la nouvelle ligne à la fin. La seule chose intelligente ici est que la chaîne est composée de 3 lettres, nous n'avons donc rien à diviser. Au lieu de cela, nous tirons simplement une sous-chaîne basée sur i. La sortie est vers l'écran actif comme si elle avait été tapée sur le clavier.


0

Javascript (53)

J'ai pris le texte d'Aditsu car je ne fais rien d'extraordinaire avec le texte, de sorte que les mots choisis ne sont pas pertinents pour la solution (à l'exception du nombre d'octets).

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

Ne alertcompter dans ce cas? Edit: En lisant les règles, ce n'est probablement pas le cas car je ne joins pas les chaînes avec des espaces. Je vais ajouter des espaces pour que ce soit juste.

Notez également que le cher varest réellement pertinent dans ce cas.


Quelqu'un peut-il expliquer pourquoi var i|=0; ne fonctionne pas ici ???
flawr

@flawr Vous ne pouvez pas faire |=ou similaire avec var. Sans var, vous obtenez un ReferenceError: i is not defined. var i=i|0se développe var i=undefined|0et undefined|0est apparemment 0.
nyuszika7h

Cela fonctionne à cause du levage. var i=i|0est équivalent à var i;i=i|0. C'est pourquoi vous n'obtenez pas l'erreur de référence. La raison pour laquelle il sera mis à 0 la première fois est ce que @ nyuszika7h a dit.
Ingo Bürk

1
Mais cela alertera les mots séparément.
fier haskeller

0

Perl, 43 56

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

J'accepte que je ne peux pas gagner celui-ci. Ma tentative originale explique pourquoi:

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

0

Lua, 77

Une solution assez simple:

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 nouvelle ligne supplémentaire est ajoutée pour la lisibilité uniquement)

Impressions I'll sleep when I'm dead. Utilise une minuterie pour s'assurer que la sortie n'est imprimée qu'une seule fois


0

Pure Bash, 51 octets

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

H (X) = 3,59447

Cela pourrait être approfondi un peu plus en braconnant l'une des phrases les plus courtes, mais je suis heureux de rester avec Descartes. la citation la plus célèbre de Lennon. (Désolé @Descartes, mais tous les mots doivent être uniques).

Sortie:

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

Prend soin d'insérer des espaces entre les mots, mais pas d'espaces de début ou de fin.

S'appuie sur le fait qu'en bash, les variables non définies, lorsqu'elles sont développées en tant que chaînes ont la valeur "", mais lorsqu'elles sont développées arithmétiquement, elles ont la valeur 0.


Les 5 mots doivent être uniques ...
trichoplax

Étant donné que votre code semble suffisamment polyvalent pour traiter n'importe quelle phrase de 5 mots, je suis sûr que vous pouvez penser à celui qui a l'entropie requise de 3,5 (trop de lettres doubles dans celle-ci ...).
trichoplax

@githubphagocyte J'espérais que vous me donneriez l'avantage d'arrondir ;-) Ok, je l'ai corrigé avec un supplément !maintenant - semble faire l'affaire.
Digital Trauma

0

PHP 89 78 caractères

C'est un peu bavard et ne gagnera certainement pas, mais c'était quand même amusant. Voici ce que j'ai trouvé

Phrase:

code golf is pretty fun

Entropie = 3,82791

Code:

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

Golfé:

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

0

Python3 - 122 octets

Ouvrez les portes de la baie de pods [HAL]

Je suppose que je vais gagner un peu de nerd avec celui-ci. Si seulement la question permettait un mot de plus ...

Mon programme prend le nom de fichier (p.py est la base) et vérifie combien de fois le nom de base est itéré. Il prend ensuite des tranches d'une chaîne de ntemps. nétant le nombre de ps dans le nom de fichier.

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

L'avantage de l'expression régulière est que le programme peut être appelé comme vous le souhaitez et qu'il fonctionnera toujours (à condition de changer le nom de base dans le code): mon programme d'origine s'appelait golfed.py.


0

05AB1E , 21 octets (sans concurrence)

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

Essayez-le en ligne!

Les usages:

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

Explication

“€Œ‰‹€‡Øš‹É.“ª#¾è¼?ð?
“€Œ‰‹€‡Øš‹É.“ª        # 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

Je n'ai pas vu ça, posté presque pareil avec “€í€Ü€…‚¿‹·“hehe
Urne Magic Octopus


0

SmileBASIC, 54 octets

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

J'aurais préféré "Le sable peut être mangé". mais cela échoue en quelque sorte au test d'entropie. Bien sûr, j'aurais pu choisir une phrase plus courte mais c'est ennuyeux.

Le READmot-clé lit une valeur DATAet la stocke dans une variable. Utiliser à READnouveau obtiendra l'élément suivant, et ainsi de suite.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.