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
. . .
Contraer estas filas a la izquierda
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
. . .
Ordenarlos en orden ascendente
1
1 1
1 1 2
1 1 3 3
1 1 4 4 6
. . .
Lee este triángulo por filas
[1, 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 4, 6 ...]
Dada una entrada n
, genera el n
número th en esta serie. Esto es OEIS 107430 .
Reglas
- Puede elegir indexación basada en 0 o en 1. Indique cuál en su envío.
- Se puede suponer que la entrada y la salida encajan en el tipo entero nativo de su idioma.
- La entrada y salida se pueden dar por cualquier método conveniente .
- Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
- 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).
code-golf
sequence
number-theory
AdmBorkBork
fuente
fuente
Respuestas:
JavaScript (ES6), 79 bytes
0 indexado.
Manifestación
Mostrar fragmento de código
¿Cómo?
Este algoritmo genera directamente las filas ordenadas del Triángulo de Pascal. Actualiza n de acuerdo con la longitud de la fila anterior hasta que exista un [n] . Por ejemplo, se requieren 6 iteraciones para n = 19 :
fuente
Octava , 46 bytes
Basado en 1.
Pruébalo en línea!
Explicación
Considere
n=4
como un ejemplo.pascal(n)
da una matriz de Pascal:Las filas del triángulo de Pascal son las antidiagoniales de esta matriz. Entonces se voltea verticalmente usando
flip(···)
que transforma las antidiagonales en diagonales.
spdiags(···)
extrae las diagonales (distintas de cero), comenzando desde la parte inferior izquierda, y las organiza como columnas rellenas con ceros:M=sort(···)
ordena cada columna de esta matriz y asigna el resultado a la variableM
:La indexación lógica
(···)(~~M)
ahora se usa para extraer los nonzeros de esta matriz en orden de columna mayor (abajo, luego a través). El resultado es un vector de columna:Finalmente, la
n
entrada enésima de este vector se extrae usando(···)(n)
, lo que en este caso da1
.fuente
Python 2 ,
867872 bytes-8 bytes gracias a Rod
Pruébalo en línea!
Sin golf
Pruébalo en línea!
La función calcula recursivamente la fila del Triángulo de Pascal. Dada la fila actual como
row
,map(sum, zip([0] + row, row + [0]))
.En cada llamada
n
se reduce la longitud de la fila actual. Si la función llega a la fila derecha, senth
debe devolver el número más bajo de la fila.Como la primera mitad de una fila está en orden ascendente y cada fila es simétrica, el número está en el índice
n/2
( índice 0, división entera).fuente
Wolfram Language (Mathematica) , 55 bytes
La indexación está basada en 1.
Pruébalo en línea!
Explicación
Es probable que esto sea golfable, no soy un usuario muy experimentado de Mathematica.
Para cada n ∈ [0, Entrada] ∩ ℤ , genere la tabla de binomios con cada k ∈ [0, n] ∩ ℤ .
Ordenar cada uno. Utiliza una taquigrafía para
Map[function,object]
-function/@object
.Acoplar la lista resultante y recuperar el elemento cuyo índice en la lista es la entrada.
fuente
APL (Dyalog) ,
2625 bytes1 byte guardado gracias a @ngn
Pruébalo en línea!
fuente
{⍵[⍋⍵]}
->(⍋⊃¨⊂)
R , 58 bytes
Pruébalo en línea!
Calcula
n choose k
para cadan,k
en[0,1,...,n]
como una matriz, las filas se ordenan en orden ascendente (*), y elimina los ceros, a continuación, selecciona eln
elemento XX.(*) Esto también los transforma en columnas, pero eso es mejor ya que R almacena una matriz como un vector en columnas, lo que nos permite indexar directamente en ella mientras se preserva el orden.
fuente
Haskell ,
143132125123 bytesLa primera línea es una función sin puntos que toma un índice (basado en 0) y devuelve el número apropiado en la secuencia. Pruébalo en línea!
¡Este es mi primer programa Haskell! Estoy seguro de que puede acortarse mucho más. Los consejos son apreciados.
Guardado 2 bytes gracias a nimi
Sin golf
fuente
i
en la funcións
, que se cambió el nombre a!
, supongo. Si utiliza una función infija puedes colocar el()
tornoreverse b
:s(a,b)=reverse b!a
.JavaScript, 57 bytes
0 indexado.
¿Cómo viene esto?
Paso 0:
Este código es fácil de entender:
c
calcula la función de uso combinado: C (n, k) = C (n-1, k) + C (n-1, k-1); o 1 si k == 0 o k == nf
tratar de averiguar el número de fila y el índice de la fila, y luego llamar a la función C para obtener el resultado.Paso 1:
En este paso, tratamos de modificar la llamada a la función
c
parac(i,r)
que sea igual que el parámetro def
.Paso 2:
Probamos
i<r
si está usando la funciónf
o la funciónc
. Es por eso que mantenemos almizclei<r
durante la repetición de la funciónc
.Paso 3:
En este paso, fusionamos estas dos funciones en una sola.
Después de un poco más de golf, finalmente obtuvimos la respuesta descrita anteriormente.
Mostrar fragmento de código
fuente
Jalea , 13 bytes
Pruébalo en línea!
Usando el algoritmo Dyalog de Uriel.
1 indexado.
Explicación:
fuente
þ
está haciendo aquí.JavaScript (Node.js) , 65 bytes
Ni siquiera se usa una matriz. 0 indexado.
Pruébalo en línea!
Explicación:
fuente
Pascal , 373 bytes
g
Es la función.Pruébalo en línea!
fuente
n=1 then
puede sern=1then
.if(k=0)then
puede convertirseif k=0then
.word
lugar deinteger
.Java 8, 187 bytes
Explicación:
Pruébalo en línea.
fuente
MATL , 11 bytes
Basado en 1.
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
Considerar entrada
4
como un ejemplo.;
es el separador de fila para matrices o vectores de columna.fuente
Lote, 128 bytes
0 indexado.
fuente
r
y la columna%1-(s-2)
del%1
th de la serie. La cuarta línea usa eso para calcular el coeficiente binomial(n k) = n!/(n-k)!k!
=n(n-1)...(n+1-k)/(1)(2)...k
=(n/1)((n-1)/2)...((n+1-k)/k)
. ¿Dónde está MathJax cuando lo necesito?APL (Dyalog Classic) , 17 bytes
Pruébalo en línea!
Indexación basada en 0
tenga en cuenta que
(49!98) > 2*53
, es decir, el coeficiente binomial 98 sobre 49 es mayor que 2 53 , por lo que en ese punto Dyalog ya ha comenzado a perder precisión debido al punto flotante IEEEfuente
05AB1E , 10 bytes
0 indexado
Pruébalo en línea!
Explicación
fuente
Jalea , 11 bytes
Pruébalo en línea!
Un enlace monádico que toma el índice y devuelve un entero: utiliza la indexación basada en 1.
¿Cómo?
Realiza el desafío más o menos tal como está escrito, solo con más de la derecha del triángulo de Pascal (ceros) que luego se tira ...
fuente
Rojo , 206 bytes
Basado en 1
Pruébalo en línea!
Explicación:
fuente
Perl, 48 bytes
Incluye
+1
parap
Utiliza la indexación de base 0.
fuente
J,
4641 bytes0 indexado
Pruébalo en línea!
Notas:
<.2&!@,:^:_1
da el número de fila relevante del triángulo de Pascal redondeando hacia abajo el inverso dey choose 2
./:~@(i.!<:)@]
calcula la fila y la ordena.[-2!]
da el índice en la fila.fuente
Julia , 70 bytes
Basado en 1
Explicación:
primero encuentra el número de fila, luego el número de columna, luego calcula el binomio
fuente
Jalea , 17 bytes
Pruébalo en línea!
fuente
Pyth, 15 bytes
0 indexado
Intentalo
Explicación
fuente
Limpio , 80 bytes
Pruébalo en línea!
Como una función lambda.
fuente
Ruby , 56 bytes
Basado en 0
Primero obtenga la fila y la columna en el triángulo, luego calcule el coeficiente binomial correspondiente a esa posición.
Pruébalo en línea!
fuente
En realidad , 8 bytes
En gran parte basado en la respuesta de Jonathan Allan Jelly . Utiliza indexación 0.
Pruébalo en línea!
Ungolfing
fuente
n
th de la serie. Esto produce una matriz.Coco , 69 bytes
Pruébalo en línea!
fuente
Pari / GP , 47 bytes
Pruébalo en línea!
fuente
C (gcc) ,
140123 bytesPruébalo en línea!
fuente