Weil es nicht genug einfache Code-Golf- Herausforderungen gibt:
Erstellen Sie ein optionales unbenanntes Programm oder eine Funktion, die (mit allen Mitteln) eine Ganzzahl von 1 ≤ N ≤ 10000 angibt und den wahren Wert Ihrer Sprache mit einer pseudozufälligen Wahrscheinlichkeit von 1 / N ausgibt, andernfalls False.
Bitte beachten Sie, dass die Anforderung zur Benennung entfernt wurde. Fühlen Sie sich frei, die Antworten und Ergebnisse entsprechend zu bearbeiten.
Einige Sprachen verwenden 1 (oder -1) und 0 für Wahr und Falsch, das ist auch in Ordnung.
Beispiel:
Beispiel für Eingabetests:
4 -> True
4 -> False
4 -> False
4 -> False
4 -> False
4 -> True
4 -> False
4 -> False
Dh gegeben 4; Es gibt True mit einer Chance von 25% und False mit einer Chance von 75% zurück.
N
wir akzeptieren müssen?Antworten:
MediaWiki-Vorlagen mit ParserFunctions , 48 Bytes
quelle
#time
, wahrscheinlich um das Alter der lebenden Menschen usw. zu aktualisieren.Pyth, 3 Bytes
Probieren Sie es online aus
Einfache Umkehrung der Zufallsauswahl von 0 zu Eingabe
Amüsanterweise ist es in Pyth nicht möglich, eine Funktion zu
$
erstellen, ohne die dies möglich ist, da Pyth-Funktionen automatisch gespeichert werden.quelle
Q
Ausfüllen am Ende!O
CJam, 5 Bytes
Muss schnell mit diesen sein ...
Teste es hier.
Erläuterung
quelle
TI-BASIC, 4 Bytes mit 1-Byte-Token
Bestimmt, ob der ganzzahlige Teil der Eingabe mit einer Zufallszahl in [0,1] Null ist.
Ansrand<1
funktioniert auch.quelle
MATL, 5 Bytes
Drei verschiedene Versionen von dieser, alle Länge 5.
Dieser Befehl nimmt eine Eingabe (
i
), generiert eine zufällige Ganzzahl zwischen 1 und dieser Zahl (Yr
) und prüft, ob sie gleich 1 (1=
) ist. Alternative,Machen Sie eine 1 (
l
eine Umgehung, weil es einen Fehler gibt, der gerade zu tun hat1i
), nehmen Sie eine Eingabe (i
), dividieren Sie, um 1 / N (/
) zu erhalten, machen Sie eine Zufallszahl zwischen 0 und 1 (r
) und prüfen Sie, ob die Zufallszahl vorliegt Anzahl ist kleiner als 1 / N. Oder,nimm und gib (
i
) ein und multipliziere mit einer Zufallszahl zwischen 0 und 1 (r*
) und sieh nach, ob das Ergebnis kleiner als 1 (1<
) ist.In Matlab und nicht in MATL können Sie diese anonyme Funktion ausführen
für 12 Bytes, die
ans(5)
zum Beispiel verwendet wird.quelle
JavaScript ES6, 15 Byte
-5 Bytes dank Downgoat.
Basierend auf der Technik dieser Antwort.
quelle
new Date
kann auch funktionieren und könnte ein paar Bytes sparenJulia,
171615 BytesDies ist eine Funktion, die eine zufällige Ganzzahl zwischen 1 und erzeugt
n
und prüft, ob sie kleiner als 2 ist. Es besteht eine 1 / n-Chance, dass dies geschieht, und somit eine 1 / n-Chance, dass sie zurückkehrttrue
.1 Byte gespart dank Thomas Kwa!
quelle
Mikroskript II , 3 Bytes
Liest eine Ganzzahl
n
, generiert eine zufällige Ganzzahl zwischen0
undn-1
(einschließlich) und wendet dann eine boolesche Negation auf diesen Wert an.quelle
Süßigkeit , 2 Bytes
H steht für Heisen-Doppel
n steht für nicht
Das 'n' wird mit dem Flag -i als numerische Eingabe übergeben. Auf dem Stapel verbleibende Werte werden beim Beenden gedruckt.
"Lange Form:
quelle
-i
als ein Byte zählen.lambda x: random.random()<1/x
(ungolfed) wird außerdem "kostenlos angegeben", dass das Argument eine Zahl ist.Im Ernst, 3 Bytes
0
ist falsch und1
ist wahr. Probieren Sie es online ausErläuterung:
quelle
R
3022 BytesCode
Sie generiert eine Zahl aus einer Gleichverteilung (0 bis 1) und sollte zu 1 / n der Zeiten als wahr ausgewertet werden.
quelle
Japt, 6 Bytes
Probieren Sie es online!
Mr
ist gleichbedeutend mit JSMath.random
. Der Rest ist ziemlich offensichtlich. Ich könnte wahrscheinlich eine Zahlenfunktion hinzufügen, die einen zufälligen Gleitkommawert zwischen 0 und der Zahl erzeugt. In diesem Fall werden zwei Bytes gespeichert:Alternative Version:
Ð
ist äquivalent zunew Date(
und das Date-Objekt wird beim Umwandeln in eine Zahl zum aktuellen Zeitstempel in Millisekunden. Dies ist also völlig zufällig, es sei denn, es wird mehrmals pro ms ausgeführt.quelle
Marbelous , 21 Bytes
Ich habe angenommen
0
, falsch zu sein und ehrlich1
zu sein, obwohl es keinen wirklichen Grund dafür gibt, da Marbelous nicht wirklich ein Wenn hat. Mehr Marbelousy würde{0
für wahr und{>
falsch ausgegeben werden . Das würde so aussehen:Aber ich bin mir nicht sicher, ob das gültig ist.
quelle
APL,
63 BytesDies ist ein Funktionszug, der eine Ganzzahl annimmt und 1 oder 0 zurückgibt (APLs true / false). Wir generieren eine zufällige Ganzzahl von 1 bis zur Eingabe mit
?
und prüfen dann, ob die Eingabe dieser Ganzzahl entspricht. Das ergibt eine 1 / Eingabe-Chance von wahr.3 Bytes gespart dank Thomas Kwa!
quelle
⊢
anstelle von '+' verwenden, weil+
das Konjugieren für komplexe Zahlen bedeutet. Natürlich spielt es hier keine Rolle und+
ist die traditionelle Identitätsfunktion (no-op), aber jetzt haben wir⊢
(dasselbe). Andere No-Ops für Skalare sind:⌷
(materialisieren),⊃
(auswählen),⊂
(einschließen),↑
(teilen),↓
(mischen),∪
(einzigartig),∊
(eintragen),,
(ravel),⍪
( tabelle ),⌽
(umkehren),⊖
(umkehren) zuerst) und⍉
(transponieren). Einige verwandeln den Skalar in einen Vektor oder eine Matrix.PlatyPar , 3 Bytes
#?
Ruft eine Zufallszahl ab,[0,n)
inn
die eingegeben wird.!
Gibt zurück,true
wenn die Zahl davor ist0
, sonst wird zurückgegebenfalse
.Mit neueren Funktionen, die implementiert wurden (aber leider für mich nicht verbindlich), bevor diese Frage gestellt wurde, kann ich sie mit
~!
Try it online auf 2 reduzieren !quelle
Java, 43 Bytes
quelle
a->a*Math.random()<1
ist kürzer.C 24 Bytes
quelle
return
ohne zu habenf(n)
.rand()%n
ist eine Standardmethode, um eine Zufallszahl in den Bereich zu bekommen0..n-1
. Sie haben Recht, es kommt darauf ann
, viel kleiner zu sein als,RAND_MAX
aber es gibt keine Obergrenze fürn
die in der Frage genannten. Ein alternativer Ansatz wäre, alle Zahlen vonn
RAND_MAX abzulehnen und erneut zu würfeln, aber im Kleinen wäre dies hoffnungslos ineffizientn
.> <>, 27 + 3 für -v = 30 Byte
Hier ist eine uneinheitliche Lösung, bei der ich N als Summe von 15876 zufälligen Picks von 0 oder 1 modifiziere:
N muss auf dem Stack mit dem Flag -v eingegeben werden, die Ausgabe ist 0 für Falsey und 1 für Truthy.
Eine viel intelligentere und einheitlichere Lösung, die stattdessen für 1/2 ^ N funktioniert:
Für einen Eingang 3 haben Sie 1/8 Chancen auf 1 und 7/8 auf 0.
Erklärung:
Ich füge
x
in der 4. Zeile so viel wie nötig hinzu undx
umgebe sie mit Anweisungen, sodass es nur zwei Möglichkeiten gibt : entweder die Falsey-Ausgabe oder die nächstex
. Wenn allex
in die richtige Richtung gehen, wird der letzte Weg zum wahren Ausgang führen.Für N = 5 lautet der endgültige Codespace beispielsweise wie folgt:
quelle
(iterNum/2)%N
. Ich denke nicht, dass die Verwendung einer niedrigeren Nummer eine Lösung wäre. Habe ich Sie vielleicht nicht ganz verstanden, oder hätten Sie noch eine Idee, um die Lösung zu verbessern?Mathematica,
1816 BytesGrundlösung. Der Unbenannte
Function
erzeugt eine Zufallszahl in [0, 1], multipliziert sie mit ihrem Argument und prüft, ob sie noch kleiner als 1 ist.quelle
Python, 42 Bytes
Bearbeiten : Die
time.time()
Antwort wurde aufgrund der Verteilung entfernt.quelle
random
es lohnt sichfrom random import*
zu sparenrandom.
. Nicht fürtime
obwohl.n
der Effekt spürbar sein. Ich denke1>time.time()%1*n
könnte funktionieren.rand
C undtime.time
Python ... Ein offensichtliches Merkmal des letzteren ist, dass es die aktuelle Zeit zurückgibt , die unbegrenzt ist, so dasstime.time()%n
eine gleichmäßige Verteilung vorliegt (über lange genug Zeiträume). für jedenn
.TeaScript , 3 Bytes
Probieren Sie es hier aus.
Erläuterung
quelle
®
repräsentiert das Zeichen'\xae'
nur ein Byte. :)Fuzzy Octo Guacamole, 10 Bytes
Erläuterung:
quelle
Perl 6 ,
108 BytesDieser Code erstellt einen Bereich von 0 bis einschließlich der Eingabe
*
. Es ist dannpick
eine zufällige und die!
gibt True zurück, wenn es eine empfängt0
.Dies nimmt die Eingabe
*
und multipliziert sie mit einer zufälligen Zahl.0..^1
Wenn sie kleiner als ist, wird True zurückgegeben1
.quelle
Prolog (SWI), 24 Bytes
Code:
Vielleicht ist (+ P) eine Funktion, die mit der Wahrscheinlichkeit P erfolgreich ist und mit der Wahrscheinlichkeit 1-P fehlschlägt
Beispiel:
quelle
PowerShell, 25 Bytes
Die
Get-Random
Funktion gibt bei Angabe eines-Ma
ximum-Parametersn
einen Wert aus dem Bereich zurück[0,n)
. Wir nutzen dies, indem$args[0]
wir 1 von unserer Eingabe subtrahieren , sodass wir den Index korrekt auf Null setzen und einen zufälligen Wert erhalten. Genau1/n
zu dieser Zeit wird dieser Wert sein0
, wenn wir also Boolesche Werte - nicht mit!
ihm - zurückgebenTrue
. Die anderen Zeiten werden wiederkommenFalse
.quelle
J, 3 Bytes
Dies ist eine monadische Gabel, die ein Argument auf der rechten Seite übernimmt. Ähnlich wie bei APL? generiert eine zufällige ganze Zahl; J-Arrays sind jedoch nullbasiert. Also vergleichen wir mit 0 anstatt mit der Eingabe.
quelle
Minkolang 0,14 , 7 Bytes
Probieren Sie es hier aus.
Erläuterung
quelle
PHP, 22 Bytes
Liest
n
von der Kommandozeile, wie:Ausgaben
(
false
wird in PHP in eine leere Zeichenkette umgewandelt) oder1
(im Falle vontrue
).quelle
C #,
5645 BytesDank pinkfloydx33 sind es jetzt 45.
Alte 56 Bytes
Erzeugt eine zufällige positive Ganzzahl, die größer oder gleich 0 und kleiner als ist,
n
und überprüft, ob sie kleiner als ist,1
und gibt das Vergleichsergebnis zurück.quelle
Random.Next(k)
eine Ganzzahlk
wie folgt zurückgegeben wird0 <= k < n
. Wenn Sie die Bedingung in ändern<1
, ist dies korrekt. Darüber hinaus kann die Verwendung eines Lambda-Ausdrucks Ihren Code kürzer machen.0 < k <= n
und es sollte so sein, wie du gesagt hast. Ich werde es sofort korrigieren.var r
spart drei. Oder wenn c # 6bool a(int n) => new Random().Next(n)<1;
für 41. Sie sind sich nicht sicher, ob die Initialisierung eines neuenRandom
Methodenaufrufs für die Verteilung ordnungsgemäß funktioniert?Kratzer , 63 Bytes
Probieren Sie es online!
Bild: Scratchblocks Code:
quelle