З огляду на два списки рулонів кісток для битви за ризик, ваша програма чи функція повинні виводити, скільки військ програє кожен гравець.
Фон
Вам не потрібно це читати, бо це лише фон. Перейдіть до підзаголовка "Завдання", щоб продовжувати роботу без роботи.
У грі ризику один гравець може напасти на іншого гравця (насправді це потрібно для перемоги). Результат бою визначається рухом кісток. Кожен бій відбувається як послідовний підряд, коли кожен гравець може програти до 2
армії.
У підраховому бою захисник і нападник кожен перекидає кілька кісток, кількість яких може змінюватись залежно від обставин, що не мають значення для цього виклику. Найвища ціна нападника, що атакується, порівнюється з найвищою ціною загибелі захисника. Якщо загибель нападника вище, ніж загибель захисника, захисник втрачає один шматок. В іншому випадку зловмисник втрачає один шматок.
Потім, якщо в обох гравців принаймні два кубики, порівнюється другий за величиною кісток двох гравців. Знову ж таки, якщо загибель нападника вище, ніж смерть захисника, захисник втрачає один шматок. В іншому випадку зловмисник втрачає один шматок.
(Захисник виграє прив'язки. Якщо і захисник, і нападник переграють 4
, тоді нападник втрачає шматок.)
У цьому під-бої зі статті Вікіпедії кістки нападника червоні, а кістки захисника - білі. Найвища кістка нападника, 4
а найвища - захисник 3
. Оскільки нападник був вищим, захисник втрачає шматок. Другі за висотою - 3
для нападника та 2
для захисника. Оскільки нападник знову був вище, захисник втрачає ще один шматок. Таким чином, у цій битві нападник не втрачає ні одного шматка, а захисник втрачає 2
шматки.
Зауважимо, що треті за розміром шматки не порівнюються. Це тому, що захисник має не більше двох кубиків в одному підраховому бою, тому не існує жодної третьої найвищої фігури для порівняння ніколи.
Завдання
З огляду на несортовані рулони кісток (цілі числа в діапазоні від 1 до 6 включно) як нападника, так і захисника підразового ризику в будь-якій зручній формі, виведіть кількість армійських фігур, які втрачає кожен гравець. Вихід може бути в будь-якій зручній формі, якщо він має різні виходи, що вказують на п'ять можливостей. Ви повинні вказати, які ці різні результати у вашому запитанні.
Вихід визначається наступним чином: Почніть з def=0
і atk=0
. Якщо найбільше значення списку рулонів кісток нападника більше, ніж найбільше значення списку рулонів кісток захисника, то приріст def
. В іншому випадку прирощення atk
.
Якщо обидва списки рулонів з кістки мають принаймні довжину 2
, тоді: якщо друге за величиною значення списку рулонів з кістки зловмисника перевищує друге за величиною значення списку, то приріст def
та інший приріст atk
.
Нарешті, програма або функція повинна вивести унікальний ідентифікатор для кожної з наступних 5 можливостей виведення:
╔═══╦═══╗
║atk║def║
╠═══╬═══╣
║ 1 ║ 0 ║
║ 0 ║ 1 ║
║ 2 ║ 0 ║
║ 1 ║ 1 ║
║ 0 ║ 2 ║
╚═══╩═══╝
Приклад
Захисник: [3, 2]
Нападник: [2, 4, 1]
Максимум захисника, 3
а максимум нападника 4
. 4>3
, тож def=1
другим захисником є, 2
а другим нападником є 2
. Not(2>2)
, так atk=1
. Тоді вихід може бути [1,1]
.
Випробування
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]
Зразок реалізації
Python 2 або 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]
Технічні умови
- Вхід може бути прийнятий як будь-яка форма, яка чітко кодує лише рулони захисника та рулони нападника.
- Вихід може бути в будь-якій формі, що забезпечує унікальний вихід для кожної з п'яти перерахованих вище можливостей.
- Рулони захисника - це перелік
1
чи2
цілих чисел у наборі[1,2,3,4,5,6]
. Роли атакуючі представляють собою список1
для3
цілих чисел в наборі[1,2,3,4,5,6]
. - Оскільки це код-гольф , виграє найкоротший код на кожній мові ! Ви НЕ дайте відповіді на мовах гольфу відрадити вас від проводки відповідей на інших мовах.