EDITAR: aceptaré una respuesta el lunes 15/02/2016. ¡Que los bytes estén siempre a tu favor!
En su desafío "Imprima la secuencia de N-Bonacci" , @DJMcGoathem describe las secuencias de N-bonacci, en las que se suman los números N anteriores , en lugar de los 2 tradicionales de la secuencia de Fibonacci (que se dice que es la " secuencia duo nacci"). Luego pidió tomar dos entradas, X y N, y luego sacar el número X - N -nacci.
Propongo lo contrario.
Dada una secuencia, muestra de qué secuencia N -nacci es un subconjunto. Digo "subconjunto de" porque:
- A) estas secuencias son infinitas
- B) si se le da el inicio de la secuencia, podría contar el número de 1s iniciales
En el caso de que pueda pertenecer a múltiples secuencias de N -nacci, elija la más baja.
En el caso de que no pertenezca a ninguna secuencia de N-nacci , entonces su programa puede hacer algo más que imprimir algo que podría confundirse con la salida. Estos comportamientos incluyen (pero no se limitan a): bucle infinito, error, bloqueo, borrarse a sí mismo (* tos tos * vigilia * tos tos *), o crear un agujero negro (siempre que este agujero negro no produzca nada que pueda confundirse con una salida válida).
En aras de este desafío, estas secuencias comienzan con 1. Esto significa que cualquier secuencia N -nacci comienza con N las. Además, Ndebe ser un entero positivo. Entonces no -1 -nacci, etc.
Casos de prueba:
1,1,1 -> 1
49, 97 -> 7
55, 89, 144 -> 2
1 -> 1
6765 -> 2
12, 23, 45, 89 -> 12
100, 199 -> 100
create a black hole (as long as this black hole does not produce anything that could be mistaken for valid output).
¡Mi, las espirales del agujero negro están convergiendo a la proporción dorada! ¡ Debe ser una salida válida para una secuencia duoacci!Respuestas:
Rubí, 94
¡Estoy bastante sorprendido de lo lejos que he podido jugar golf con el mismo algoritmo! ¡Empecé con más de 200!
Sin golf:
fuente
x=[1]*(s+z=a.size)
funciona exactamente?n == 1
, entonces nunca incrementaremos, por lo que necesitamos una matriz de 1 sin importar la longitud de la entrada. Sin > 1
, entonces necesitamos al menosn
1 para la secuencia. Por lo tanto,s+a.size
cubren == 1
cualquier longitud dea
, y cubre el comienzo de cualquier otra secuencia para que podamos comenzar a agregars
dígitos del bloque. ¿Tiene sentido?[1]*number
da una matriz de 1 con longitudnumber
. Entoncesx=[1]*(s+z=a.size)
asignaa.size
az
, luego se asigna ax
una matriz de 1 de longituds+z
.Python 2, 176 bytes
Tenga en cuenta que esto requiere una entrada en este formato:
más bien que
Solución bastante sencilla, solo para que todo funcione. Trabajaré más en jugar golf una vez que alguien más responda. Esto usa una versión ligeramente modificada del generador N-Bonnaci de la respuesta de @ Data , por lo que lo apoya. Luego, para cada N-Bonnaci en el rango de la entrada, verifica si la entrada es una subsecuencia de la misma.
fuente
f.append
paraf+=
;
necesario el seguimiento ?Lua
324323bytesCuando veo otra presentación, siento que hay algo mal con mi código ... Pero luego, recuerdo que es Lua, y no hay todas estas funcionalidades elegantes: '(
Fue muy divertido, en realidad me llevó algo de tiempo.
Editar: guardado 1 byte con un simple truco: usando un
::label::
+ engoto label
lugar de un bucle infinito hecho conwhile''
.Ungolfed y explicaciones
Lua no tiene forma de definir un conjunto, subconjunto o incluso verificar si una matriz / tabla contiene un valor sin usar su índice / clave. Es por eso que he decidido eliminar elementos de la matriz que tomo como parámetro. así es como mantengo un registro de los elementos que ya se han calculado y si coinciden.
Puede probar Lua en línea , y puede copiar / pegar el siguiente ejemplo de código para ejecutar algunas pruebas. Cuando esta función salga cuando encuentre la respuesta (de lo contrario, bucle infinito), tendrá que cambiar el índice de
test[]
utilizado (no olvide que lua tiene 1 índice :)).fuente