A veces, cuando estoy realmente aburrido ( realmente aburrido), me gusta dibujar un segmento de línea y dibujar puntos en él.
Primero, dibujo un segmento de línea de cierto tamaño, que es 2 ^ N para algún valor de N. La línea estará representada por una serie de .caracteres.
................
Luego, trazo un punto en el extremo izquierdo. Los puntos serán representados por Xpersonajes.
X...............
Entonces, sigo un patrón. Comenzando en el punto trazado más recientemente (que llamaré A), avanzo al siguiente punto trazado (B) en la línea (ajustando según sea necesario). Luego, avanzo al siguiente punto trazado en la línea (C). Luego, trazo un nuevo punto a medio camino entre este tercer punto (C) y el siguiente punto ya trazado (D).
Cada vez que se ajusta alrededor de la línea, el "centro" se determina de manera envolvente. El punto recién trazado siempre está a la derecha de C.
Digamos que la siguiente línea era mi línea actual. Así es como trazaría los siguientes dos puntos. Para este ejemplo, etiquetaré cada punto importante con una 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.
^
Volviendo al ejemplo anterior, el siguiente punto se trazará en el medio de la línea.
X.......X.......
Este es quizás un caso un poco especial: avanzar al siguiente punto simplemente te deja donde comenzaste. El único punto intermedio útil es el punto intermedio "cíclico" (el punto intermedio en la línea), en lugar de trazar un punto encima de sí mismo.
A continuación se muestra la serie de puntos que trazaría en la línea desde aquí hasta el final.
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...
Ya no hay espacio para trazar el siguiente punto, ya que tendría que estar encajado entre dos puntos adyacentes, por lo que he alcanzado la profundidad máxima para el valor dado de N = 4. La última línea en la lista anterior es "completa ".
El reto
El objetivo es escribir el programa más corto / función con nombre que imprimirá / devolverá la línea completa para un valor dado de N. Lo anterior muestra N = 4.
Entrada
La entrada será un único número entero no negativo N. La longitud de la línea generada será 2 ^ N.
Salida
La salida será la línea completa de longitud 2 ^ N, formada por .y Xcaracteres. Una nueva línea final no importa.
Ejemplo 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? ¿Esperascser negativo?