Escreva um programa ou função que desenhe uma cadeia de montanhas, onde cada pico de montanha maior subsequente está "atrás" dos da frente e alterna qual lado é visível.
Esta é uma cordilheira de tamanho 1
/\
Esta é uma cordilheira de tamanho 2
/\
/\ \
Esta é uma cordilheira de tamanho 3
/\
/ /\
/ /\ \
Esta é uma cordilheira de tamanho 4
/\
/\ \
/ /\ \
/ /\ \ \
Esta é uma cordilheira de tamanho 5
/\
/ /\
/ /\ \
/ / /\ \
/ / /\ \ \
E assim por diante.
Entrada
Um número inteiro positivo único em qualquer formato conveniente , n > 0
.
Saída
Uma representação em arte ASCII da cordilheira, seguindo as regras acima. Novas linhas à esquerda / à direita ou outro espaço em branco são opcionais, desde que os picos sejam alinhados adequadamente.
Regras
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
JavaScript (ES6), 75 bytes
Atualmente, o programa completo é um pouco mais curto que a função recursiva:
fonte
Python 2, 67 bytes
Imprime linha por linha, acumulando a sequência
s
adicionando alternadamente uma barra à esquerda ou à direita com base na paridade atual den
. Prefixos comn
espaços.Uma maneira alternativa de atualizar era do mesmo tamanho:
Um método recursivo era mais longo (70 bytes).
fonte
Haskell, 77 bytes
Uso:
Imprime linha por linha, acumulando a sequência s adicionando alternadamente uma barra à esquerda ou à direita com base na paridade atual de n. Prefixos com n-1 espaços.
fonte
Lote, 202 bytes
Recebe a entrada como um parâmetro da linha de comando. Passa para executar o último loop.
fonte
Ruby, 61 bytes
Uma porta bastante direta da resposta JavaScript da ETHproductions .
Veja em repl.it: https://repl.it/EPU5/1
Ungolfed
fonte
Haskell,
117 107 105 9790 bytesExperimente em Ideone. Editar: salvou 8 bytes com uma idéia de Neil.
Versão não destruída:
Abordagem recursiva. A forma de
n
é gerada adicionando um espaço na frente de cada linha dan-1
forma e pegando a última linha den-1
e adicionando"/ "
antes sen
for ímpar ou" \"
depois sen
for par ... ou então pensei antes de perceber que esse último passo é revertido para todas as etapas recursivas quando a finaln
é ímpar. Portanto,b
é passada uma bandeira que alterna cada chamada recursiva e determina se a próxima parte da montanha é adicionada à esquerda ou à direita.fonte
b
aodd n
cada vez, você não pode simplesmente passar uma bandeira no início e colocá-la em todas as chamadas recursivas? Algo comof n = unlines(p 0 n)
elet m = p (1-b) (n-1)
.-b
outro char off.b
ser0
ou1
.Java 7.130 bytes
Ungolfed
fonte
n%2
paran--%2
e ambos--n
paran
. EDIT: E mais 1 adicionando,x=s+"\n"
e alterando amboss+"\n"
parax
. (Assim, no 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 (função)
Função: -
Programa completo: -
NOTA: a função
_getch()
pode ter diferentes nomes de protótipos em diferentes compiladores.fonte