Tło historyczne
Ściana tarczy to taktyczna formacja wojenna, której początki sięgają przynajmniej 2500 lat pne Składał się z wojowników nakładających się na tarcze tarcz swoich towarzyszy, tworząc „ścianę”. Urok taktyki wynika z faktu, że nawet najbardziej niewykwalifikowany wojownik mógł walczyć w ścianie, o ile mieli tarczę i broń. Ze względu na bliskość murów niewiele było miejsca do poruszania się, a bitwa zwykle zamieniała się w walkę z użyciem ostrej broni.
Wyzwanie
Twoim zadaniem jest stworzenie programu lub funkcji, która biorąc pod uwagę dwie tablice / listy / wektory wojowników jako dane wejściowe, decyduje o wyniku bitwy. Listy będą reprezentować jednowierszową ścianę tarcz i będą postępować według określonej notacji:
Wikingowie:
Nordyccy wojownicy mieli zaciętą ochotę do bitwy. Pod koniec VIII do połowy XI wieku duńscy wikingowie zaatakowali królestwa brytyjskie w poszukiwaniu bogactwa i ziemi uprawnej. Na potrzeby tego wyzwania są to wojownicy wikingów:
J
ARL: Zazwyczaj znaleźć prowadząc swoich ludzi od środka ściany, Jarls byli przywódcy hordy Wikingów. Przyjmuje 15 obrażeń, aby umrzeć, i zadaje 2 obrażenia na rundę.B
Erserker: Chociaż fantazja znacznie skręcone wizerunku Berserkers te wojownicy znani byli walczyć w transie podobnym wściekłości bez jakiejkolwiek ochrony innych niż ich tarcze. Przyjmuje 6 obrażeń, aby umrzeć, i zadaje 3 obrażenia na rundę.- The
C
Hieftain: Chieftains byli bogacze, którzy mieli wolnych ludzi w ich usług. Zwykle zdobyli wielką chwałę i bogactwa w bitwie. Przyjmuje 10 obrażeń, aby umrzeć, i zadaje 2 obrażenia na rundę. - The Free
M
en: Warriors, którzy służyli wodzowi. Przysięgali walczyć o swoich panów aż do śmierci. Przyjmuje 8 obrażeń, aby umrzeć, i zadaje 1 obrażenie na rundę. S
Kald: Skaldowie, zazwyczaj tłumaczone jako bardowie byli wolnymi ludźmi, którzy zostali zatrudnieni pisać wiersze, opowiadania i piosenki o wielkich czynach nordyckich wojowników. Przyjmuje 8 obrażeń, aby umrzeć, i daje każdemu sąsiadującemu wojownikowi 1 dodatkowe obrażenia. Skaldowie nie zadają obrażeń. W ten sposób wojownicy nie mogą otrzymać więcej niż 1 premii do obrażeń.
Saksoni:
Saksoni przybyli do Wielkiej Brytanii z Europy kontynentalnej po upadku Cesarstwa Rzymskiego w V wieku. Na potrzeby tego wyzwania są wojownicy saksonów:
E
ARL: Ealdormen , powszechnie nazywane Earls, należeli do wyższej szlachty. Zwykle zajmowali wielkie połacie ziemi i mieli setki, a nawet tysiące zaprzysiężonych ludzi. Przyjmuje 20 obrażeń, aby umrzeć i zadaje 1 obrażenie na rundę.K
Noc: Z braku lepszego określenia, że rycerze byli drobnych szlachciców, którzy posiadali jakąś ziemię. W większości przypadków rycerze byli zaprzysiężonymi sługami hrabiego. Przyjmuje 10 obrażeń, aby umrzeć, i zadaje 2 obrażenia na rundę.- W
W
arrior: Często ludzie, zwykle drobne szlachta bez ziemi i chłopów, którzy służyli rycerza. W sąsiedztwie rycerza lub hrabiego wojownicy mają premię do obrażeń +1. Przyjmuje 8 obrażeń, aby umrzeć i zadaje 2 obrażenia na rundę. F
Yrd: The Fyrd była milicja, jak grupa ludzi wolnych, zwykle biednych rolników, którzy by przynieść dowolną broń (lub podobną broń hodowla wdrożenia) musieli walczyć w ścianie. Przyjmuje 5 obrażeń, aby umrzeć i zadaje 1 obrażenie na rundę.- W
P
riest: Kapłani zostali wysoko cenione na początku kultury saskiej, będąc zwiastunami słowa Bożego. Kapłani otrzymują 15 obrażeń, aby umrzeć, i zapobiegają nawet 1 obrażeniom, które każdy sąsiadujący wojownik otrzymałby. Kapłani nie zadają obrażeń. Kapłani nie mogą zapobiec wojownikowi o więcej niż 1 obrażenie.
Ściana
Ściany spotykają się w swoich centrach. W każdej rundzie każdy wojownik zadaje obrażenia wojownikowi bezpośrednio przed nim lub, jeśli nie ma żywego wojownika przed nim, żyjącego wojownika po przekątnej z najmniejszą ilością życia. Jeśli jest remis, wybierz wojownika bliżej krawędzi ściany.
Przykład:
Vikings
[M,M,M,B,B,C,J,C,B,B,M,M,M]
[F,F,F,W,W,K,E,K,W,W,F,F,F]
Saxons
To make matters easier, let's convert these walls into numbers:
Round 0:
M M M B B C J C B B M M M
[8,8,8,6,6,10,15,10,6,6,8,8,8]
[5,5,5,8,8,10,20,10,8,8,5,5,5]
F F F W W K E K W W F F F
Round 1: Notice that 2 of the Saxons' warriors are adjacent to Knights, so they have a +1 damage bonus.
M M M B B C J C B B M M M
[7,7,7,4,3,8,14,8,3,4,7,7,7]
| | | | | | || | | | | | |
[4,4,4,5,5,8,18,8,5,5,4,4,4]
F F F W W K E K W W F F F
Round 2:
M M M B B C J C B B M M M
[6,6,6,2,0,6,13,6,0,2,6,6,6]
| | | | | | || | | | | | |
[3,3,3,2,2,6,16,6,2,2,3,3,3]
F F F W W K E K W W F F F
Round 3: Remember to collapse the arrays to account for dead warriors. Also, notice that the 2 outermost Fyrd are now attacking the diagonally adjacent viking.
M M M B C J C B M M M
[4,5,4,0,4,12,4,0,4,5,4]
/| | | | | || | | | | |\
[2,2,2,1,0,4,14,4,0,1,2,2,2]
F F F W W K E K W W F F F
Round 4: Notice once again the saxon Warriors next to the Knights dealing 3 damage:
M M M C J C M M M
[2,4,1,2,11,2,1,4,2]
/| | | | || | | | |\
[2,1,1,0,2,12,2,0,1,1,2]
F F F W K E K W F F F
Round 5:
M M M C J C M M M
[1,3,0,0,10,0,0,3,1]
| | | | || | | | |
[1,0,0,0,10,0,0,0,1]
F F F K E K F F F
Round 6:
M M J M M
[1,2,9,2,1]
\| | |/
[0,8,0]
F E F
Rounds 7 and 8:
M M J M M M M J M M
[1,2,8,2,1] [1,2,8,2,1]
\|/ \|/
[4] [0]
E E
Output: Viking victory.
Zasady:
- Obowiązują domyślne luki .
- Możesz użyć dowolnej dogodnej metody We / Wy .
- To jest golf golfowy , więc wygrywa najkrótszy kod (w bajtach, na język).
- Nie możesz zakładać, że listy będą miały tę samą długość, ale zawsze będą można je wyrównać w ich środkach (zawsze będzie nieparzysta liczba wojowników na każdej liście, jeśli listy mają różne rozmiary).
- Możesz wygenerować dowolną wartość true / falsey. Proszę podać w swojej odpowiedzi odpowiedniki „zwycięstwa Wikingów / Saksonii”.
- Przegrany jest określany, kiedy wszyscy wojownicy muru nie żyją.
Jeśli kiedykolwiek skończysz ze ścianami, których nie można wyrównać podczas wykonywania kodu, wyrównaj je tak centralnie, jak to możliwe, pozostawiając jednego dodatkowego wojownika na dłuższej ścianie po prawej stronie. Na przykład:
[M,M,M,J,M,M,M] [K,E,K,W]; [B,B,B,J] [K,K,W,W,K,E,K,W,W,K,K]
Spróbuj przetestować swój kod za pomocą dowolnej konfiguracji ścian, nie tylko tych w przypadkach testowych.
Przypadki testowe:
V: [M,M,B,C,B,C,J,C,B,C,B,M,M]
S: [F,F,W,K,W,K,E,K,W,K,W,F,F]
O: Viking victory.
------------------------------
V: [M,M,M,M,M,M,M,M,M,M]
S: [W,W,W,W,W,W,W,W,W,W]
O: Saxon victory.
------------------------------
V: [B,C,M,B,C,M,M,C,B,M,C,B,M]
S: [W,F,W,F,E,E,E,F,W,F,W]
O: Viking victory.
------------------------------
V: [B,B,B,J,B,B,B]
S: [W,W,W,W,K,K,K,E,K,K,K,W,W,W,W]
O: Saxon victory.
------------------------------
V: [J]
S: [E]
O: Viking victory.
------------------------------
V: [C,C,C,C,B,B,M,M,M,M,J,J,J,M,M,M,M,B,B,C,C,C,C]
S: [K,K,K,K,K,K,K,K,K,K,W,E,W,K,K,K,K,K,K,K,K,K,K]
O: Saxon victory.
------------------------------
V: [M,M,S,C,B,J,B,C,S,M,M]
S: [F,K,P,W,K,E,K,W,P,K,F]
O: Saxon victory.
------------------------------
V: [S,S,S,...,S]
S: [P,P,P,...,P]
O: UNDEFINED (since both priests and skalds deal no damage, you can output anything here.)
------------------------------
Istnieją pewne nieścisłości historyczne. Wskaż je, a ja postaram się je naprawić.
(health, damage, damagebonus, protbonus)
)Odpowiedzi:
Python 2 ,
576573565554540549 bajtówWypróbuj online!
źródło
(5in V[i-1:i+2:2])
sugeruje, że sąsiednie skalds mogą zadawać obrażenia. Możesz...*(V[i]!=5)
tam potrzebować . Test:print f([S,S],[P]) # says V but should be a Draw
APL (Dyalog Classic) , 128 bajtów
Wypróbuj online!
Łącze TIO ma dwie funkcje:
g
jest grą w golfa powyżej if
to gra jest to gra w golfa, która akceptuje parę łańcuchów, przekształca je w odpowiednią reprezentację i wywołuje funkcję golfa.Dane wejściowe to pięć macierzy:
t
typy wojowników jako ints;l
życie;d
uszkodzić;b
jakie typy wojowników dają bonus, gdy sąsiadują;p
to samo dotyczy ochrony. Matryce składają się z dwóch rzędów - Wikingowie i Saksoni. Jeśli ich wojownicy nie mają tej samej liczby, macierze muszą być wypełnione zerami, choć niekoniecznie wyśrodkowane. Rezultatem jest1
/¯1
zwycięstwo Wikingów / Saksonii lub0
remis.źródło