Dans Pokémon, il existe 18 types:
Normal Fighting Flying Poison Ground Rock
Bug Ghost Steel Fire Water Grass
Electric Psychic Ice Dragon Dark Fairy
Un Pokémon peut avoir une frappe simple ou double. Par exemple, Pikachu est Electric
et Tyranitar est Rock/Dark
. L'ordre des types n'a pas d'importance. Un Pokémon ne peut pas avoir le même type deux fois. Un coup d'attaque a exactement l'un des 18 types ci-dessus.
Certains types de Pokémon sont faibles face à un certain type d'attaque. Par exemple, un
Fire
Pokémon est faible face auxWater
attaques. Cela donne un multiplicateur de dégâts de 2.Certains types de Pokémon sont résistants à un certain type d'attaque. Par exemple, un
Rock
Pokémon est résistant à uneNormal
attaque. Cela donne un multiplicateur de dégâts de 0.5.Certains types de Pokémon sont immunisés contre un certain type d'attaque. Par exemple, un
Flying
Pokémon est immunisé contre uneGround
attaque. Cela donne un multiplicateur de dommage de 0.
Un pokémon peut être doublement faible, doublement résistant ou toute autre combinaison contre un type attaquant. Multipliez les multiplicateurs pour obtenir une efficacité totale.
Ecrivez un programme ou une fonction qui donne un type de mouvement et une typographie Pokémon génère le multiplicateur de dégâts total de l'attaque. Une typographie Pokémon est toujours écrite sous la forme A
ou A/B
, où A
et B
sont des types distincts de la liste ci-dessus. Vous devez accepter la saisie de Pokémon dans ce format. En dehors de cette restriction, vous pouvez participer de manière raisonnable. Un exemple de format d'entrée acceptable est:
"Ice", "Dragon/Flying"
Mais c'est inacceptable:
["Ice", ["Dragon", "Flying"]]
Votre sortie doit correspondre exactement à l’une des chaînes suivantes, suivie d’un retour à la ligne facultatif:
0x 0.25x 0.5x 1x 2x 4x
Exemples
Ground, Fire -> 2x
Normal, Rock/Dragon -> 0.5x
Fighting, Ghost/Steel -> 0x
Steel, Water/Steel -> 0.25x
Ice, Dragon/Flying -> 4x
Water, Ground/Water -> 1x
Ghost, Ghost -> 2x
Type d'efficacité
Pour une charte graphique conviviale, j'aimerais vous référer à Gamepedia . Pour rendre le processus de golf un peu plus rapide, je vais vous donner une matrice d’efficacité compressée et conviviale. Divisez chaque nombre par deux pour obtenir le vrai multiplicateur (1 -> 0.5, 4 -> 2):
Defending type
(same order)
Normal 222221201222222222
Fighting 421124104222214241
A Flying 242221421224122222
t Poison 222111210224222224
t Ground 220424124421422222
a Rock 214212421422224222
c Bug 211122211124242241
k Ghost 022222242222242212
i Steel 222224221112124224
n Fire 222221424114224122
g Water 222244222411222122
Grass 221144121141222122
T Electric 224202222241122122
y Psychic 242422221222212202
p Ice 224242221114221422
e Dragon 222222221222222420
Dark 212222242222242211
Fairy 242122221122222442
Le code le plus court en octets gagne.
Réponses:
Pyth -
246245188 octetsEncode la matrice avec la compression de base, utilisera probablement l’indexation / hachage modulaire pour les index de la matrice, mais pour l’instant je n’ai rien fait d’excellent avec ceux-ci.
Suite de test .
la source
Java,
663 639582 octetsIl existe une simple table de consultation occupant une grande partie de la pièce. Il trouve simplement les types corrects et les multiplie. Appelez ça comme ça:
Avec quelques sauts de ligne, cela ressemble à ceci:
la source
c="222...442".split(",");
for(String B:b)
faire votre boucle for aller 24-15, 9 d' économie et de faire votre[b[i++]]
enB
7 plus d' économies. Total de 16 économies!i
, je devrais en soustraire un plus tard ou le démarrer à-1
, ce qui annulerait cet octet enregistré.JavaScript (ES6), 287
Je n'ai pas vu une bonne compression des types, alors en voici un.
Ungolfed:
Oh, et voici mon tableau (en gardant à l'esprit qu'il a été commandé pour qu'une lettre ne corresponde à aucun des mots énumérés ci-dessous):
la source
atob
, vous pouvez économiser 26 octets en l'utilisantbtoa
. Lorsque vous l'encodez, assurez-vous simplement d'ajouter un caractère supplémentaire, car cela"...pew5"
est"...peww=="
dû à l'alignement des octets.Pikalang, 868068 octets
C'était une trop bonne idée pour sauter. ( Merci, mbomb007. )
C'est fondamentalement une table de recherche sous-optimale. J'encode d'abord chaque type comme
Cela donne des représentations uniques pour chaque type. Le type vide (lorsque le pokemon en défense n'a qu'un seul type) est codé comme
0x00
.Après cela, j’utilise juste un fouillis d’
if-else
équivalents pour vérifier toutes les ~ 5800 combinaisons.Code
Stack Exchange ne m'autorisait pas à poster le code dans son ensemble, alors voici le format gzippé + base64.
Exemple
Apparemment, l'interprète officiel de Pikalang n'est pas encore prêt, mais comme c'est une substitution triviale de Brainfuck, je l'ai testée avec un interprète de Brainfuck.
L'entrée est séparée par une nouvelle ligne et nécessite une nouvelle ligne de fin.
Le programme utilise l'emplacement de mémoire -1. Par conséquent, si votre interprète refuse de sortir du côté gauche de la bande, ajoutez le code avec un
pipi
ou un>
(respectivement pour Pikalang et Brainfuck).Brainfuck, 193708
Voici le même programme dans Brainfuck (également gzipped + base64'd).
Le programme contient quatre parties:
Structure principale du programme
Voici le script qui génère la table de recherche:
BTW, cette réponse prend 29817 octets. :)
la source
PIPI
peut être interprété comme>
ou++
). De plus, BFC aurait apparemment besoin de mettre le code en majuscule.C ++ 14,
420416La saisie doit être stdin et sous la forme
Normal, Rock/Dragon
Version en direct .
Avec quelques espaces:
la source
Tcl, 382
Le script contient des données compressées comprenant des octets non UTF-8. Voici le script exact encodé en base 64:
Utilise la
zlib
commande pour la compression.la source
Lua,
758661633 octetsUngolfed:
Appelez-le avec
f("Grass","Water/Flying")
la source
m
directement la valeur de puisque celle-ci n’est référencée qu’une fois.m
àe
est moins cher, car ile
est utilisé plusieurs fois.e={...}[r]
:? Parce que j'ai essayé ça et que ce n'est pas légal: /Python 3 - 362
Le format d’entrée est le type de mouvement et le type Pokemon, séparés par des espaces. Par exemple
Fire Grass
, ouWater Steel/Electric
.La table est stockée est une chaîne dont l'index de chaque caractère est compris entre 40 et 103 et représente 3 combinaisons de types. La liste des types est stockée en tant que 3ème et 4ème (si elle existe) caractères de chaque type, qui sont comparés aux 3ème et 4ème caractères de chaque type entré.
la source
'rmghyiis...'.find(x[2:4])//2
place de"rm gh yi is ...".split().index(x[2:4])
e
etg
personnages .... peut - être trois préfixes lettre pourrait être utilisé et vous auriez encore des économies de.find(...)//3
contre.split().index(...)
/
entre les deux types pour les Pokemon à double type, par exempleSteel/Electric
.PHP, 426
Exemple de saisie:
Exemple de sortie:
la source