Introducción
¡Santa tiene demasiados nombres para procesar y necesita tu ayuda! Él necesita que usted pueda escribir un programa o una función, que da salida nice
, naughty
, very naughty
o very very naughty
. Para determinar cuán agradable o travieso es alguien, Santa había desarrollado un algoritmo:
Niza ( división , matemática ):
En primer lugar, obtenemos un número del nombre sumando todas las letras ( espacios ignorados ). Por ejemplo:
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
Si el número de divisores es igual a la longitud del nombre, se considera a la persona nice
. Esto significa que su programa debería salir [name] has been nice
. Aquí, los divisores de 94
son:
Divisors of 94: 1, 2, 47, 94
Hay 4
divisores, pero el nombre tiene longitud 8
( espacios incluidos ). Conclusión, Doorknob
no ha sido agradable. Entonces continuamos nuestro viaje:
Travieso ( secuencia , matemática ):
Santa ha desarrollado una nueva secuencia, el número de navidad . Primero, veremos los siguientes árboles de navidad:
n = 1 n = 2 n = 3 n = 4
*
***
*****
*******
*********
_ * ***
| *** *****
| ***** *******
* | ******* *********
* *** | *** ***
*** ***** n*n | ***** *****
* *** | ******* *******
***** | *** *********
* | ***** ***
|_******* *****
* *******
|_____| *********
2n+1 *
5 18 47 98
La cantidad de asteriscos determina el número de navidad. La secuencia va de la siguiente manera: 5, 18, 47, 98, 177, ...
.
A partir de aquí, podemos concluir que 94
no es un número de Navidad. Eso significa que Doorknob
no solo ha sido malo.
Muy travieso ( cuerda ):
Para esto, necesitamos averiguar si se Doorknob
trata de una cadena de escalera ascendente . Esto se determina por las letras en el nombre con A = 1
, B = 2
, C = 3
, etc .:
Primero veremos la primera letra, la D
. Esto tiene valor 4
. Este es nuestro punto de partida. La siguiente letra es o
. Esto tiene el valor 15
, que es más alto que nuestro valor anterior, por lo que vamos un paso más arriba en la escalera. El siguiente valor también es un o
. Esto es lo mismo, así que no estamos haciendo nada. Si el siguiente valor es más alto que el valor actual, iremos un paso más arriba. Si el siguiente valor es más bajo que el valor actual, iremos más bajo. Si es lo mismo, nos mantendremos en el mismo paso. Esto visualiza para Doorknob
, Martin Buttner
y 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
Puede ver que Doorknob
terminó más alto que la posición inicial. Por lo tanto Doorknob has been very naughty
. Martin Buttner
y Alex A
no llegó más alto que el punto de partida. Entonces son los dos very very naughty
.
Casos de prueba
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
Reglas
- Debe proporcionar un programa o una función que tome entrada (que consiste en al menos una letra).
- La entrada consistirá en letras mayúsculas , minúsculas y espacios . Los espacios se ignoran durante el proceso, excepto por la longitud de la entrada.
- Este es el código de golf , por lo que gana el envío con la menor cantidad de bytes.
n^3 + 2n^2 + 2
, por cierto.ZZZ...Z = 26 * 99 = 2574
, lo que significa que solo necesita verificar los números de Navidad hasta e inclusiven=13
. (Información útil para otros golfistas.)Santa has been very very naughty
. ¿Esperar lo?Santa Claus has been very naughty
. También debería probar Saint Nick, Saint Nicholas, St. Nick, St. Nicholas, Kris Kringle, Papá Noel, Pere Noel y todos sus otros alias, ¿tal vez uno de ellos funcionará? Sin embargo, por qué un "buen" tipo debería necesitar tantos alias ya es bastante sospechoso ...Respuestas:
Pyth 86 bytes
Aparentemente he sido bueno este año ...
Pruébelo en línea: Demostración o conjunto de pruebas
Explicación:
fuente
CJAM,
109108107 bytesPruébalo en línea.
Explicación
Una explicación completa tendrá que esperar hasta más tarde, pero aquí está el código desglosado en las diferentes secciones:
fuente
MATL , 117 bytes
Mi programa MATL más largo hasta ahora :-) :-(
Utiliza la versión actual del lenguaje, que es anterior a este desafío.
Ejemplos
Explicación
fuente
Lua,
371284 bytesEstoy seguro de que hay margen de mejora, me gustaría eliminar algunos si.
Editar: 4 meses después, aprendí mucho sobre lua y quería volver a esta presentación, lo hice bien: ¡recorté 87 bytes!
Sin golf
Antigua solución de 371 bytes
Versión sin golf :)
fuente
En serio, 138 bytes
Hex Dump:
Pruébalo en línea
Es difícil jugar golf de manera efectiva debido a la dificultad del control de flujo complicado en serio. La capacidad de anidar funciones sin el uso de registros ayudaría. (Me imagino que esto ya podría acortarse un poco mediante el uso juicioso de las funciones almacenadas, pero daría como resultado un código de espagueti que no tengo el corazón para intentarlo).
Explicación:
fuente
Python 2, 249 bytes
fuente