Contexte historique
Le mur de bouclier est une formation de guerre tactique qui remonte à au moins 2500 avant JC. Il se composait de guerriers chevauchant leurs boucliers avec ceux de leurs compagnons pour former un «mur». L'attrait de la tactique vient du fait que même le guerrier le moins qualifié peut se battre dans un mur tant qu'il a un bouclier et une arme. En raison de la proximité des murs, il y avait peu d'espace pour se déplacer, et la bataille devenait généralement une allumette de combat menée avec des armes tranchantes.
Le défi
Votre tâche consiste à créer un programme ou une fonction qui, étant donné deux tableaux / listes / vecteurs de guerriers en entrée, décide du résultat de la bataille. Les listes représenteront un mur de boucliers sur une seule ligne, et elles suivront une notation spécifique:
Vikings:
Les guerriers nordiques avaient une féroce volonté de bataille. De la fin du VIIIe au milieu du XIe siècle, les vikings danois ont envahi les royaumes de Grande-Bretagne à la recherche de richesses et de terres cultivables. Aux fins de ce défi, ce sont les guerriers vikings:
- L'
J
arl: Habituellement trouvés conduisant ses hommes du centre du mur, les jarls étaient les chefs des hordes vikings. Prend 15 dégâts pour mourir et inflige 2 dégâts par round. - L'
B
erserker: Bien que la fantaisie ait considérablement tordu l'image des berserkers, ces guerriers étaient connus pour se battre dans une fureur de transe sans aucune autre protection que leurs boucliers. Prend 6 dégâts pour mourir et inflige 3 dégâts par round. - Le
C
chef: Les chefs étaient des hommes riches qui avaient des hommes libres à leur service. Ils avaient généralement gagné une grande gloire et des richesses au combat. Prend 10 dégâts pour mourir et inflige 2 dégâts par round. - The Free
M
en: Warriors qui a servi un chef. Ils ont juré de se battre pour leurs seigneurs jusqu'à la mort. Prend 8 dégâts pour mourir et inflige 1 dégât par round. - Le
S
kald: Les skalds, généralement traduits par des bardes, étaient des hommes libres qui étaient embauchés pour écrire des poèmes, des histoires ou des chansons sur les grandes actions des guerriers nordiques. Prend 8 dégâts pour mourir et donne à chaque guerrier adjacent 1 bonus supplémentaire. Les Skalds n'infligent aucun dégât. Les guerriers ne peuvent pas gagner plus d'un bonus de dégâts de cette façon.
Saxons:
Les Saxons sont venus s'installer en Grande-Bretagne à partir de l'Europe continentale après la disparition de l'Empire romain au Ve siècle. Aux fins de ce défi, il y a les guerriers des saxons:
- L'
E
arl: les Ealdormen , communément appelés comtes, faisaient partie de la noblesse supérieure. Ils détenaient généralement de grandes étendues de terre et avaient des centaines voire des milliers d'hommes assermentés. Prend 20 dégâts pour mourir et inflige 1 dégât par round. - La
K
nuit: Faute d'un meilleur terme, les chevaliers étaient des nobles mineurs qui possédaient des terres. Dans la plupart des cas, les chevaliers étaient des serviteurs jurés d'un comte. Prend 10 dégâts pour mourir et inflige 2 dégâts par round. - L'
W
arrior: des hommes ordinaires, généralement des nobles mineurs sans terre ou des paysans qui ont servi un chevalier. Lorsqu'ils sont adjacents à un chevalier ou un comte, les guerriers bénéficient d'un bonus de dégâts de +1. Prend 8 dégâts pour mourir et inflige 2 dégâts par round. - Le
F
yrd: Le Fyrd était un groupe d'hommes libres semblable à des milices, généralement des fermiers pauvres, qui apportaient n'importe quelle arme (ou instrument agricole semblable à une arme) qu'ils devaient combattre dans le mur. Prend 5 dégâts pour mourir et inflige 1 dégât par round. - Le
P
plus: les prêtres étaient très appréciés dans la première culture saxonne, étant des hérauts des paroles de Dieu. Les prêtres subissent 15 dégâts pour mourir et préviennent jusqu'à 1 dégât chaque guerrier adjacent serait infligé. Les prêtres n'infligent aucun dégât. Les prêtres ne peuvent pas empêcher plus d'un dégât infligé à un guerrier.
Le mur
Les murs se rencontrent dans leurs centres. Chaque tour, chaque guerrier attribue des dégâts au guerrier directement devant lui ou, s'il n'y a pas de guerrier vivant devant lui, le guerrier vivant adjacent en diagonale avec le moins de points de vie restants. S'il y a une cravate, choisissez le guerrier plus près du bord du mur.
Exemple:
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.
Règles:
- Les échappatoires par défaut s'appliquent.
- Vous pouvez utiliser n'importe quelle méthode IO pratique .
- C'est le code-golf , donc le code le plus court (en octets, par langue) gagne.
- Vous ne pouvez pas supposer que les listes auront la même longueur, mais elles seront toujours alignables en leur centre (il y aura toujours un nombre impair de guerriers dans chaque liste si les listes sont de tailles différentes).
- Vous pouvez afficher n'importe quelle valeur de vérité / falsey. Veuillez préciser dans votre réponse les équivalents de "victoire viking / saxonne".
- Le perdant est déterminé lorsque tous les guerriers d'un mur sont morts.
Si vous vous retrouvez avec des murs qui ne sont pas alignables pendant l'exécution du code, alignez-les le plus central possible, en laissant un guerrier supplémentaire sur le mur le plus long du côté droit. Par exemple:
[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]
N'hésitez pas à essayer et tester votre code avec n'importe quelle configuration de murs, pas seulement ceux des cas de test.
Cas de 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.)
------------------------------
Il y a quelques inexactitudes historiques. N'hésitez pas à les signaler et je ferai de mon mieux pour les corriger.
(health, damage, damagebonus, protbonus)
)Réponses:
Python 2 ,
576573565554540549 octetsEssayez-le en ligne!
la source
(5in V[i-1:i+2:2])
implique que les échaudures adjacentes peuvent infliger des dégâts. Vous en aurez peut-être besoin...*(V[i]!=5)
. Test:print f([S,S],[P]) # says V but should be a Draw
APL (Dyalog Classic) , 128 octets
Essayez-le en ligne!
Il existe deux fonctions dans le lien TIO:
g
la fonctionf
golfée ci-dessus est une fonction non golfée qui accepte une paire de chaînes, les convertit en une représentation appropriée et appelle la fonction golfée.L'entrée est constituée de cinq matrices: les
t
types de guerriers sous forme d'entiers;l
la vie;d
dommage;b
quels types de guerriers donnent un bonus lorsqu'ils sont adjacents;p
idem pour la protection. Les matrices se composent de deux rangées - Vikings et Saxons. Si leurs guerriers ne sont pas du même nombre, les matrices doivent être remplies de 0, mais pas nécessairement centrées. Le résultat est1
/¯1
pour la victoire Viking / Saxon ou0
pour un match nul.la source