La secuencia de Sylvester, OEIS A000058 , es una secuencia entera definida de la siguiente manera:
Cada miembro es el producto de todos los miembros anteriores más uno. El primer miembro de la secuencia es 2.
Tarea
Cree el programa más pequeño posible que tome una n y calcule el enésimo término de la secuencia de Sylvester. Se aplican entradas, salidas y lagunas estándar. Dado que el resultado crece muy rápido, no se espera que tome ningún término cuyo resultado causaría un desbordamiento en el idioma elegido.
Casos de prueba
Puede usar cero o una indexación. (Aquí uso la indexación cero)
>>0
2
>>1
3
>>2
7
>>3
43
>>4
1807
n
devuelve elnth
número de la secuencia?Respuestas:
Brain-Flak ,
7668585246 bytesPruébalo en línea!
Utiliza esta relación en su lugar:
que se deriva de esta relación modificada de la proporcionada en la secuencia:
a(n+1) = a(n) * (a(n) - 1) + 1
.Explicación
Para obtener una documentación de lo que hace cada comando, visite la página de GitHub .
Hay dos pilas en Brain-Flak, que nombraré como Pila 1 y Pila 2 respectivamente.
La entrada se almacena en la Pila 1.
Para el algoritmo de generación:
Versión alternativa de 46 bytes.
Esto usa solo una pila.
Pruébalo en línea!
fuente
Jalea , 5 bytes
Utiliza la indexación basada en 0 y la definición de la especificación de desafío.
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
Hexagonía , 27 bytes.
Desplegado:
Pruébalo en línea!
Explicación
Consideremos la secuencia
b(a) = a(n) - 1
y reorganicemos un poco:Esta secuencia es muy similar, pero podemos diferir el incremento hasta el final, lo que sucede al guardar un byte en este programa.
Así que aquí está el código fuente anotado:
Creado con el HexagonyColorer de Timwi .
Y aquí hay un diagrama de memoria (el triángulo rojo muestra la posición y orientación iniciales del puntero de memoria):
Creado con Timwi de EsotericIDE .
El código comienza en la ruta gris que envuelve la esquina izquierda, por lo que el bit lineal inicial es el siguiente:
Luego, el código golpea el
<
cual es una rama e indica el inicio (y el final) del bucle principal. Mientras el borde N tenga un valor positivo, se ejecutará la ruta verde. Ese camino se ajusta alrededor de la cuadrícula varias veces, pero en realidad es completamente lineal:No
.
hay operaciones, por lo que el código real es:Una vez que esta disminución se reduce
N
a0
, se ejecuta la ruta roja:fuente
J,
181412 bytesEsta versión gracias a randomra. Intentaré escribir una explicación detallada más adelante.
J, 14 bytes
Esta versión gracias a las millas. Usó el adverbio de poder en
^:
lugar de una agenda como se muestra a continuación. Más explicaciones por venir.J, 18 bytes
0 indexado.
Ejemplos
Explicación
Esta es una agenda que se ve así:
(Generado usando
(9!:7)'┌┬┐├┼┤└┴┘│─'
entonces5!:4<'e'
)Descomponiendo:
Usando la rama superior como el gerundio
G
, y la inferior como el selectorF
, esto es:Esto utiliza la función constante
2:
cuando0 = * n
, es decir, cuando el signo es cero (por lo tanto,n
es cero). De lo contrario, usamos este tenedor:Cuál es uno más la siguiente serie superior:
Descomponiéndose aún más, este es producto (
*/
) sobre autorreferencia ($:
) sobre rango (i.
).fuente
2(]*:-<:)^:[~]
14 bytes usando la fórmulaa(0) = 2
ya(n+1) = a(n)^2 - (a(n) - 1)
. Para calcular valores más grandes,2
al principio deberá marcarse como un entero extendido.v`$:@.u
formato recursivo. Siempre usé un^:v
formato que a menudo es más complejo. @miles También nunca usé el(]v)
truco. Me llevó unos buenos 5 minutos entenderlo.2(]*:-<:)~&0~]
(o2:0&(]*:-<:)~]
). Y combinándolos 13 bytes]0&(]*:-<:)2:
.0&(]*:-<:)2:
. (Lo siento, no debería jugar golf en los comentarios.)Perl 6 , 24 bytes
Explicación
Uso:
fuente
$_
? ¿Qué brujería es esta?Haskell, 26 bytes
Ejemplo de uso:
f 4
->1807
.fuente
Java 7,
4642 bytesUtiliza la indexación 0 con la fórmula habitual. Sin embargo, cambié
n*n-n
porn*(n-1)
, ya que Java no tiene un operador de energía útil, y lasf()
llamadas se estaban haciendo largas.fuente
f(n)*~-f(n)
Deberia trabajar.return--n<0
ahorra un byte más.Haskell, 25 bytes
fuente
SILOS , 60 bytes
Pruébalo en línea!
Puerto de mi respuesta en C .
fuente
Brain-Flak ,
158154bytesLeaky Nun me tiene vencido aquí
Pruébalo en línea!
Explicación
Pon un dos debajo de la entrada a (0)
Mientras que la entrada es mayor que cero, resta uno de la entrada y ...
Silenciosamente...
Coloque uno en la otra pila para actuar como catalizador para la multiplicación <> (()) <>
Mientras la pila no está vacía
Mueva la parte superior de la lista y copie
Multiplica el catalizador por la copia
Agrega uno
Mueve la secuencia de vuelta a la pila adecuada
Elimine todo menos el elemento inferior (es decir, el último número creado)
fuente
C, 32 bytes
Utiliza indexación basada en 1. Pruébalo en Ideone .
fuente
En realidad , 9 bytes
Pruébalo en línea!
Utiliza esta relación en su lugar:
que se deriva de esta relación modificada de la proporcionada en la secuencia:
a(n+1) = a(n) * (a(n) - 1) + 1
.fuente
R,
44 4241 bytes2 bytes de ahorro gracias a JDL
1 byte guardar gracias al usuario5957401
fuente
n
se garantice que no será negativo, la condición puede reducirsen>0
a justan
.f(n-1)
es de 6 bytes. Creo que guarda un byte asignándolo a algo. es decirifelse(n,(a=f(n-1))^2-a+1,2)
Oasis , 4 bytes (no competitivos)
¡Probablemente mi último idioma de la familia del golf! No competitiva, ya que el lenguaje es posterior al desafío.
Código:
Solución alternativa gracias a Zwei :
Versión ampliada:
Explicación:
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
b<*>2
usandoa(n-1)*(a(n-1)+1)-1
b
ya que se completará automáticamente (en lugar de la entrada) :).Python,
3836 bytes2 bytes gracias a Dennis.
Ideone it!
Utiliza esta relación modificada de la proporcionada en la secuencia en su lugar:
a(n+1) = a(n) * (a(n) - 1) + 1
Explicación
0**n*2
devuelve2
cuándon=0
y de lo0
contrario, porque0**0
está definido para estar1
en Python.fuente
Cheddar , 26 bytes
Pruébalo en línea!
Bastante idiomático
Explicación
fuente
CJam, 10 bytes
Utiliza indexación basada en 0. Pruébalo en línea!
fuente
05AB1E , 7 bytes
Explicado
Utiliza indexación basada en cero.
Pruébalo en línea!
fuente
Prólogo, 49 bytes
fuente
SILOS 201 bytes
¡Siéntase libre de probarlo en línea!
fuente
Jalea , 7 bytes
Pruébalo en línea!
Utiliza esta relación proporcionada en la secuencia en su lugar:
a(n+1) = a(n)^2 - a(n) + 1
Explicación
fuente
C, 46 bytes
Ideone it!
Usos
p
como almacenamiento temporal del producto.Básicamente, definí dos secuencias
p(n)
yr(n)
, donder(n)=p(n-1)+1
yp(n)=p(n-1)*r(n)
.r(n)
es la secuencia requeridafuente
R,
50 4644 bytesEn lugar de rastrear toda la secuencia, solo hacemos un seguimiento del producto, que sigue la regla de actualización cuadrática dada siempre que
n> 1n> 0. (Esta secuencia usa la convención "comenzar enuncero")El uso de la convención de inicio en cero ahorra un par de bytes ya que podemos usar if (n) en lugar de if (n> 1)
fuente
Medusa , 13 bytes
Pruébalo en línea!
Explicación
Comencemos de abajo hacia arriba:
Este es un gancho, que define una función
f(x) = (x-1)*x
.Esto compone el gancho anterior con la función de incremento, por lo que nos da una función
g(x) = (x-1)*x+1
.Finalmente, esto genera una función
h
que es una iteración de la función anteriorg
, tantas veces como sea dada por la entrada entera.Y finalmente, aplicamos esta iteración al valor inicial
2
. Elp
en la parte superior solo imprime el resultado.Alternativa (también 13 bytes)
Esto difiere el incremento hasta el final.
fuente
C,
43,34, 33 bytes1 indexado:
Prueba principal:
fuente
Brachylog , 13 bytes
Pruébalo en línea!
Utiliza esta relación en su lugar:
que se deriva de esta relación modificada de la proporcionada en la secuencia:
a(n+1) = a(n) * (a(n) - 1) + 1
.fuente
Mathematica, 19 bytes
O 21 bytes:
fuente
Array
solución es mágica. Lástima,##0
no es una cosa. ;)Laberinto , 18 bytes
Créditos a Sp3000 que encontraron la misma solución de forma independiente.
Pruébalo en línea!
fuente
En realidad ,
1412 bytesEsto usó la indexación 0. Sugerencias de golf bienvenidas. Pruébalo en línea!
No golfista:
fuente
GolfScript ,
1210 bytes2 bytes gracias a Dennis.
Pruébalo en línea!
Usos
a(n) = a(n-1) * (a(n-1)-1) + 1
.fuente
(
es la abreviatura de1-
;)
es la abreviatura de1+
.