Concevez un générateur de nombres aléatoires où le i ème nombre a i% de chance de se produire pour tous 0 <i <14. 0 devrait avoir exactement 9% de chance de se produire. La graine pour le générateur doit être l'heure du système. Vous ne pouvez pas utiliser une fonction prédéfinie pour la génération de nombres aléatoires.
Fondamentalement, 1 a 1% de chance de se produire, 2 a 2% de chance et ainsi de suite jusqu'à 13 ayant 13% de chance de se produire. C'est le code-golf, donc le code le plus court l'emporte.
code-golf
math
random
probability-theory
ghosts_in_the_code
la source
la source
<
de l'inégalité et le>
du bloc de devis formaient une balise HTML.Réponses:
CJam, 14 octets
Testez-le ici.
Explication
la source
mR
?Python 2, 54
L'expression
f(t) = ((8*t+1)**.5+1)//2
transforme une distribution uniforme en une distribution entière triangulaire en mappant les intervallesNous convertissons les millisecondes du temps en un flottant uniforme de 0 à 100 en faisant
time.time()*1e4%100
. En fait, nous faisons%800
pour remplacer la multiplication par 8 dans l'étape de conversion. À la fin, 14 sont convertis en 0 en faisant%14
.la source
Pyth - 14 octets
Génère un tableau avec la distribution spécifiée, puis choisissez-en un au hasard.
Essayez-le en ligne ici .
la source
Dyalog APL , 20 octets
⍳13
entiers 1 à 13(/⍨
…)
répliquer par lui-même, par exemple/⍨3
est3 3 3
et/⍨2 3
est2 2 3 3 3
n
↓
… supprimer n éléments (laisse la liste vide si n > longueur de la liste)⎕TS
horodatage du système par exemple 2015 11 1 13 28 56 834⊃⌽
dernier élément, c.-à-d. milliseconde actuelle 0–999⌊.1×
multiplier avec 0,1 et arrondir le⊃
premier élément, donne 0 si si les données sont videsla source
Traitement 3, 65
5574octetsObtenez un nombre aléatoire de 0 à 99 (inclus). Si le nombre est 0-8, imprimer 0, si c'est 9 imprimer 1, si 10-11 imprimer 2, si 12-14 imprimer 3, etc ...
Personne ne l'a remarqué, mais le problème avec l'ancien code est que millis () renvoie la durée pendant laquelle l'application a été exécutée, ce qui donnerait des nombres très similaires lors des exécutions ultérieures du programme. Au moins maintenant, nous avons une nano précision!
la source
PHP, 50 octets
microtime
renvoie l'heure sous la forme d'une chaîne comme "0,04993000 1446409253", lorsque je multiplie cela par 100, PHP contraint la chaîne à 0,04993000, résultat 4,993000.$t
Est donc initialisé avec un nombre "aléatoire" dans[0,100)
$t
jusqu'à ce qu'il atteigne 0la source
;echo
au lieu de?><?=
, pour le même nombre d'octets. Mais bien fait!Python3, 86 octets
simple:
la source
J - 28 caractères
Celui-ci était idiot.
6!:0''
est l'Y M D h m s
heure actuelle sous la forme d'une liste de 6 éléments, où les millisecondes sont représentées sous forme de fractions sur les secondes - pour les atteindre, nous n'avons d'autre choix que de multiplier les secondes ({:
) par1e3
. Pendant ce temps,#~i.14
est une liste de zéro 0, un 1, deux 2, et ainsi de suite jusqu'à treize 13, et nous complétons cela à 100 éléments100{.
.J n'a pas d'indexation cyclique, il peut donc être tentant de prendre les millisecondes modulo 100 avant d'indexer la grande liste. Cependant, nous pouvons enregistrer deux caractères en utilisant
$
à la place pour étendre cycliquement la liste de 100 éléments au nombre de millisecondes que nous obtenons (de 0 à 60999 ) et prendre la dernière entrée à ce moment-là.Pas qu'une liste d'éléments 60000 soit beaucoup de mémoire utilisée ou quoi que ce soit, cela ressemble à une surpuissance: P
la source
JavaScript (ES6) 116
Ceci est une adaptation d'un RNG semé simple que j'ai utilisé à la place du RNG standard de javascript qui ne peut pas être semé (et qui n'est donc pas répétable)
la source
TI-BASIC, 18 octets
100fPart(sub(getTime
obtient le résidu aléatoire entre 0 et 99. Le (n-1) ème nombre triangulaire est égal à(N^2+N)/2
, donc l'inverse est égal à√(2y+1)-.5
. Plancher ceci après un ajustement à la baisse de 9, et nous avons le résultatLe seul problème est que pour les résidus inférieurs à 8, nous obtenons une racine carrée imaginaire. Nous prenons donc la partie réelle pour avoir la sortie de programme 0 à la place.
la source
Perl 5, 51 octets
50 octets + 1 pour
-E
au lieu de-e
:la source