Esta es la trenza de Pascal:
1 4 15 56 209 780 2911 10864 40545 151316 564719
1 3 11 41 153 571 2131 7953 29681 110771 413403 1542841
1 4 15 56 209 780 2911 10864 40545 151316 564719
Lo inventé totalmente. Blaise Pascal no tenía una trenza, por lo que puedo decir, y si la tenía, probablemente estaba hecha de cabello en lugar de números.
Se define así:
- La primera columna tiene un sencillo
1
en el medio. - La segunda columna tiene un
1
en la parte superior y en la parte inferior. - Ahora alternamos entre poner un número en el medio o dos copias de un número en la parte superior e inferior.
- Si el número va arriba o abajo, será la suma de los dos números adyacentes (p
56 = 15 + 41
. Ej .). Si inclinas un poco la cabeza, esto es como un paso en el triángulo de Pascal. - Si el número va en el medio, será la suma de los tres números adyacentes (por ejemplo
41 = 15 + 11 + 15
).
Su tarea será imprimir (alguna parte de) esta trenza.
Entrada
Debe escribir un programa o función, que recibe un solo número entero n
, dando el índice de la última columna que se generará.
Puede elegir si la primera columna (imprimiendo solo una 1
en la línea central) corresponde a n = 0
o n = 1
. Esto tiene que ser una elección consistente en todas las entradas posibles.
Salida
Salida de trenza de Pascal hasta la n
columna th. El espacio en blanco debe coincidir exactamente con el diseño de ejemplo anterior, excepto que puede rellenar las líneas más cortas a la longitud de las líneas más largas con espacios y, opcionalmente, puede generar un solo salto de línea final.
En otras palabras, cada columna debe ser exactamente tan ancha como el número (o par de números iguales) en esa columna, los números en columnas sucesivas no deben superponerse y no debe haber espacios entre columnas.
Puede imprimir el resultado en STDOUT (o la alternativa más cercana), o si escribe una función, puede devolver una cadena con el mismo contenido o una lista de tres cadenas (una para cada línea).
Más detalles
Puede suponer que n
no será menor que el índice de la primera columna (por lo tanto, no será menor 0
o 1
dependerá de su indexación). También puede suponer que el último número en la trenza es menor que 256 o el número más grande representable por el tipo entero nativo de su idioma, el que sea mayor . Entonces, si su tipo de entero nativo solo puede almacenar bytes, puede suponer que el más grande n
es 9
o 10
(dependiendo de si usa 0 o 1 n
) y si puede almacenar enteros de 32 bits con signo, n
será como máximo 33
o 34
.
Aplican reglas estándar de código de golf . El código más corto gana.
OEIS
Aquí hay algunos enlaces OEIS relevantes. Por supuesto, estos contienen spoilers de diferentes formas de generar los números en la trenza:
Casos de prueba
Estos casos de prueba usan indexación de 1 base. Cada caso de prueba tiene cuatro líneas, siendo la primera la entrada y las tres restantes la salida.
1
1
---
2
1
1
1
---
3
1
1 3
1
---
5
1 4
1 3 11
1 4
---
10
1 4 15 56 209
1 3 11 41 153
1 4 15 56 209
---
15
1 4 15 56 209 780 2911
1 3 11 41 153 571 2131 7953
1 4 15 56 209 780 2911
---
24
1 4 15 56 209 780 2911 10864 40545 151316 564719 2107560
1 3 11 41 153 571 2131 7953 29681 110771 413403 1542841
1 4 15 56 209 780 2911 10864 40545 151316 564719 2107560
Respuestas:
Jalea ,
313029 bytesEste es un enlace monádico; acepta un índice de columna basado en 0 como argumento y devuelve una lista de cadenas.
Pruébalo en línea!
Cómo funciona
fuente
Pyth , 44 bytes
La generación del número tomó 20 bytes y el formato tomó 24 bytes.
Pruébalo en línea!
fuente
Python 2, 120 bytes
Pruébalo en Ideone.
fuente
MATL , 38 bytes
Pruébalo en línea!
Calcular una matriz con los números (únicos) toma los primeros 17 bytes. El formateo toma los 21 bytes restantes.
Explicación
Parte 1: genera los números
Esto genera una matriz con los números de la primera y segunda filas en orden creciente:
[1; 1; 3; 4; 11; 15; ...]
. Se inicia con1
,1
. Cada nuevo número se obtiene iterativamente de los dos anteriores. De ellos, el segundo se multiplica por1
o2
según el índice de iteración, y luego se suma al primero para producir el nuevo número.El número de iteraciones es igual a la entrada
n
. Esto significa quen+2
se generan números. Una vez generada, la matriz necesita recortarse para que solon
se conserven las primeras entradas.Parte 2: formatear la salida
Para cada número en la matriz obtenida, esto genera dos cadenas: representación de cadena del número y una cadena de la misma longitud que consiste en el carácter 0 repetido (el carácter 0 se muestra como un espacio en MATL). Para iteraciones pares, estas dos cadenas se intercambian.
Las dos cadenas se concatenan verticalmente. Entonces, las
n
matrices de caracteres 2D se producen de la siguiente manera (usando·
para representar el carácter 0):Estas matrices se concatenan horizontalmente para producir
Finalmente, esta matriz de caracteres 2D se divide en sus dos filas, y la primera se duplica en la parte superior de la pila. Las tres cadenas se muestran en orden, cada una en una línea diferente, produciendo la salida deseada
fuente
Haskell, 101 bytes
Define una función
f :: Int → [String]
.Michael Klein me recordó que no necesitaba llamar
unlines
al resultado, ahorrando 7 bytes. ¡Gracias!Ahorré un byte reemplazándolo
" 9"!!mod i 2
concycle" 9"!!i
.Tres bytes más escribiendo dos listas corecursive en lugar de usar
drop
.Mi novia señaló que puedo guardar dos bytes más al comenzar mis respuestas en
0
lugar de1
.fuente
C,
183177176 bytesExplicación
C nunca va a ganar ningún premio por brevedad contra un lenguaje de nivel superior, pero el ejercicio es interesante y una buena práctica.
La macro F elimina seis bytes a costa de la legibilidad. Las variables se declaran globalmente para evitar múltiples declaraciones. Necesitaba un búfer de caracteres para sprintf, pero dado que K&R no funciona con la verificación de tipos, sprintf e printf pueden interpretar t [9] como un puntero a un búfer de 36 bytes. Esto guarda una declaración por separado.
Bonita función de impresión, donde r es el número de fila. Sprintf formatea el número y calcula el ancho de la columna. Para ahorrar espacio, lo llamamos tres veces, una para cada fila de salida; la expresión ri & 1 filtra lo que se imprime.
Función de punto de entrada, el argumento es el número de columnas. Calcula la matriz a de valores de columna a [], luego llama a la función de impresión p una vez para cada fila de salida.
Invocación de muestra (no incluida en el conteo de respuestas y bytes):
Actualizado
Se incorporó la sugerencia de sprintf en línea de tomsmeding. Eso redujo el recuento de 183 a 177 caracteres. Esto también permite eliminar los corchetes alrededor del bloque printf (sprintf ()) ya que ahora es solo una declaración, pero eso solo salvó un carácter porque todavía necesita un espacio como delimitador. Así que hasta 176.
fuente
w
dónde se usa? Parece que solo lo usas una vez.itoa
lugar de sprintf?PowerShell v2 +, 133 bytes
44 bytes para calcular los valores, 70 bytes para formular el ASCII
Toma la entrada
$n
como la columna de índice cero. Establece el inicio de nuestra matriz de secuencia$a=1,1
. Luego hacemos un bucle con$n
con1..$n|%{...}
para construir la matriz. Cada iteración, concatenamos en la suma de (hace dos elementos) + (el elemento anterior) * (ya sea que estemos impares o pares). Esto generará$a=1,1,3,4,11...
hasta$n+2
.Entonces, necesitamos cortar
$a
para tomar solo los primeros0..$n
elementos y canalizarlos a través de otro bucle|%{...}
. En cada iteración establecemos helper$z
igual a un número de espacios más el elemento actual como una cadena. Luego, estamos dividiendo si eso se concatena en$x
(las filas superior e inferior) o$y
(la fila central) por un simple imparif
/ par /else
. Luego, calculamos el número de espacios para$l
tomar el número actual, encadenarlo y tomar su.Length
.Por último, ponemos
$x
,$y
y$x
de nuevo en la tubería, y la salida es implícita. Dado que el.ToString()
separador predeterminado para una matriz al imprimir en STDOUT es una nueva línea, lo obtenemos de forma gratuita.Ejemplo
fuente
PHP 265 bytes
Sin golf:
Python 278 bytes
fuente
Ruby, 120 bytes
Devuelve una cadena multilínea.
Pruébalo en línea!
fuente
Matlab, 223 caracteres, 226 bytes
Ungolfed y comentó:
fuente
PHP,
135124123120 bytesaprovechando los tipos de letra implícitos y las variables variables,
un tercio del código (37 bytes) va a los espacios, 64 bytes en total utilizados para la salida
Descompostura
fuente
Lote, 250 bytes
Como la primera y la tercera línea son iguales, solo tenemos que construir dos cadenas. Aquí
d
representa la cadena que termina con la última entrada ys
representa la cadena que termina con espacios; Las últimas cuatro líneas aseguran que se impriman en el orden apropiado.i
es solo el contador de bucles (es un poco más barato que contar desde atrás%1
).j
es la alternancia entre duplicar el número anterior antes de agregarlo al número actual para obtener el siguiente número.m
yn
contienen esos números.l
, además de ser utilizado como temporal para calcular el siguiente número, también reemplaza sus dígitos con espacios para rellenars
;s
yd
se intercambian cada vez a través de la variable intermediat
.fuente