Às vezes, quando estou realmente entediado ( muito entediado), gosto de desenhar um segmento de linha e desenhar pontos nele.
Primeiro, eu desenho um segmento de linha de um determinado tamanho, que é 2 ^ N para algum valor de N. A linha será representada por uma série de .caracteres.
................
Então, traço um ponto no lado esquerdo. Os pontos serão representados por Xcaracteres.
X...............
Então, sigo um padrão. Começando no ponto plotado mais recentemente (que chamarei de A), avanço para o próximo ponto plotado (B) na linha (contornando conforme necessário). Então, eu avanço para o próximo ponto plotado na linha (C). Então, traço um novo ponto a meio caminho entre este terceiro ponto (C) e o próximo ponto já plotado (D).
Sempre que você contorna a linha, o "meio" é determinado da maneira de quebra. O ponto recém-plotado está sempre à direita de C.
Digamos que a seguinte linha fosse minha linha atual. Aqui está como eu traçaria os próximos dois pontos. Neste exemplo, vou rotular cada ponto importante com uma letra.
X...A...X.X...X.
^
X...A...B.X...X.
^
X...A...B.C...X.
^
X...A...B.C...D.
^
X...X...X.X.A.X.
^
X...X...X.X.A.B.
^
C...X...X.X.A.B.
^
C...D...X.X.A.B.
^
X.A.X...X.X.X.X.
^
Voltando ao exemplo anterior, o próximo ponto será plotado no meio da linha.
X.......X.......
Talvez esse seja um caso especial: avançar para o próximo ponto simplesmente deixa você onde começou. O único ponto intermediário útil é o ponto intermediário "cíclico" (o ponto intermediário da linha), em vez de plotar um ponto em cima de si.
Abaixo está a série de pontos que eu traçaria na linha daqui até o fim.
X.......X.......
X.......X...X...
X.......X.X.X...
X...X...X.X.X...
X...X...X.XXX...
X.X.X...X.XXX...
X.X.X...XXXXX...
Não há mais espaço para plotar o próximo ponto, pois ele teria que ser entalado entre dois pontos adjacentes; portanto, alcancei a profundidade máxima para o valor especificado de N = 4. A última linha da lista acima está "completa" . "
O desafio
O objetivo é escrever o programa mais curto / função nomeada que imprimirá / retornará a linha concluída para um determinado valor de N. O exemplo acima mostra N = 4.
Entrada
A entrada será um único número inteiro não negativo N. O comprimento da linha gerada será então 2 ^ N.
Resultado
A saída será a linha completa de comprimento 2 ^ N, formada por .e Xcaracteres. Uma nova linha à direita não importa.
Exemplo de E / S
0
X
1
XX
2
X.XX
3
X.X.XXX.
4
X.X.X...XXXXX...
5
X.X.X...X...X...X.XXX.XXX.......
(c%b+b)%b? Você esperacser negativo?