Problem
Ausgehend von n=2
Würfeln:
- Wirf
n
Würfel, wobei jede Zahl 1 bis 6 auf jedem Würfel gleich wahrscheinlich ist. - Überprüfen Sie, ob ihre Summe der wahrscheinlichsten Summe für
n
Würfel entspricht3.5*n
.- Wenn sie gleich sind, kündigen Sie.
- Andernfalls drucken
n
und von Anfang an mitn+2
Würfeln wiederholen
Ihr Code muss diese Prozedur nicht genau ausführen, sollte aber eine zufällige Ausgabe liefern, die auf der Grundlage unserer Definition der Zufälligkeit wahrscheinlich äquivalent ist .
Ihr Programm sollte alle Zahlen in einer eigenen Zeile ausgeben. Wenn das Programm beispielsweise bis zu 8 Würfel hat und die wahrscheinlichste Zahl mit 8 Würfeln gewürfelt hat, wäre die Ausgabe:
2
4
6
Beispiellauf
Bei 2 Würfeln 7
ist dies die wahrscheinlichste Summe. Nehmen wir an, die Zahlen waren 2
und 3
. Dann würden Sie drucken 2
.
Bei 4 Würfeln 14
ist dies die wahrscheinlichste Summe. Lassen Sie uns sagen , die Zahlen gerollt waren 3
, 4
, 2
, und 5
. Ist dann die Summe 14
, so würde das Programm hier enden.
Die endgültige Ausgabe in diesem Fall ist "2"
.
Regeln
- Code-Golf, so dass die kürzeste Lösung in Bytes gewinnt
- Es gelten Standardlücken
- Die Meta - Definition der Zufälligkeit gilt
- Sie können sowohl Funktionen als auch Programme verwenden
2, 4, 6, 8, ...
jedes Mal so viele Würfel ausgeben , bis ich die wahrscheinlichste Zahl für diese Iteration erreicht habe?Antworten:
Python 2 , 70 Bytes
Probieren Sie es online!
Der Trick besteht darin, die Summe zu berechnen, indem
eval
eine Zeichenfolge wie folgt erstellt wirdmit
n
Kopien des Ausdrucks verkettet. Derrandrange(6)
gibt eine Zufallszahl aus[0,1,2,3,4,5]
, die um den2.5
Durchschnitt von heruntergeschoben wird0
. Wenn die Summe if ist0
,while
schlägt die Bedingung fehl und die Schleife wird beendet.Eine alternative Verwendung
map
war 4 Bytes länger:Ich habe eine Reihe gleichlanger Ausdrücke für einen Würfel gefunden, die auf Null verschoben, aber nicht kürzer sind
quelle
MATL , 13 Bytes
Probieren Sie es online!
Erläuterung
quelle
Jelly ,
1914 Bytes-5 Bytes mit Hilfe von Leaky Nun (Übergang von der Zählung zur Rekursion)
Ein vollständiges Programm druckt die Ergebnisse durch Zeilenumbrüche getrennt aus (ein zusätzliches Leerzeichen und eine neue Zeile werden ebenfalls gedruckt, und die Programmfehler am Ende).
Probieren Sie es online! - Jedes Mal, wenn 6 Würfel überschritten werden, tötet TIO dies aufgrund des Speicherverbrauchs, aber es funktioniert im Prinzip - es dauert auch ~ 40s, um dies zu tun.
Eine freundlichere 15-Byte-Version, die nicht so lange dauert oder so viel Speicher benötigt, ist hier verfügbar .
Wie?
Wirft rekursiv 2 weitere Würfel, bis die Summe der jeweils um 3,5 reduzierten Flächen Null ist. Dabei wird die Anzahl der Würfel gedruckt. Wenn die Null erreicht ist, wird versucht, ein Leerzeichen zu verwenden, das einen Tippfehler verursacht.
quelle
n
, OK, vielleicht ist es heilbar. Ich dachte, Sie meinten die Summen :)TI-BASIC, 28 Bytes
Erläuterung
randInt(1,6,N)
generiert eine Liste von N Zufallszahlen von 1 bis 6mean(randInt(1,6,N)-3.5
Ruft den Durchschnitt der Rollen um 3,5 nach unten verschobenWhile
setzt sich fort, bis der durchschnittliche Ausdruck gleich Null ist (die wahrscheinlichste Summe)quelle
R , 49 Bytes
sample(6,n,T)
generiertn
(Pseudo-) Zufallsstichproben aus dem Bereich1:6
mit Ersetzung.sum
Wenn Sie von jedem Element 3,5 subtrahieren, erhalten Sie ein Ergebnis, das genau dann 0 (falsch) ist, wenn es der häufigste Wert ist.Probieren Sie es online!
Überspringt die ungeraden Würfelwürfe.
quelle
Java 8,
123149113108 BytesOder 107 Bytes, wenn wir stattdessen einen
Object null
nicht verwendeten Parameter verwenden.+26 Bytes für einen Bugfix, der von @Jules in den Kommentaren korrekt angegeben wurde.
-41 Bytes dank @ OliverGrégoires großartigem Denken!
Erläuterung:
Probieren Sie es hier aus.
quelle
r
gleich3.5*n
, sollte das Programm direkt beendet werden. Wenn ich die Funktion jedoch richtig verstehe, wird sien
vor dem Beenden ein letztes Mal gedruckt .n
um 2. Also enthielt es zwei Bugs (1-12 statt 2-12; und würfeln Sie wie 2 -> 2 -> 4 -> 6 -> ... anstelle von 2 -> 4 -> 6 -> ...). Es wurde jedoch korrekt gedruckt, da es nicht gegangen wäre,System.out.println(n),n+=2
wennr
es tatsächlich gleich wäre3.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);}}
. Auch in Bezug auf Jules 'Kommentar und meine Erklärung richtig.n
ist Würfel,s
ist Summe,e
wird erwartet,i
ist Index. Schließlich beginnt die Summe damitn
, a+1
,n
Zeiten zu vermeiden , unds!=e
wird wiederholt, weil ich nur nicht weiß, wie ich diesen Fall vermeiden soll.()->{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 Bytes-2 Bytes dank Emigna
Probieren Sie es online!
Erläuterung
quelle
O
nachdem.R
Sie)
und entfernen könnens
.R,
484442 BytesEine 5-Byte-Verbesserung gegenüber Giuseppes Antwort .
Dies (ab) verwendet die Tatsache, dass
F
standardmäßig eine Variable zugewiesen ist,FALSE
die erzwungen wird0
und dann inkrementiert werden kann, so dass wir keine Zählervariable initialisieren müssen.quelle
sample(6)
statt ,sample(1:6)
aber durchgestrichen 44 44 ist nach wie vor .... codegolf.stackexchange.com/a/82343/67312PHP , 75 Bytes
Probieren Sie es online!
quelle
5^2/++$i*$d+=rand()%6
ist eine etwas kürzere Bedingung für die Schleife. Ich denke auch, dass die aktuelle Schleife fälschlicherweise beendet wird, wenn der allererste gewürfelte "Würfel" eine "1" ist (es wird eine 0 für die Initiale generiert$d
).GolfScript , 41 Bytes
Probieren Sie es online!
quelle
Mathematica, 47 Bytes
-5 Bytes von LLlAMnYP
quelle
05AB1E , 17 Bytes
Probieren Sie es online!
Erläuterung
quelle
Batch, 109 Bytes
Ziemlich ärgerlich
random
ist, dass eine magische Umgebungsvariable nur während der Umgebungserweiterung durch einen zufälligen Wert ersetzt wird, was normalerweise vor dem Start der for-Schleife geschieht.call
macht es jedes Mal durch die Schleife geschehen, aber dann müssen Sie die%
Zeichen verdoppeln , um zu verhindern, dass die Erweiterung vor der Schleife geschieht. Der Spaß beginnt, weil wir das Ergebnis mit 6 modulieren wollen, was ein echtes%
Vorzeichen erfordert , das nun zweimal verdoppelt werden muss. Das Ergebnis sind sechs aufeinanderfolgende%
s.quelle
JavaScript (ES2015),
75 bis78 ByteGibt eine durch Zeilenumbrüche getrennte Folge von Ergebnissen aus
Bearbeiten: Speichert ein Byte dank Shaggy, fügt 4 Bytes hinzu, um die Funktion bei 2 zu starten
Erläuterung
quelle
'\n'
.n=2
, sondern Sie müssen die Startanzahl der Würfel angeben, wenn die Funktion aufgerufen wird.PHP - 89 Zeichen
quelle
$r=0;
verwendungecho
anstattprint
$n."
schreiben zu können als"$n
und für schleifen anstatt während etwas in der after schleife zu machen oder vorher einige bytes zu speichernC (GCC) ,
8480797775807876 ByteProbieren Sie es online!
quelle
Haskell
133132 BytesDank an @Laikoni für die Vorschläge in den Kommentaren unten.
quelle
return()
kann gekürzt werden aufpure()
undputStrLn$show
kann gekürzt werden aufprint
.div k 2 then
könnendiv k 2then
unddo print k;s(k+2)
sindprint k>>s(k+2)
.Oktave 55 Bytes
Inspiriert von Andrewarchis Antwort. Wenn jemand irgendwelche Hinweise hat, um sie zu verkürzen, ist er willkommen.
quelle
Pyth , 20 Bytes
Probieren Sie es online!
quelle
QBIC , 40 Bytes
Das macht buchstäblich das, was die Herausforderung verlangt; scheint der kürzeste Weg zu sein, um die Verteilung richtig zu machen.
Erläuterung
quelle
Rexx (Regina) , 78 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6) - 69 Zeichen
Erklärung :
und:
quelle
Calc2 0,7,
119118111 Bytesungolfed:
Ich könnte auf die Math.Int () verzichten, aber leider haben die Random (). Next () -Funktionen in 0.7 einen Fehler, bei dem alle statt ints double zurückgeben. Es wurde behoben, aber erst nachdem diese Frage gestellt wurde. Ich werde nichts gewinnen, aber hey, schöner Proof of Concept.
Bearbeiten:
Edit2:
entferne var r und erstelle ein neues Random wo es gebraucht wird (-4 byte)
i = 0, d = 0 in i = d = 0 (-2 Byte) geändert
inkrementiert i nach Prüfung (-1 Byte)
quelle
Ruby , 52 Bytes
Erläuterung
Probieren Sie es online!
quelle
s=0
am Anfang der Schleife und die Verwendung vonx.times
. Dies bedeutet, dass die Summe jedes Mal zurückgesetzt wird und dannx
gewürfelt wird, was die richtige Verteilung sein sollte. Ich schreibe eine Erklärung meines Codes auf.Javascript, 87 Zeichen
Testen Sie mit
console.log
anstelle vonalert
:quelle
lua, 102 bytes
Oder die besser lesbare Version
Eine betrügerische Version für 96 Bytes
Dies funktioniert so ziemlich genauso wie das erste, verwendet jedoch die Rollen früherer Aufrufe wieder. Aus diesem Grund kann ich die for-Schleife entfernen. Beide sind in lua 5.2 getestet
quelle
Perl 6 , 48 Bytes
quelle
PHP, 51 Bytes
quelle