CJam, 32 30 29 28 bytes
ri_"/\ /"2/f*)@,\f>+_z..e>N*
Teste aqui.
Eu estava tentando ajudar Reto a responder sua resposta de CJam, mas acabei tendo uma solução que não tinha nada a ver com a dele, então achei que seria melhor eu mesma publicá-la.
Explicação
Isso faz uso da simetria da saída. Em particular, o fato de que a saída é igual à sua transposição.
Primeiro, geramos as primeiras N+1
linhas, mas sem a borda esquerda:
ri e# Read input and convert to integer N.
_ e# Duplicate.
"/\ /"2/ e# Push an array with two strings: ["/\" " /"]
f* e# Repeat each of the two strings N times. That gives the first two rows.
) e# Detach the second row.
@, e# Pull up the other copy of N and turn into range [0 1 ... N-1].
\f> e# For each element i in that range, discard the first i characters of
e# the second row.
+ e# Add all those lines back to the first row.
Agora, temos uma matriz de seqüências de caracteres representando a seguinte grade:
/\/\/\/\
/ / / /
/ / / /
/ / /
/ / /
A transposição disso é assim:
/ / /
\/ /
/ / /
\/ /
/ / /
\/ /
/ /
\/
Juntos, eles têm todos os caracteres não espaciais de que precisamos. Agora podemos usar a dica de radar de Dennis para combinar duas grades ASCII em uma, obtendo o máximo de cada par de caracteres correspondente. Em todas as posições em que as duas grades diferem, uma terá um espaço (ou nada) e a outra terá o personagem que estamos procurando. Quando uma lista em uma operação vetorizada é maior que a outra, os elementos adicionais da lista mais longa serão simplesmente mantidos, e é exatamente isso que estamos procurando. Nos outros casos, o caractere não espacial será sempre o máximo dos dois caracteres:
_z e# Duplicate the grid and transpose it.
..e> e# For each pair of characters in corresponding positions, pick the maximum.
N* e# Join the lines by linefeed characters.
;
s.Python 2, 80 bytes
fonte
Mathematica,
123122121 bytesProvavelmente poderia ser jogado ainda mais.
fonte
Java - 141 bytes
Não é o mais curto, é claro, mas é bom ter uma solução Java:
Ungolfed
Entrada
Saída
fonte
Pyth, 30 bytes
Experimente aqui .
fonte
JavaScript,
128125123114 bytesDe-golfe (também convertido para ES5) + demo:
fonte
Ruby, 50 bytes
No programa de teste:
O loop imprime 2 linhas para cada iteração de i = 0 a i = n-1.
A segunda linha é sempre
'\'
seguida por ni incidências de'/ '
.A primeira linha é igual à segunda linha da iteração anterior, mas com a
'\'
falta (portanto, armazenamos esse valors
quando imprimimos a segunda linha da iteração anterior.)A única exceção é a iteração zero, que é tratada inicializando
s
em'/\'*n
.fonte
Javascript (ES6),
10710410098979190 bytesPrimeiro post aqui!
Costumava usar, mas agora usa , semelhante ao Ruby's .
Array(len)
.
join(str)
String.repeat(len)
operator*(str,len)
Ungolfed:
Graças a:
107 => 104 bytes: @insertusernamehere
97 => 90 bytes: @ user81655
fonte
p=>{s=Array(++p).join('/\\')+'\n';for(i=p;i>2;i--,s+='\\'+o+o)o=Array(i).join('/ ')+'\n';return s+'\\/'}
.repeat
método.Python 2, 66 bytes
Bem direto. O valor
n
é o número de/
na linha eb
diz se a linha começa com\
. O valor deb
alterna entre 0 e 1 en
diminui a cada segundo passo. A condição de terminação feia para quandon=1, b=0
. A alternativa de umexec
loop teria a questão de precisar de muitas escapadas"'\\\\'"
.Fiquei surpreso ao encontrar essa abordagem mais curta do que usar um único número
k=2*n+b
. São 68 bytes:Uma estratégia alternativa evitaria uma separação
print
para a linha superior, mas eu não via uma maneira concisa.fonte
Minkolang 0.14 , 46 bytes
Tenho certeza de que isso pode ser jogado, mas são quatro da manhã aqui e preciso ir para a cama.
Experimente aqui.
Explicação
fonte
Lote, 121 bytes
Ou, se unário for aceitável, 107 bytes:
Invoque com o número apropriado de 1s.
fonte
Matlab, 122 bytes
fonte
Haskell, 99 bytes
Duas soluções de igual comprimento.
Ligue
f
.e
fonte
Haskell, 96
Na verdade, isso não é competitivo em relação à solução Haskell existente, pois salva 5 caracteres retornando em vez de imprimir uma string. Estou publicando apenas para mostrar como a abordagem de padrões infinitos se compara à abordagem baseada em coordenadas. Notas:
p
pode ser incorporado para nenhuma alteração no comprimento.[t n l|(n,l)<-...]
economiza 2 sobre(map(uncurry t)$...)
.fonte
Ceilão, 100
Isso apresenta uma "lista de argumentos nomeados" para
join
(sem argumentos nomeados, mas uma compreensão iterável) e vários usosString.repeat
(um dos quais realmente significa "incluir apenas para ímparesi
").Formatado:
fonte
PHP, 117 bytes
Supõe que os avisos estão desativados e a entrada é obtida na linha de comando.
Ungolfed:
Comentários são bem-vindos :)
fonte