Contexte
Cette question est similaire à celle-ci . J'ai fourni toutes les informations nécessaires ci-dessous. Si vous connaissez l'autre défi, notez que nous classons toutes les défenses au lieu de voir l'efficacité d'une seule attaque. Ceci est important car cela signifie que les tableaux sont inverses les uns des autres et le but de ce défi est d'être sans intervention de l'utilisateur.
Dans Pokemon, il existe 18 types:
Normal Fighting Flying Poison Ground Rock
Bug Ghost Steel Fire Water Grass
Electric Psychic Ice Dragon Dark Fairy
Les Pokémon ont un ou deux types uniques qui les définissent (une "combinaison de types"). Par exemple, un Bulbasaur a la combinaison de types Herbe / Poison (il a deux types, Herbe et Poison) et un Charmander a la combinaison de types Feu (ayant un seul type). L'ordre des types n'a pas d'importance (ie Grass / Poison est le même que Poison / Grass).
Ces types ont tous des forces et des faiblesses:
- Un type peut être faible par rapport à un autre type. Le feu est faible contre l'eau. Il en résulte que le Feu a un multiplicateur 2 × contre l'Eau.
- Un type peut être résistant à un autre type. L'eau résiste à l'eau. Il en résulte que l'eau a un multiplicateur de 0,5 × par rapport à l'eau.
- Un type peut être immunisé contre un autre type. Voler est immunisé au sol. Il en résulte que Flying a un multiplicateur 0 × contre le sol.
Tout le reste reçoit un multiplicateur 1 × standard. Normal contre Normal entraînerait un multiplicateur 1 × en est un exemple. Ces forces et ces faiblesses peuvent également être aggravées ou annulées. Par exemple, le Feu est faible pour l'Eau mais un double type Feu / Eau aurait un multiplicateur 1 × contre l'Eau puisque la faiblesse du Feu annulerait la résistance de l'Eau. Pour un tableau complet et une explication supplémentaire, voir ci-dessous.
Objectif
Le but ici est de produire une liste de toutes les combinaisons de types, triées dans l'ordre de leur capacité défensive, et répertoriant leur nombre (résistances + immunités), leurs faiblesses et le rapport entre celles-ci. Plus précisément, l'ordre de tri est le suivant: les combinaisons de types avec le meilleur rapport (résistances + immunités) aux faiblesses sont répertoriées en premier, et s'il y a égalité, les combinaisons de types avec le plus de résistances et d'immunités gagneront le bris d'égalité. Vous pouvez produire cette liste par n'importe quel moyen (une méthode évidente consiste à faire un calcul de l'efficacité du type par rapport à chaque combinaison de types, mais vous êtes autorisé à stocker la sortie précalculée ou partiellement précalculée dans votre programme si cela le rendrait plus court.)
Tableau d'efficacité du type
Pour un tableau lisible par l'homme, consultez la base de données Pokemon. Remarque: les colonnes de cette liste sont ce que nous envisageons. Mais juste au cas où, voici le tableau auquel je pense dans une matrice compressée d'efficacité informatique. J'ai multiplié chaque valeur par 2 afin que nous n'ayons pas à gérer les décimales embêtantes:
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
Exemple
Si ce problème avait demandé uniquement une sortie pour les combinaisons de types de type unique, une sortie valide ressemblerait à ceci:
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
Cependant, votre programme devra également répertorier toutes les combinaisons de type double dans la sortie, de sorte que sa sortie sera considérablement plus longue.
Bonne chance! Le code le plus court en octets gagne.