Najtrwalsze typy pokemonów


9

tło

To pytanie jest podobne do tego . Podałem wszystkie potrzebne informacje poniżej. Jeśli znasz inne wyzwanie, pamiętaj, że oceniamy wszystkie obrony, zamiast widzieć skuteczność pojedynczego ataku. Jest to ważne, ponieważ oznacza, że ​​tabele są odwrócone względem siebie, a celem tego wyzwania jest brak udziału użytkownika.

W Pokemon jest 18 typów:

Normal    Fighting  Flying  Poison  Ground  Rock
Bug       Ghost     Steel   Fire    Water   Grass
Electric  Psychic   Ice     Dragon  Dark    Fairy

Pokemon ma jeden lub dwa unikalne typy, które je definiują („kombinacja typów”). Na przykład Bulbasaur ma kombinację typów Trawa / Trucizna (ma dwa typy, Trawa i Trucizna), a Charmander ma kombinację typów Ogień (mający tylko jeden typ). Kolejność typów nie ma znaczenia (tzn. Trawa / Trucizna jest taka sama jak Trucizna / Trawa).

Wszystkie te typy mają mocne i słabe strony:

  • Typ może być słaby w stosunku do innego. Ogień jest słaby przeciwko wodzie. Powoduje to, że Ogień ma mnożnik 2 × w stosunku do Wody.
  • Typ może być odporny na inny typ. Woda jest odporna na wodę. Powoduje to, że woda ma mnożnik 0,5 × względem wody.
  • Typ może być odporny na inny typ. Latanie jest odporne na Ziemię. Powoduje to, że Flying ma mnożnik 0 × względem ziemi.

Wszystko inne otrzymuje standardowy mnożnik 1 ×. Przykładem tego jest normalny w stosunku do normalnego, w wyniku którego mnożnik 1 × jest tego przykładem. Te mocne i słabe strony mogą być również spotęgowane lub zanegowane. Na przykład Ogień jest słaby w stosunku do Wody, ale podwójny typ Ogień / Woda miałby mnożnik 1 × w stosunku do Wody, ponieważ słabość Ognia zniweczyłaby opór Wody. Pełną tabelę i dalsze wyjaśnienia znajdują się poniżej.

Cel

Celem jest wygenerowanie listy wszystkich typów kombinacji, posortowanych w kolejności ich zdolności obronnych i wykazu ich liczby (odporności + odporności), słabości i stosunku między nimi. W szczególności kolejność sortowania jest następująca: kombinacje typów o najlepszym stosunku (odporności + odporności) do słabości są wymienione jako pierwsze, a jeśli jest remis, kombinacje typów o największej odporności i odporności wygrywają rozstrzygnięcie remisu. Możesz wygenerować tę listę za pomocą dowolnych środków (oczywistą metodą jest wykonanie obliczenia skuteczności typu dla każdej kombinacji typów, ale możesz przechowywać w programie wstępnie obliczone lub częściowo wstępnie obliczone dane wyjściowe, jeśli spowoduje to ich skrócenie).

Tabela efektywności typów

Aby zobaczyć tabelę czytelną dla człowieka, zobacz bazę danych Pokemon. Uwaga: rozważamy kolumny tej listy. Ale na wszelki wypadek, oto tabela, o której myślę, w skompresowanej, przyjaznej komputerowo matrycy skuteczności. Mnożyłem każdą wartość przez 2, więc nie mamy do czynienia z nieznośnymi miejscami po przecinku:

           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

Przykład

Jeśli ten problem zażądał danych wyjściowych tylko dla kombinacji typów jednego typu, prawidłowe dane wyjściowe wyglądałyby tak:

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

Jednak twój program będzie musiał także wymienić wszystkie kombinacje podwójnego typu na wyjściu, więc jego wynik będzie znacznie dłuższy.

Powodzenia! Najkrótszy kod w bajtach wygrywa.



3
Witamy w PPCG! :)
Martin Ender,

1
Myślę, że ma to oczywisty problem, że odpowiedź jest mniejsza niż dane potrzebne do rozwiązania pytania, a zatem zwycięskie rozwiązanie po prostu zakoduje dane wyjściowe. Aby rozwiązać ten problem, prawdopodobnie musisz zmienić wyzwanie, aby przyjąć macierz efektywności typu jako dane wejściowe w czasie wykonywania.

@ ais523 Uważam, że kompresja macierzy powinna być rdzeniem wyzwania i zasadniczo nie widzę w tym nic złego (chociaż w tym przypadku niestety ta dokładna tabela była wcześniej przedmiotem wyzwania).
Martin Ender

2
@MartinEnder To coś więcej niż powiązane ... Jeśli przejrzysz wprowadzenie, zostanie w 100% skopiowane, a następnie zmienione, aby nie wyglądało, jakby zostało skopiowane. Ma dokładnie tę samą strukturę, typy początkowe są w tej samej kolejności, sformatowane tak samo. To rażące plagiatowanie, nie wspominając o tym i nie próbując tego ukryć.
orlp

Odpowiedzi:


2

Python 2, 784 bajtów

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

Wyjścia:

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

Niesamowite. Dokładnie to, czego chciałem. Dzięki stary!
Devin White,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.