Peut-être que certains d'entre vous connaissent déjà ce jeu: vous avez une collection de bonbons à la gelée de différentes couleurs. Pour chaque couleur, le haricot peut avoir des goûts différents, certains sont bons et certains sont mauvais, et vous ne pouvez pas les distinguer. Vous devez choisir un haricot d'une couleur donnée et prier pour en avoir sélectionné une bonne.
Donc, écrivez le programme le plus court qui reçoit une couleur de votre choix (à partir d'une liste donnée), et renvoie aléatoirement le goût sélectionné. Le goût doit être choisi dans une liste intégrée. La liste possible des entrées et sorties est:
Input Output choices [only one from the list]
--------------------------------------------------
green lawn clippings, lime, mucus, pear
yellow rotten eggs, buttered popcorn
blue toothpaste, blue berry
orange vomit, peach
brown canned dog food, chocolate
white stinky socks, tutti-frutti, baby diapers, coconut
Règles:
- Vous pouvez supposer que l'entrée sera toujours une couleur parmi les choix d'entrée.
- Les espaces de casse et de fin et / ou les nouvelles lignes n'ont pas d'importance.
- La sortie doit être uniformément aléatoire: les exécutions successives du programme doivent donner des résultats différents et les chances d'obtenir un goût donné doivent être les mêmes pour tous les goûts d'une liste.
C'est du golf de code , alors que le programme le plus court gagne!
code-golf
random
game
compression
Charlie
la source
la source
blueberry
pasblue berry
.Réponses:
C #,
418313305271 octetsTrop long même pour C # mais je ne vois pas comment le raccourcir.
Version complète / formatée:
la source
05AB1E , 126 octets
Explication:
Si quelqu'un se demande, voici la chaîne non compressée:
Je peux probablement le compresser davantage en utilisant quelques astuces intelligentes et le dictionnaire.
Essayez-le en ligne!
la source
"eougwt"
à.•4Õ!Õ•
-1.eougwt
et.•4Õ!Õ•
, au lieu de"eougwt"
et.•4Õ!Õ•
. Oups.JavaScript (ES6), 235 octets
J'ai besoin de comprendre comment compresser des chaînes dans JS!
Si ce n'est pas "assez aléatoire" pour vos goûts, ajoutez 7 octets en remplaçant
new Date
parMath.random()
.Essayez-le
la source
eluaoi
, j'y ai pensé par moi-même et j'ai pensé: "Oooh regarde comme je suis intelligent" puis je t'ai vu me battre!new Date%a.length
n'est pas "uniformément aléatoire".eluaoi
près au même moment: PMath.random
place.Gelée ,
101100octetsEssayez-le en ligne!
la source
Japt ,
148146 octetsEssayez-le en ligne!
6 octets enregistrés grâce à Shaggy et aux productions ETH
la source
R
au lieu de0
pour enregistrer un octet. En outre, vous pourrez peut-être compressereluaoi
en jouant avec la commande.qR
quelle est la même longueur?®
.eaiou
comme chaîne, vous pouvez la compresser en trois octets (il peut y avoir d'autres combinaisons de trois octets).Python 2 ,
301258 octetsEssayez-le en ligne!
Enregistrement de très nombreux octets en raccourcissant les clés pour utiliser le 2ème index de l'entrée, comme suggéré par @TheLethalCoder, et en divisant les virgules au lieu d'utiliser une liste directe.
la source
eluaoi
comme clés de dictionnaire et y accéder avec l'index 2 de la chaîne devrait vous faire économiser des octets.Gelée ,
9594 octetsUn lien monadique acceptant une liste de caractères (en minuscules) et renvoyant une liste de caractères.
Essayez-le en ligne! ou mangez un paquet de 48 .
Comment?
Quatre-vingt-neuf des quatre-vingt-quatorze octets sont une liste compressée de huit chaînes. Deux d'entre elles sont des chaînes vides et les six autres sont chacune des saveurs séparées par une nouvelle ligne pour l'une des couleurs:
Le reste du programme analyse l'entrée pour décider quelle liste utiliser, divise la liste choisie par des retours à la ligne et sélectionne un élément aléatoire:
la source
Java, 288 octets
Testez-le vous-même!
Pourrait être joué au golf en utilisant un
char[]
.Cependant, la partie aléatoire ne peut pas être "uniformément distribuée" sans l'utilisation explicite de
Random.nextInt(int)
. Même(int)(Math.random()*a.length)
n'est pas uniformément distribué.la source
new java.util.Random().nextInt(a.length)
au lieu de(int)(Math.random()*a.length)
..Math.random()
fournit un nombre qui a certaines spécificités (une puissance0
et un signe de0
et 52 bits aléatoires). Vous utilisez donc une entropie de 52 sans autre vérification. Si la longueur est3
, par exemple,2^52
n'est pas divisible par 3. Donc, elle n'est pas distribuée au hasard. C'est pourquoiRandom.nextInt(int)
(fichier java réel, pas javadoc, à la ligne 394) a un mécanisme de boucle pour s'assurer que le nombre est parmi les bons nombres. À moins qu'on me dise "c'est assez bon",Random.nextInt(n)
c'est juste.Math.random()
Ne peut donc pas être utilisé lorsqu'il2^53
ne peut pas être divisé également par le nombre avec lequel vous le multipliez? Donc, si vous voulez un nombre aléatoire de 0 à 3, il(int)(Math.random()*4)
est acceptable de le diviser également (quatre fois2251799813685248
), mais lorsque vous utilisez*3
place, ce n'est pas le cas (ce qui est trois fois3002399751580330.666...
), parce que le mouler dans des étages internes, en faisant certaines parties 1 plus petit que les autres. Et comme la longueur est variable dans votre cas, elle n'est pas non plus répartie uniformément (avec la possibilité d'être de longueur 3).Math.random()
, si quelqu'un dit quelque chose de façon «uniforme» ou «assez» aléatoire, utilisezjava.util.Random
. C'est aussi pourquoi je me suis plaint de la réponse de Shaggy.> <> , 311 octets
Essayez-le en ligne ou regardez-le au terrain de pêche
Avec des tricots confortables SK et Doof God Dennac!
Explication: La première tâche du poisson est de comprendre quel est le mot d'entrée en zigzaguant sur le côté gauche. Le poisson ne peut lire qu'une seule lettre à la fois, et cela prend moins d'octets pour le faire de manière destructive. Tout d'abord, le poisson lit la première lettre et demande si c'est
"y"
- si c'est le cas, le mot est "jaune", sinon il continue. Il lit ensuite la deuxième lettre - si c'est le cas"l"
, le mot est "bleu", sinon il continue; etc. Si elle lit cinq lettres et qu'elles ne correspondent pas"y"
( Y ellow),"l"
(b L ue),"o"
(br O wn),"n"
(ora N ge) ou"n"
(gree N ) respectivement, alors la couleur doit avoir été "blanche".Vient ensuite le bit aléatoire. Pour les couleurs avec deux sorties possibles, c'est assez simple - pour le jaune, par exemple, le poisson entre le code suivant dans
x
:Le
x
définit la direction au hasard: s'il est vers le haut ou vers la gauche, le poisson tourbillonne autour des miroirs vers lex
, mais s'il est vers la droite ou vers le bas, il lit "œufs pourris" ou "pop-corn beurré" (en sens inverse).Les divisions à quatre voies (pour le blanc et le vert) sont plus compliquées, mais elles suivent le même principe général - la première est:
Notez que si le poisson nage vers le haut depuis le premier
x
, il passe par huit"
s, ce qui active et désactive le mode chaîne quatre fois, puis il frappe un miroir et nage vers le bas.Pour accéder à la dernière fraction à quatre voies, le poisson doit nager à travers la
e
etr
de « chaux » et « poire », ce qui ajoutee = 14
à la pile (et arrière), donc il faut d' abord le supprimer avec~
. L'une des quatre branches implique également de nager à travers une chaîne indésirable"> "
, que nous supprimons avec~~
.Enfin, après avoir ajouté l'une des saveurs de haricots à la pile, le poisson atteint le flux de
v
s dans la colonne la plus à gauche, qui l'envoie àqui imprime des caractères (en utilisant l'un des
o
s dans "coconut") jusqu'à ce qu'il n'en reste plus.la source
T-SQL,
432 423 375 367 336295 octetsEnfin, une opération basée sur un ensemble !!
(Les sauts de ligne sont affichés et ne sont pas comptés au total.)
L'entrée se fait via la colonne c dans le tableau nommé t , selon nos directives .
Je joins simplement notre table d'entrée à une table remplie de combinaisons de couleurs / saveurs valides, puis je sélectionne une ligne aléatoire.
ORDER BY NEWID()
est un moyen courant de randomiser l'ordre de tri dans SQL . Selon votre rigueur, vous ne le considérerez peut-être pas parfaitement uniformément aléatoire, mais il devrait être suffisamment aléatoire pour la sélection de jelly bean.EDIT 1: économisé 9 octets en utilisant uniquement le 3ème caractère de la couleur, inspiré par d'autres réponses.
EDIT 2: économisé 48 octets en mettant l'indicateur de couleur et la saveur dans une seule colonne. Beaucoup de caractères enregistrés dans le INSERT.
EDIT 3: 8 octets enregistrés en remplaçant
INSERT INTO b(o)
parINSERT b
EDIT 4: économisé 31 octets supplémentaires en se joignant directement à la table virtuelle de
VALUES
et donc en éliminant leCREATE TABLE
etINSERT
.EDIT 5: Économisez 41 octets en passant à la fonction SQL 2016 uniquement
STRING_SPLIT
, ce qui me permet d'éliminer l'exécution variable et dynamique de SQL.la source
PHP , 242 octets
Essayez-le en ligne!
la source
Mathematica, 247 octets
Formulaire de saisie
la source
eluaoi
astuce? Je ne connais pas mathématique donc juste une idée.Clojure, 231 octets
Même idée que les autres, je peux simplement économiser de l'espace par rapport aux autres langues. La compression des chaînes semble être une cause perdue.
la source