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.

Loisirs de Calvin
la source
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

aditsu
la source
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

Sp3000
la source
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.

Mike Precup
la source
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. :)

Vectorisé
la source
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.

Jason S
la source
+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.

xnor
la source
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++;);//...
Allbeert
la source
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. ";
Dennis
la source
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).

isaacg
la source
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.

Poignée de porte
la source
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.

algorithmshark
la source
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 
Level River St
la source
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.

Tim S.
la source
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.

Phlarx
la source
1

Rubis, 63

+1;puts"See Dick and Jane run!"[/(.*?( |!)){#$.}/]if($.+=1)==$.
histocrate
la source
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.

user0721090601
la source
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.)

Dr. Rebmu
la source
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.

Ingénieur Toast
la source
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.

Ingo Bürk
la source
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++];
compérendineux
la source
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)

ahuff44
la source
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

aebabis
la source
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.

Traumatisme numérique
la source
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].
Brobin
la source
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.

Beta Decay
la source
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
Datboi
la source
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.

12Me21
la source