Введение
У Санты слишком много имен для обработки, и ему нужна ваша помощь! Он нуждается в вас , чтобы написать программу или функцию, которая выводит 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
. Стоит также попробовать Святого Ника, Святого Николая, Святого Ника, Святого Николая, Криса Крингла, Деда Мороза, Пере Ноэля и всех других его псевдонимов - может быть, один из них подойдет? Хотя почему «хорошему» парню нужно так много псевдонимов, уже довольно подозрительно…Ответы:
Pyth 86 байт
Видимо, я был хорош в этом году ...
Попробуйте онлайн: демонстрация или тестовый набор
Объяснение:
источник
CJam,
109108107 байтПопробуйте онлайн.
объяснение
Полное объяснение придется подождать позже, но вот код, разбитый на различные разделы:
источник
MATL , 117 байт
Моя самая длинная программа MATL до сих пор :-) :-(
Использует текущий выпуск языка, который является более ранним, чем этот вызов.
Примеры
объяснение
источник
Lua,
371284 байтаЯ уверен, что есть возможности для улучшения, я хотел бы вырезать некоторые, если.
Редактировать: 4 месяца спустя, я много узнал о Луа и хотел вернуться к этому представлению, я справился хорошо: вырезал 87 байтов!
Ungolfed
Старое 371 байтовое решение
Беззвучная версия :)
источник
Серьезно, 138 байт
Шестнадцатеричный дамп:
Попробуйте онлайн
Трудно эффективно сыграть в эту игру из-за сложности и сложности управления потоком. Помогает возможность вложения функций без использования регистров. (Я полагаю, что это уже может быть несколько сокращено за счет разумного использования хранимых функций, но это приведет к такому коду спагетти, что у меня не хватит смелости попробовать это).
Объяснение:
источник
Python 2, 249 байт
источник