Sfondo storico
La parete dello scudo è una formazione tattica di guerra che risale almeno al 2500 a.C. Consisteva in guerrieri che si sovrapponevano ai loro scudi con quelli dei loro compagni per formare un "muro". Il fascino della tattica deriva dal fatto che anche il guerriero più abile poteva combattere contro un muro purché avessero uno scudo e un'arma. A causa della vicinanza delle mura, c'era poco spazio per muoversi e la battaglia di solito si trasformava in un fiammifero combattuto con armi affilate.
La sfida
Il tuo compito è creare un programma o una funzione che, dati due array / elenchi / vettori di guerrieri come input, decida l'esito della battaglia. Gli elenchi rappresenteranno un muro a linea singola di scudi e seguiranno una notazione specifica:
Vikings:
I guerrieri nordici avevano una forte spinta alla battaglia. Tra la fine dell'ottavo e la metà dell'XI secolo, i vichinghi danesi invasero i regni della Gran Bretagna in cerca di ricchezza e terra coltivabile. Ai fini di questa sfida, questi sono i guerrieri vichinghi:
- L'
J
arl: di solito si trovava a condurre i suoi uomini dal centro del muro, i vasetti erano i capi delle orde vichinghe. Subisce 15 danni per morire e infligge 2 danni per round. - The
B
erserker: Sebbene la fantasia abbia notevolmente distorto l'immagine dei berserker, questi guerrieri erano noti per combattere in una furia simile a una trance senza alcun tipo di protezione diversa dai loro scudi. Subisce 6 danni per morire e infligge 3 danni per round. - The
C
hieftain: Chieftain erano uomini ricchi che avevano uomini liberi al loro servizio. Di solito si sarebbero guadagnati grande gloria e ricchezza in battaglia. Subisce 10 danni per morire e infligge 2 danni per round. - The Free
M
en: Warriors che ha servito un capotribù. Avevano giurato di combattere per i loro signori fino alla morte. Subisce 8 danni per morire e infligge 1 danno per round. - The
S
kald: Skalds, di solito tradotto come bardi, erano uomini liberi che venivano assunti per scrivere poesie, storie o canzoni sulle grandi gesta dei guerrieri nordici. Subisce 8 danni per morire e infligge a ciascun guerriero adiacente 1 danno bonus. Gli Skald non infliggono danni. I guerrieri non possono ottenere più di 1 danno bonus in questo modo.
Sassoni:
I sassoni arrivarono a stabilirsi in Gran Bretagna dall'Europa continentale in seguito alla scomparsa dell'Impero romano nel V secolo. Ai fini di questa sfida, ci sono guerrieri dei sassoni:
- L'
E
arl: Ealdormen , comunemente chiamato Conte, erano membri della nobiltà superiore. Di solito possedevano grandi distese di terra e avevano centinaia o addirittura migliaia di uomini giurati. Subisce 20 danni per morire e infligge 1 danno per round. - La
K
notte: per mancanza di un termine migliore, i cavalieri erano nobili minori che possedevano un po 'di terra. Nella maggior parte dei casi, i cavalieri erano servitori giurati di un conte. Subisce 10 danni per morire e infligge 2 danni per round. - The
W
arrior: uomini comuni, di solito nobili minori senza terra o contadini che servivano un cavaliere. Quando sono adiacenti a un Cavaliere o Conte, i guerrieri hanno un bonus al danno di +1. Subisce 8 danni per morire e infligge 2 danni per round. - L'
F
anno: il Fyrd era un gruppo di uomini liberi simili alla milizia, di solito poveri agricoltori, che portavano qualsiasi arma (o attrezzo agricolo simile ad un'arma) che dovevano combattere contro il muro. Subisce 5 danni per morire e infligge 1 danno per round. - La
P
rivolta: i sacerdoti erano molto apprezzati nella prima cultura sassone, essendo araldi delle parole di Dio. I preti subiscono 15 danni per morire e prevengono fino a 1 danno per ogni guerriero adiacente. I sacerdoti non infliggono danni. I sacerdoti non possono prevenire più di 1 danno a un guerriero.
Il muro
Le pareti si incontrano nei loro centri. Ogni round, ogni guerriero assegna danni al guerriero direttamente di fronte a lui o, se non c'è nessun guerriero vivente di fronte ad esso, il guerriero vivente adiacente in diagonale con meno salute rimanente. Se c'è un pareggio, scegli il guerriero più vicino al bordo del muro.
Esempio:
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.
Regole:
- Si applicano le lacune predefinite .
- È possibile utilizzare qualsiasi metodo IO conveniente .
- Questo è code-golf , quindi vince il codice più breve (in byte, per lingua).
- Non puoi presumere che le liste abbiano la stessa lunghezza, ma saranno sempre allineabili nei loro centri (ci sarà sempre un numero dispari di guerrieri in ciascuna lista se le liste sono di dimensioni diverse).
- È possibile generare qualsiasi valore di verità / falsità. Specifica nella tua risposta gli equivalenti di "Vittoria vichinga / sassone".
- Il perdente è determinato quando tutti i guerrieri di un muro sono morti.
Se ti capita di finire con muri che non sono allineabili durante l'esecuzione del codice, allineali il più centralmente possibile, lasciando un guerriero in più sul muro più lungo sul lato destro. Per esempio:
[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]
Sentiti libero di provare e testare il tuo codice con qualsiasi configurazione di muri, non solo quelli nei casi di test.
Casi test:
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.)
------------------------------
Ci sono alcune inesattezze storiche. Sentiti libero di indicarli e farò del mio meglio per risolverli.
(health, damage, damagebonus, protbonus)
)