In Dungeons & Dragons wird fast alles durch Würfeln entschieden. Wenn der Wurf größer oder gleich einem angegebenen Wert ist, ist Ihr Versuch, das zu tun, was Sie wollten, in der Regel erfolgreich und schlägt andernfalls fehl. Am häufigsten wird ein 20-seitiger Würfel (alias d20) zum Würfeln verwendet.
In anderen Fällen wird das Skill-Challenge-System verwendet. Es ähnelt dem oben beschriebenen einfachen System, aber der Erfolg wird dadurch bestimmt, ob der oder die Spieler einzelne Würfe eine bestimmte Anzahl von Malen erfolgreich abgeschlossen haben oder nicht, bevor sie eine bestimmte Anzahl von Malen gescheitert sind. Beispielsweise versuchen die Spieler möglicherweise, mehrere Schlösser an einer Tür mit einer begrenzten Anzahl von Dietrichen zu knacken. Einzelne erfolgreiche Würfe bedeuten, dass eine der Sperren erfolgreich ausgewählt wurde, und einzelne fehlerhafte Würfe bedeuten, dass ein Dietrich gebrochen wurde. Gesamterfolg würde bedeuten, alle Schlösser erfolgreich zu knacken, bevor alle Dietriche geknackt werden.
Darüber hinaus können bestimmte Rollen kritische Rollen sein. Auf einem d20 ist das Würfeln einer 1 ein kritischer Fehler, der zum sofortigen Scheitern der gesamten Herausforderung führt (im obigen Beispiel könnten die Spieler versehentlich einen Wachmann alarmieren). Das Würfeln einer 20 ist ein kritischer Erfolg, der zum sofortigen Erfolg der gesamten Herausforderung führt. Im Falle eines kritischen Wurfs ist die Herausforderung sofort beendet und das Ergebnis entschieden, unabhängig von der vorherigen Anzahl von Erfolgen und Misserfolgen.
Bei dieser Herausforderung erhalten Sie eine Schwierigkeit, die Anzahl der erforderlichen Erfolge und die Anzahl der Fehler, bei denen die Herausforderung fehlgeschlagen ist. Sie müssen einen Spieler simulieren, der die Herausforderung versucht, und das Ergebnis ausgeben.
Eingang
3 ganze Zahlen, die den Wert darstellen, der erreicht oder überschritten werden muss, um bei einem einzelnen Wurf erfolgreich zu sein, die Anzahl der für den Erfolg bei der Herausforderung erforderlichen Erfolge und die Anzahl der Fehler, bei denen die Herausforderung fehlgeschlagen ist. Die Reihenfolge und das Format der Eingaben spielen keine Rolle, solange Sie angeben, welche Reihenfolge Sie verwenden werden. Der Schwierigkeitsgrad liegt zwischen 1 und 20 (einschließlich), und die Anzahl der Erfolge und Misserfolge liegt zwischen 1 und 100 (einschließlich).
Ausgabe
Die Ergebnisse jeder der d20-Würfe (ganze Zahlen, in Reihenfolge) und das Gesamtergebnis der Herausforderung (ein Wahrheitsgehalt / Falschwert). Das Format spielt keine Rolle, solange die einzelnen Ergebnisse in Ordnung sind. Das Gesamtergebnis kommt entweder vor oder nach allen einzelnen Rollen (Sie können das Gesamtergebnis beispielsweise nicht in der Mitte der Rollen ausgeben) und Sie geben an, welches Ausgabeformat Sie verwenden, und verwenden es konsequent.
Beispiele (Werte in Klammern dienen der Erläuterung und müssen nicht angegeben werden):
Eingang:
12 5 3 (difficulty successes failures)
Ausgabe:
15 (success, 1-0)
10 (failure, 1-1)
5 (failure, 1-2)
16 (success, 2-2)
12 (success, 3-2)
15 (success, 4-2)
19 (success, 5-2)
True (overall success)
Eingang:
15 2 3 (difficulty failures successes)
Ausgabe:
0 (overall failure)
15 (success, 1-0)
12 (failure, 1-1)
13 (failure, 1-2)
Eingang:
5 5 10 (successes failures difficulty)
Ausgabe:
11 (success, 1-0)
5 (failure, 1-1)
20 (critical success)
1 (overall success)
Eingang:
3 10 3 (failures difficulty successes)
Ausgabe:
12 (success, 1-0)
11 (success, 2-0)
1 (critical failure)
False (overall failure)
Regeln
- Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes
- Sie müssen zufällig einen ganzzahligen Wert zwischen 1 und 20 (einschließlich) für jede Rolle auswählen. Jeder Wert sollte die gleiche Wahrscheinlichkeit haben, ausgewählt zu werden (oder so nahe wie möglich daran).
the number of successes and failures will both be between 1 and 100, inclusive.
Also, ja, es besteht die Möglichkeit, dass ein einzelner Fehler zum Scheitern der gesamten Herausforderung führt.Antworten:
JavaScript,
83787675 BytesDieser Code zählt rekursiv Erfolge und Misserfolge herunter, sobald sie eintreten. Wenn einer der Erfolge (
s
) oder Misserfolge (f
) abwärts gezählt wurden0
, beenden wir den Vorgang mit demtrue
Wert!s
whens
is0
oder mit dem falschen Wertf
whenf
is0
.Die Ausgabe erfolgt in Form eines regulären Ausdrucks
/^(-\d{1,2})+(0|true)$/
(oder genauer gesagt/^(-[1-9]|-1[0-9]|-20)+(0|true)$/
). Das heißt, die Eingabe hat einen führenden Bindestrich, dann Rollwerte, die durch Bindestriche abgegrenzt sind, und schließlich das Endergebnis (0
odertrue
), das nicht vom endgültigen Roll abgegrenzt ist. Dies ist jedoch immer noch eine eindeutige Grammatik, da das Nutzergebnis und der endgültige Wurf immer unterschieden werden können: Das letzte Zeichen der Ausgabe (entweder0
odere
) gibt immer das Ergebnis an, und ein Endergebnis0
wird immer getrennt von den Zahlen gelesen. der letzten Rolle.Beispielausgaben für
F(11,3,4)
:Erläuterung:
Dieser Code funktioniert, indem ein negatives d20 gewürfelt und (ab) die negativen Vorzeichen als Begrenzer verwendet werden.
Zahl-minus-Booleschen Ausdrücken arbeiten , weil
true
undfalse
werden gegossen1
und0
in einem numerischen Kontext. In diesem Falld>-r
wird1
0
festgestellt ob die Rolle fehlgeschlagen ist und ob sie erfolgreich war.quelle
Python, 134 Bytes
Danke Pietu1998 für die gesparten Bytes
Ziemlich einfach, man kann wahrscheinlich ein bisschen mehr Golf spielen, aber wir brauchten etwas, um dies zu beginnen. Probieren Sie es online aus .
quelle
from random import*
und löschen Sierandom.
, verwenden Sierandint(1,20)
anstelle vonrandrange(20)+1
, ersetzen Sieand
durch*
. Sie können das Endergebnis auch am Anfang der Ausgabe einfügen, um Platz zu sparen.Python 2,
123121 Bytes(Diese Antwort mischt Leerzeichen und Tabulatoren , sodass die erste Einrückungsstufe ein einzelnes Leerzeichen und die zweite ein einzelnes Tabulatorzeichen ist.)
Die Funktion
f
akzeptiert die folgenden Argumente:a
, die Schwelle, bis zu der ein einzelner Würfelwurf als Erfolg gewertet wird,b
, die Anzahl der für den Gesamterfolg erforderlichen Erfolge,c
, die Anzahl der Ausfälle, die für einen Gesamtausfall erforderlich sind.Auf jedem Würfelwurf wird entweder
b
oderc
dekrementiert (aber nicht beides). Solange beide positiv sind, wird die Schleife wiederholt, außer bei einem kritischen Ausfall oder einem kritischen Erfolg.Vorausgesetzt, keine kritischen Erfolge oder Misserfolge, wenn die Schleife entweder beendet wird
b
oderc
Null ist, aber nicht beide. In diesem Fall gibt die Funktion nur den aktuellen Wert von zurückc
, der Null (Falsey) ist, wenn wir alle unsere Fehler ausgeschöpft haben, und positiv (Truthy), wenn wir erfolgreich waren.Als Bonus können Sie anhand der Ausgabe ablesen, wie viele Ausfälle noch verblieben sind. Dies ist hilfreich, falls Sie später weitere Sperren auswählen müssen. (Es sei denn, es wurde bei einem kritischen Fehler oder Erfolg beendet. In diesem Fall ist die Ausgabe ein Boolescher Wert anstelle eines int.)
quelle
Pip , 39 Bytes
Jemand sagte, sie wollten eine Lösung in einer Golfsprache sehen.
Ich bin mir ziemlich sicher, dass dies keine Sprachfunktionen verwendet, die neuer sind als die Frage. Übernimmt Eingaben als Befehlszeilenargumente in dieser Reihenfolge: Schwierigkeit, erforderliche Erfolge, erforderliche Fehler. Gibt 0 für Gesamtfehler oder ungleich Null für Gesamterfolg aus. Probieren Sie es online!
Der Ansatz ist eine recht unkomplizierte Strategie, bei der ein oder zwei Tricks aus anderen Lösungen übernommen werden. Hier ist eine Version mit Kommentaren, Leerzeichen und einigen zusätzlichen Ausgaben:
quelle
Ruby 2.2, 75 Bytes
Grundlegende iterative Lösung. Beispiellauf:
Ausgabe möglich:
Sie können sehen , es auf IDEONE läuft hier .
quelle
VBA 180 Bytes
Beispielausgabe
Die letzte Stelle der Ausgabe ist ein
0
fürFalse
oder ein1
fürTrue
. Jede Rolle ist durch eine neue Linie getrennt. Hierfür wird in RNG integriertes VBA verwendet, vonrnd()
dem bekannt ist, dass es nicht so zufällig ist. Dies sollte jedoch die Anforderungen so gut wie möglich erfüllen.quelle
SpecBAS - 165 Bytes
Die Eingabe sollte in der Reihenfolge Schwierigkeit, Erfolg, Misserfolg erfolgen.
Die neue Version von SpecBAS erlaubt jetzt "?" statt
PRINT
und beseitigt die Notwendigkeit fürLET
Variablen zuzuweisen. Dies war also eine gute Möglichkeit, sie auszuprobieren.Da Arrays standardmäßig 1-basiert sind, gibt Zeile 6 0/1 zurück, wenn die Rolle die Schwierigkeit schlägt, und fügt 1 hinzu, um den richtigen Index zu aktualisieren.
quelle
Perl 6 ,
10199 BytesInput ist ein veränderbares Array, das Schwierigkeiten, Erfolge und Misserfolge enthält
Die Ausgabe ist eine Liste mit zwei Elementen, das erste Element ist eine Liste der gerollten Werte, das zweite Element ist die Anzahl der verbleibenden Fehler.
Verwendung:
quelle