En Pokémon hay 18 tipos:
Normal Fighting Flying Poison Ground Rock
Bug Ghost Steel Fire Water Grass
Electric Psychic Ice Dragon Dark Fairy
Un Pokémon puede tener mecanografía simple o doble. Por ejemplo, Pikachu es Electric
y Tyranitar es Rock/Dark
. El orden de los tipos no importa. Un Pokémon no puede tener el mismo tipo dos veces. Un movimiento de ataque tiene exactamente uno de los 18 tipos anteriores.
Algunos tipos de Pokémon son débiles para un cierto tipo de ataque. Por ejemplo, un
Fire
Pokémon es débil contra losWater
ataques. Esto da un multiplicador de daño de 2.Algunos tipos de Pokémon son resistentes a cierto tipo de ataque. Por ejemplo, un
Rock
Pokémon es resistente a unNormal
ataque. Esto da un multiplicador de daño de 0.5.Algunos tipos de Pokémon son inmunes a cierto tipo de ataque. Por ejemplo, un
Flying
Pokémon es inmune a unGround
ataque. Esto da un multiplicador de daño de 0.
Un pokemon puede ser doblemente débil, doblemente resistente o cualquier otra combinación contra un tipo de ataque. Multiplica los multiplicadores para obtener una efectividad total.
Escribe un programa o función que tenga un tipo de movimiento y un tipo de Pokémon genera el multiplicador de daño total del ataque. La tipificación de Pokémon siempre se escribe como A
o A/B
, where A
y B
son tipos distintos de la lista anterior. Debes aceptar el Pokémon escribiendo en este formato. Aparte de esta restricción, puede tomar aportes de cualquier manera razonable. Un formato de entrada de ejemplo que es aceptable es:
"Ice", "Dragon/Flying"
Pero esto es inaceptable:
["Ice", ["Dragon", "Flying"]]
Su salida debe ser exactamente una de las siguientes cadenas, seguida de una nueva línea final opcional:
0x 0.25x 0.5x 1x 2x 4x
Ejemplos
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
Tipo de efectividad
Para obtener una tabla de tipo amigable para los humanos, me gustaría referirlo a Gamepedia . Para que el proceso de golf sea un poco más rápido, le daré una matriz de efectividad comprimida y amigable con la computadora. Divide cada número entre dos para obtener el verdadero multiplicador (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
El código más corto en bytes gana.
Respuestas:
Pyth -
246245188 bytesCodifica la matriz con compresión base, probablemente usará indexación / hashing modular para los índices de la matriz, pero en este momento no he hecho nada elegante con ellos.
Test Suite .
fuente
Java,
663639582bytesHay una tabla de búsqueda simple que ocupa gran parte de la habitación. Simplemente encuentra los tipos correctos y los multiplica. Llámalo así:
Con algunos saltos de línea se ve así:
fuente
c="222...442".split(",");
for(String B:b)
haciendo que su ciclo for pase de 24 a 15, ahorrando 9 y convirtiéndose[b[i++]]
enB
7 para ahorrar más? ¡Total de 16 ahorros!i
, necesitaría restar uno más tarde o iniciarlo en-1
, lo que anularía ese byte guardado.JavaScript (ES6), 287
No he visto una buena compresión de los tipos, así que aquí hay uno.
Sin golf:
Ah, y aquí está mi tabla (teniendo en cuenta que está ordenada para que una letra no coincida con ninguna de las palabras que figuran debajo):
fuente
atob
, puede guardar 26 bytes al usarbtoa
eso. Cuando lo codifique, solo asegúrese de agregar un carácter adicional, ya que"...pew5"
se"...peww=="
debe a la alineación de bytes.Pikalang, 868068 bytes
Esta era una idea demasiado buena para omitirla. ( Gracias, mbomb007. )
Básicamente es una tabla de búsqueda subóptima. Primero codifico cada tipo como
Esto da como resultado representaciones únicas para cada tipo. El tipo vacío (cuando el pokemon defensor tiene un solo tipo) se codifica como
0x00
.Después de eso solo uso un lío de
if-else
equivalentes para verificar todas las combinaciones ~ 5800.Código
Stack Exchange no me permitió publicar el código como un todo, así que aquí está gzipped + base64'd.
Ejemplo
Aparentemente, el intérprete oficial de Pikalang aún no está listo, pero como es una sustitución trivial de Brainfuck, lo probé con un intérprete de Brainfuck.
La entrada está separada por una nueva línea y requiere una nueva línea adicional.
El programa usa la ubicación de memoria -1, por lo que si su intérprete no permite salir del lado izquierdo de la cinta, anteponga el código con una
pipi
o una>
(para Pikalang y Brainfuck, respectivamente).Brainfuck, 193708
Aquí está el mismo programa en Brainfuck (también gzipped + base64'd).
El programa contiene cuatro partes:
Estructura principal del programa
Aquí está el script que genera la tabla de búsqueda:
Por cierto, esta respuesta toma 29817 bytes. :)
fuente
PIPI
podría interpretarse como>
o++
). También BFC aparentemente requeriría mayúsculas en el código.C ++ 14,
420416La entrada debe ser stdin y estar en la forma
Normal, Rock/Dragon
Versión en vivo .
Con algo de espacio en blanco:
fuente
Tcl, 382
El script contiene datos comprimidos que incluyen bytes que no son UTF-8. Aquí está el script exacto codificado en la base 64:
Utiliza el
zlib
comando para la compresión.fuente
LUA,
758661633 bytesSin golf:
Llámalo con
f("Grass","Water/Flying")
fuente
m
directamente, ya que solo se hace referencia una vez.m
ae
es más barato porquee
se usa un par de veces.e={...}[r]
:? Porque intenté eso y no es legal: /Python 3 - 362
El formato de entrada es el tipo de movimiento y el tipo de Pokémon, separados por espacios. Por ejemplo
Fire Grass
, oWater Steel/Electric
.La tabla almacenada es una cadena donde el índice de cada personaje está en el rango de 40 a 103 y representa 3 combinaciones de tipos. La lista de tipos se almacena como los caracteres tercero y cuarto (si existe) de cada tipo, que se comparan con los caracteres tercero y cuarto de cada tipo ingresado.
fuente
'rmghyiis...'.find(x[2:4])//2
lugar de"rm gh yi is ...".split().index(x[2:4])
e
y losg
personajes ... tal vez se podrían usar prefijos de tres letras y aún tendrías algunos ahorros en.find(...)//3
comparación con.split().index(...)
/
entre los dos tipos de Pokémon de doble tipo, por ejemploSteel/Electric
.PHP, 426
Entrada de muestra:
Salida de muestra:
fuente