À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 X
caracteres.
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 X
caracteres. 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ê esperac
ser negativo?