美观的除数树是输入的除数的树n
,对于任何合数m
,具有的两个孩子的节点对除数是最接近的平方根的m
。左节点应为的较小除数,m
右节点应为的较大除数m
。树中的素数不应有子节点。您的树可能是文字艺术或图像的形式。文字艺术输出的规则如下。
间距规则
为了使树上的节点间隔开,我们有以下规则:
- 从根到给定深度的节点应全部位于输出中的同一行文本上。
/ \不/ \ / \ / 3 2 3 2
- 对于左节点,如果节点是一个数字,则输入分支应该在右上角,否则在最后一个数字的正上方。例:
/与/ 3720
- 对于右边的节点,如果节点是一位数字,则输入分支应该在左上角,否则在第一位数字的正上方。例:
\ AND \ 7243
- 对于传出的左分支,分支应在数字左侧开始一个空格。例:
275 / 11
- 对于传出的右分支,分支应在数字右边开始一个空格。例:
275 \ 25
- 树的同一层上的任何两个节点之间至少应有两个空格。同时,在树的同一层上的任何两个子树之间的空间应尽可能少。
该树不起作用,因为“子树”太近了。 504 / \ / \ / \ / \ 21。24 / \。/ \ / \。/ \ 3 7. 4 6 。/// .2 2 2 3 虽然这棵树的分支之间确实有足够的空间。 504 / \ / \ / \ / \ / \ 21 ... 24 / \ ... / \ / \ ... / \ 3 7 ... 4 6 ... / \ / \ ... 2 2 2 3
- 如果树上的任何两个子树过于靠近,则可以通过
/\
在父树上方的树中添加另一行分支来将它们分开。
441 / \最后一行尚未填写,我们已经用完了空间。 21 21 /// 添加另一行分支 441 / \差不多,但是7和3靠得太近。 / \应该再多一行。 21 21 /// 3 7 3 7 添加另一行分支 441 / \我们完成了。 / \ / \ 21 21 /// 3 7 3 7
例子
举一个完整的例子,除数树为24,如下所示:
24
/ \
/ \
4 6
/ \ / \
2 2 2 3
4和6是最接近24平方根的除数对。4在左边,因为它较小。在下一行,数字3左边的数字2,因为它较小。
63的除数树应如下所示:
63 and NOT like this 63
/ \ / \
7 9 3 21
/ \ / \
3 3 7 3
在不正确的树中,3和21不是最接近63平方根的除数对,并且3和7没有正确排序。但是,在21上的分支位置是正确的。
对于42,您应该具有:
42 and NOT 42
/ \ / \
6 7 21 2
/ \ / \
2 3 3 7
让我们看一下720。请注意,我们需要从720
到这五个层次的分支,以便正确地与24
和30
子树隔开。另外,请注意24
和30
具有两个分支级别,因为4
和6
具有需要正确间距的子节点,并且的子节点30
需要与的子节点处于同一级别24
。
720
/ \
/ \
/ \
/ \
/ \
24 30
/ \ / \
/ \ / \
4 6 5 6
/ \ / \ / \
2 2 2 3 2 3
挑战
- 您的任务是为input建立正确间隔的美观的除数树
n
,其中n
正整数大于1。 - 您的输出可能包含前导和尾随空格以及前导和尾随换行符,但必须符合上述给定的间距规则。
- 您的输出被允许为:文字艺术,图像(如果需要,可以添加其他格式)。
- 对于图像,请确保树的节点间距适当,并且树中相同高度的节点在图像中的相同高度。
- 这是代码高尔夫。最少的字节数(或等效字节)获胜。
感谢Stewie Griffin对这个想法的思考,并非常感谢Peter Taylor,Martin Ender,Mego和EᴀsᴛᴇʀʟʏIʀᴋ在重写规范方面的帮助。像往常一样,任何建议或更正均深表感谢。祝你好运,打高尔夫球!
更多测试用例:
2
4
/ \
2 2
20
/ \
4 5
/ \
2 2
323
/ \
17 19
362880
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
576 630
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
/ \ / \
24 24 21 30
/ \ / \ / \ / \
/ \ / \ / \ / \
4 6 4 6 3 7 5 6
/ \ / \ / \ / \ / \
2 2 2 3 2 2 2 3 2 3
1286250
/ \
/ \
/ \
/ \
/ \
1050 1225
/ \ / \
/ \ / \
/ \ / \
30 35 35 35
/ \ / \ / \ / \
5 6 5 7 5 7 5 7
/ \
2 3