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 MYPROG
et que votre phrase était Programming puzzles and code golf!
, en cours d'exécution ...
MYPROG
devrait sortirProgramming
MYPROGMYPROG
devrait sortirProgramming puzzles
MYPROGMYPROGMYPROG
devrait sortirProgramming puzzles and
MYPROGMYPROGMYPROGMYPROG
devrait sortirProgramming puzzles and code
MYPROGMYPROGMYPROGMYPROGMYPROG
devrait sortirProgramming 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, MYPROG
note 6)
Comme il s'agit de code-golf, le score le plus bas l'emporte.
code-golf
source-layout
Loisirs de Calvin
la source
la source
Réponses:
CJam - 24
Essayez-le sur http://cjam.aditsu.net/
Explication:
Lm
supprime les lettres contenues dans L (initialement "") de "TheguywasnotI"3<
prend les 3 premières lettres]
recueille le contenu de la pile dans un tableauS*
rejoint le tableau en utilisant l'espace comme un séparateur:L
attribue la chaîne résultante à L (la laissant également sur la pile )Ancienne version (28 octets):
Explication:
S/
se divise parW):W
incréments d' espace W (initialement W = -1)=
obtient le Wème mot]
recueille le contenu de la pile dans un tableauS*
rejoint le tableau en utilisant l'espace comme séparateurla source
Piet (réponse honorifique)
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
la source
> <> (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.
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.
!v
est 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).00p
c'est là que la vraie magie commence à se produire. Notez qu'il n'a pas seulement stocké la phrase, il a également stocké a;
.00p
insè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 surv
, 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.la source
"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.Python 66
Entropie: 3.61635
Sortie:
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. :)
la source
i=locals().get('i',-1)+1;
est de -5 octetsi='i'in dir()and i+1
. Modifier: les règles ont changé.i='i'in dir()and i+1;print"Tfpcfhaialetgny"[i::5]+" ."[i>3],
Python 3, 55 (bonus 67)
Tu veux dire que ça s'enroule?
OK, quelques explications sur # 2 (spoilers)
credits
est un module intégré python qui contient du texte que j'aimerais utiliser. C'est d'un type spécial avec un formatérepr
pour que vous puissiez simplement le taper dans l'interpréteur interactif et voir une belle sortie, donc je dois le fairestr()
. 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.
bytes
les 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 finx
ne fait rien du tout, mais lorsqu'elle est combinée avec la prochaine copie du code, elle se transforme enxx=<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.la source
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 ...
Sortie:
L'entropie est
H(x)=3.5
exactement.Nous remercions Jason S., dont j'ai essentiellement utilisé la réponse en gros. L'
ii
astuce enveloppante est merveilleuse.la source
print
ajoute des espaces plutôt que de les ajouterC - 65
Commentaire abus :)
Pour cette raison, les nouvelles lignes sont importantes et le code doit être ajouté comme suit:
la source
CJam, 24 octets
S'il est exécuté cinq fois, il imprime que Liz était OK pour moi . Ponctuation non incluse, désolé.
Comment ça marche
la source
Pyth , 32
Phrase: "C'est par une corde."
Entropie: 3,5
Comment ça marche:
p
signifie imprimer avec le séparateur spécifié.Le premier argument,,
?kqZ4d
donne le séparateur.?kqZ4d
signifiek if Z==4 else d
.k
est''
, toutd
est' '
.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,
Z
qui est automatiquement initialisé à 0, est incrémenté de 1 (~Z1
).la source
Golfscript, 53
Celui-ci était amusant.
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é.Maintenant, que se passe-t-il lors de la deuxième manche:
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:Je l'ai simplement changé en
Pour que les
1
s soient supprimés de la sortie finale.la source
J - 42 caractères
Je pourrais opter pour une phrase plus courte, mais pourquoi? Ce ne serait pas mon préféré.
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:
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
:
. Monadicf :g
est é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 :
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.la source
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.Répéter le programme 5 fois
Seules les 5
READ
instructions sont exécutées et les 5 premières données sont lues à partir de la premièreDATA
instruction. le reste des données est redondant. Sortie:la source
Rubis, 50
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 - 1
mais je peux diviser à l'avance56/4 = 14
, doncFile.size($0)/14 - 1
, enregistrer quelques caractères.50
n'est pas un multiple de4
, mais12
est suffisamment proche pour la plage nécessaire.la source
Puce , 165 + 3 = 168 octets
+3 pour le drapeau
-w
"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.
la source
Rubis, 63
la source
Perl, 37
Semblable à ce que comperendinous avait, mais en profitant du qw de perl pour enregistrer quelques caractères de plus.
la source
Longueur du message Rebmu + 27
Devions-nous aller avec "Mon QI n'est pas moi!" ce serait 43. Mais je soutiens ce message:
Rebol équivalent / rouge:
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 exemplesym: 's
alorsif 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.)
la source
AHK , 44 octets
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.la source
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).
Ne
alert
compter 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
var
est réellement pertinent dans ce cas.la source
var i|=0;
ne fonctionne pas ici ???|=
ou similaire avecvar
. Sansvar
, vous obtenez unReferenceError: i is not defined
.var i=i|0
se développevar i=undefined|0
etundefined|0
est apparemment0
.var i=i|0
est é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.Perl, 43
56J'accepte que je ne peux pas gagner celui-ci. Ma tentative originale explique pourquoi:
la source
Lua, 77
Une solution assez simple:
(H (X) = 4,23)
la source
Javascript, 138
(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 foisla source
Pure Bash, 51 octets
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:
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.
la source
!
maintenant - semble faire l'affaire.PHP
8978 caractèresC'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:
Golfé:
la source
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
n
temps.n
étant le nombre dep
s dans le nom de fichier.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.
la source
05AB1E , 21 octets (sans concurrence)
Essayez-le en ligne!
Les usages:
Explication
la source
“€í€Ü€…‚¿‹·“
heheStax , 24
Exécuter et déboguer
Quote: Certains animaux sont plus égaux.
la source
SmileBASIC, 54 octets
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
READ
mot-clé lit une valeurDATA
et la stocke dans une variable. Utiliser àREAD
nouveau obtiendra l'élément suivant, et ainsi de suite.la source
Pyth , 27 octets
Une fois , deux fois , trois fois , quatre fois et cinq fois . Ajouter après cela commence à répéter la phrase.
la source