La mayoría de los que están aquí están familiarizados con el Triángulo de Pascal. Está formado por filas sucesivas, donde cada elemento es la suma de sus dos vecinos superior izquierdo y superior derecho. Aquí están las primeras 5
filas (tomadas del triángulo Generate Pascal ):
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Vamos a tomar el Triángulo de Pascal y le haremos algunas sumas (hah-ha). Para una entrada dada n
, genera la suma de columnas de las primeras n
filas del Triángulo de Pascal. Por ejemplo, para la entrada 5
, la salida estaría formada por
1
1 1
1 2 1
1 3 3 1
[+] 1 4 6 4 1
----------------------
1 1 5 4 9 4 5 1 1
Entonces la salida sería [1, 1, 5, 4, 9, 4, 5, 1, 1]
.
Tenga en cuenta que no necesariamente necesita generar el Triángulo de Pascal para calcular la suma, eso depende de su implementación si es más corto hacerlo o no.
Entrada
Un solo entero positivo n
con n >= 1
cualquier formato conveniente .
Salida
La matriz / lista resultante de la suma en columnas de las primeras n
filas del triángulo de Pascal, como se describe anteriormente. De nuevo, en cualquier formato adecuado.
Reglas
- Las nuevas líneas o espacios en blanco iniciales o finales son opcionales, siempre que los caracteres se alineen correctamente.
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- Si es posible, incluya un enlace a un entorno de prueba en línea para que otras personas puedan probar su código.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
Ejemplos
[input]
[output]
1
[1]
2
[1, 1, 1]
3
[1, 1, 3, 1, 1]
5
[1, 1, 5, 4, 9, 4, 5, 1, 1]
11
[1, 1, 11, 10, 54, 44, 155, 111, 286, 175, 351, 175, 286, 111, 155, 44, 54, 10, 11, 1, 1]
fuente
CJam ,
322524 bytesGracias a Luis Mendo por guardar 1 byte.
Pruébalo en línea!
Explicación
fuente
JavaScript (ES6), 83 bytes
La indexación 1 me costó un byte. Explicación:
g(j-1,i-1)+g(j-1,i+1)
calcula recursivamente el triángulo de Pascal hasta que alcanza la primera fila, que es el caso base. Para obtener sumas de columna, utilizo el hecho de quemap
realmente pasa un tercer parámetro, por lo que hay un paso recursivo adicional cuando este es el caso.fuente
JavaScript (ES6),
9087868482 bytesGuardado 3 bytes gracias a ETHproductions
Casos de prueba
Mostrar fragmento de código
fuente
Mathematica,
5957 bytes¡Gracias a Martin Ender por encontrar un ahorro de dos bytes!
Función pura que toma una entrada entera positiva y devuelve una lista de enteros. Literalmente produce todas las entradas relevantes del triángulo de Pascal y las suma apropiadamente.
Envío previo (que es un poco más fácil de leer):
fuente
Octava ,
846745 bytes¡22 bytes guardados gracias a Neil !
Pruébalo en línea!
Explicación
La
pascal
función proporciona una matriz que contiene los valores en el triángulo de Pascal:Para extraer los valores deseados, volteamos verticalmente (
flip
), mantenemos la parte triangular inferior (tril
) y volvemos a voltear. Esto daspdiags
luego extrae las diagonales como columnasy
sum
calcula la suma de cada columna, que da el resultado.fuente
@(n)sum(spdiags(flip(tril(flip(pascal(n))))))
?05AB1E ,
3432282524 bytes-4 gracias a Emigna.
Pruébalo en línea!
Básicamente, todo lo que hace es generar esto:
Transponerlo:
Luego suma cada fila:
Si un 0
®>-Å
inicial y final no es aceptable, una cantidad de®-Å
arreglos lo arregla con una penalización de +1 byte.Resultado para
50
:fuente
-Å0
en lugar de>-Ý0*
debería funcionar y€
no es necesario al final.>F
puede serƒ
.Å
, inteligente! Mantuve "ctrl + f" para "lista de identidad" o algo así en elinfo.txt
heh ...13 x 5
a5 x 11
? ¿A dónde fueron las otras dos columnas / filas?PHP , 119 bytes
números de columnas de 1 entrada a entrada -1
Pruébalo en línea!
fuente
array_column
es una nueva función en esta versiónarray_column()
.$x=2*$j++-$i
ahorra 7 bytes. Colocar $ j hacia abajo en lugar de hacia arriba puede ahorrar 1 (for($j=$i+1;$j--;)
). Y se pueden jugar 3 bytes más desde la salida.array_column
Jalea , 12 bytes
Pruébalo en línea!
Cómo funciona
fuente
Python 3,
201184 bytesfuente
Python 2 ,
140137 bytesPruébalo en línea! o Pruébelo en línea!
Para
n=3
comienza con una lista con
n
ceros alrededor de uno:[[0, 0, 0, 1, 0, 0, 0]]
genere la pirámide completa
Gire 90º y sume cada fila, descartando la primera y la última (solo ceros)
fuente
Haskell,
118112104 bytes614 bytes guardados gracias a @nimifuente
#
ar#n|d<-0<$[1..n]=d++r++d
.#
, porque ya no es recursivo: definirf
comof n=foldl1 z[d++p x++d|x<-[1..n],d<-[0<$[1..n-x]]]
y volcar#
.Python 3, 124 caracteres
Esto utiliza el hecho de que el Triángulo de Pascal se puede definir con coeficientes binomiales. Intenté eliminar el
abs(x)
y elrange(-n+1,n)
haciéndolorange(n)
y luego usarlo,lambda l:l[-1:0:-1]+l
pero fue más largo.Además, esta es mi primera vez jugando al golf, así que espero que perdones cualquier imitación.
El binomio no es mío y fue tomado de aquí .
fuente