Herausforderung
Ich werde von der mitternächtlichen Besatzung angegriffen und muss den Catenative Doomsday Dice Cascader beschwören , um mich zu verteidigen. Da der Platz knapp ist, muss der Code so kurz wie möglich sein.
Der Algorithmus für den Catenative Doomsday Dice Cascader lautet wie folgt:
Zuerst wird der sechsseitige Würfel in der Prime Bubble gewürfelt und das Ergebnis bestimmt, wie viele Iterationen des nächsten Schritts stattfinden.
Beginnen Sie mit einem sechsseitigen Würfel. Multiplizieren Sie die Anzahl der Seiten des nächsten Würfels so oft wie der Wurf des Prime Bubble-Würfels mit dem Ergebnis des Würfels des aktuellen Würfels. Wenn zum Beispiel auf Ihrem ersten Wurf des sechsseitigen Würfels Ihr Wurf 2 ist, hat Ihr nächster Würfel 6 * 2 = 12 Seiten.
Ihr Ziel ist es, eine Funktion oder ein Programm zu schreiben, die bzw. das keine Eingaben benötigt und das Endergebnis des zuletzt gewürfelten Würfels ausgibt. Da dies Codegolf ist , gewinnt die niedrigste Byteanzahl in jeder Sprache!
Beispiele
Beispiel # 1 (direkt aus dem obigen Link entnommen):
The Prime Bubble rolls a 6, meaning that the Cascader will iterate six times
#1: We always start with a 6 sided die, and it rolls a 2, so the next die has 6x2=12 sides
#2: The 12 sided die rolls an 8, meaning that the third die has 12x8=96 sides
#3: The 96 sided die rolls a 35, meaning that die 4 has 96x35=3360 sides
#4: The 3360 sided die rolls a 2922, so die 5 has 3360x2922 = 9,817,920 sides
#5: The 9.8 million sided die rolls a 5,101,894, so the final die has 50,089,987,140,480 sides
#6: The 50 trillion sided die rolls a one. Hooray.
Since the last die rolled gave a 1, your function or program should output 1.
Beispiel # 2
The Prime Bubble rolls a 2, meaning that the Cascader will iterate twice.
#1: We always start with a 6 sided die, and it rolls a 4, so the next die has 6x4 = 24 sides
#2: The 24 sided die rolls a 14
Since the last die rolled gave a 14, your function or program should output 14.
Antworten:
Python 2 ,
7669 BytesProbieren Sie es online!
quelle
Perl 6 ,
4337 Bytes-6 bytes dank nwellnhof
Probieren Sie es online!
Anonymer Codeblock, der das Doomsday-Würfelergebnis zurückgibt.
Erläuterung:
quelle
Wolfram Language (Mathematica) , 43 Byte
Probieren Sie es online!
quelle
J , 21 Bytes
Probieren Sie es online!
+6 Bytes dank eines von FrownyFrog entdeckten Logikproblems
HINWEIS: J hat keine niladischen Verben. Dieses Verb funktioniert jedoch gleich, egal welches Argument Sie angeben. Im TIO-Beispiel rufe ich es mit an
0
, hätte aber99
oder verwenden können''
genauso gut .Wie
1+
füge eins hinzu zu ...[:?
eine einzelne Rolle eines n-seitigen Würfels (Seiten lesen0
bisn-1
), wobei die Anzahln
bestimmt wird durch ...(*1+?)
Nehmen Sie das aktuelle Argumenty
und rollen Sie?
, um eine Zufallszahl zwischen0
und zu erzeugeny-1
.1+
das macht1
bisy
einschließlich. Zum Schluss*
wird ein J-Hook erzeugt, der dieseny
wiederum multipliziert .^:
mach das oben so oft ...(?`])
?
Würfeln Sie mit dem Anfangsargument, um6
zu bestimmen, wie oft wiederholt werden soll. Wenn wir rollen0
(entsprechend einem1
auf der Prime Bubble), wird das Argument unverändert durchlaufen. Das]
bedeutet, dass6
unverändert der Startwert des wiederholten(*1+?)
Verbs ist, das den Würfelwert für den letzten Wurf bestimmt.@6x
hängt das konstante Verb an6
, damit wir es mit allem aufrufen können, undx
zwingt J, die erweiterte Ganzzahlberechnung zu verwenden, die wir für die möglicherweise riesigen Zahlen benötigen.quelle
in this case 0 executes the previous verb once, 1 twice, etc
Warum das?K (oK) , 32 Bytes
Lösung:
Probieren Sie es online!
Beginne mit 6 und "1 wähle 6", iteriere über "1 wähle 6" mal:
Sie können die Iterationen anzeigen, indem Sie die Taste für einen Scan umschalten , z
quelle
(*).x
->*/x
und{
}/[*a;6,a:1+1?6]
->a{
}/6,a:*1+1?6
Gelee , 9 Bytes
Eine niladische Verknüpfung, die eine positive ganze Zahl ergibt.
Probieren Sie es online!
Speichern eines Bytes über das Offensichtliche
6X×$6X’¤¡X
Wie?
quelle
05AB1E , 10 Bytes
Die Zufallsauswahl für große Listen ist ziemlich langsam. Dies kann zu einer Zeitüberschreitung führen, wenn der Prime Bubble-Wurf beispielsweise eine 6 ist.
Probieren Sie es online aus oder probieren Sie es online mit hinzugefügten Abzügen, um die Rollen zu sehen . (TIO verwendet die ältere Version von 05AB1E, da diese etwas schneller ist.)
Erläuterung:
quelle
Gelee , 9 Bytes
Probieren Sie es online!
Jonathan Allans Antwort behauptet, dass es so ist
. Tatsächlich müssen wir keine so großen Änderungen vornehmen. Daher ist dies eine alternative Herangehensweise an Jonathan Allans Antwort und auch eine Ruhestätte für meinen anfangs ungültigen 6-Byte. :(
quelle
Perl 5 , 54 Bytes
Probieren Sie es online!
quelle
Kohle , 16 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Drücken Sie 6 zur vordefinierten Liste.
Wiederholen Sie eine zufällige Anzahl von 1 bis 6 ...
... eine Zufallszahl zwischen 1 und dem Produkt der Liste in die Liste verschieben.
Die zuletzt in die Liste geschobene Nummer ausgeben.
Alternativer Ansatz, auch 16 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Stellen Sie die Anzahl der Seiten auf 6 ein.
Wiederhole eine Zufallszahl zwischen 0 und 5 mal ...
... multiplizieren Sie die Anzahl der Seiten mit einer Zufallszahl von 1 bis zur Anzahl der Seiten.
Drucken Sie eine Zufallszahl von 1 bis zur Anzahl der Seiten.
quelle
Python 3 , 76 Bytes
Probieren Sie es online!
-2 Bytes dank TFeld
quelle
R , 43 Bytes
Probieren Sie es online!
k
Verfolgt die aktuelle Anzahl der Gesichter auf dem Würfel. Verwendet die Tatsache, dassT
als initialisiert wird1
.Ich habe ein paar andere Dinge ausprobiert, konnte diesen einfachen, unkomplizierten Ansatz jedoch nicht übertreffen.
quelle
Gelee , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle
Ruby , 41 Bytes
Probieren Sie es online!
Erläuterung
quelle
Java 10,
2149386 BytesProbieren Sie es online oder online mit zusätzlichen Druckzeilen aus, um die Schritte zu sehen .
int
java.math.BigInteger
int
long
BigInteger
int
BigIntegers
Erläuterung:
quelle
int
int
Typ.PHP , 59 Bytes
erweitert:
Ich bin mir nicht sicher, ob ich das offene Tag einschließen soll.
Auf meinem Computer stürzt es ab, wenn
$s*$r
es zu groß ist, sodass es$q>=5
manchmal nicht gedruckt wird ... weil die Zahlen so groß werden. Ich bin mir einer Lösung nicht sicher.quelle
Pyth , 14 Bytes
Probieren Sie es online!
quelle
C # (.NET Core) , 136 Byte
Probieren Sie es online!
Ich bin mir ziemlich sicher, dass dies funktioniert, wenn man davon ausgeht, dass es sich um eine unendliche Ganzzahl handelt, die wir hier lieben. Wenn ich wirklich mit dem Überlauf fertig werden muss, muss ich eine ganz andere Klasse ausschalten.
quelle
System.ArgumentOutOfRangeException: 'maxValue' must be greater than zero
int
long
BigIntegers
Julia 1.0 , 60 Bytes
b=big(6)
Lässt es mit Ganzzahlen beliebiger Größe funktionieren Probieren Sie es online aus!quelle
Gaia , 13 Bytes
Probieren Sie es online!
quelle