Фон
Этот вопрос похож на этот . Я предоставил всю необходимую информацию ниже. Если вы знакомы с другой задачей, обратите внимание, что мы ранжируем все виды защиты, а не видим эффективность отдельной атаки. Это важно, потому что это означает, что таблицы противоположны друг другу, и цель этой задачи состоит в том, чтобы не вводить пользователя.
У покемонов есть 18 видов:
Normal Fighting Flying Poison Ground Rock
Bug Ghost Steel Fire Water Grass
Electric Psychic Ice Dragon Dark Fairy
У покемонов есть один или два уникальных типа, которые их определяют («комбинация типов»). Например, у Бульбазавра есть комбинация типов Grass / Poison (у него есть два типа, Grass и Poison), а у Charmander есть комбинация типов Fire (имеющая только один тип). Порядок типов не имеет значения (т. Е. Grass / Poison такой же, как Poison / Grass).
Все эти типы имеют свои сильные и слабые стороны:
- Тип может быть слабым для другого типа. Огонь слаб против воды. Это приводит к тому, что огонь имеет 2-кратный множитель против воды.
- Тип может быть устойчивым к другому типу. Вода устойчива к воде. В результате вода имеет множитель 0,5 × против воды.
- Тип может быть невосприимчив к другому типу. Полет неуязвим для Земли. Это приводит к тому, что Flying имеет множитель 0x относительно Земли.
Все остальное получает стандартный множитель 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
Однако вашей программе также необходимо перечислить все комбинации двойного типа в выводе, поэтому ее вывод будет значительно длиннее.
Удачи! Самый короткий код в байтах побеждает.