Dungeon Master - одна из первых ролевых игр в реальном времени, впервые выпущенная в 1987 году на Atari ST. Среди других захватывающих вещей того времени, он предложил довольно сложную систему заклинаний, основанную на рунах.
Ваша задача сегодня состоит в том, чтобы написать программу или функцию, которая оценивает количество очков маны, необходимое для наложения данного заклинания в Dungeon Master.
Система заклинаний - это верхний правый голубой прямоугольник на картинке выше.
Заклинания, руны и мана
Заклинания Мастера подземелий состоят из 2-4 рун, выбранных из следующих категорий, в точном порядке:
- Мощность (обязательно)
- Стихийное влияние (обязательно)
- Форма (необязательно)
- Класс / Выравнивание (необязательно)
Это означает, что действительными заклинаниями являются:
- Сила + Стихийное влияние
- Сила + Стихийное Влияние + Форма
- Сила + Стихийное Влияние + Форма + Класс / Выравнивание
Каждая категория содержит 6 рун, и каждая руна имеет связанную базовую стоимость маны:
=============================================================================
| Power | Rune | Lo | Um | On | Ee | Pal | Mon |
| +-----------+------+------+------+------+------+------+
| | Base cost | 1 | 2 | 3 | 4 | 5 | 6 |
=============================================================================
| Elemental Influence | Rune | Ya | Vi | Oh | Ful | Des | Zo |
| +-----------+------+------+------+------+------+------+
| | Base cost | 2 | 3 | 4 | 5 | 6 | 7 |
=============================================================================
| Form | Rune | Ven | Ew | Kath | Ir | Bro | Gor |
| +-----------+------+------+------+------+------+------+
| | Base cost | 4 | 5 | 6 | 7 | 7 | 9 |
=============================================================================
| Class / Alignment | Rune | Ku | Ros | Dain | Neta | Ra | Sar |
| +-----------+------+------+------+------+------+------+
| | Base cost | 2 | 2 | 3 | 4 | 6 | 7 |
=============================================================================
Оценка стоимости маны
Мана-стоимость заклинания равна сумме мана-стоимости всех рун:
Стоимость Силовой руны всегда равна ее базовой стоимости (от 1 до 6).
Для других рун применяется следующая формула:
где сила - базовая стоимость руны силы.
Примеры
Spell: Lo Ful
Cost : 1 + floor((1 + 1) * 5 / 2) = 1 + 5 = 6
Spell: Um Ful
Cost : 2 + floor((2 + 1) * 5 / 2) = 2 + 7 = 9
Spell: Pal Vi Bro
Cost : 5 + floor((5 + 1) * 3 / 2) + floor((5 + 1) * 7 / 2) = 5 + 9 + 21 = 35
Разъяснения и правила
- Ваш ввод будет состоять из 2-4 строк, обозначающих руны заклинания. Вы можете взять их в любом приемлемом формате, например, 4 различных параметра, массив строк (например
['Lo', 'Ful']
) или только одну строку с разделителем из одного символа на ваш выбор (например'Lo Ful'
). Пожалуйста, укажите выбранный формат ввода в вашем ответе. - Руны гарантированно действительны.
- Порядок категорий должен соблюдаться. Неиспользуемые категории могут отсутствовать или заменяться каким-либо ложным значением.
- Вы можете принять руны в любом из следующих форматов: 1. Заглавная буква, за которой следует нижний регистр (
'Ful'
) 2. Все строчные буквы ('ful'
) 3. Все прописные буквы ('FUL'
). Но вы не можете смешивать разные форматы. - Совершенно очевидно, что нам не важно знать, действительно ли заклинание имеет какой-то эффект в игре (любопытные, полезные заклинания перечислены здесь ).
- Это код-гольф , поэтому выигрывает самый короткий код в байтах.
- И помните: лорд Хаос наблюдает за вами!
Контрольные примеры
Spell | Output
---------------+-------
Lo Ful | 6
Um Ful | 9
On Ya | 7
Lo Zo Ven | 12
Pal Vi Bro | 35
Ee Ya Bro Ros | 31
On Ful Bro Ku | 31
Lo Zo Kath Ra | 20
On Oh Ew Sar | 35
Ee Oh Gor Dain | 43
Mon Zo Ir Neta | 68
Mon Des Ir Sar | 75
источник
Ответы:
SOGL V0.12 ,
11078 байтовПопробуй здесь!
Возможно, удастся сыграть в байт или два, переделав все
Объяснение:
источник
Python 2 ,
135119115 байтовПопробуйте онлайн!
Ввод списка строк из стандартного ввода
источник
05AB1E ,
8382 байтаПопробуйте онлайн!
-1 спасибо Эмигне .
СООООООО разгулялся :(
Объяснение:
источник
.•Y<εΔ•
начале, вам не нужно увеличивать индекс.JavaScript (ES6),
1571561161121009997 байтПринимает ввод как массив строк.
Попробуйте онлайн!
объяснение
Оу, мальчик, это будет весело - мои объяснения тривиальным решениям отстойны в лучшие времена! Давайте попробуем ...
Анонимная функция, принимающая массив в качестве аргумента через параметр
a
.Сократите элементы в массиве, передавая каждый через функцию;
t
параметр является нарастающим итогом, тоc
параметр является текущей строкой , и0
это начальное значениеt
.Преобразовать текущий элемент из базовой строки 36 в десятичное целое число.
Выполните несколько операций по модулю на нем.
Возьмите символ из строки по этому индексу и преобразуйте его в число.
Присвойте это число переменной
v
.Проверьте, является ли переменная
a
числом. Для первого элементаa
будет массив строк, попытка преобразовать его в число вернетNaN
, что неверно. На каждом последующем проходеa
будет положительное целое число, что является правдой.Если
a
это число, то мы умножаем его на значениеv
, добавляем значениеv
и сдвигаем биты результата на 1 бит вправо, что дает тот же результат, что и деление на 2 и наложение.Если
a
это не число, мы присваиваем ему значениеv
, что также дает нам0
возможность добавить к нашему итогу при первом проходе.Наконец, мы добавляем результат из тройной выше к нашему текущему итогу.
Оригинал, 156 байт
источник
a=>a.reduce((t,c)=>t+(v=+'27169735020045670435262'[parseInt(c,36)%141%83%50%23],+a?a*v+v>>1:a=v),0)
(РЕДАКТИРОВАТЬ: удалил нерелевантный комментарий о целых числах, переданных во входных данных - похоже, я не очень хорошо понял свой собственный вызов ^^)JavaScript,
212210207206 байтПрямой алгоритм поиска, строки поиска просто вносят вклад в общее количество байтов.
Код
Формат ввода
Строковый массив, каждый элемент является строкой с заглавной буквой. Пример: ["Mon", "Zo", "Ir", "Neta"]
объяснение
Это запрашивает основные расходы.
Инициализирует 2 переменные с первым элементом из массива, приведенного выше, и удаляет этот элемент. Сначала должен быть приведен к числу, иначе он будет рассматриваться как конкатенация строк в следующей части.
Добавляет стоимость неэнергетических рун к базовой силе. Сдвиг используется вместо пола (бла) / 2.
Оцените последний результат. (Предоставлено: Step Hen)
Тестовые случаи
Изменить 1: 212> 210 - Удалена пара скобок
Изменить 2: 210> 207 - Спасибо, Курица за напоминание о правилах JS и некоторые советы по использованию функции eval (). Поскольку AS3 запрещает использование eval (), я не использовал это в течение длительного времени
Изменить 3: 207> 206. - Спасибо Шегги за идею заменить indexOf () на search ()
источник
g
внутрьg
, мы разрешим JS ответы удалитьg=
. Кроме того, вы можете сохранить пару байтов, переключив их на eval и удаливreturn
: Fiddlesearch
сэкономит вам больше байтовindexOf
.Haskell ,
159156148133130127 байтПопробуйте онлайн!
источник
Python 2 ,
320 318 314 311307 байтФормат ввода - список строк. Полная программа:
Попробуйте онлайн!
источник
Excel, 339 байт
Входы вводятся
A1
черезD1
. Формула в любой другой клетке.Кроме того, импорт в формате CSV:
Excel & CSV, 228 байт
Ввод введен в первую строку,
SPACE
для нулей. Результат отображается в A3.источник
СКАЛА, 1106 символов, 1106 байтов
Это довольно долго, наверное, оптимизируемо, но это было весело делать :)
Формат ввода : разделенные пробелами руны в строке. Если есть только 2 входа (например, «Lo Ful»), мой код завершает его
while(k.length<4)k:+=""
(поэтому я могу сохранить 24 байта , изменив параметры, если мне потребуется, чтобы он был «ABC D»).while(k.length<4)k:+=""
Спасибо за этот великолепный вызов. Попробуйте онлайн!
источник
Язык программирования Шекспира , 4420 байт
Принимает ввод в виде строки в верхнем регистре.
Объяснение в ближайшее время ... На данный момент забавный факт:
Microsoft
является отрицательным существительным в SPL. Все другие принятые слова появились в произведениях Шекспира.Попробуйте онлайн!
источник
Java (OpenJDK 8) , 252 байта
Попробуйте онлайн!
Руны вводятся как
String[]
(массивString
) в форме первого регистра (первая буква заглавная, остальные строчные).Это стандартный метод «найти n-ю букву», с завихрением, которое существует
Ros
иRa
существует в 4-м сегменте. Я обработал это с помощью встроенной и явной заменыRa
наX
.источник
Сетчатка ,
124123 байтаПопробуйте онлайн! Ссылка включает в себя тестовые случаи. Принимает разделенные пробелом руны. Пояснение: На начальных этапах каждая руна просто конвертируется в цифру, которая затем конвертируется в унарную. Числа после первого умножаются на единицу больше, чем первое число, после чего первое число удваивается. На последнем этапе целое число делит весь результат на 2 и принимает сумму.
источник
С 274
Больше не одурачено:
Вам необходимо указать четыре аргумента командной строки - поэтому для первого теста вам нужно запустить
./a.out Lo Ful "" ""
источник
Go, 205 байт
Это вызываемая функция, которая принимает руны как кусочек строки, например
[]string{"Um", "Ful"}
.Попробуйте это на игровой площадке Go .
источник
Haskell, 623 байта
Использование ADT вместо числового вуду.
ПРИМЕЧАНИЕ: добавить 36 для
{-# LANGUAGE GADTs,ViewPatterns #-}
-XGADTs -XViewPatterns
Ввод: одно заклинание как обычная строка, например
Lo Ful
Um Ful
Multilining можно сделать, заменив последнюю строку
Но это добавит байтов к счету
источник