Escriba un programa o función que dibuje una cadena montañosa, donde cada pico de montaña más grande posterior esté "detrás" de los que están al frente, y alterna qué lado es visible.
Esta es una cordillera de tamaño 1
/\
Esta es una cordillera de tamaño 2
/\
/\ \
Esta es una cordillera de tamaño 3
/\
/ /\
/ /\ \
Esta es una cordillera de tamaño 4
/\
/\ \
/ /\ \
/ /\ \ \
Esta es una cordillera de tamaño 5
/\
/ /\
/ /\ \
/ / /\ \
/ / /\ \ \
Y así.
Entrada
Un número entero positivo solo en cualquier formato conveniente , n > 0
.
Salida
Una representación ASCII-art de la cordillera, siguiendo las reglas anteriores. Las nuevas líneas iniciales / finales u otros espacios en blanco son opcionales, siempre que los picos se alineen adecuadamente.
Reglas
- 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).
JavaScript (ES6), 75 bytes
El programa completo es actualmente un poco más corto que la función recursiva:
fuente
Python 2, 67 bytes
Imprime línea por línea, acumulando la cadena
s
agregando alternativamente una barra diagonal a la izquierda o derecha según la paridad actual den
. Prefijos conn
espacios.Una forma alternativa de actualizar era la misma longitud:
Un método recursivo fue más largo (70 bytes).
fuente
Haskell, 77 bytes
Uso:
Imprime línea por línea, acumulando la cadena s agregando alternativamente una barra inclinada a la izquierda o derecha según la paridad actual de n. Prefijos con n-1 espacios.
fuente
Lote, 202 bytes
Toma la entrada como un parámetro de línea de comando. Se cae para ejecutar el último bucle.
fuente
Ruby, 61 bytes
Un puerto bastante sencillo de la respuesta JavaScript ETHproductions .
Véalo en repl.it: https://repl.it/EPU5/1
Sin golf
fuente
Haskell,
117107105 9790 bytesPruébalo en Ideone. Editar: guardado 8 bytes con una idea de Neil.
Versión sin golf:
Enfoque recursivo. La forma para
n
se genera al agregar un espacio en frente de cada línea de lan-1
forma y tomar la última línea den-1
y agregar"/ "
antes sin
es impar o" \"
después sin
es par ... o eso pensé antes de notar que este último paso se invierte todos los pasos recursivos cuando el finaln
es impar. Por lo tanto,b
se pasa una bandera que alterna cada llamada recursiva y determina si la siguiente parte de la montaña se agrega a la izquierda o la derecha.fuente
b
aodd n
cada vez, es posible que no sólo tiene que pasar una bandera en al principio y al darle la vuelta en cada llamada recursiva? Algo así comof n = unlines(p 0 n)
ylet m = p (1-b) (n-1)
.-b
es otro char off.b
ser0
o1
.Java 7.130 bytes
Sin golf
fuente
n%2
an--%2
, y ambos--n
an
. EDITAR: Y 1 más agregando,x=s+"\n"
y cambiando amboss+"\n"
ax
. (Entonces, en total:String f(int n,String s){String l="",x=s+"\n";for(int i=1;i++<n;l+=" ");return n>1?n--%2<1?l+x+f(n,s+" \\"):l+x+f(n,"/ "+s):s;}
127 bytes )C ++ 138 (función)
Función: -
Programa completo: -
NOTA: la función
_getch()
puede tener diferentes nombres de prototipo en diferentes compiladores.fuente