¡Un hombre de las estrellas ha venido a la Tierra! Afortunadamente, el presidente de los Estados Unidos, Donald Trump, tiene un dado infinito. ¡Usando este dado, puede evocar un número que usted , el alcalde de Podunk , debe usar para determinar quién debe ser enviado para detener al invasor! ¡Pero tenga cuidado, solo puede enviar una cantidad limitada de bytes en la parte posterior de su rana !
Dada una entrada del usuario (que será un número entero positivo), debe devolver una cadena dependiendo de en qué categoría se encuentre el número.
- Si el número es un número de Fibonacci , debe generar Ness .
- Si el número es un número de Lucas , debe generar Lucas .
- Si el número es tanto un número de Lucas como un número de Fibonacci , debe generar Travis .
- Si el número no es un número de Lucas ni un número de Fibonacci , debe generar Pippi .
Ejemplos
Aquí hay un montón de casos de prueba:
1 => Travis 2 => Travis 3 => Travis 4 => Lucas 5 => Ness 6 => Pippi 7 => Lucas 8 => Ness 610 => Ness 722 => Pippi 843 => Lucas
Reglas
- Este es el código de golf , gana la respuesta más corta en bytes.
- Su programa puede ser un programa completo o una función (no anónima).
Bonos
Hay un par de bonos que puedes usar para ayudar a tu rana a llevar los datos al presidente Trump más rápido:
- Para
-15
bytes: si el número de entrada es2016
, debe dar salidaTrump
, ya que él está en la cima de su presidencia.
0, 1
mientras otras comienzan1, 1
, creo que esto depende de la definición que use. No es raro ver que los números de Lucas comienzan2, 1
, por ejemplo, OEIS tiene ambas versiones ( 1 , 2 ), pero la que comienza con 2 es la fase de definición que ha seguido.Respuestas:
Pyth, 59-15 = 44 bytes
o 42 bytes después de que se solucionó un error
Hexdump:
Los primeros dos caracteres (
&Q
) son necesarios debido a un error de análisis de Pyth que se produceQ
después del."
error. Se ha aplicado la corrección. Si el intérprete post-corrección de errores está permitido, -2 bytes.Sin compresión de cadena ilegible:
Pyth, 63-15 = 48 bytes
49 bytes sin Trump
Banco de pruebas
Bastante sencillo, solo genera las secuencias, duplica una y verifica la membresía.
Las secuencias se generan comenzando con
[1, 2]
y[2, 1]
, y luego aplicando la regla de Fibonacci.fuente
Julia,
146142121120 bytesEsto crea una función sin nombre que devuelve un valor booleano. Para llamarlo, dale un nombre, por ejemplo
f=n->...
.Sin golf:
Se solucionó un problema y se guardaban 7 bytes gracias a Glen O!
fuente
Mathematica
143156-15(bonificación) = 141 bytesCon 2 bytes guardados gracias a LegionMammal978.
fuente
False
yTrue
puede ser reemplazado1<0
y1>0
respetuosamente.Mathematica,
9287 bytesInspirado por la respuesta de Sp3000 .
fuente
Pitón 2, 107
La clave son dos controles puramente aritméticos para los números de Fibonacci y Lucas:
n
es un número de Fibonacci exactamente si5*n*n+4
o5*n*n-4
es un cuadrado perfecton
es un número de Lucas exactamente si5*n*n+20
o5*n*n-20
es un cuadrado perfectoEste sitio tiene bocetos de prueba .
Entonces, la salida depende de los valores de
5*n*n+i
fori
in{4,-4,20,-20}
. La funciónf
prueba un valor dei
, verificando si el valor correspondiente no tiene una raíz cuadrada de número entero Elabs
está ahí solo para evitar un error de tomar la raíz de un negativo paran=1, i=-20
.La función
f
toma el valor del númeron
para probar desde STDIN. Python solo evalúa esto una vez, no una vez por llamada de función.Si el número no es Fibonacci se evalúa como el
f(4)*f(-4)
uso de la conversión implícita booleana a número y, de manera similar, no para Lucas, y se toma la cadena correspondiente. Si se permitieran espacios finales, el entrelazado de cuerdas sería más corto.fuente
Python 2, 117 bytes
Para la lista de cadenas,
"Pippi Lucas Ness Travis".split()
tiene la misma longitud.fuente
CJam,
585554 bytesEnfoque ingenuo de generar los números de Fibonacci y Lucas y luego contar las ocurrencias en ambos, convertir a binario y elegir la cadena adecuada.
Pruébalo en línea .
fuente
En serio, 69 bytes
Antes de este desafío, en serio tenía el builtin incorporado
f
(índice en números de Fibonacci, -1 si no un número de Fibonacci) ... ¡pero no indexado en una lista o "está en la lista"! (Desde entonces se ha agregado comoí
.)Como resultado, esto es lo que paso buscando si la entrada es un número de Fibonacci:
Esto es lo que paso generando una lista de números de Lucas:
Y esto es lo que paso buscando si la entrada está en la lista de números de Lucas:
Esa es una cadena que se formatea usando la notación% de Python en algo así
:610:=
, y se convierte en una función, que luego se asigna sobre la matriz y se suma. (Los números de Lucas son únicos, por lo que la suma siempre es 0 o 1.)Gracias a @Mego por ese último bit con el formato de cadena.
fuente
Perl,
133(146-15 =) 131(144-15 =) 129(136-15 =) 121 bytes+1 byte para la
-n
bandera.Con líneas nuevas después de punto y coma, para facilitar la lectura:
Manifestación:
Trucos:
Es posible que se pregunte por qué mi variables se denominan$a
,$b
,$%
, y$d
. ¡Esa es una excelente pregunta! De hecho, me permite guardar un byte.es un byte más corto que
Esto ya no se aplica porque jugué mi código reorganizando las cosas, lo que provocó que el cambio de nombre de la variable dejara de guardar bytes. Lo cambié de nuevo para que los nombres de las variables tengan sentido nuevamente.$_-2?$f+$l*2:3
Es ligeramente interesante. Básicamente, tuve que hacer un caso especial2
para los números de Lucas porque mi programa verifica si un número es un número de Lucas después de "actualizar" los números de Fibonacci y Lucas. Entonces2
se consideró un número que no era Lucas.$_-2?foo:bar
es un char más corto que$_==2?bar:foo
. Lo mismo se usa para la2016
prueba.Esto ya no es así porque pude reestructurar el programa para que no requiriera una carcasa especial
2
. Pero todavía uso en$_-2016?stuff:Trump
lugar de$_==2016?Trump:stuff
, que es un byte más.Hablando de eso, te estarás preguntando cómo hice esta reestructuración. Acabo de hacer que el programa haga 9 veces más iteraciones de las necesarias, lo que solo cuesta 2 bytes (
*9
) pero me permite hacer suposiciones en otros lugares que ayudan a las cosas del golf.Debido a que las variables tienen un valor predeterminado de cero,
es más corto que
Perl admite palabras vacías, por lo que no tengo que citar ninguna de mis cadenas (\ o /).
fuente
-n
bandera (como se indica en la respuesta).-n
bandera?while(<>) { ... }
ciclo alrededor de su programa. Ver: documentos de Perl .Julia,
101100 bytesSin golf:
fuente
{}
sintaxis alternativaAny[]
esté en desuso; eso ahorraría un par de bytes.Octava, 93 bytes
Este enfoque es similar a mi respuesta de MATLAB con la excepción de que Octave le permite indexar directamente en una matriz nueva:
fuente
MATL (no competidor),
575554(67-15) = 52 bytesPruébalo en línea!
Explicación
Nuevamente, una lógica similar a mis otras respuestas aquí y aquí .
fuente
C ++ 11, 176 + 15 (#include) = 191
Ungolfed con el uso. Puedo agregar una explicación si me lo solicitan mañana, ¡vaya a la cama ahora!
fuente
Javascript (ES6), 108 bytes
Misma función para Fibonnacci y Lucas. Es una función recursiva que toma los dos primeros valores como init.
fuente
Java, 151 bytes
Se podría argumentar que Trump nunca externalizaría esta decisión crucial, por lo que no tendríamos que hacer público el método, ahorrando otros 7 bytes.
Sin golf, incluida la invocación de prueba principal
Hasta ahora no encontré ninguna manera de probar para 2016 y devolver "Trump" en el código que tiene menos de 15 bytes en el código.
fuente
C (gcc) ,
128120116110 bytesPruébalo en línea!
Explicación
Vamos a nombrar
F(n)
el enésimo número de Fibonacci yL(n)
el enésimo número de Lucas.a
,b
sonF(n-1)
,F(n)
respectivamente.Luego podemos calcular
L(n) == F(n-1)+F(n+1) == 2*F(n-1) + F(n) == 2*a+b
Esta función calculará sucesivamente los números de Fibonacci y Lucas, hasta
n
, y verificará sin
es alguno de ellos.Si
n
es un número de Fibonacci, el primer bit deo
se establecerá en1
Si
n
es un número de Lucas, el segundo bit deo
se establecerá en1
o
luego se utilizará para determinar qué nombre emitirEditar
a<b<c
ya<a+c=L(n)
, entonces( b<=n || a+c<=n ) => a<n
. En realidad necesitabaa<=n
manejarlo correctamenten=1
c
, igual aF(n+1)
, que era inútil ya que ya podemos calcularF(n+1)
cona
yb
fuente
b+=a
lugar deb=a+b
Perl 5.10, 119-15 (bonificación) = 104 bytes
Sin golf:
Esto explota el hecho de que
es el mayor número de Lucas menor o igual que F (n).
fuente
Groovy, 149 bytes
Código de prueba:
g
es un cierre que genera una lista de números basada en una semilla (s
) y un valor máximo (m
).(g(i,[1,1]).contains(i)?1:0)+(g(i,[2,1]).contains(i)?2:0)
encuentra el índice a utilizar en función del número que son lucas o fibonacci.fuente
MATLAB,
122119 bytesBreve explicacion
Primero creamos una matriz de celdas que contiene los valores para imprimir:
{'Pippi', 'Lucas', 'Ness', 'Travis'}
. Luego, para determinar qué valor mostrar, verificamos sin
es un número de Fibonacci o Lucas.Para Fibonnaci, utilizamos la siguiente fórmula:
Esto verifica si alguno
5*n^2 + 4
o5*n^2 - 4
es un cuadrado perfecto. Si algunoany
de ellos es, entonces es un número de Fibonacci.La fórmula para un número de Lucas es muy similar con la excepción de que usamos +/- 20 en lugar de 4:
En esta solución combiné estos dos casos en uno usando la matriz:
Al aplicar la misma ecuación que las anteriores, pero forzar
any
a considerar solo la primera dimensión, obtengo una matriz lógica de dos elementos donde si el primer elemento estrue
, entonces es un número de Lucas y si el segundo elemento estrue
, es un número de Fibonacci .Luego, para calcular el índice en mi matriz de celdas inicial, trato esto como una secuencia binaria realizando la multiplicación de este elemento booleano con
[2^0, 2^1]
o simplemente[1,2]
. Y suma los elementos. Obviamente tengo que agregar 1 debido a la indexación basada en uno de MATLAB.Luego tengo que usar
subsref
esubstruct
indexar en la matriz de celdas inicial para obtener el resultado final.fuente
JavaScript (ES6), 97 bytes
El
a==1
cheque es necesario, de lo contrario no noto que 1 es un número de Lucas.fuente
Jelly , 47 bytes - 15 = 32 (¿no compite ...?)
Pruébalo en línea!
fuente
05AB1E ,
3937 (52 - 15 bonus) bytesPruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente