有时候,当我真的很无聊时,我喜欢画线段并在其上画点。
首先,我绘制一个特定大小的线段,对于某些N值,该线段为2 ^ N。该线将由一系列.字符表示。
................
然后,在左端绘制一个点。点将用X字符表示。
X...............
然后,我遵循一个模式。从最近绘制的点(我将其称为A)开始,前进到直线上的下一个绘制的点(B)(必要时环绕)。然后,我前进到线(C)上的下一个绘制点。然后,我在第三个点(C)和下一个已经绘制的点(D)之间绘制了一个新点。
每当绕线时,“中间”都是以绕线方式确定的。新绘制的点始终在C的右侧。
假设下一行是我的当前行。这是我如何绘制接下来的两点。在此示例中,我将用字母标记每个重要点。
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.
^
返回上一个示例,下一点将绘制在该线的中间。
X.......X.......
这可能是一个特例:前进到下一个点只会使您离开起点。唯一有用的中点是“循环”中点(直线上的中点),与在其顶部绘制点相反。
以下是我从此处到末端在线上绘制的一系列点。
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 = 4,我已经达到了最大深度。上面列表中的最后一行是“完成。”
挑战
目的是编写最短的程序/命名函数,以给定值N打印/返回完成的行。上面显示N = 4。
输入值
输入将是单个非负整数N。然后,生成的行的长度将为2 ^ N。
输出量
输出将是由.和X字符组成的长度为2 ^ N的完整行。尾随换行符无关紧要。
示例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?您期望c负面吗?