Parce qu'il n'y a pas assez de défis simples de code-golf :
Créez un programme ou une fonction éventuellement sans nom qui, étant donné (par tout moyen) un entier 1 ≤ N ≤ 10000, génère la valeur True de votre langue avec une probabilité pseudo-aléatoire de 1 / N, False sinon.
Veuillez noter que l'exigence de dénomination a été supprimée. N'hésitez pas à modifier les réponses et les scores en conséquence.
Certaines langues utilisent 1 (ou -1) et 0 pour Vrai et Faux, c'est bien aussi.
Exemple:
Exemples de tests d'entrée:
4 -> True
4 -> False
4 -> False
4 -> False
4 -> False
4 -> True
4 -> False
4 -> False
Ie donné 4; il renvoie Vrai avec 25% de chances et Faux avec 75% de chances.
N
nous devons accepter?Réponses:
Modèles MediaWiki avec ParserFunctions , 48 octets
la source
#time
, probablement pour mettre à jour l'âge des personnes vivantes, etc.Pyth, 3 octets
Essayez-le en ligne
Inversion simple du choix aléatoire de 0 à l'entrée
De manière amusante en Pyth, il n'est pas possible de créer une fonction qui le fasse sans,
$
car les fonctions Pyth sont automatiquement mémorisées.la source
Q
remplissage à la fin, sinon j'aurais répondu!O
;)CJam, 5 octets
Je dois être rapide avec ceux-ci ...
Testez-le ici.
Explication
la source
TI-BASIC, 4 octets utilisant des jetons d'un octet
Détermine si la partie entière de l'entrée multipliée par un nombre aléatoire dans [0,1) est zéro.
Ansrand<1
fonctionne également.la source
MATL, 5 octets
Trois versions différentes de celui-ci, toutes de longueur 5.
qui prend une entrée (
i
), génère un entier aléatoire entre 1 et ce nombre (Yr
), et voit s'il est égal à 1 (1=
). Alternativement,faire un 1 (
l
, une solution de contournement car il y a un bug avec faire1i
en ce moment), prendre une entrée (i
), diviser pour obtenir 1 / N (/
), faire un nombre aléatoire entre 0 et 1 (r
), et voir si l'aléatoire le nombre est inférieur à 1 / N. Ou,take et input (
i
), et multipliez par un nombre aléatoire entre 0 et 1 (r*
), et voyez si le résultat est inférieur à 1 (1<
).Dans Matlab, pas MATL, vous pouvez faire cette fonction anonyme
pour 12 octets, qui est utilisé en faisant
ans(5)
, par exemple.la source
JavaScript ES6, 15 octets
-5 octets grâce à Downgoat.
Basé sur (utilisations) de la technique de cette réponse.
la source
new Date
peut également fonctionner et peut économiser quelques octetsJulia,
171615 octetsIl s'agit d'une fonction qui génère un entier aléatoire compris entre 1 et
n
et teste s'il est inférieur à 2. Il y aura 1 / n chance que cela se produise, et donc 1 / n chance de revenirtrue
.1 octet enregistré grâce à Thomas Kwa!
la source
Microscript II , 3 octets
Lit un entier
n
, génère un entier aléatoire entre0
etn-1
(inclus), puis applique une négation booléenne à cette valeur.la source
Candy , 2 octets
H signifie Heisen-double
n signifie pas
Le 'n' est passé avec le drapeau -i comme entrée numérique. Les valeurs laissées sur la pile sont imprimées à la sortie.
"Forme longue:
la source
-i
comme un octet.lambda x: random.random()<1/x
(non golfé), il est également "spécifié gratuitement" que l'argument est un nombre.Sérieusement, 3 octets
0
est falsey et1
est véridique. Essayez-le en ligneExplication:
la source
R,
3022 octetscode
Il génère un nombre à partir d'une distribution uniforme (0 à 1) et devrait être évalué à 1 / n vrai des temps.
la source
Japt, 6 octets
Essayez-le en ligne!
Mr
est équivalent à JSMath.random
. Le reste est assez évident. Je pourrais probablement ajouter une fonction numérique qui génère un flottant aléatoire entre 0 et le nombre. Dans ce cas, deux octets seront enregistrés:Version alternative:
Ð
est équivalent ànew Date(
, et l'objet Date, lorsqu'on lui demande de convertir en nombre, devient l'horodatage actuel en millisecondes. Ainsi, cela est entièrement aléatoire, à moins qu'il ne soit exécuté plusieurs fois par ms.la source
Marbelous , 21 octets
J'ai pris
0
pour falsey et1
pour être honnête, bien qu'il n'y ait aucune vraie raison pour que voir Marbelous n'a pas vraiment de si. Plus Marbelousy serait sorti{0
pour vrai et{>
pour faux. Cela ressemblerait à ceci:Mais je ne suis pas sûr que ce soit valable.
la source
APL,
63 octetsIl s'agit d'un train de fonctions qui prend un entier et renvoie 1 ou 0 (vrai / faux d'APL). Nous générons un entier aléatoire de 1 à l'entrée en utilisant
?
, puis vérifions si l'entrée est égale à cet entier. Cela se traduit par une chance 1 / entrée de vrai.Sauvegardé 3 octets grâce à Thomas Kwa!
la source
⊢
au lieu de '+' car+
signifie Conjugué pour les nombres complexes. Bien sûr, cela n'a pas d'importance ici, et+
c'est la fonction d'identité traditionnelle (no-op), mais maintenant nous avons⊢
(la même). Les autres no-ops pour les scalaires sont:⌷
(matérialiser),⊃
(choisir),⊂
(entourer),↑
(fractionner),↓
(mélanger),∪
(unique),∊
(enrôler),,
(ravel),⍪
(tableau),⌽
(inverser),⊖
(inverser d'abord) et⍉
(transposer). Certains changent le scalaire en un vecteur ou une matrice.PlatyPar , 3 octets
#?
obtient un nombre aléatoire[0,n)
oùn
est entré.!
retournetrue
si le nombre avant0
, sinon il retournefalse
.En utilisant des fonctionnalités plus récentes qui ont été implémentées (mais malheureusement pour moi non engagées) avant que cette question ne soit posée, je peux la réduire à 2 avec
~!
Try it online !la source
Java, 43 octets
la source
a->a*Math.random()<1
est plus court.C, 24 octets
la source
return
sans lef(n)
n'a pas de sens syntaxiquement.rand()%n
est un moyen standard d'obtenir un nombre aléatoire dans la plage0..n-1
. Vous avez raison, cela dépend d'n
être beaucoup plus petit queRAND_MAX
mais il n'y a pas de limite supérieure pourn
mentionné dans la question. Une autre approche serait de rejeter et de relancer tous les numéros den
RAND_MAX, mais ce serait désespérément inefficace au minimumn
.> <>, 27 + 3 pour -v = 30 octets
Voici une solution non uniforme du tout où je modifie N la somme de 15876 choix aléatoires de 0 ou 1:
N doit être entré sur la pile avec le drapeau -v, la sortie est 0 pour falsey et 1 pour truey.
Une solution beaucoup plus intelligente et uniforme qui fonctionne à la place pour 1/2 ^ N:
Pour une entrée 3, vous avez 1/8 de chances d'obtenir 1 et 7/8 d'obtenir 0.
Explication:
J'ajoute autant
x
que nécessaire sur la 4ème ligne et je les entoure de directions afin qu'il n'y ait que deux voies de sortiex
: la sortie falsey ou la suivantex
. Je tombex
va dans la bonne direction, la dernière route vers la sortie véridique.Par exemple, pour N = 5, l'espace de code final est le suivant:
la source
(iterNum/2)%N
. Je ne pense pas non plus que l'utilisation d'un nombre inférieur soit une solution. Est-ce que je ne vous ai peut-être pas bien compris, ou auriez-vous une autre idée pour améliorer la solution?Mathematica,
1816 octetsSolution basique. L'annulé
Function
crée un nombre aléatoire dans [0, 1), le multiplie par son argument et vérifie s'il est toujours inférieur à 1.la source
Python, 42 octets
Edit : Suppression de la
time.time()
réponse en raison de la distribution.la source
random
, cela vaut la peine de fairefrom random import*
des économiesrandom.
. Pas pourtime
autant.n
effet, l'effet pourrait être perceptible. Je pense que ça1>time.time()%1*n
pourrait marcher.rand
en C ettime.time
en Python ... Une caractéristique évidente de ce dernier est qu'il renvoie l'heure actuelle , qui est illimitée, de sorte qu'elletime.time()%n
a une distribution uniforme (sur des périodes suffisamment longues) pour toutn
.TeaScript , 3 octets
Essayez-le ici.
Explication
la source
®
représente le caractère'\xae'
est donc juste un octet. :)Octo Guacamole flou, 10 octets
Explication:
la source
Perl 6 ,
108 octetsCe code crée une plage de 0 à mais excluant l'entrée
*
. Il est alorspick
un au hasard et!
renvoie True lorsqu'il reçoit a0
.Cela prend l'entrée
*
et la multiplie par un nombre aléatoire,0..^1
puis renvoie True si elle était inférieure à1
.la source
Prolog (SWI), 24 octets
Code:
peut-être (+ P) est une fonction qui réussit avec la probabilité P et échoue avec la probabilité 1-P
Exemple:
la source
PowerShell, 25 octets
La
Get-Random
fonction lorsqu'il est administré un-Ma
paramètre ximumn
renvoie une valeur de la gamme[0,n)
. Nous tirons parti de cela en soustrayant 1 de notre entrée$args[0]
, nous sommes donc correctement indexés à zéro et obtenons une valeur aléatoire. Précisément1/n
le temps, cette valeur sera0
, donc quand nous booléen-pas avec!
elle reviendraTrue
. Les autres fois reviendrontFalse
.la source
J, 3 octets
Il s'agit d'une fourche monadique qui prend un argument à droite. De même pour APL,? génère un entier aléatoire; cependant, les tableaux J sont basés sur zéro. Nous comparons donc à 0 au lieu de l'entrée.
la source
Minkolang 0,14 , 7 octets
Essayez-le ici.
Explication
la source
PHP, 22 octets
Lit à
n
partir de la ligne de commande, comme:Sorties
(
false
est convertie en une chaîne vide en PHP) ou1
(dans le cas detrue
).la source
C #,
5645 octetsMerci à pinkfloydx33 c'est 45 maintenant.
Ancien 56 octets
Génère un entier positif aléatoire supérieur ou égal à 0 et inférieur à
n
et vérifie s'il est inférieur à1
et renvoie le résultat de la comparaison.la source
Random.Next(k)
renvoie un entierk
tel que0 <= k < n
. En changeant la condition en<1
, elle sera correcte. De plus, l'utilisation d'une expression lambda peut raccourcir votre code.0 < k <= n
et ça devrait être comme tu l'as dit. Je vais le corriger immédiatement.var r
enregistre trois. Ou si c # 6,bool a(int n) => new Random().Next(n)<1;
pour 41. Vous ne savez pas si l'initialisation d'un nouvelRandom
appel par méthode fonctionnera correctement en ce qui concerne la distribution?Scratch , 63 octets
Essayez-le en ligne!
Image: Code Scratchblocks :
la source