Biorąc pod uwagę dwie listy rzutów kostką na bitwę w ryzyku, twój program lub funkcja musi wypisać ile żołnierzy traci każdy gracz.
tło
Nie musisz tego czytać, ponieważ jest to jedynie tło. Przejdź do podtytułu „Zadanie”, aby kontynuować.
W grze Ryzyko jeden gracz może zaatakować innego gracza (w rzeczywistości jest to konieczne, aby wygrać). Wynik bitwy zależy od rzutu kostką. Każda bitwa występuje jako kolejność pod bitew, w których każdy gracz może przegrać do 2
swoich części armii.
W bitwie podrzędnej obrońca i atakujący rzucają kilkoma kostkami, których liczba może się różnić w zależności od okoliczności nieistotnych dla tego wyzwania. Kość o najwyższej wartości atakującego jest porównywana z kośćą o najwyższej wartości obrońcy. Jeśli kość atakującego jest wyższa niż kość obrońcy, obrońca traci jeden kawałek. W przeciwnym razie atakujący traci jeden kawałek.
Następnie, jeśli obaj gracze mają co najmniej dwie kości, porównywane są kości o drugiej wartości. Ponownie, jeśli kość atakującego jest wyższa niż kość obrońcy, obrońca traci jeden kawałek. W przeciwnym razie atakujący traci jeden kawałek.
(Defender wygrywa remisy. Jeśli zarówno obrońca, jak i atakujący rzuci a 4
, atakujący traci pionek.)
W tej pod bitwie z artykułu z Wikipedii kości atakującego są czerwone, a kości obrońcy są białe. Najwyższa z kości atakującego 4
i najwyższa z obrońców 3
. Ponieważ atakujący był wyższy, obrońca traci kawałek. Drugie najwyższe dotyczą 3
atakującego i 2
obrońcy. Ponieważ atakujący znów był wyżej, obrońca traci kolejny kawałek. Zatem w tej pod bitwie atakujący nie traci żadnych elementów, a obrońca traci je 2
.
Zauważ, że trzecie najwyższe elementy nie są porównywane. Wynika to z faktu, że obrońca ma nie więcej niż dwie kości w jednej bitwie podrzędnej, więc nie ma nigdy trzech najwyższych pionków do porównania.
Zadanie
Biorąc pod uwagę nieposortowane rzuty kostkami (liczby całkowite w zakresie od 1 do 6 włącznie) zarówno atakującego, jak i obrońcy podgrupy Ryzyka w dowolnej dogodnej formie, wypisz liczbę sztuk armii, które każdy gracz traci. Dane wyjściowe mogą być w dowolnej dogodnej formie, o ile mają różne dane wyjściowe wskazujące pięć możliwości. Musisz wskazać, jakie te różne wyniki są w twoim pytaniu.
Dane wyjściowe są określane w następujący sposób: Zacznij od def=0
i atk=0
. Jeśli największa wartość listy rzutów kostką atakującego jest większa niż największa wartość listy rzutów kostek obrońcy, zwiększaj def
. W przeciwnym razie przyrost atk
.
Jeśli obie listy rzutów kością mają co najmniej długość 2
, wówczas: jeśli druga co do wielkości wartość listy rzutów kości atakującego jest większa niż druga największa wartość listy, wówczas zwiększaj def
i zwiększaj w inny sposób atk
.
Na koniec program lub funkcja musi wypisać unikalny identyfikator dla każdej z następujących 5 możliwości wyjścia:
╔═══╦═══╗
║atk║def║
╠═══╬═══╣
║ 1 ║ 0 ║
║ 0 ║ 1 ║
║ 2 ║ 0 ║
║ 1 ║ 1 ║
║ 0 ║ 2 ║
╚═══╩═══╝
Przykład
Obrońca: [3, 2]
atakujący: [2, 4, 1]
maks. Obrońca 3
i maks. Atakujący 4
. 4>3
, więc def=1
Drugi obrońca jest, 2
a drugi atakujący jest 2
. Not(2>2)
, Tak atk=1
. Wynik może być wtedy [1,1]
.
Przypadki testowe
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]
Przykładowa implementacja
Python 2 lub 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]
Dane techniczne
- Dane wejściowe mogą być przyjmowane w dowolnej formie, która wyraźnie koduje tylko rzuty obrońcy i rzuty atakującego.
- Dane wyjściowe mogą mieć dowolną formę, która zapewnia unikalne dane wyjściowe dla każdej z pięciu wyżej wymienionych możliwości.
- Rzuty obrońcy to lista
1
lub2
liczby całkowite w zestawie[1,2,3,4,5,6]
. Rolki atakującego to lista1
do3
liczb całkowitych w zestawie[1,2,3,4,5,6]
. - Ponieważ jest to gra w golfa , wygrywa najkrótszy kod w każdym języku ! Czy nie pozwolić odpowiedzi w językach golfa zniechęcić cię od odpowiedzi księgowania w innych językach.