Introdução
Papai Noel tem muitos nomes para processar e precisa de sua ajuda! Ele precisa de você para escrever um programa ou uma função, que gera nice
, naughty
, very naughty
ou very very naughty
. Para determinar como alguém é legal ou malcriado, o Papai Noel desenvolveu um algoritmo:
Nice ( divisão , matemática ):
Primeiro, obtemos um número do nome adicionando todas as letras ( espaços ignorados ). Por exemplo:
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
Se o número de divisores for igual ao comprimento do nome, a pessoa será considerada nice
. Isso significa que seu programa deve ser exibido [name] has been nice
. Aqui, os divisores de94
são:
Divisors of 94: 1, 2, 47, 94
Existem 4
divisores, mas o nome tem comprimento 8
( espaços incluídos ). Conclusão, Doorknob
não tem sido bom. Então, continuamos nossa jornada:
Impertinente ( sequência , matemática ):
Papai Noel desenvolveu uma nova sequência, o número de natal . Primeiro, veremos as seguintes árvores de natal:
n = 1 n = 2 n = 3 n = 4
*
***
*****
*******
*********
_ * ***
| *** *****
| ***** *******
* | ******* *********
* *** | *** ***
*** ***** n*n | ***** *****
* *** | ******* *******
***** | *** *********
* | ***** ***
|_******* *****
* *******
|_____| *********
2n+1 *
5 18 47 98
A quantidade de asteriscos determina o número de natal. A sequência é a seguinte:5, 18, 47, 98, 177, ...
.
A partir daqui, podemos concluir que 94
não é um número de natal. Isso significa que Doorknob
não foi apenas desobediente.
Muito travesso ( corda ):
Para isso, precisamos descobrir se Doorknob
é uma corda de escada de elevação . Isto é determinado pelas letras no nome com A = 1
, B = 2
, C = 3
, etc .:
Primeiro, vamos olhar para a primeira letra, a D
. Isso tem valor 4
. Este é o nosso ponto de partida. A próxima letra é o
. Isso tem o valor 15
, que é maior que o nosso valor anterior, portanto, vamos dar um passo mais alto na escada. O próximo valor também é um o
. É o mesmo, então não estamos fazendo nada. Se o próximo valor for maior que o valor atual, iremos um passo mais alto. Se o próximo valor for menor que o valor atual, iremos um valor inferior. Se for o mesmo, permaneceremos no mesmo passo. Este visualizado por Doorknob
, Martin Buttner
e 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
Você pode ver que Doorknob
terminou mais alto que a posição inicial. Então Doorknob has been very naughty
. Martin Buttner
eAlex A
não superou o ponto de partida. Então eles são os dois very very naughty
.
Casos de teste
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
Regras
- Você precisa fornecer um programa ou função que receba entrada (que consiste em pelo menos uma letra).
- A entrada será composta por letras maiúsculas , minúsculas e espaços . Os espaços são ignorados durante o processo, exceto pelo comprimento da entrada.
- Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
n^3 + 2n^2 + 2
, btw.ZZZ...Z = 26 * 99 = 2574
, o que significa que você só precisa verificar os números de Natal até e inclusiven=13
. (Informações úteis para outros jogadores de golfe.)Santa has been very very naughty
. Espere o que?Santa Claus has been very naughty
. Também deve tentar São Nick, São Nicolau, São Nick, São Nicolau, Kris Kringle, Pai Natal, Pere Noel e todos os outros pseudônimos - talvez um deles funcione? Embora por um "bom" cara deve precisar de tantos aliases já é muito suspeito ...Respostas:
Pyth 86 bytes
Aparentemente eu fui legal esse ano ...
Experimente on-line: Demonstration or Test Suite
Explicação:
fonte
CJam,
109108107 bytesExperimente online.
Explicação
Uma explicação completa terá que esperar até mais tarde, mas aqui está o código dividido nas diferentes seções:
fonte
MATL , 117 bytes
Meu programa MATL mais longo até agora :-) :-(
Usa a versão atual do idioma, anterior a esse desafio.
Exemplos
Explicação
fonte
Lua,
371284 bytesTenho certeza de que há espaço para melhorias, gostaria de eliminar alguns "se".
Edit: 4 meses depois, eu aprendi muito sobre lua e queria voltar a esta submissão, eu fiz bem: recortei 87 bytes!
Ungolfed
Solução antiga de 371 bytes
Versão ungolfed :)
fonte
Sério, 138 bytes
Hex Dump:
Experimente Online
É difícil jogar isso de maneira efetiva, devido à dificuldade do controle de fluxo complicado. A capacidade de aninhar funções sem o uso de registros ajudaria. (Imagino que isso já possa ser abreviado através do uso criterioso das funções armazenadas, mas resultaria em um código de espaguete que não tenho coragem de tentar.)
Explicação:
fonte
Python 2, 249 bytes
fonte