Em Pokémon existem 18 tipos:
Normal Fighting Flying Poison Ground Rock
Bug Ghost Steel Fire Water Grass
Electric Psychic Ice Dragon Dark Fairy
Um Pokémon pode ter digitação simples ou dupla. Por exemplo, Pikachu é Electric
e Tyranitar é Rock/Dark
. A ordem dos tipos não importa. Um Pokémon não pode ter o mesmo tipo duas vezes. Uma jogada de ataque tem exatamente um dos 18 tipos acima.
Alguns tipos de Pokémon são fracos para um certo tipo de ataque. Por exemplo, um
Fire
Pokémon é fraco contraWater
ataques. Isso dá um multiplicador de dano de 2.Alguns tipos de Pokémon são resistentes a um certo tipo de ataque. Por exemplo, um
Rock
Pokémon é resistente a umNormal
ataque. Isso fornece um multiplicador de dano de 0,5.Alguns tipos de Pokémon são imunes a um certo tipo de ataque. Por exemplo, um
Flying
Pokémon é imune a umGround
ataque. Isso dá um multiplicador de dano de 0.
Um pokemon pode ser duplamente fraco, duplamente resistente ou qualquer outra combinação contra um tipo de ataque. Multiplique os multiplicadores para obter uma eficácia total.
Escreva um programa ou função que, devido ao tipo de movimento e à digitação de um Pokémon, produz o multiplicador de dano total do ataque. Uma digitação Pokémon é sempre escrita como A
ou A/B
, onde A
e B
são tipos distintos da lista acima. Você deve aceitar o Pokémon digitando neste formato. Além desta restrição, você pode receber sugestões de qualquer maneira razoável. Um exemplo de formato de entrada aceitável é:
"Ice", "Dragon/Flying"
Mas isso é inaceitável:
["Ice", ["Dragon", "Flying"]]
Sua saída deve ser exatamente uma das seguintes seqüências de caracteres, seguida por uma nova linha à direita opcional:
0x 0.25x 0.5x 1x 2x 4x
Exemplos
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
Efetividade do tipo
Para um gráfico de tipos voltado para o ser humano, eu gostaria de encaminhá-lo para a Gamepedia . Para tornar o processo de golfe um pouco mais rápido, darei a você uma matriz de eficácia compacta e amigável ao computador. Divida cada número por dois para obter o multiplicador verdadeiro (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
O menor código em bytes vence.
Respostas:
Pyth -
246245188 bytesCodifica a matriz com compactação de base, provavelmente usará indexação / hash modular para os índices da matriz, mas no momento não fiz nada de especial com eles.
Conjunto de Teste .
fonte
Java,
663 639582 bytesHá uma tabela de pesquisa simples que ocupa grande parte da sala. Ele apenas encontra os tipos corretos e os multiplica. Chame assim:
Com algumas quebras de linha, fica assim:
fonte
c="222...442".split(",");
for(String B:b)
fazer seu movimento loop for 24-15, poupando 9, e fazer o seu[b[i++]]
emB
para mais 7 poupança. Total de 16 economias!i
, preciso subtrair um mais tarde ou iniciá-lo-1
, um dos quais negaria esse byte salvo.JavaScript (ES6), 287
Eu não vi uma boa compactação dos tipos, então aqui está uma.
Ungolfed:
Ah, e aqui está o meu gráfico (lembre-se de que ele foi solicitado para que uma letra não corresponda a nenhuma das palavras listadas abaixo):
fonte
atob
, poderá salvar 26 bytes usandobtoa
isso. Ao codificá-lo, certifique-se de adicionar um caractere extra, pois este"...pew5"
se"...peww=="
deve ao alinhamento de bytes.Pontos, 868068 bytes
Foi uma idéia boa demais para ser ignorada. ( Obrigado, mbomb007. )
É basicamente uma tabela de pesquisa abaixo do ideal. Eu primeiro codifico cada tipo como
Isso resulta em representações exclusivas para cada tipo. O tipo vazio (quando o pokemon defensor tem apenas um único tipo) é codificado como
0x00
.Depois disso, apenas uso uma bagunça de
if-else
equivalentes para verificar todas as ~ 5800 combinações.Código
O Stack Exchange não me permitiu publicar o código como um todo, então aqui está o gzip + base64'd.
Exemplo
Aparentemente, o intérprete oficial do Pikalang ainda não está pronto, mas como é uma substituição trivial do Brainfuck, testei-o usando um intérprete do Brainfuck.
A entrada é separada por nova linha e requer uma nova linha à direita adicional.
O programa usa o local da memória -1, portanto, se o seu intérprete não permitir sair do lado esquerdo da fita, acrescente o código com a
pipi
ou a>
(para Pikalang e Brainfuck, respectivamente).Brainfuck, 193708
Aqui está o mesmo programa no Brainfuck (também compactado com gzip + base64'd).
O programa contém quatro partes:
Estrutura principal do programa
Aqui está o script que gera a tabela de pesquisa:
BTW, esta resposta leva 29817 bytes. :)
fonte
PIPI
pode ser interpretado como>
ou++
). Aparentemente, o BFC aparentemente exigiria uma classificação superior do código.C ++ 14,
420416A entrada deve ser stdin e estar no formato
Normal, Rock/Dragon
Versão ao vivo .
Com algum espaço em branco:
fonte
Tcl, 382
O script contém dados compactados, incluindo bytes não UTF-8. Aqui está o script exato codificado na base 64:
Usa o
zlib
comando para compactação.fonte
Lua,
758661633 bytesUngolfed:
Ligue com
f("Grass","Water/Flying")
fonte
m
diretamente, pois ele é referenciado apenas uma vez.m
ae
é mais barato, porquee
é usado algumas vezes.e={...}[r]
:? Porque eu tentei isso e não é legal: /Python 3-362
O formato de entrada é o tipo de movimentação e o tipo Pokemon, separados por espaços. Por exemplo
Fire Grass
, ouWater Steel/Electric
.A tabela é armazenada é uma sequência em que o índice de cada caractere está no intervalo de 40 a 103 e representa 3 combinações de tipos. A lista de tipos é armazenada como o 3º e o 4º (se existir) caracteres de cada tipo, que são comparados aos 3º e 4º caracteres de cada tipo digitado.
fonte
'rmghyiis...'.find(x[2:4])//2
em vez de"rm gh yi is ...".split().index(x[2:4])
e
eg
personagens .... talvez poderia ser usado três prefixos letras e você ainda tem algumas economias de.find(...)//3
contra.split().index(...)
/
dois tipos de Pokémons de dois tipos, por exemploSteel/Electric
.PHP, 426
Entrada de amostra:
Saída de amostra:
fonte