У покемонов есть 18 видов:
Normal Fighting Flying Poison Ground Rock
Bug Ghost Steel Fire Water Grass
Electric Psychic Ice Dragon Dark Fairy
Покемон может иметь одинарный или двойной тип ввода. Например, Пикачу есть Electric
, а Тиранитар есть Rock/Dark
. Порядок типов не имеет значения. У покемона не может быть одного и того же типа дважды. Атакующий ход имеет ровно один из перечисленных выше 18 типов.
Некоторые типы покемонов слабы для определенного типа атаки. Например,
Fire
Покемон слаб противWater
атак. Это дает множитель урона 2.Некоторые типы покемонов устойчивы к определенному типу атак. Например,
Rock
Покемон устойчив кNormal
атаке. Это дает множитель урона 0,5.Некоторые типы покемонов невосприимчивы к определенному типу атак. Например,
Flying
Покемон невосприимчив кGround
атаке. Это дает множитель урона 0.
Покемон может быть вдвойне слабым, вдвойне стойким или любой другой комбинацией против атакующего типа. Умножьте множители, чтобы получить полную эффективность.
Напишите программу или функцию с заданным типом хода и типом покемона, который выводит множитель общего урона атаки. Типирование покемонов всегда пишется либо как, A
либо A/B
, где A
и B
являются отличными типами из списка выше. Вы должны принять ввод покемонов в этом формате. Помимо этого ограничения, вы можете принять участие любым разумным способом. Пример допустимого формата ввода:
"Ice", "Dragon/Flying"
Но это недопустимо
["Ice", ["Dragon", "Flying"]]
Ваш вывод должен быть точно одной из следующих строк, сопровождаемых дополнительным завершающим переводом строки:
0x 0.25x 0.5x 1x 2x 4x
Примеры
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
Тип эффективности
Для удобной для человека типовой диаграммы я бы хотел отослать вас в Gamepedia . Чтобы ускорить процесс игры в гольф, я дам вам сжатую компьютерную матрицу эффективности. Разделите каждое число на два, чтобы получить истинный множитель (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
Самый короткий код в байтах побеждает.
Ответы:
Pyth -
246245188 байтКодирует матрицу с базовым сжатием, вероятно, будет использовать модульное индексирование / хеширование для индексов матрицы, но сейчас я ничего такого не сделал.
Тестовый пакет .
источник
Java,
663 639582 байтаЕсть простой справочный стол, который занимает большую часть комнаты. Он просто находит правильные типы и умножает их. Назовите это так:
С некоторыми переносами строк это выглядит так:
источник
c="222...442".split(",");
for(String B:b)
сделать свой для цикла идут от 24 до 15 лет , экономя 9, и сделать свой[b[i++]]
INTOB
для более 7 сбережений. Всего 16 сбережений!i
, мне нужно будет либо вычесть один позже или начать его с того-1
, что сведет на нет этот сохраненный байт.JavaScript (ES6), 287
Я не видел хорошего сжатия типов, так что вот один.
Ungolfed:
О, и вот мой график (помните, что он упорядочен так, чтобы буква не соответствовала ни одному из перечисленных ниже слов):
источник
atob
, вы можете сохранить 26 байтов, используяbtoa
для этого. При кодировании это просто убедитесь , чтобы добавить дополнительный характер , поскольку"...pew5"
становится"...peww=="
из - за выравнивания байтов.Пикаланг, 868068 байт
Это была слишком хорошая идея, чтобы пропустить. ( Спасибо, mbomb007. )
Это в основном неоптимальная таблица поиска. Я сначала кодирую каждый тип как
Это приводит к уникальным представлениям для каждого типа. Пустой тип (когда защищающийся покемон имеет только один тип) кодируется как
0x00
.После этого я просто использую кучу
if-else
эквивалентов, чтобы проверить все ~ 5800 комбинаций.Код
Stack Exchange не позволил мне опубликовать код в целом, так что вот он gzipped + base64'd.
пример
Видимо, официальный переводчик Пикаланга еще не готов, но, поскольку это тривиальная замена Brainfuck, я протестировал его с помощью интерпретатора Brainfuck.
Ввод разделен новой строкой и требует дополнительного завершающего перевода новой строки.
Программа использует ячейку памяти -1, поэтому, если ваш интерпретатор не разрешает уходить с левой стороны ленты, добавьте код с помощью a
pipi
или a>
(для Pikalang и Brainfuck соответственно).Brainfuck, 193708
Вот та же самая программа в Brainfuck (также gzipped + base64'd).
Программа состоит из четырех частей:
Основная структура программы
Вот скрипт, который генерирует таблицу поиска:
Кстати, этот ответ занимает 29817 байт. :)
источник
PIPI
может быть интерпретирован как>
или++
). Кроме того, BFC, очевидно, потребует прописных букв кода.С ++ 14,
420416Ввод должен быть в стандартный ввод и должен быть в форме
Normal, Rock/Dragon
Живая версия .
С некоторыми пробелами:
источник
Tcl, 382
Скрипт содержит сжатые данные, включая байты не-UTF-8. Вот точный скрипт, закодированный в базе 64:
Использует
zlib
команду для сжатия.источник
Lua,
758661633 байтаUngolfed:
Позвони с
f("Grass","Water/Flying")
источник
m
напрямую, поскольку на него ссылаются только один раз.m
кe
дешевле, потому чтоe
используется пару раз.e={...}[r]
? Потому что я попробовал это, и это не законно: /Питон 3 - 362
Формат ввода - это тип перемещения и тип Pokemon, разделенные пробелами. Например
Fire Grass
, илиWater Steel/Electric
.В таблице хранится строка, где индекс каждого символа находится в диапазоне от 40 до 103 и представляет 3 комбинации типов. Список типов хранится в виде 3-го и 4-го (если он существует) символов каждого типа, которые сравниваются с 3-м и 4-м символами каждого введенного типа.
источник
'rmghyiis...'.find(x[2:4])//2
вместо"rm gh yi is ...".split().index(x[2:4])
e
иg
символов .... можно было бы использовать три буквы префиксов и вы все еще есть некоторые сбережения от в.find(...)//3
сравнении.split().index(...)
/
двух типов для покемонов двойного типа, напримерSteel/Electric
.PHP, 426
Пример ввода:
Пример вывода:
источник