Problème
À partir des n=2
dés:
- Lancez des
n
dés, chaque chiffre de 1 à 6 étant également probable sur chaque dé. - Vérifiez si leur somme est égale à la somme la plus probable pour les
n
dés, c'est-à-dire3.5*n
.- S'ils sont égaux, mettez fin.
- Sinon, imprimez
n
et répétez depuis le début avec lesn+2
dés
Votre code n'a pas à effectuer cette procédure exactement, mais doit donner une sortie aléatoire probabilistiquement équivalente à celle-ci, basée sur notre définition de l'aléatoire .
Votre programme devrait sortir tous les numéros sur leur propre ligne; par exemple, si le programme a obtenu jusqu'à 8 dés et a lancé le nombre le plus probable avec 8 dés, le résultat serait:
2
4
6
Exemple d'exécution
Sur 2 dés, 7
c'est la somme la plus probable. Disons que les chiffres obtenus étaient 2
et 3
. Ensuite, vous imprimeriez 2
.
Sur 4 dés, 14
c'est la somme la plus probable. Disons que les chiffres étaient roulés 3
, 4
, 2
et 5
. Ensuite, la somme est 14
, donc le programme se terminerait ici.
La sortie finale dans ce cas est "2"
.
Règles
- code-golf donc la solution la plus courte en octets gagne
- Les échappatoires standard s'appliquent
- La méta définition du hasard s'applique
- Vous pouvez utiliser des fonctions ainsi que des programmes
2, 4, 6, 8, ...
autant de dés à chaque fois jusqu'à ce que j'atteigne le nombre le plus probable pour cette itération?Réponses:
Python 2 , 70 octets
Essayez-le en ligne!
L'astuce consiste à calculer la somme en
eval
ing une chaîne qui ressembleavec des
n
copies de l'expression concaténées. Lesrandrange(6)
sorties un nombre aléatoire de[0,1,2,3,4,5]
, qui est décalé vers le bas2.5
pour avoir une moyenne de0
. Lorsque la somme si0
, lawhile
condition échoue et la boucle se termine.Une alternative utilisant
map
était de 4 octets de plus:J'ai trouvé un tas d'expressions de longueur égale pour un dé décalé à zéro, mais aucune plus courte
la source
MATL , 13 octets
Essayez-le en ligne!
Explication
la source
Gelée ,
1914 octets-5 octets avec l'aide de Leaky Nun (passage du décompte à la récursivité)
Un programme complet imprimant les résultats séparés par des retours à la ligne (un espace supplémentaire et un retour à la ligne sont également imprimés, et les erreurs de programme à la fin).
Essayez-le en ligne! - chaque fois que 6 dés sont dépassés, TIO tue cela en raison de l'utilisation de la mémoire, mais cela fonctionne en principe - cela prend également ~ 40s pour le faire.
Une version plus conviviale de 15 octets qui ne prend pas autant de temps ou nécessite autant de mémoire est disponible ici .
Comment?
Lance récursivement 2 dés supplémentaires jusqu'à ce que la somme des faces réduites chacune de 3,5 soit nulle, imprimant le nombre de dés au fur et à mesure, lorsque le zéro est atteint, il tente d'utiliser un caractère espace provoquant une erreur de type.
la source
n
s, OK peut-être que c'est récupérable. Je pensais que vous vouliez les sommes :)TI-BASIC, 28 octets
Explication
randInt(1,6,N)
génère une liste de N nombres aléatoires de 1 à 6mean(randInt(1,6,N)-3.5
obtient la moyenne des rouleaux réduite de 3,5While
continue jusqu'à ce que l'expression moyenne soit égale à zéro (la somme la plus probable)la source
R , 49 octets
sample(6,n,T)
génèren
des échantillons (pseudo) aléatoires à partir de la plage1:6
avec remplacement. La soustraction de 3,5 de chaque élément donne un résultat dont la valeursum
est 0 (falsey) si et seulement si c'est la valeur la plus courante.Essayez-le en ligne!
Saute les jets de dés impairs.
la source
Java 8,
123149113 113108 octetsOu 107 octets si nous utilisons à la place un
Object null
paramètre as .+26 octets pour une correction de bogue, correctement signalé par @Jules dans les commentaires.
-41 octets grâce à la grande pensée de @ OliverGrégoire !
Explication:
Essayez-le ici.
la source
r
égal à,3.5*n
le programme doit se terminer directement. Mais, si je comprends bien la fonction, elle s'imprimeraitn
une dernière fois avant de se terminer.n
de 2. Il contenait donc deux bugs (1-12 au lieu de 2-12; et lancer des dés comme 2 -> 2 -> 4 -> 6 -> ..., au lieu de 2 -> 4 -> 6 -> ...). Cependant, il s'imprimait correctement, car il ne serait pas alléSystem.out.println(n),n+=2
s'ilr
était en effet égal à3.5*n
.()->{for(int n=2,s=0,e=7,i;s!=e;n+=2,e+=7){for(i=n,s=n;i-->0;)s+=Math.random()*6;if(s!=e)System.out.println(n);}}
. Aussi, correct en ce qui concerne le commentaire de Jules et mon explication.n
est dés,s
est somme,e
est attendu,i
est index. Enfin, la somme commence parn
éviter un+1
,n
fois, ets!=e
est répétée parce que je ne sais tout simplement pas comment éviter ce cas.()->{for(int i=0,s=1,j;s!=i*7;){for(j=s=++i*2;j-->0;)s+=Math.random()*6;if(s!=i*7)System.out.println(i*2);}}
05AB1E ,
2220 octets-2 octets grâce à Emigna
Essayez-le en ligne!
Explication
la source
O
après,.R
vous pouvez supprimer)
ets
.R,
484442 octetsUne amélioration de 5 octets sur la réponse de Giuseppe .
Cette (ab) utilise le fait qu'il
F
s'agit d'une variable par défaut affectée àFALSE
laquelle contraint0
et peut ensuite être incrémentée, ce qui nous évite d'avoir à initialiser une variable de compteur.la source
sample(6)
au lieu desample(1:6)
mais barré 44 est toujours 44 .... codegolf.stackexchange.com/a/82343/67312PHP , 75 octets
Essayez-le en ligne!
la source
5^2/++$i*$d+=rand()%6
est une condition légèrement plus courte pour la boucle. Je pense aussi que la boucle actuelle se termine incorrectement si le tout premier "dé" lancé est un "1" (il génère un 0 pour l'initiale$d
).GolfScript , 41 octets
Essayez-le en ligne!
la source
Mathematica, 47 octets
-5 octets de LLlAMnYP
la source
05AB1E , 17 octets
Essayez-le en ligne!
Explication
la source
Lot, 109 octets
Plutôt ennuyeux, il
random
s'agit d'une variable d'environnement magique, elle n'est donc remplacée que par une valeur aléatoire lors de l'expansion de l'environnement, ce qui se produit normalement avant le début de la boucle for.call
le fait se produire à chaque fois dans la boucle, mais vous devez ensuite doubler les%
signes pour empêcher l'expansion de se produire avant la boucle. Le plaisir commence car nous voulons moduler le résultat par 6, ce qui nécessite un vrai%
signe, qui doit maintenant être doublé deux fois. Le résultat est six%
s consécutifs .la source
JavaScript (ES2015),
7578 octetsProduit une chaîne de résultats séparés par des retours à la ligne
Edit: enregistré un octet grâce à Shaggy, ajouté 4 octets pour démarrer la fonction à 2
Explication
la source
'\n'
.n=2
, au lieu de cela, vous devez spécifier le nombre de dés de départ lorsque la fonction est appelée.php - 89 caractères
la source
$r=0;
utilisationecho
au lieu deprint
$n."
peut être écrit au fur"$n
et à mesure des boucles au lieu de tandis que permet de faire quelque chose dans la boucle après ou avant pour enregistrer quelques octetsC (gcc) ,
8480797775807876 octetsEssayez-le en ligne!
la source
Haskell
133132 octetsNous remercions @Laikoni pour les suggestions dans les commentaires ci-dessous.
la source
return()
peut être raccourcipure()
etputStrLn$show
raccourciprint
.div k 2 then
peuvent êtrediv k 2then
etdo print k;s(k+2)
sontprint k>>s(k+2)
.Octave 55 octets
Inspiré par la réponse d'Andrewarchi. Si quelqu'un a des conseils pour le raccourcir, il est le bienvenu.
la source
Pyth , 20 octets
Essayez-le en ligne!
la source
QBIC , 40 octets
Cela fait à peu près littéralement ce que le défi demande; semble le moyen le plus court pour obtenir la bonne distribution.
Explication
la source
Rexx (Regina) , 78 octets
Essayez-le en ligne!
la source
JavaScript (ES6) - 69 caractères
Explication :
et:
la source
Calc2 0,7,
119118111 octetsnon golfé:
Je pourrais me passer de Math.Int () mais malheureusement en 0.7 les fonctions Random (). Next () ont un bug où elles retournent toutes des doubles au lieu des ints. Il a été corrigé mais seulement après que cette question a été publiée. Je ne gagnerai rien, mais bon, belle preuve de concept.
Modifier:
Edit2:
supprimé var r et créer un nouveau aléatoire là où il est nécessaire (-4 octets)
changé i = 0, d = 0 en i = d = 0 (-2 octets)
incrémenté i après vérification (-1 octet)
la source
Rubis , 52 octets
Explication
Essayez-le en ligne!
la source
s=0
at the front of the loop and the use ofx.times
. This means the sum is reset every time and thenx
dice are rolled, which should be the correct distribution. I'll write up an explanation of my code.Javascript, 87 chars
Test with
console.log
instead ofalert
:la source
lua, 102 bytes
Or the more readable version
A more cheaty version for 96 bytes
This pretty much works the same as the first but reuses the rolls from earlier calls. Because of this I can remove the for loop. Both are tested in lua 5.2
la source
Perl 6, 48 bytes
la source
PHP, 51 bytes
la source