Введение
У Санты слишком много имен для обработки, и ему нужна ваша помощь! Он нуждается в вас , чтобы написать программу или функцию, которая выводит nice
, naughty
, very naughty
или very very naughty
. Чтобы определить, насколько он хорош или непослушен, Санта разработал алгоритм:
Ницца ( деление , математика ):
Прежде всего, мы получаем число из имени, добавляя все буквы вверх ( пробелы игнорируются ). Например:
Doorknob =
D = 4
o = 15
o = 15
r = 18
k = 11
n = 14
o = 15
b = 2
4 + 15 + 15 + 18 + 11 + 14 + 15 + 2 = 94
Если число делителей равно длине имени, человек считается nice
. Это означает, что ваша программа должна выводить [name] has been nice
. Здесь делителями 94
являются:
Divisors of 94: 1, 2, 47, 94
Есть 4
делители, но имя имеет длину 8
( пробелы включены ). Вывод, Doorknob
не было приятно. Итак, продолжаем наше путешествие:
Непослушный ( последовательность , математика ):
Санта разработал новую последовательность, рождественский номер . Сначала рассмотрим следующие елки:
n = 1 n = 2 n = 3 n = 4
*
***
*****
*******
*********
_ * ***
| *** *****
| ***** *******
* | ******* *********
* *** | *** ***
*** ***** n*n | ***** *****
* *** | ******* *******
***** | *** *********
* | ***** ***
|_******* *****
* *******
|_____| *********
2n+1 *
5 18 47 98
Количество звездочек определяет рождественский номер. Последовательность идет следующим образом : 5, 18, 47, 98, 177, ...
.
Отсюда можно сделать вывод, что 94
это не рождественский номер. Это значит, что Doorknob
он не просто был непослушным.
Очень непослушный ( строка ):
Для этого нам нужно выяснить, Doorknob
есть ли строка подъемной лестницы . Это определяется буквами в названии с A = 1
, B = 2
, C = 3
и т.д .:
Сначала мы посмотрим на первую букву D
. Это имеет значение 4
. Это наша отправная точка. Следующее письмо o
. Это имеет значение 15
, которое выше, чем наше предыдущее значение, поэтому мы идем на шаг выше по лестнице. Следующее значение также является o
. Это то же самое, поэтому мы ничего не делаем. Если следующее значение выше текущего значения, мы пойдем на шаг выше. Если следующее значение будет ниже текущего, мы пойдем ниже. Если это так, мы останемся на том же шаге. Это визуализируется Doorknob
, Martin Buttner
и Alex A
:
O
/ \
R N B
/ \ /
O-O K T N U L X
/ / \ / \ / \ / \ / \
D M R I B T-T A E A
\ / \
A N R
\ /
E
Вы можете видеть, что Doorknob
закончилось выше, чем стартовая позиция. Так Doorknob has been very naughty
. Martin Buttner
и Alex A
не стал выше, чем отправная точка. Так они оба very very naughty
.
Контрольные примеры
Input: Doorknob
Output: Doorknob has been very naughty
Input: Martin Buttner
Output: Martin Buttner has been very very naughty
Input: Jakube
Output: Jakube has been nice
Input: B
Output: B has been very very naughty
правила
- Вам необходимо предоставить программу или функцию, которая принимает данные (которые состоят как минимум из одной буквы).
- Ввод будет состоять из прописных букв , строчных букв и пробелов . Пробелы в процессе игнорируются, за исключением длины ввода.
- Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов!
n^3 + 2n^2 + 2
, кстати.
ZZZ...Z = 26 * 99 = 2574
означать, что вам нужно проверять только рождественские номера вплоть до n=13
. (Полезная информация для других игроков в гольф.)
Santa has been very very naughty
, Чего ждать?
Santa Claus has been very naughty
. Стоит также попробовать Святого Ника, Святого Николая, Святого Ника, Святого Николая, Криса Крингла, Деда Мороза, Пере Ноэля и всех других его псевдонимов - может быть, один из них подойдет? Хотя почему «хорошему» парню нужно так много псевдонимов, уже довольно подозрительно…