Bearbeiten : Ich habe D & D noch nie gespielt. Als ich diese Frage zum ersten Mal stellte, habe ich sie nicht richtig recherchiert. Ich entschuldige mich dafür und nehme einige Änderungen vor, die die Antworten ungültig machen könnten, um den dnd 5e-Regeln so treu wie möglich zu bleiben. Es tut uns leid.
Ein D & D-Fan aus einer aktuellen Hot Network-Frage scheint Schwierigkeiten zu haben, herauszufinden, ob die von einem Zauberer gewählten Zaubersprüche mit den Möglichkeiten übereinstimmen - und ich denke, wir sollten helfen!
Einführung
(All dies ist bereits in der zuvor genannten Frage beschrieben)
Ein Zauberer kennt von Anfang an zwei Zaubersprüche der Stufe 1 (Stufe 1): [1, 1]
Jedes Mal, wenn ein Zauberer eine Stufe erreicht (mit Ausnahme der Stufen 12, 14, 16, 18, 19 und 20), lernt er einen neuen Zauber (obligatorisch).
Außerdem, wenn man wählen (optional) Nivellierung kann ersetzen eine der Zauber mit einem anderen.
Die gelernten und ersetzten Zaubersprüche müssen eine gültige Zauberslot-Stufe sein, die die Hälfte der aufgerundeten Stufe Ihres Zauberers ist. Siehe diese Tabelle:
Sorcerer level Highest spell level possible
1 1
2 1
3 2
4 2
5 3
6 3
7 4
8 4
9 5
10 5
11 6
12 6
13 7
14 7
15 8
16 8
17 9
18 9
19 9
20 9
Dies bedeutet, dass man auf Stufe 3 die folgenden Zauberstufen haben kann [1, 1, 2, 2]
:
Level 1: [1, 1] (initial)
Level 2: [1, 1, 1 (new)]
Level 3: [1, 1, 2 (replaced), 2 (new)]
Es ist nicht erforderlich, die Zaubersprüche der höchsten Stufe auszuwählen, auf die Sie Zugriff haben.
Die Zauberstufen [1, 1, 1, 1]
gelten perfekt für Stufe 3.
Denken Sie zum Schluss daran, dass das Ersetzen eines Zaubers eine optionale Option für jedes Level ist . Dies bedeutet, dass einige Ebenen das Ersetzen überspringen können, während andere davon Gebrauch machen.
Die Herausforderung
Erstellen Sie ein Programm oder eine Funktion, die eine Ganzzahl (Ebene) zwischen 1 und 20 annimmt.
Es sollte auch ein Array von ganzen Zahlen (Zauberstufen) mit Werten zwischen 1 und 9 in beliebiger Reihenfolge verwendet werden (9 ist die maximale Zauberstufe).
Die Ausgabe des Programms sollte ein Wahrheits- / Falschwert sein, der überprüft, ob die gewählten Zauberstufen für einen Zauberer der gegebenen Stufe gültig sind.
Testfälle
Level: 1
Spells: [1, 1]
Output: true
Level: 8
Spells: [1, 1, 2, 3, 3, 5]
Ouput: false
Reason: A level 8 can't ever have access to a level 5 spell.
Level: 5
Spells: [1, 1, 1, 2, 2, 2, 3]
Output: false
Reason: A level 5 can't have access to 7 spells
Level: 11
Spells: [3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6]
Output: false
Reason: Too many spell upgrades.
The highest valid selection for level 11 is
[3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6]
Das ist Code-Golf - die wenigsten Bytes gewinnen!
quelle
[2,2,3,3]
wären die Zauberstufen jedoch nicht möglich, da mehr Ersatz erforderlich ist, als ein Zauberer dieser Stufe Zugriff haben würde." - Ist die Tatsache, dass die Liste eher Länge 4 als 5 hat, hier kein grundlegenderer Grund? (Ich nehme an, dass[1,3,2,2,3]
es für ein Level 4 möglich ist, von Level 3[1,1,2(replaced),2(new)]
zu[1,3(replaced),2,2,3(new)]
?)Antworten:
Java (JDK 10) , 191 Byte
Probieren Sie es online aus!
Erklärungen
Tabelle 1: Maximierte Zauberverteilung für jede Zaubererstufe, verwendet aus Axorens Antwort auf die verknüpfte Frage .
Credits
quelle
return l<1&java.util.Arrays.equals(m,new int[9]);
kannz=0;for(int i:m)z+=i;return l+z==0;
stattdessen sein. Oder wenn die Werte inm
am Ende niemals negativ sein==0
können , kann dies sein<1
.for(int i:m)l|=i;
ist noch schlauer! Schön.new int[]{5,6,6,6,7,7,7,8,8,8,9,9,9,9,9}
) bestanden. Wenn ich sie absteigend eingebe (new int[]{9,9,9,9,9,8,8,8,7,7,7,6,6,6,5}
wie in der Eingabeanforderung geschrieben, die ich unter dem Golf geschrieben habe), funktioniert es. Ich habe den Testfall hinzugefügt, um zu zeigen, dass er tatsächlich funktioniert.Python 3 , 98 Bytes
Probieren Sie es online aus!
Ungolfed:
edit: korrigierte Lösung zur Verwendung korrekter D & D-Regeln
quelle
print(v(20, [6,6,6,6,7,7,7,8,8,8,9,9,9,9,9])) # False
Drucke wahr. Es sollte false ausgeben.min(9,n-1)
.Holzkohle , 51 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Nimmt Zauberstufen in aufsteigender Reihenfolge als Zeichenfolge. Erläuterung:
Geben Sie den Pegel ein.
Führen Sie eine Lauflängendecodierung für die Zeichenfolge
0544443335
durch, die zur Zeichenfolge führt11111222233334444555566677788899999
. Diese Zeichenfolge wird dann beginnend mit der Ebene (1-indiziert) geschnitten und endet mit der doppelten Ebene (wenn weniger als 12) oder 6 + 1,5 *, aufgerundet, mit Ausnahme der Ebene 19, die abgerundet ist. A0
wird mit einem Suffix versehen, um sicherzustellen, dass nicht zu viele Zaubersprüche vorhanden sind.Vergleichen Sie die Zauberstufen mit der Teilzeichenfolge und drucken Sie a,
-
wenn keine davon übermäßig ist.quelle
11113
auf Stufe zu scheitern,4
was das Ergebnis keiner optionalen Upgrades ist, die1
auf Stufe 2,1
Stufe 3 und3
Stufe 4 durchgeführt werden.JavaScript (ES6), 79 Byte
(level)(array)
Probieren Sie es online aus!
Testcode
Unten finden Sie einen Link zu einem Testcode, der die Zaubererstufe als Eingabe verwendet und ein Array maximaler Zauberstufen zurückgibt, wobei dieselbe Logik wie bei der obigen Funktion verwendet wird.
Probieren Sie es online aus!
Wie?
Referenztabelle
Anzahl der Zauber
Maximale Zauberstufe
quelle
Groovy , 155 Bytes
Erzeugt das bestmögliche Zauberbuch und überprüft dann, ob das an die Methode übergebene Zauberbuch nicht besser ist.
Ungolfed, mit explizit angegebenen impliziten Typen:
Probieren Sie es online aus!
quelle