El Triángulo de Seidel es una construcción matemática similar al Triángulo de Pascal, y es conocido por su conexión con los números de Bernoulli.
Las primeras filas son:
1
1 1
2 2 1
2 4 5 5
16 16 14 10 5
16 32 46 56 61 61
Cada fila se genera de la siguiente manera:
Si el número de fila es par (1 indexado):
Baja el primer elemento de la fila anterior
Cada elemento siguiente es la suma del elemento anterior y el elemento que está encima
Duplicar el último artículo
Si el número de fila es impar:
Baja el último elemento de la fila anterior
Yendo hacia atrás , cada elemento es la suma del elemento anterior y el elemento que está encima
Duplica lo que ahora es el primer elemento.
Básicamente, construimos el triángulo en un patrón de zig-zag:
1
v
1 > 1
v
2 < 2 < 1
v
2 > 4 > 5 > 5
Para obtener más información, consulte la página de Wikipedia sobre los números de Bernoulli.
El reto:
Dado n
, ya sea como argumento de función o desde STDIN, imprima o devuelva la n
fila th del triángulo de Seidel o las primeras n
filas. Puede usar 0 o 1 indexación.
No es necesario que maneje una entrada negativa o no entera (ni 0, si está indexada en 1). No tiene que manejar salidas más grandes que2147483647 = 2^31 - 1
Como se trata de código de golf, hazlo en el menor número de bytes posible.
Ejemplos:
En estos ejemplos, el valor de retorno es la n
fila th, indexada en 0.
Input -> Output
0 1
1 1 1
2 2 2 1
6 272 272 256 224 178 122 61
13 22368256 44736512 66750976 88057856 108311296 127181312 144361456 159575936 172585936 183194912 191252686 196658216 199360981 199360981
fuente
Respuestas:
Brain-Flak , 66 bytes
Pruébalo en línea!
La fila está indexada en 0.
fuente
JavaScript (SpiderMonkey) , 67 bytes
Este código abusa del
sort()
método y no funciona en todos los motores.Las filas están indexadas en 0.
Pruébalo en línea!
¿Cómo?
Invertimos condicionalmente una matriz utilizando el
sort()
método con una función de devolución de llamada que ignora sus parámetros y devuelve 0 o un entero positivo. ¡No intentes esto en casa! Esto solo funciona de manera confiable en SpiderMonkey.Tenga en cuenta que V8 probablemente esté utilizando diferentes algoritmos de clasificación dependiendo de la longitud de la matriz (menos o más de 10 elementos).
Comentado
fuente
sort()
este motor. He añadido una explicación.Perl 6 , 52 bytes
Pruébalo en línea!
fuente
Haskell ,
898782 bytesSimplemente
s
imprime las líneas en el orden de zig-zag, la función anónima en la primera fila invierte la mitad de las filas.¡Gracias a @nimi por guardar 5 bytes!
Pruébalo en línea!
fuente
Jalea , 12 bytes
Pruébalo en línea!
fuente
⁸
Python 3 ,
9891 bytesPruébalo en línea!
El cambio a la numeración de filas basada en 0 ahorró 7 bytes.
fuente
Julia 0.6 , 85 bytes
Pruébalo en línea!
Esta es una solución recursiva en Julia. Tenga en cuenta que tiene indexación basada en 1. De ahí las pruebas.
Versión sin golf, para entender la lógica:
Como bono, aquí hay una versión no recursiva, pero esto es más largo:
fuente
Python 2 ,
10397 bytesPruébalo en línea!
Versión no recursiva (más fácil de leer):
Python 2 , 106 bytes
Pruébalo en línea!
¡Seguramente, mejor es posible!
fuente
Python 3 , 91 bytes
Pruébalo en línea!
fuente
import
y*