Ausgehend von zwei Listen mit Würfeln für einen Kampf im Risiko muss Ihr Programm oder Ihre Funktion ausgeben, wie viele Truppen jeder Spieler verliert.
Hintergrund
Sie müssen dies nicht lesen, denn es handelt sich lediglich um Hintergrundinformationen. Springe zur Unterüberschrift "Aufgabe", um unvermindert fortzufahren.
Im Risikospiel kann ein Spieler einen anderen Spieler angreifen (tatsächlich ist dies erforderlich, um zu gewinnen). Der Ausgang eines Kampfes wird durch das Würfeln bestimmt. Jede Schlacht besteht aus einer Abfolge von Teilkämpfen, in denen jeder Spieler bis zu einem 2
seiner Armeestücke verlieren kann .
In einem Teilkampf werfen der Verteidiger und der Angreifer jeweils mehrere Würfel, deren Anzahl je nach Umständen variieren kann, die für diese Herausforderung nicht relevant sind. Der am höchsten bewertete Würfel des Angreifers wird mit dem am höchsten bewerteten Würfel des Verteidigers verglichen. Wenn der Würfel des Angreifers höher ist als der des Verteidigers, verliert der Verteidiger ein Teil. Ansonsten verliert der Angreifer ein Teil.
Wenn beide Spieler mindestens zwei Würfel haben, werden die zweithöchsten Würfel der beiden Spieler verglichen. Wenn der Würfel des Angreifers höher ist als der des Verteidigers, verliert der Verteidiger ein Teil. Ansonsten verliert der Angreifer ein Teil.
(Verteidiger gewinnt Unentschieden. Wenn sowohl Verteidiger als auch Angreifer einen Wurf 4
ausführen, verliert der Angreifer eine Figur.)
In diesem Teilkampf aus dem Wikipedia-Artikel sind die Würfel des Angreifers rot und die des Verteidigers weiß. Der höchste Würfel des Angreifers 4
und der höchste des Verteidigers 3
. Da der Angreifer höher war, verliert der Verteidiger ein Stück. Die zweithöchsten sind 3
für den Angreifer und 2
für den Verteidiger. Da der Angreifer wieder höher war, verliert der Verteidiger ein weiteres Stück. In diesem Teilkampf verliert der Angreifer also keine Steine und der Verteidiger verliert 2
Steine.
Beachten Sie, dass die dritthöchsten Stücke nicht verglichen werden. Dies liegt daran, dass der Verteidiger in einem Teilkampf nicht mehr als zwei Würfel hat. Es gibt also keine dritthöchsten Stücke, die jemals verglichen werden könnten.
Aufgabe
Ausgehend von den unsortierten Würfeln (ganze Zahlen im Bereich von 1 bis einschließlich 6) sowohl des Angreifers als auch des Verteidigers einer Teilschlacht des Risikos in einer beliebigen zweckmäßigen Form, geben Sie die Anzahl der Armeestücke aus, die jeder Spieler verliert. Die Ausgabe kann in einer beliebigen zweckmäßigen Form erfolgen, sofern sie unterschiedliche Ausgaben aufweist, um die fünf Möglichkeiten anzuzeigen. Sie müssen angeben, welche unterschiedlichen Ausgänge in Ihrer Frage enthalten sind.
Die Ausgabe wird wie folgt bestimmt: Beginnen Sie mit def=0
und atk=0
. Ist der größte Wert der Würfelwurfliste des Angreifers größer als der größte Wert der Würfelwurfliste des Verteidigers, erhöhen Sie ihn def
. Andernfalls inkrementieren atk
.
Wenn beide Würfelwurflisten mindestens eine Länge haben 2
, gilt Folgendes: Wenn der zweitgrößte Wert der Würfelwurfliste des Angreifers größer ist als der zweitgrößte Wert der Liste, erhöhen Sie def
und erhöhen Sie ihn ansonsten atk
.
Schließlich muss das Programm oder die Funktion eine eindeutige Kennung für jede der folgenden 5 Ausgabemöglichkeiten ausgeben:
╔═══╦═══╗
║atk║def║
╠═══╬═══╣
║ 1 ║ 0 ║
║ 0 ║ 1 ║
║ 2 ║ 0 ║
║ 1 ║ 1 ║
║ 0 ║ 2 ║
╚═══╩═══╝
Beispiel
Verteidiger: [3, 2]
Angreifer : Maximaler [2, 4, 1]
Verteidiger 3
und maximaler Angreifer 4
. 4>3
, so ist der def=1
Zweite des Verteidigers 2
und der Zweite des Angreifers 2
. Not(2>2)
so atk=1
. Die Ausgabe könnte dann sein [1,1]
.
Testfälle
Defender
Attacker
Output (as [def,atk])
-----
[1]
[1]
[0,1]
-----
[6,6]
[1,1,1]
[0,2]
-----
[1,2]
[5,2,3]
[2,0]
-----
[5]
[3,4]
[0,1]
-----
[4]
[4,5]
[1,0]
-----
[1,3]
[1,2,3]
[1,1]
-----
[4]
[4,5,6]
[1,0]
-----
[4,5]
[6,2]
[1,1]
-----
[5]
[6,1,3]
[1,0]
-----
[5,5]
[4,4,1]
[0,2]
-----
[2,5]
[2,2]
[0,2]
-----
[6,6]
[4,4,3]
[0,2]
-----
[2,1]
[4,3]
[2,0]
-----
[4]
[1,5]
[1,0]
-----
[1]
[5,2]
[1,0]
-----
[6,2]
[4]
[0,1]
-----
[4,2]
[2,5,5]
[2,0]
-----
[2]
[6,6,2]
[1,0]
-----
[6]
[2,6]
[0,1]
-----
[3,1]
[1]
[0,1]
-----
[6,2]
[3,5,2]
[1,1]
-----
[4,2]
[1,1]
[0,2]
-----
[4,3]
[5,4,1]
[2,0]
-----
[5,6]
[1,2]
[0,2]
-----
[3,2]
[4,4]
[2,0]
-----
[2]
[6,3,4]
[1,0]
-----
[1,4]
[6,2,4]
[2,0]
-----
[4,2]
[2,5,4]
[2,0]
-----
[5]
[6,2,1]
[1,0]
-----
[3]
[2,5,4]
[1,0]
-----
[5,4]
[2]
[0,1]
-----
[6,3]
[2,6,5]
[1,1]
-----
[3,1]
[4]
[1,0]
-----
[4]
[6,6,5]
[1,0]
-----
[6,3]
[4,2]
[0,2]
-----
[1,6]
[5,4]
[1,1]
-----
[3,6]
[4,4]
[1,1]
-----
[5,4]
[5,1,1]
[0,2]
-----
[6,3]
[5,4]
[1,1]
-----
[2,6]
[1,2]
[0,2]
-----
[4,2]
[3,5,5]
[2,0]
-----
[1]
[1,2,1]
[1,0]
-----
[4,5]
[1,6]
[1,1]
-----
[1]
[3,5,1]
[1,0]
-----
[6,2]
[6,2]
[0,2]
Beispielimplementierung
Python 2 oder 3
def risk(atk_rolls,def_rolls):
# set the rolls in descending order, e.g. [5,3,2]
atk_rolls = sorted(atk_rolls,reverse = True)
def_rolls = sorted(def_rolls,reverse = True)
# minimum length.
minlen = min(len(atk_rolls),len(def_rolls))
atk_lost = 0
def_lost = 0
# compare the highest-valued rolls
if atk_rolls[0]>def_rolls[0]:
def_lost += 1
else:
atk_lost += 1
if minlen == 2:
# compare the second-highest-valued rolls
if atk_rolls[1] > def_rolls[1]:
def_lost += 1
else:
atk_lost += 1
return [def_lost, atk_lost]
Spezifikationen
- Die Eingabe kann in jeder Form erfolgen, bei der nur die Würfel des Verteidigers und des Angreifers eindeutig codiert sind .
- Die Ausgabe kann in einer beliebigen Form erfolgen, die eine eindeutige Ausgabe für jede der fünf oben aufgeführten Möglichkeiten bietet.
- Die Rollen des Verteidigers sind eine Liste
1
oder2
ganze Zahlen im Satz[1,2,3,4,5,6]
. Der Angreifers Rollen sind eine Liste der1
zu3
ganzen Zahlen in der Menge[1,2,3,4,5,6]
. - Da dies Codegolf ist , gewinnt der kürzeste Code in jeder Sprache ! Sie nicht lassen Antworten in Golf Sprachen entmutigen zu veröffentlichen Antworten in anderen Sprachen.