Найбільш довговічні типи покемонів


9

Фон

Це питання схоже на це . Я надав всю необхідну інформацію нижче. Якщо ви знайомі з іншим викликом, то зауважте, що ми класифікуємо всі засоби захисту, а не бачимо ефективність однієї атаки. Це важливо, оскільки це означає, що таблиці є зворотними один для одного, і мета цього завдання - бути без введення користувача.

У Покемонах існує 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

Однак вашій програмі також потрібно буде перерахувати всі комбінації подвійного типу у виході, тому його вихід буде значно довшим.

Удачі! Виграє найкоротший код у байтах.



3
І ласкаво просимо до PPCG! :)
Мартін Ендер

1
Я думаю, у цьому є очевидна проблема, що відповідь менша, ніж дані, необхідні для вирішення питання, і, таким чином, виграшне рішення просто жорстко кодує вихід. Щоб вирішити проблему, вам, ймовірно, потрібно змінити завдання, щоб взяти матрицю ефективності типу як вхід під час виконання.

@ ais523 Я вважаю, що стиснення матриці повинно бути основним завданням, і в принципі я не бачу в цьому нічого поганого (хоча в цьому випадку, на жаль, саме ця таблиця була предметом виклику раніше).
Мартін Ендер

2
@MartinEnder Це більш ніж пов’язано ... Якщо ви перейдете до вступу, це 100% скопійовано, а потім змінено так, щоб не виглядати як скопійовано. Звідси випливає абсолютно однакова структура, вихідні типи в одному порядку, відформатовані однаково. Це просто кричуще плагіатування, не згадуючи про це і намагаючись приховати.
orlp

Відповіді:


2

Python 2, 784 байт

i=['Normal','222222422222202222'],['Fire','214211224221422211'],['Water','211441222222222212'],['Electric','222122224122222212'],['Grass','241114241424222222'],['Ice','242221422222422242'],['Fighting','222222222441122124'],['Poison','222212114241222221'],['Ground','224044212222122222'],['Flying','222414120221422222'],['Psychic','222222122214242422'],['Bug','242212121422422222'],['Rock','114242414122222242'],['Ghost','022222012221242422'],['Dragon','211114222222224224'],['Dark','222222422204212124'],['Steel','142211404111121211'],['Fairy','222222142221220142']
L=[]
for x,X in i:
 for y,Y in i[i.index([x,X]):]:
  S=W=0.
  for a,b in zip(X,Y):A=int(a)*int(b);W+=A>4;S+=A<4
  L+=[([x+'/'+y,x][x==y]+' -> %d/%d'%(S,W),S/W)]
for l in sorted(L, key=lambda l:-l[1]):print'%s = %.2f'%l

Виходи:

Bug/Steel -> 9/1 = 9.00
Steel/Fairy -> 11/2 = 5.50
Normal/Ghost -> 5/1 = 5.00
Water/Ground -> 5/1 = 5.00
Grass/Steel -> 10/2 = 5.00
Poison/Dark -> 5/1 = 5.00
Poison/Steel -> 10/2 = 5.00
Flying/Steel -> 10/2 = 5.00
Dragon/Steel -> 10/2 = 5.00
Normal/Steel -> 12/3 = 4.00
Electric/Poison -> 8/2 = 4.00
Electric/Steel -> 12/3 = 4.00
Ghost/Dark -> 4/1 = 4.00
Water/Steel -> 11/3 = 3.67
Dark/Steel -> 11/3 = 3.67
Steel -> 11/3 = 3.67
Fire/Steel -> 10/3 = 3.33
Fire/Ground -> 6/2 = 3.00
Water/Flying -> 6/2 = 3.00
Electric -> 3/1 = 3.00
Electric/Flying -> 6/2 = 3.00
Electric/Fairy -> 6/2 = 3.00
Ice/Steel -> 9/3 = 3.00
Fighting/Steel -> 9/3 = 3.00
Rock/Steel -> 9/3 = 3.00
Ghost/Steel -> 12/4 = 3.00
Fire/Electric -> 8/3 = 2.67
Water/Poison -> 8/3 = 2.67
Normal/Poison -> 5/2 = 2.50
Water/Electric -> 5/2 = 2.50
Poison -> 5/2 = 2.50
Ground/Flying -> 5/2 = 2.50
Ground/Steel -> 10/4 = 2.50
Psychic/Steel -> 10/4 = 2.50
Fire/Flying -> 7/3 = 2.33
Water/Fairy -> 7/3 = 2.33
Electric/Ghost -> 7/3 = 2.33
Normal/Electric -> 4/2 = 2.00
Normal/Fairy -> 4/2 = 2.00
Fire -> 6/3 = 2.00
Fire/Poison -> 8/4 = 2.00
Fire/Bug -> 6/3 = 2.00
Fire/Fairy -> 8/4 = 2.00
Water -> 4/2 = 2.00
Water/Ghost -> 8/4 = 2.00
Electric/Bug -> 4/2 = 2.00
Fighting/Poison -> 6/3 = 2.00
Poison/Fairy -> 6/3 = 2.00
Psychic/Ghost -> 4/2 = 2.00
Ghost -> 4/2 = 2.00
Ghost/Fairy -> 4/2 = 2.00
Dragon/Fairy -> 8/4 = 2.00
Fairy -> 4/2 = 2.00
Fire/Ghost -> 9/5 = 1.80
Normal/Fire -> 7/4 = 1.75
Fire/Rock -> 7/4 = 1.75
Fire/Dark -> 7/4 = 1.75
Poison/Dragon -> 7/4 = 1.75
Normal/Water -> 5/3 = 1.67
Fire/Water -> 5/3 = 1.67
Fire/Dragon -> 5/3 = 1.67
Water/Bug -> 5/3 = 1.67
Electric/Fighting -> 5/3 = 1.67
Ghost/Dragon -> 8/5 = 1.60
Fire/Fighting -> 6/4 = 1.50
Water/Dragon -> 3/2 = 1.50
Electric/Dragon -> 6/4 = 1.50
Electric/Dark -> 6/4 = 1.50
Poison/Ground -> 6/4 = 1.50
Poison/Flying -> 6/4 = 1.50
Poison/Rock -> 6/4 = 1.50
Poison/Ghost -> 6/4 = 1.50
Ground/Fairy -> 6/4 = 1.50
Flying/Dragon -> 6/4 = 1.50
Rock/Fairy -> 6/4 = 1.50
Fire/Psychic -> 7/5 = 1.40
Water/Fighting -> 7/5 = 1.40
Water/Dark -> 7/5 = 1.40
Grass/Fairy -> 7/5 = 1.40
Fighting/Dragon -> 7/5 = 1.40
Dragon/Dark -> 7/5 = 1.40
Normal/Flying -> 4/3 = 1.33
Fire/Grass -> 4/3 = 1.33
Fighting/Dark -> 4/3 = 1.33
Poison/Psychic -> 4/3 = 1.33
Ground/Dragon -> 4/3 = 1.33
Flying -> 4/3 = 1.33
Dragon -> 4/3 = 1.33
Dark/Fairy -> 4/3 = 1.33
Normal/Dragon -> 5/4 = 1.25
Water/Rock -> 5/4 = 1.25
Electric/Ground -> 5/4 = 1.25
Electric/Psychic -> 5/4 = 1.25
Electric/Rock -> 5/4 = 1.25
Grass/Poison -> 5/4 = 1.25
Fighting/Bug -> 5/4 = 1.25
Fighting/Ghost -> 5/4 = 1.25
Poison/Bug -> 5/4 = 1.25
Flying/Dark -> 5/4 = 1.25
Water/Psychic -> 6/5 = 1.20
Grass/Ghost -> 6/5 = 1.20
Ground/Ghost -> 6/5 = 1.20
Flying/Rock -> 6/5 = 1.20
Flying/Ghost -> 6/5 = 1.20
Flying/Fairy -> 6/5 = 1.20
Bug/Ghost -> 6/5 = 1.20
Bug/Fairy -> 6/5 = 1.20
Normal -> 1/1 = 1.00
Normal/Fighting -> 4/4 = 1.00
Normal/Ground -> 4/4 = 1.00
Normal/Psychic -> 2/2 = 1.00
Normal/Bug -> 3/3 = 1.00
Normal/Rock -> 5/5 = 1.00
Normal/Dark -> 3/3 = 1.00
Fire/Ice -> 4/4 = 1.00
Water/Grass -> 3/3 = 1.00
Electric/Grass -> 4/4 = 1.00
Grass/Fighting -> 6/6 = 1.00
Grass/Dark -> 7/7 = 1.00
Ice/Poison -> 5/5 = 1.00
Ice/Ghost -> 5/5 = 1.00
Ice/Fairy -> 4/4 = 1.00
Fighting -> 3/3 = 1.00
Fighting/Flying -> 5/5 = 1.00
Fighting/Fairy -> 5/5 = 1.00
Ground -> 3/3 = 1.00
Ground/Bug -> 4/4 = 1.00
Ground/Rock -> 6/6 = 1.00
Ground/Dark -> 6/6 = 1.00
Psychic/Dragon -> 6/6 = 1.00
Psychic/Fairy -> 3/3 = 1.00
Bug -> 3/3 = 1.00
Bug/Dragon -> 5/5 = 1.00
Bug/Dark -> 5/5 = 1.00
Rock/Ghost -> 6/6 = 1.00
Rock/Dark -> 7/7 = 1.00
Dark -> 3/3 = 1.00
Grass/Psychic -> 6/7 = 0.86
Fighting/Rock -> 6/7 = 0.86
Normal/Grass -> 5/6 = 0.83
Grass/Bug -> 5/6 = 0.83
Fighting/Ground -> 5/6 = 0.83
Ground/Psychic -> 5/6 = 0.83
Rock/Dragon -> 5/6 = 0.83
Grass -> 4/5 = 0.80
Grass/Flying -> 4/5 = 0.80
Flying/Psychic -> 4/5 = 0.80
Flying/Bug -> 4/5 = 0.80
Rock -> 4/5 = 0.80
Electric/Ice -> 3/4 = 0.75
Grass/Ground -> 3/4 = 0.75
Ice/Flying -> 3/4 = 0.75
Ice/Bug -> 3/4 = 0.75
Psychic/Rock -> 5/7 = 0.71
Grass/Dragon -> 4/6 = 0.67
Ice/Rock -> 4/6 = 0.67
Ice/Dark -> 4/6 = 0.67
Fighting/Psychic -> 2/3 = 0.67
Psychic -> 2/3 = 0.67
Psychic/Bug -> 4/6 = 0.67
Bug/Rock -> 2/3 = 0.67
Ice/Dragon -> 3/5 = 0.60
Grass/Ice -> 4/7 = 0.57
Normal/Ice -> 2/4 = 0.50
Water/Ice -> 2/4 = 0.50
Grass/Rock -> 2/4 = 0.50
Ice/Fighting -> 3/6 = 0.50
Psychic/Dark -> 1/2 = 0.50
Ice/Ground -> 2/5 = 0.40
Ice/Psychic -> 2/6 = 0.33
Ice -> 1/4 = 0.25

Дивовижно. Саме те, що я хотів. Дякую, друже!
Девін Вайт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.