A volte, quando sono davvero annoiato ( davvero annoiato), mi piace disegnare un segmento di linea e disegnare punti su di esso.
Innanzitutto, disegno un segmento di una certa dimensione, che è 2 ^ N per un valore di N. La linea sarà rappresentata da una serie di .caratteri.
................
Quindi, tracciamo un punto all'estremità sinistra. I punti saranno rappresentati da Xpersonaggi.
X...............
Quindi, seguo un modello. A partire dal punto tracciato più di recente (che chiamerò A), avanzerò al punto tracciato successivo (B) sulla linea (avvolgendo se necessario). Quindi, passo al prossimo punto tracciato sulla linea (C). Quindi, tracciamo un nuovo punto a metà tra questo terzo punto (C) e il successivo punto già tracciato (D).
Ogni volta che avvolgi la linea, il "mezzo" viene determinato in modo avvolgente. Il punto appena tracciato è sempre alla destra di C.
Diciamo che la seguente riga era la mia linea corrente. Ecco come vorrei tracciare i prossimi due punti. Per questo esempio, etichetterò ogni punto importante con una lettera.
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.
^
Tornando all'esempio precedente, il punto successivo verrà tracciato nel mezzo della linea.
X.......X.......
Questo è forse un po 'un caso speciale: passare al punto successivo ti lascia semplicemente dove hai iniziato. L'unico punto a metà utile è il punto a metà "ciclico" (il punto a metà sulla linea), invece di tracciare un punto sopra se stesso.
Di seguito è riportata la serie di punti che vorrei tracciare sulla linea da qui alla fine.
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...
Non c'è più spazio per tracciare il punto successivo, poiché dovrebbe essere incuneato tra due punti adiacenti, quindi ho raggiunto la profondità massima per il valore dato di N = 4. L'ultima riga dell'elenco sopra è "completa ".
La sfida
L'obiettivo è scrivere il programma più breve / la funzione con nome che stamperà / restituirà la riga completata per un dato valore di N. Quanto sopra mostra N = 4.
Ingresso
L'input sarà un singolo intero non negativo N. La lunghezza della linea generata sarà quindi 2 ^ N.
Produzione
L'output sarà la riga completata di lunghezza 2 ^ N, formata da .e Xcaratteri. Una nuova riga finale non ha importanza.
Esempio di I / O
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? Ti aspetticdi essere negativo?