Редактировать : я раньше не играл в D & D, поэтому, когда я изначально задавал этот вопрос, я не исследовал его должным образом. Я прошу прощения за это, и я делаю несколько правок, которые могут сделать недействительными ответы, чтобы остаться максимально правдивыми к правилам dnd 5e. Сожалею.
Фанат D & D из недавнего Горячего Сетевого Вопроса, похоже, испытывает некоторые затруднения, решая, соответствуют ли выбранные заклинания колдуна возможностям - и я думаю, что мы должны помочь!
Введение
(все это уже описано в ранее упомянутом вопросе)
Колдун знает два заклинания уровня 1 с самого начала (уровень 1): [1, 1]
Каждый раз, когда колдун получает уровень (за исключением уровней 12, 14, 16, 18, 19 и 20), он изучает новое заклинание (обязательно).
Кроме того, при повышении уровня можно выбрать (необязательно) заменить одно из заклинаний другим.
Изученные и замененные заклинания должны быть действительным уровнем ячейки заклинания, который на половину округлен до уровня вашего колдуна. Смотрите эту таблицу:
Sorcerer level Highest spell level possible
1 1
2 1
3 2
4 2
5 3
6 3
7 4
8 4
9 5
10 5
11 6
12 6
13 7
14 7
15 8
16 8
17 9
18 9
19 9
20 9
Это означает, что на уровне 3 можно иметь уровни заклинаний, [1, 1, 2, 2]
подобные этим:
Level 1: [1, 1] (initial)
Level 2: [1, 1, 1 (new)]
Level 3: [1, 1, 2 (replaced), 2 (new)]
Не обязательно выбирать заклинания самого высокого уровня, к которым у вас есть доступ.
Уровни заклинаний [1, 1, 1, 1]
идеально подходят для уровня 3.
Наконец, помните, что замена заклинания является необязательной опцией для каждого уровня . Это означает, что некоторые уровни могут пропустить замену, в то время как другие используют ее.
Соревнование
Создайте программу или функцию, которая принимает целое число (уровень) от 1 до 20.
Он также должен принимать массив целых чисел (уровней заклинаний) со значениями от 1 до 9 в любом порядке (9 - максимальный уровень заклинания).
Выходные данные программы должны быть истинными / ложными, подтверждающими, если выбранные уровни заклинаний действительны для колдуна данного уровня.
Контрольные примеры
Level: 1
Spells: [1, 1]
Output: true
Level: 8
Spells: [1, 1, 2, 3, 3, 5]
Ouput: false
Reason: A level 8 can't ever have access to a level 5 spell.
Level: 5
Spells: [1, 1, 1, 2, 2, 2, 3]
Output: false
Reason: A level 5 can't have access to 7 spells
Level: 11
Spells: [3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6]
Output: false
Reason: Too many spell upgrades.
The highest valid selection for level 11 is
[3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6]
Это код-гольф - побеждает меньше байтов!
источник
[2,2,3,3]
были бы невозможны, так как для этого требуется больше замены, чем было бы у колдуна этого уровня». - разве тот факт, что длина списка 4, а не 5, не является здесь более фундаментальной причиной? (Я предполагаю, что[1,3,2,2,3]
это возможно для уровня 4, перейдя с уровня 3[1,1,2(replaced),2(new)]
на[1,3(replaced),2,2,3(new)]
?)Ответы:
Java (JDK 10) , 191 байт
Попробуйте онлайн!
Пояснения
Таблица 1: Максимальное распределение заклинаний для каждого уровня колдуна, использованное в ответе Аксорена на связанный вопрос .
кредиты
источник
return l<1&java.util.Arrays.equals(m,new int[9]);
может бытьz=0;for(int i:m)z+=i;return l+z==0;
вместо. Или, если значения вm
конце никогда не могут быть отрицательными,==0
может быть<1
.for(int i:m)l|=i;
еще умнее! Хороший.new int[]{5,6,6,6,7,7,7,8,8,8,9,9,9,9,9}
). Если я введу их по убыванию (new int[]{9,9,9,9,9,8,8,8,7,7,7,6,6,6,5}
как написано в требовании ввода, которое я написал под полем для гольфа), это сработает. Я добавил тестовый пример, чтобы показать, что он действительно работает.Python 3 , 98 байт
Попробуйте онлайн!
Ungolfed:
редактировать: исправленное решение для использования правильных правил D & D
источник
print(v(20, [6,6,6,6,7,7,7,8,8,8,9,9,9,9,9])) # False
печатает правда. Это должно напечатать false.min(9,n-1)
одно.Древесный уголь , 51 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Принимает уровни заклинаний в порядке возрастания в виде строки. Объяснение:
Введите уровень.
Выполните декодирование длины строки для строки, в
0544443335
результате чего получится строка11111222233334444555566677788899999
. Затем эта строка разрезается, начиная с уровня (индексируется 1) и заканчивая удвоенным уровнем (если меньше 12) или 6 + 1,5 *, округленным в большую сторону, за исключением уровня 19, который округлен в меньшую сторону.0
Суффикс A означает, что заклинаний не слишком много.Сравните уровни заклинаний с подстрокой и напечатайте a,
-
если ни один из них не является чрезмерным.источник
11113
на уровне,4
который является результатом отсутствия дополнительных улучшений, принимая1
на уровне 2,1
на уровне 3 и3
на уровне 4.JavaScript (ES6), 79 байт
(level)(array)
Попробуйте онлайн!
Тестовый код
Ниже приведена ссылка на некоторый тестовый код, который принимает уровень колдуна в качестве входных данных и возвращает массив максимальных уровней заклинаний, используя ту же логику, что и вышеописанная функция.
Попробуйте онлайн!
Как?
Справочная таблица
Количество заклинаний
Максимальные уровни заклинаний
источник
Groovy , 155 байт
Создает лучшую книгу заклинаний, а затем проверяет, что книга заклинаний, переданная в метод, не лучше.
Ungolfed, с неявными типами, сделанными явными:
Попробуйте онлайн!
источник