fundo
Esta pergunta é semelhante a esta . Forneci todas as informações necessárias abaixo. Se você está familiarizado com o outro desafio, observe que estamos classificando todas as defesas em vez de ver a eficácia de um único ataque. Isso é importante porque significa que as tabelas são inversas uma da outra e o objetivo desse desafio é ficar sem a entrada do usuário.
Em Pokemon, existem 18 tipos:
Normal Fighting Flying Poison Ground Rock
Bug Ghost Steel Fire Water Grass
Electric Psychic Ice Dragon Dark Fairy
Os Pokémon têm um ou dois tipos únicos que os definem (uma "combinação de tipos"). Por exemplo, um Bulbasaur possui a combinação de tipos Grass / Poison (possui dois tipos, Grass e Poison) e um Charmander possui a combinação de tipos Fire (tendo apenas um tipo). A ordem dos tipos não importa (ou seja, Grama / Veneno é a mesma que Veneno / Grama).
Todos esses tipos têm pontos fortes e fracos:
- Um tipo pode ser fraco para outro tipo. O fogo é fraco contra a água. Isso resulta no fogo tendo um multiplicador 2 × contra a água.
- Um tipo pode ser resistente a outro tipo. A água é resistente à água. Isso resulta em água com um multiplicador de 0,5 × contra a água.
- Um tipo pode ser imune a outro tipo. Voar é imune ao solo. Isso resulta em voar com um multiplicador 0 × contra o solo.
Qualquer outra coisa recebe um multiplicador padrão de 1 ×. Normal contra Normal resultaria em um multiplicador de 1 × é um exemplo disso. Esses pontos fortes e fracos também podem ser compostos ou negados. Por exemplo, o fogo é fraco para a água, mas um tipo duplo de fogo / água teria um multiplicador de 1 × contra a água, pois a fraqueza do fogo negaria a resistência da água. Para uma tabela completa e uma explicação adicional, veja abaixo.
Objetivo
O objetivo aqui é produzir uma lista de todas as combinações de tipos, classificadas na ordem de suas habilidades defensivas e listando seus números de (resistências + imunidades), fraquezas e a razão entre elas. Especificamente, a ordem de classificação é a seguinte: as combinações de tipos com a melhor proporção de (resistências + imunidades) e fraquezas são listadas primeiro e, se houver um empate, as combinações de tipos com mais resistências e imunidades vencerão o desempate. Você pode produzir essa lista de qualquer maneira (um método óbvio é fazer um cálculo de eficácia do tipo em relação a cada combinação de tipos, mas você tem permissão para armazenar resultados pré-calculados ou parcialmente pré-calculados em seu programa, caso isso seja mais curto.)
Tabela de eficácia do tipo
Para uma tabela legível por humanos, consulte o banco de dados Pokemon. Nota: as colunas desta lista são o que estamos considerando. Mas, por precaução, aqui está a tabela em que estou pensando em uma matriz de eficácia compacta e amigável ao computador. Multipliquei cada valor por 2 para não precisarmos lidar com decimais irrelevantes:
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
Exemplo
Se esse problema tivesse solicitado apenas saída para combinações de tipo único, uma saída válida seria assim:
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
No entanto, seu programa também precisará listar todas as combinações de tipo duplo na saída, portanto, sua saída será consideravelmente mais longa.
Boa sorte! O menor código em bytes vence.