Фон
Це питання схоже на це . Я надав всю необхідну інформацію нижче. Якщо ви знайомі з іншим викликом, то зауважте, що ми класифікуємо всі засоби захисту, а не бачимо ефективність однієї атаки. Це важливо, оскільки це означає, що таблиці є зворотними один для одного, і мета цього завдання - бути без введення користувача.
У Покемонах існує 18 типів:
Normal Fighting Flying Poison Ground Rock
Bug Ghost Steel Fire Water Grass
Electric Psychic Ice Dragon Dark Fairy
У покемонів є один або два унікальних типи, які їх визначають ("комбінація типів"). Наприклад, у Bulbasaur є комбінація типів трава / отрута (вона має два типи, трава та отрута), а чародійник - комбінація типів Вогонь (має лише один тип). Порядок типів не має значення (тобто трава / отрута така ж, як отрута / трава).
Усі ці типи мають сильні та слабкі сторони:
- Тип може бути слабким до іншого типу. Вогонь слабкий проти Води. Це призводить до того, що Вогонь має 2-кратний множник проти води.
- Тип може бути стійким до іншого типу. Вода стійка до Води. Це призводить до того, що вода має множник 0,5 × проти води.
- Тип може бути несприйнятливим до іншого типу. Летячий імунітет до Землі. Це призводить до того, що Flying має множник 0 × проти землі.
Все інше отримує стандартний множник 1 ×. Приклад цього в нормі проти нормального призведе до множника 1 ×. Ці сильні та слабкі сторони можуть також ускладнюватися або заперечуватися. Наприклад, Вогонь слабкий до Води, але подвійний тип Вогонь / Вода матиме множник 1 × проти Води, оскільки слабкість від Вогонь нівелює опір Води. Повну таблицю та подальше пояснення дивіться нижче.
Об'єктивна
Мета полягає у виведенні списку всіх типів комбінацій, відсортованих у порядку їх оборонної здатності та переліченні їх кількості (опору + імунітету), слабких сторін та співвідношення між ними. Зокрема, порядок сортування такий: комбінації типів з найкращим співвідношенням (стійкість + імунітет) до слабких сторін перераховуються першими, а якщо існує зв'язання, комбінації типів з найбільшою стійкістю та імунітетом виграють тайбрек. Ви можете створити цей список будь-якими способами (очевидним методом є розрахунок ефективності типу для кожної комбінації типів, але ви можете зберігати попередньо обчислений або частково попередньо обчислений вихід у вашій програмі, якщо це зробить його скороченням.)
Введіть таблицю ефективності
Для людської читаної таблиці див . Базу даних Pokemon. Примітка: стовпці цього списку - це те, що ми розглядаємо. Але про всяк випадок, ось таблиця, про яку я замислююсь, у стислої для комп’ютера матриці ефективності. Я помножив кожне значення на 2, тому нам не доведеться мати справу з прискіпливими десятковими знаками:
Attacking type
(same order)
Nor 222222422222202222
Fir 214211224221422211
D Wat 211441222222222212
e Ele 222122224122222212
f Gra 241114241424222222
e Ice 242221422222422242
n Fig 222222222441122124
d Poi 222212114241222221
i Gro 224044212222122222
n Fly 222414120221422222
g Psy 222222122214242422
Bug 242212121422422222
T Roc 114242414122222242
y Gho 022222012221242422
p Dra 211114222222224224
e Dar 222222422204212124
Ste 142211404111121211
Fai 222222142221220142
Приклад
Якщо ця проблема вимагала виведення лише для однотипних комбінацій типів, то дійсний вихід буде виглядати приблизно так:
Steel -> 11/3 = 3.66
Electric -> 3/1 = 3
Poison -> 5/2 = 2.5
Fire -> 6/3 = 2
Water -> 4/2 = 2
Ghost -> 4/2 = 2
Fairy -> 4/2 = 2
Fly -> 4/3 = 1.333
Dragon -> 4/3 = 1.333
Fighting -> 3/3 = 1
Normal -> 1/1 = 1
Ground -> 3/3 = 1
Psychic -> 2/2 = 1
Bug -> 3/3 = 1
Dark -> 3/3 = 1
Grass -> 4/5 = 0.8
Rock -> 4/5 = 0.8
Ice -> 1/4 = 0.25
Однак вашій програмі також потрібно буде перерахувати всі комбінації подвійного типу у виході, тому його вихід буде значно довшим.
Удачі! Виграє найкоротший код у байтах.