Escriba un programa (o función) que tome un entero positivo.
Si la entrada es 1
, imprima (o devuelva) dos diamantes adyacentes uno al lado del otro, cada uno con una longitud de 1 barra diagonal:
/\/\
\/\/
Para cada entrada N
mayor que 1, observe la salida para N-1
y para cada par de diamantes vecinos, inserte un nuevo diamante entre ellos cuya longitud lateral sea la suma de las longitudes laterales de los dos vecinos. Imprima (o devuelva) este nuevo patrón de diamantes.
Entonces, cuando 2
se ingresa, miramos la salida 1
y podemos ver que hay dos diamantes vecinos, ambos con longitud de lado 1. Así que insertamos un diamante de longitud lateral 2 (1 + 1) entre ellos:
/\
/\/ \/\
\/\ /\/
\/
Para la entrada 3
, miramos la salida 2
y agregamos dos diamantes con longitud lateral 3 (1 + 2 y 2 + 1) entre los dos pares de diamantes vecinos:
/\ /\
/ \ /\ / \
/\/ \/ \/ \/\
\/\ /\ /\ /\/
\ / \/ \ /
\/ \/
Continuando con el patrón, la salida para 4
es:
/\ /\
/\ / \ / \ /\
/ \ /\ / \ / \ /\ / \
/ \ / \ / \ /\ / \ / \ / \
/\/ \/ \/ \/ \/ \/ \/ \/\
\/\ /\ /\ /\ /\ /\ /\ /\/
\ / \ / \ / \/ \ / \ / \ /
\ / \/ \ / \ / \/ \ /
\/ \ / \ / \/
\/ \/
Y así.
Sus salidas pueden tener espacios finales en cualquier línea, pero solo hasta una nueva línea final (y no nuevas líneas iniciales).
El código más corto en bytes gana.
Respuestas:
Pyth,
5049 bytesDemostración
Explicación:
fuente
u.iGsM.:G2tQjT9
en mi solución (parcial). Nunca miré tu respuesta ...Lisp común, 425
Ejemplo
Sin golf
fuente
CJam,
595857 bytesGracias a @ MartinBüttner por jugar golf en 1 byte.
Pruébelo en línea en el intérprete de CJam .
Idea
Para la entrada 3 , por ejemplo, generamos
girando la cuerda
\
y reemplazando algunas barras diagonales inversas con barras diagonales.Luego, comprimimos la matriz resultante (transponer filas y columnas) para obtener la mitad inferior de la salida deseada.
La mitad superior es byte por byte igual a la mitad inferior en reversa.
Código
fuente
Rev 1: Rubí 170
Nuevo método que evita crear el gran diamante y reducirlo.
Rev 0: Rubí, 187
Los tamaños de los diamantes se calculan de acuerdo con la relación de recurrencia de https://oeis.org/A002487 Por lo tanto, hacemos la matriz que
a
contiene todos los elementos para todas las filas del 1 aln
. Solo nos interesan los últimos1<<n-1
elementos (Ruby nos permite obtenerlos de la matriz usando índices negativos, siendo -1 el último elemento de la matriz), más un inicial1
desde la posición 0.Línea por línea y diamante por diamante, dibujamos la fila de caracteres para el diamante más grande, luego cortamos las columnas del medio para obtener la fila del diamante requerido. Rev 1 es más corto, pero me gustó este método.
La aritmética modular se usa para envolver para que la misma expresión agregue todo
/
directamente y de la misma manera una expresión agrega todo\
directamente.Sin golf en el programa de prueba
fuente