Escreva um programa (ou função) que receba um número inteiro positivo.
Se a entrada for 1
, imprima (ou devolva) dois diamantes vizinhos lado a lado, cada um com um comprimento lateral de 1 barra:
/\/\
\/\/
Para cada entrada N
maior que 1, observe a saída de N-1
e para cada par de diamantes vizinhos, insira um novo diamante entre eles, cujo comprimento lateral seja a soma dos comprimentos laterais dos dois vizinhos. Imprima (ou devolva) esse novo padrão de diamante.
Então, quando 2
é entrada, examinamos a saída 1
e podemos ver que existem dois diamantes vizinhos, ambos com comprimento lateral 1. Então, inserimos um diamante com comprimento lateral 2 (1 + 1) entre eles:
/\
/\/ \/\
\/\ /\/
\/
Para entrada 3
, examinamos a saída 2
e adicionamos dois diamantes com comprimento lateral 3 (1 + 2 e 2 + 1) entre os dois pares de diamantes vizinhos:
/\ /\
/ \ /\ / \
/\/ \/ \/ \/\
\/\ /\ /\ /\/
\ / \/ \ /
\/ \/
Continuando o padrão, a saída para 4
é:
/\ /\
/\ / \ / \ /\
/ \ /\ / \ / \ /\ / \
/ \ / \ / \ /\ / \ / \ / \
/\/ \/ \/ \/ \/ \/ \/ \/\
\/\ /\ /\ /\ /\ /\ /\ /\/
\ / \ / \ / \/ \ / \ / \ /
\ / \/ \ / \ / \/ \ /
\/ \ / \ / \/
\/ \/
E assim por diante.
Suas saídas podem ter espaços à direita em qualquer linha, mas apenas até uma nova linha à direita (e nenhuma linha de frente).
O código mais curto em bytes vence.
Respostas:
Pitão,
5049 bytesDemonstração
Explicação:
fonte
u.iGsM.:G2tQjT9
na minha solução (parcial). Eu nunca olhei para a sua resposta ...Lisp comum, 425
Exemplo
Ungolfed
fonte
CJam,
595857 bytesAgradecemos a @ MartinBüttner por jogar 1 byte.
Experimente on-line no intérprete CJam .
Idéia
Para a entrada 3 , por exemplo, geramos
girando a corda
\
e substituindo algumas barras invertidas por barras.Em seguida, compactamos a matriz resultante (transpor linhas e colunas) para obter a metade inferior da saída desejada.
A metade superior é byte por byte igual à metade inferior no sentido inverso.
Código
fonte
Rev 1: Ruby 170
Novo método, evitando criar o grande diamante e reduzir.
Rev 0: Ruby, 187
Os tamanhos dos diamantes são calculados de acordo com a relação de recorrência de https://oeis.org/A002487. Assim, criamos a matriz que
a
contém todos os elementos para todas as linhas de 1 an
. Estamos interessados apenas nos últimos1<<n-1
elementos (Ruby nos permite obtê-los da matriz usando índices negativos, -1 sendo o último elemento da matriz), mais um inicial1
da posição 0.Linha por linha e diamante por diamante, desenhamos a linha de caracteres do maior diamante e recortamos as colunas do meio para obter a linha do diamante necessário. Rev 1 é mais curto, mas gostei desse método.
A aritmética modular é usada para contornar, de modo que a mesma expressão adicione todos
/
diretamente e da mesma forma uma expressão adicione todos\
diretamente.Ungolfed in program program
fonte