Ce défi est inspiré d'une série de livres pour jeunes enfants de Fiona Watt et Rachel Wells, que j'ai récemment appréciés avec ma fille.
Dans chaque livre une souris (illustrée, mais ne faisant pas partie du texte) se plaint qu'une succession de 5 choses du même type ne sont pas sa chose. Il sauvegarde ensuite cela en déclarant que certains composants de la chose n'ont pas la propriété attendue.
Au sixième moment de la demande, la souris trouve sa chose et est contente car elle a la propriété attendue.
Voici le texte d'un exemple typique:
That's not my bunny, its tail is too fluffy.
That's not my bunny, its paws are too rough.
That's not my bunny, its tail is too woolly.
That's not my bunny, its eyes are too shiny.
That's not my bunny, its nose is too wrinkled.
That's my bunny! Its ears are so soft.
Maintenant, la plupart des programmeurs se rendraient compte qu'il s'agit d'une méthode très algorithmique de production de texte. Parce que c'est un processus tellement clair, nous devrions pouvoir le reproduire en écrivant du code.
Commençons par trois collections de mots:
things = ["dinosaur", "lamb", "princess", "reindeer", "train"]
parts = ["back", "bells", "body", "bows", "crown", "dress", "ears",
"engine", "fan", "flippers", "funnel", "hooves", "horns", "neck",
"nose", "roof", "sash", "side", "spines", "spots", "tail", "teeth",
"tiara", "wheels", "windows"]
properties = ["bumpy", "fluffy", "furry", "fuzzy", "glittery", "glossy",
"hairy", "red", "rough", "rusty", "shiny", "silky", "slippery",
"soft", "sparkly", "squashy", "thick", "velvety", "woolly"]
- Tout d'abord, nous décidons quel genre de chose nous allons décrire.
- Ensuite, 5 fois, nous générerons la ligne "Ce n'est pas mon [truc], sa [partie] est trop [propriété].
- Enfin, nous générons la ligne "C'est mon [truc]! Sa [partie] est tellement [propriété]!
Le défi
- Générez le texte d'une histoire "Ce n'est pas mon ...".
- Il ne doit pas reproduire systématiquement le même texte.
- C'est du golf de code, essayez donc de le faire dans le plus petit nombre d'octets.
- Utilisez la langue de votre choix.
- L'espace blanc n'a pas d'importance, mais il doit y avoir un caractère de nouvelle ligne entre les lignes.
- Les listes de mots sources ne font pas partie de votre réponse (dans TIO, elles peuvent être ajoutées à l'en-tête).
- Vous pouvez renommer les listes de mots sources.
- La sortie peut être sortie vers un terminal ou du texte généré dans un objet.
- Veuillez inclure un lien vers un interprète en ligne.
- Ignorez les pluriels, "ses cornes est" est très bien.
- Cela n'a pas besoin de sens. Si l'entonnoir de votre princesse est trop moelleux, dites-le.
Exemple de sortie:
That's not my train, its engine is too rusty.
That's not my train, its hooves is too thick.
That's not my train, its sash is too fuzzy.
That's not my train, its tail is too velvety.
That's not my train, its horns is too glittery.
That's my train! Its hooves is so hairy.
Bon golf!
Réponses:
05AB1E , 63 octets
Essayez-le en ligne.
Version de 68 octets qui ne produit ni pièces ni propriétés dupliquées:
Essayez-le en ligne.
Les deux programmes supposent que la liste des choses est la première entrée, et une liste contenant la liste des parties et la liste des propriétés est la deuxième entrée.
Explication:
Voir cette astuce 05AB1E (section Comment utiliser le dictionnaire? ) Pour comprendre pourquoi
“€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“
est"that's my ÿ! its ÿ is so ÿ."
et“€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“
est"that's not my ÿ, its ÿ is too ÿ."
.la source
Python 3 , 149 octets
Essayez-le en ligne!
-9 octets grâce à movatica
la source
Fusain , 72 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Attend que les tableaux de choses, de pièces et de propriétés soient dans les variables
θ
,η
etζ
qui est le plus facile à arranger en leur fournissant dans l'entrée plutôt que l' en- tête. Explication:Choisissez une chose aléatoire.
Imprimez cinq phrases négatives.
Imprimez la phrase positive.
la source
Japt v2.0a0
-R
, 73 octetsPrend les trois listes comme
U
,V
etW
. Ce sont les variables d'entrée par défaut de toute façon, alors mettez simplement les trois listes dans la section d'entrée.Essayez-le
la source
PowerShell , 147 octets
Ce programme principal ne répétera aucune partie ou propriété dans une exécution et a une randomisation raisonnable.
Essayez-le en ligne!
Écrire
get-random
tant de fois coûte tellement de caractères! Cependant, à moins que vous ne vouliez laisser les pièces et les propriétés se répéter, je ne vois pas de moyen de réduire davantage cela en PowerShell. À moins que vous ne déplaciez les 3 premiers tubes de ligne à la fin des 3 lignes d'affectation dans l'en-tête. Pour avoir quelque chose commeMais cela semble tricher, et ne bat toujours pas la réponse de Neil.
Edit: Merci pour les conseils Matt, et merci AdmBorkBork pour les avoir étoffés, la suppression des 3 ensembles de
get-
texte l'a réduit à 159 octets, puis un peu plus de golf d'Adm l'a réduit à 147. Le code auquel je pensais permettait les doublons et déclarations contradictoires était de 144 caractères après avoir appliqué les mêmes conseils de golf.Essayez-le en ligne!
Cependant, non seulement il a tendance à répéter la même chose plusieurs fois, mais il nécessite à peu près que vos entrées aient le même nombre d'éléments. Je crois que le générateur de nombres pseudo-aléatoires utilisé dépend fortement de l'horloge, et des appels répétés rapides peuvent souvent aboutir au même résultat. Ensuite, il a la condition qu'il n'utilise la liste entière que si toutes les listes sont de la même longueur.
la source
Get-
deGet-Random
. C'est le verbe par défaut testé lors de l'évaluation des commandes.Gelée , 72 octets
Essayez-le en ligne!
la source
JavaScript, 129
l'entrée est trois tableaux, renvoie une chaîne
la source
Rubis , 128 octets
Essayez-le en ligne!
la source
C # ,
204203 octetsC'est ma première réponse sur ce site, j'espère donc que cela fonctionne bien. Il a également besoin de ces trois choses, mais selon la question, elles ne comptent pas:
Essayez-le en ligne!
Un octet de moins grâce à Sok.
la source
\r
n'est pas nécessaire, ce qui vous fera économiser 2 octets.APL (Dyalog Unicode) , 117 octets SBCS
Essayez-le en ligne!
?N
génère un indice aléatoire parmi les N premiers indices.M?N
génère M indices aléatoires (sans remplacement) parmi les N premiers indices.,
est la concaténationt←T⊃⍨
… Choisit une chose au hasard et l'appellet
pour réutilisation dans la dernière ligne.∘,¨
concatène la chaîne de gauche à chaque chaîne de droite.,¨
concatène chaque chaîne de gauche à chaque chaîne de droite.↑
change la liste des chaînes en une matrice de caractères pour qu'elle s'imprime correctement.la source
Pyth ,
887876 octetsEssayez-le en ligne!
Le code présenté ci-dessus nécessite l'en-tête suivant:
Il y a un petit problème avec l'utilisation de la fonctionnalité `` En-tête '' dans TIO avec Pyth, car il semble que TIO rejoint les blocs de code sur les nouvelles lignes, et les nouvelles lignes sont importantes en Pyth. Voici un lien vers le même code en utilisant le bloc «En-tête», avec une ligne indésirable en sortie.
Edit: Réécriture sur golf 10 octets, version précédente:
J+" my "ONV5%"That's not%s, its %s is too %s."[JOGOH;%"That's%s! Its %s is so %s."[JOGOH
la source
Perl 5.10, 127 octets
Courez avec
perl -M5.010 -f filename.pl
.la source
JavaScript ES6, 149 (+15?) Octets
la source
Fichier de commandes,
434424 + 7 octetsExécuté via
cmd/q/c
.Code non compté
Code compté
Je vais passer en revue certains défis que vous devez relever et expliquer / justifier ce que j'ai fait pour que d'autres puissent s'améliorer.
Choisissez un élément aléatoire dans un tableau que
j'ai fait en générant un nombre aléatoire entre
1
etn
oùn
est la quantité d'éléments dans ce tableau. J'ai ensuite utilisé ce nombre aléatoire comme jeton à saisir dans chaquefor
boucle (tokens=%r%
). Parce que je l'ai fait de cette façon, je ne pouvais plus imbriquer cesfor
boucles, car celatokens=!r!
ne fonctionnait pas pour moi (avec une expansion retardée). Cela aurait sauvé pas mal d'octets car cela aurait supprimé la nécessité de sauvegarder les jetons en tant que variables (set x=%%x
).Génération de nombres aléatoires
m
est ma macro de génération de nombres aléatoires. Le faire de cette façon économise 32 octets par rapport à le faire commeset/ar=%random%%%n+1
chaque ligne. Vous pouvez semi-triche et de décider que les jetonsy
etz
doivent être les même élément:Cela, tout en conservant un certain caractère aléatoire, exclurait les 6 derniers éléments de
c
. Cela permettrait d'économiser au moins 20 octets, mais je ne pense pas que cela soit conforme aux exigences de l'op.Améliorations théoriques
J'ai passé un bon moment à essayer de faire fonctionner ce "pseudo-code", tout en économisant des octets:
Malheureusement, la configuration pour cela s'avère prendre beaucoup trop d'octets pour être rentable (doit être implémentée en <144 octets) mais je ne peux pas secouer le sentiment que l'ajout des 4 dernières lignes de code est superflu et janky.
la source
The lists of source words are not part of your answer (in TIO they can be added to the header).
set a=%~1
, etc.encre , 119 octets
Avec les listes définies comme
Essayez-le en ligne!
Bien qu'en fonction de ce qui compte comme une liste, il existe d'autres approches. Si une liste peut être une fonction qui renvoie aléatoirement un élément de liste, l'approche suivante n'est que de 91 octets:
(avec les "listes" définies comme suit)
Essayez-le en ligne!
Il y a aussi l'approche suivante.
Essayez-le en ligne!
Cette solution est de 389 octets, mais si les littéraux shuffle (qui dans ce scénario ne peuvent pas vraiment être déplacés) comptent comme définitions de liste et peuvent être exclus du nombre d'octets, cela tombe à 80 octets.
la source
Bash + awk, 209 octets
Essayez-le en ligne!
Accepte les entrées comme
things parts properties
où chacune est un fichier avec un élément par ligne du type souhaité.Il s'agit d'une approche centrée sur les fichiers. Peut essayer une approche centrée sur les tableaux plus tard pour voir si elle peut être améliorée.
la source
Python 3, 130 octets
Prendre vos besoins au pied de la lettre et prendre les retours chariot à un octet chacun:
la source