El triángulo de Pascal se genera comenzando con un 1 en la primera fila. En las filas subsiguientes, el número está determinado por la suma de los dos números directamente arriba a la izquierda y a la derecha.
Para demostrar, aquí están las primeras 5 filas del triángulo de Pascal:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
El reto
Dada una entrada n (siempre que sea más conveniente en el idioma elegido), genera las primeras n filas del triángulo de Pascal. Puede suponer que n es un número entero comprendido entre 1 y 25. Debe haber un salto de línea entre cada fila y un espacio entre cada número, pero aparte de eso, puede formatearlo como desee.
Este es el código de golf , por lo que gana la solución más corta.
Ejemplo de E / S
> 1
1
> 9
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
code-golf
math
combinatorics
Peter Olson
fuente
fuente
Respuestas:
J , 12 caracteres
fuente
i.5
devuelve los primeros cinco naturales. La línea 2 agrega{:
"Cola" (regreso último). La línea 3 los combina con!
"Fuera de" (número de combinaciones). La línea 4(!{:)i.5
es igual. factorizando el gancho. Entonces,(!:)
es una operación que transforma los primeros n naturales en la enésima línea del triángulo de Pascal. La línea 5 lo aplica a todos los prefijos (barra invertida) de 0..4, pero J llena los puntos no utilizados con 0, por lo que la operación se combina (@
) con la operación de formateo de cadenas":
. Muy genial J, votado.!
significa factorial;!
combinaciones de cuentas diádicas . La final@
en":@(!{:)\@i.
sólo está ahí para hacer de este un verbo independiente.Python, 56 Bytes
Uso de la muestra:
Produce:
fuente
exec
evitar unfor
bucle.Python,
9491887063 caracteresfuente
Mathematica: 36 (41?)
Mathematica tiene la
Binomial
función, pero eso le quita la diversión. Yo propongo:La línea anterior representará una matriz irregular, como:
Dado que este es un formato básico en Mathematica, pensé que sería aceptable, pero al volver a leer las reglas, creo que no lo es. Agregar
Grid@
producirá un resultado inequívocamente aceptable, para un total de 41 caracteres:n = 6
:fuente
C, 522
Una respuesta C auto demostrativa. ¡No podría ser más claro! Puntos de bonificación por encontrar el personaje extra.
fuente
Golfscript (21 caracteres)
Como se solicitó una explicación:
fuente
Haskell,
9492Salida:
Una versión de 71 caracteres que no imprime un espacio entre cada número:
Salida:
fuente
mapM
lugar demapM_
.Scala,
81787270 caracteres81 caracteres: primer intento, copiado descaradamente de la versión de Python :)
Ejecútelo como un script o directamente en REPL.
Corte a 70 caracteres con algo sorprendentemente legible e idiomático:
O
7270 caracteres con un método totalmente diferente:fuente
Rubí:
514946 caracteres(Código de 45 caracteres + opción de línea de comando de 1 carácter)
Gracias a:
Ejecución de muestra:
Pruébalo en línea!
fuente
p.map!{|i|(v=n)+n=i}
.map
. Gracias.JavaScript (
90858381)Demostración: http://jsfiddle.net/tcRCS/3/
NOTA : No funciona bien en la práctica durante aproximadamente n> 30 porque los números desbordan el tipo de datos entero incorporado y se convierten en números de punto flotante.
Editar 1 : eliminó 5 caracteres mediante la conversión
while
afor
y la combinación de estadosEdición 2 : mover la
s=
declaración dentrofor
y guardar 2 caracteresEdición 3 : combina el
s=1,j=1
inicializadors=j=1
y guarda 2 caracteresfuente
s*(i-j)/j
, nos*((i-j)/j)
.(i-j)
antes de dividir entrej
, entonces no hay necesidad de aritmética de coma flotante porque los resultados siempre deben ser enteros. Si lo hace((i-j)/j)
primero, esto dará como resultado valores decimales que pueden ser una fuente de error, y al menos requerirá un código adicional para redondear / truncar. No comienza a ver esto hasta que se acercan>11
, y verá valores decimales en la salida, es decir,1 11 55 165 330 461.99999999999994 461.99999999999994...
R, 39 caracteres
R parece ser la herramienta correcta para esta tarea :-)
fuente
n
se da Corrija el código. ¿Esto está bien ahora?n
debe suministrarse desde una fuente externa en tiempo de ejecución y el aparato para capturarlo está incluido en su programa. Normalmente, eso significa por argumento de línea de comando, o stdin, o archivo. Por archivo casi nunca se usa porque es invariablemente más largo que las otras dos opciones.en Q (25 caracteres / 20 con versión más corta)
Corto
Uso de la muestra:
fuente
t:{(x-1){0+':x,0}\1}
awk - 73 caracteres
implementación bastante sencilla:
ejecución de muestra:
fuente
Perl,
52, 49 caracteres.Editar: usando en
say
lugar deprint
fuente
Perl,
4754 caracteresToma un número de la línea de comando, pero no realiza ninguna comprobación de errores.
Acabo de darme cuenta de que solo funciona hasta n = 4. Era un código antiguo que tenía en mi disco duro.
Sin embargo, esto funciona:
Sin embargo, se debe ingresar n en el script, o sería un carácter más.
fuente
Barril , 40 bytes
Explicado
fuente
Perl, 77 caracteres
Entrada de ejemplo
Salida de ejemplo
fuente
C,
132127 caracteresfuente
Pascal:
216192 caracteres(No es un verdadero competidor, solo una presencia honorífica).
Ejecución de muestra:
fuente
MATL , 10 bytes
Lenguaje creado después de este desafío
Pruébalo en línea!
fuente
D
134128 caracteresla salida para 9 es
aprovechando al máximo "puede formatearlo como quiera"; hay un espacio entre cada número y un salto de línea
editar reposicionó la tarea
l
de afeitar algunos caracteresfuente
Scala, 131 caracteres
Toma la entrada de la línea de comando.
Salida para n = 10:
fuente
0
s :-)?F♯ - 203 caracteres
Mi primer intento en una ronda de golf de código, y mi primer intento de programación funcional. Probablemente haya alguna forma obvia de acortarlo que aún no he descubierto. Cumple con el compilador F♯ de VS2010s (que tiene el efecto de ejecutar #light por defecto a diferencia de las versiones anteriores), y también funciona en el intérprete F♯. Acepta entrada a través de stdin. ¡Ojalá hubiera una mejor manera para la entrada / salida! ¡Muchos personajes!
fuente
¿Por qué no hay una respuesta aceptada a esta pregunta?
VBA - 249 caracteres
fuente
Postdata: 59 caracteres (63 si cuenta
-dn=
para obtener el número de filas)corre con
Llegar
fuente
Mathematica 35 caracteres
Aquí está la manera aburrida y perezosa de cortar el triángulo de Pascal:
fuente
APL,
1915 caracteres¿Un poco tarde para la fiesta, tal vez?
Sin embargo, no supera la entrada J.
Esto supone que el origen del índice (
⎕IO
) está establecido en0
. Desafortunadamente, con un origen de índice de1
, necesitamos2518 caracteres:Hay dos
⍨
s en el código para expresar mi frustración.Manifestación:
Explicaciones
Version corta:
⍳⍵
(con un origen de índice de 0) produce una matriz de números desde 0 hasta⍵-1
inclusivo, donde⍵
es el argumento correcto para la función.⍳⍵+1
genera todos los números del 0 al⍵
{⍵!⍨⍳⍵+1}
genera⍵
elegirk
para cada elementok
en⍳⍵+1
. El⍨
operador (conmutar) intercambia los argumentos por una función, de modo que el argumento de la mano derecha se convierte en el izquierdo y viceversa.{⍵!⍨⍳⍵+1}¨⍳⍵
pasa cada elemento⍳⍵
usando el¨
(cada) operador. El resultado es una matriz unidimensional que contiene las primeras⍵
filas del Triángulo de Pascal.⍪
toma un vector unidimensional y lo convierte en una columna en lugar de una fila. Cada fila del triángulo se coloca en su propia línea.Respuesta larga:
1-⍨
se coloca antes de una⍳
para replicar un origen de índice de 0.0,⍳⍵
con un origen de índice de 1 réplicas⍳⍵+1
con un índice de origen de 0.fuente
Arce, 46
Uso:
fuente
VBA,
16214210280 bytesGuardado 22 bytes gracias a Taylor Scott.
Esta es una vieja pregunta ahora, pero vi una solución más corta para VBA.
Esto debe ejecutarse en la ventana inmediata. La entrada está en la celda
A1
de la hoja de trabajo activa. La salida está en la hoja de trabajo activa comenzando enB2
y usando, sin embargo, se requieren muchas celdas en función de la entrada. ElCOLUMN()>ROW()
cheque mantiene la parte superior derecha del triángulo en blanco. LaROW()=2
verificación hace el primer valor1
para iniciar el triángulo. Podría haber desplazado la salida hacia abajo y soltar esta verificación, pero introduce una gran cantidad de resultados extraños antes del triángulo real y no sentí que fuera el espíritu del desafío.Originalmente publiqué un método mucho más complicado que calculaba cada valor en función de su fila y columna. Sin embargo, todo este método lo hace es usar fórmulas en la celda. Comienzo en
B2
para poder hacer referencia a la fila por encima sin#REF!
errores. Entonces, se copia y pastas de la misma fórmula a través de un bloque de celdas n de ancho y n altos. La entrada y salida de sen=25
ve así:fuente
Function p(r)
aSub p(r)
ya que no tiene un valor de salida de función, eliminar el espaciodebug.? c(n,k);
y convertir laif-then-else
instrucción multilínea en una sola línea (If k Then c=c(n-1,k-1)*n/k Else c=1
) reduce el recuento de bytes a130
mi recuentoFor n=0 To...
se puede condensar paraFor n=0To...
llevar mi versión del código aSub p(r):For n=0To r-1:For k=0To n:Debug.?c(n,k);:Next:Debug.?:Next:End Sub
Function c(n,k):If k Then c=1 Else c=c(n-1,k-1)*n/k
[char (10)]End Function
con un recuento de bytes de139
For n=0To[A1-1]:For k=0To n:?c(n,k);:Next:?:Next
Ayudante Función:Function c(n,k)
If k Then c=c(n-1,k-1)*n/k Else c=1
End Function
)B2
lugar deA1
es aceptable.05AB1E , 14 bytes
Pruébalo en línea!
fuente