Enfant, mon ami avait un ballon magique auquel on posait des questions et voyait quel était le sort de cette question.
Défi
Votre défi consiste à écrire un programme (ou une fonction) qui, une fois lancé (ou appelé), génère (ou renvoie) une réponse aléatoire parmi les réponses possibles ci-dessous. (Être aléatoire: each output should have a nonzero chance of occurring but they do not need to meet any other criteria
)
Les réponses possibles du Magic 8-ball sont (insensibles à la casse):
It is certain
It is decidedly so
Without a doubt
Yes definitely
You may rely on it
As I see it, yes
Most likely
Outlook good
Yep
Signs point to yes
Reply hazy try again
Ask again later
Better not tell you now
Cannot predict now
Concentrate and ask again
Don't count on it
My reply is no
My sources say no
Outlook not so good
Very doubtful
Contribution
Pas d'entrée.
Sortie
Un choix aléatoire d'en haut. Le cas n'a pas d'importance.
Règles
Les failles standard ne sont pas autorisées.
C'est du code-golf , donc le code le plus court en octets pour chaque langue gagne!
code-golf
kolmogorov-complexity
random
DevelopingDeveloper
la source
la source
Signs point to yes
Réponses:
SOGL V0.12 , 166 octets
Essayez-le ici!
\ o / chaque mot était dans le dictionnaire SOGL!
la source
> <> , 438 octets
Essayez-le en ligne!
Ce n'est pas intéressant, mais je pense que c'est la première réponse où le caractère aléatoire n'est pas uniforme. Je mets tous les messages négatifs comme les moins probables :)
Quelques explications:
Le pointeur commence à aller directement à la première ligne.
x
change le pointeur en direction cardinale aléatoire. S'il monte ou descend, il en rencontre un autrex
. Si tout va bien, il rebondit|
et frappe le mêmex
. Si elle va à gauche, elle tourne et pousse le texte de cette ligne dans la pile. La plupart des lignes atteignent alors la même piste,^
ce qui modifie la direction vers le haut. Cela boucleo
sur la première ligne, qui sort la pile jusqu’à ce qu’elle soit vide. Le cas particulier est laYep
ligne, qui a la boucle horizontale à la|o<
place.la source
Python 2,
369368 octetsPython 3, 371 octets
J'utilisais précédemment l'
hash
index intégré to index (hash(id)%20
), qui renvoie une valeur aléatoire au début de l'interpréteur Python depuis https://bugs.python.org/issue13703 . Cependant, ce n'est pas aléatoire pour la chaîne vide (toujours 0), il faut donc utiliser autre chose, la commandeid
intégrée!À la deuxième recherche, je pourrais utiliser
id
directement, mais il semble toujours produire des nombres pairs. IIRC,id(object)
dans CPython , ne fait que renvoyer l'emplacement mémoire deobject
, alors c'est logique. Peut-être que si j'utilisais Jython ou IronPython, je pourrais sauter la division par 7. Quoi qu'il en soit,hash(id)
vsid(0)//7
est égal en Python 3, mais peut utiliser l'/
opérateur pour tronquer une division entière en Python 2, en sauvegardant un octet.la source
PowerShell , 354 octets
Essayez-le en ligne!
Ho-hum. Prend tous les résultats, concaténés avec
0
s, puis-split
s0
pour créer un tableau de chaînes. Passe le tableau surGet-Random
lequel l’un d’entre eux sera sélectionné aléatoirement. Cela reste sur le pipeline et la sortie est implicite.la source
Python 2 , 385 octets
-1 octet grâce à ovs.
Essayez-le en ligne!
la source
Applescript, 391
J'aime la façon dont les listes AppleScript ont une
some item
méthode:la source
Utilitaires Bash + GNU, 230
La sortie binaire zopfli n'est pas bien représentée ici; à la place, vous pouvez reconstruire le script à partir de données codées en base64:
Notez que, comme le permet la question, les données compressées sont décompressées en minuscules. Cela rend la compression zopfli un peu plus efficace et économise 16 octets.
la source
tail +2
ne fonctionne pas pour moi, maissed 1d $0
enregistre un octet de toute façon. De plus, comme la sortie vers STDERR est autorisée par défaut, je ne pense pas que vous ayez besoin deexit
. En outre, les dix derniers octets du programme peuvent être supprimés.R , 360 octets
Essayez-le en ligne!
Pas exactement la solution la plus élégante. R possède une fonctionnalité
stdin
intéressante permettant de rediriger le fichier vers le fichier source. Vous pouvez ainsi insérer de (petits) ensembles de données dans le code source, en économisant des octets pour le fractionnement de chaînes ou pire, en construisant le vecteur lui-même (toutes ces citations s'additionnent rapidement). En plus des fonctions intégrées pour l'échantillonnage aléatoire, cela donne une réponse courte.la source
Charbon de bois ,
203184 octetsEssayez-le en ligne! Le lien est vers la version verbeuse du code. Edit: 19 octets enregistrés en mettant en minuscule tout. Explication:
la source
Retina ,
333331321 octetsEssayez-le en ligne! Edit: Sauvegardé 1 octet en compressant
doubt
et 1 octet en minuscule pour que tout soit compresséreply
. Puis sauvegardé 10 octets en utilisant le golfeur Retina Kolmogorov de @ Leo sur le texte minuscule (qui correspond au nombre d’octets enregistrés sur ma réponse de 333 octets).la source
Noix de coco , 380 octets
Le port de coco de la réponse de tout homme
Essayez-le en ligne!
la source
T-SQL, 393 octets
La fonction
STRING_SPLIT
est uniquement disponible dans SQL 2016 et versions ultérieures.Le meilleur que je pouvais obtenir pour les versions précédentes en utilisant
VALUES('It is certain'),('It is decidedly so'),...
était 464 caractères.Formaté, juste pour que vous puissiez voir la partie active:
NEWID()
génère un nouveau GUID pseudo-aléatoire, ce qui permet de faire un tri pseudo-aléatoire.la source
Gelée , 201 octets
-2 octets merci à M. Xcoder. -1 octet grâce à user202729.
Essayez-le en ligne!
Zut , la compression de SOGL est bonne.
la source
ỴX
à la fin du code afin qu'il choisisse au hasard parmi l'un d'eux)05AB1E , 171 octets
Essayez-le en ligne!
Explication
“ ... “
pousse une chaîne de tous les mots requis.Certains mots sont tirés directement du dictionnaire 05ab1e.
Certains sont écrits en ascii clair (comme
haze
).Certains combinent dictionnaire et ascii (comme
do
+n't
).Le code de traitement est alors:
la source
,
et'
ajouté.ye
,don
, etha
), et -2 de tri de la liste par le nombre de mots et en utilisant la compression delta.Ruby,
362361 octetsEssayez-le en ligne!
la source
?.
lieu de'.'
.?
littéral de chaîne de caractères uniquePython 3, 386 octets
la source
Perl, 366
la source
As I see it, yes
.split
.print
et enregistrer 1 octet supplémentaire. Il suffit de mettre un signe plus unaire avant la liste:print((0..9)[5])
deviendraitprint+(0..9)[5]
.05AB1E ,
208217 octetsEssayez-le en ligne!
Jolie solution de base. Les réponses possibles sont concaténées avec le caractère x (puisqu'il n'est pas présent dans les réponses), puis compressées (à l'intérieur du • ), 'x¡Ω se divise sur x et saute un choix aléatoire.
Merci à @Emigna pour avoir souligné que la compression de l'alphabet n'aime pas 'ou beaucoup. Fixé en entourant la chaîne compressée avec don ' et , oui .
la source
,
et'
par des espaces, de sorte que la sortie pour ces 2 lignes est incorrecte.PHP ,
412385337384 octetsEssayez-le en ligne!
Solution assez simple. Divisez la chaîne par un délimiteur (dans ce cas
1
) et choisissez un élément aléatoire dans le tableau.la source
php
pour que votre code soit compilé; 2, vous pouvez remplacer'|'
avec1
et tous|
avec1
pour -2 octets; 3 devrait envisager de changer votre lien pour Trying it Online en TIO.run selon les préférences de la communauté.PHP 7.2.3-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Mar 6 2018 11:18:25) ( NTS )
. Pas sûr que dans les versions précédentes ce qui compte ou non. De toute façon, j'ai édité la question.<?=
et faire écho à l'exploser directement en utilisant[rand(0, 19)]
au lieu d'ajouter d'abord à une variable<?= explode("1", "str1str1str")[rand(0, 19)]
Javascript, 372 octets
-10 octets grâce à Shaggy
Essayez-le en ligne!
la source
OR
lieu deMath.floor()
sauver 7 octets:Math.random()*20|0
.Befunge
1221870 octets (le périmètre de l'ensemble du champ est33 x 3630 * 29 caractères) Merci à Jo King de m'avoir aidé à supprimer lesvaleurs NULL defin et de m'avoir exhorté à modifier le randomiseur.La ligne du haut place le caractère '<' et la position x (28) à l'endroit où il devrait être placé sur la pile. Ensuite, nous entrons dans la sorte de générateur de nombres aléatoires. Cela pourrait être amélioré, mais voici ce que je pourrais vous livrer rapidement ... Le nombre "aléatoire" est compensé pour obtenir la ligne "aléatoire" à lire.
Une fois le nombre aléatoire généré, nous plaçons le caractère '<' sur cette ligne, plaçons les lettres dans la pile et les rediffusons sur la dernière ligne.
Remarque; si vous utilisez l'interprète auquel j'ai lié dans ce titre, vous devez reclicker le bouton "Afficher" après chaque exécution, car l'ajout du caractère "<" reste après l'exécution.
la source
>:#,_@
pour éviter d’imprimer des octets nuls. Oh, et ajoutez un lien TIO.Java 8 ,
433,392,380, 379 octetsEssayez-le en ligne!
la source
String#split
. En outre, vous pouvez enregistrer 11 octets supplémentaires en utilisant à la(int)(Math.random()*20)
place denew java.util.Random().nextInt(20)
. Et le point-virgule n'est pas compté dans le nombre d'octets pour lambdas. Donc au total: 380 octets .Don't
plutôt queDon' t
.Rouge , 367 octets
Essayez-le en ligne!
Cela ne semble pas vraiment aléatoire dans TIO (bien que cela fonctionne très bien dans la console rouge), c'est pourquoi j'ai ajouté une graine aléatoire à l'en-tête.
la source
Excel, 399 octets
Depuis
CHOOSE(X.Y,<>)
est le même queCHOOSE(X,<>)
, pas besoin d'unINT
Pas beaucoup de golf que vous pouvez faire ici cependant ...
la source
Aceto , 345 + 1 = 346 octets (+1 pour
-l
drapeau)Essayez-le en ligne!
Pas trop intéressant, mais je ne peux pas penser à quelque chose de plus court dans cette langue, pas de chaînes compressées ou quoi que ce soit.
la source
C - 426 octets
Utilise une variable non initialisée mod 20 pour indexer dans un tableau de chaînes contenant toutes les sorties possibles. Les compilateurs se plaignent que stdio.h ne soit pas inclus, mais cela fonctionne correctement. Probablement parce que la bibliothèque standard est liée de toute façon. J'ai de la chance.
la source
Go, 530 octets
Veuillez noter que, sur le terrain de jeu de Go, en raison de la façon dont fonctionne le semis, cela donne toujours le même résultat. Lorsque vous utilisez un ordinateur ordinaire, tout fonctionne comme il se doit.
Je pense qu'il est possible d'économiser un peu plus mais mes connaissances dans Go s'arrêtent là :)
Version formatée et testable
la source
Excel-VBA,
362341339 octetsOù
A1:T1
contiennent les différentes options. Lit toute la première ligne de la feuille dans un tableauv
et indexe un point aléatoire le long des 19 premières valeurs.Surprise de constater que l'indexation d'un tableau ne nécessite pas de valeurs entières
la source
VBA, 358 octets
Une fonction de fenêtre immédiate VBE anonyme qui ne prend aucune entrée et qui sort vers STDOUT.
la source
Java 8, 379 octets
Essayez-le en ligne
la source