问题描述
假设您是网格上的乌龟。您将得到两个数字f和b,并且您朝东。您按照以下规则在网格上进行游行,计算遇到的每个单元:
- 默认情况下,您将计数写入您所在的单元格,然后向前走。
- 如果该计数可被f整除,则将其写入所在
F
的单元格,然后向右转,然后向前走。 - 如果该计数可被b整除,则将其写入
B
您所在的单元格,然后向左转,然后向前走。 - 如果该计数可被f和b整除,则将其写入所在
FB
的单元格,然后向前走。 - 如果您到达过一个广场,就停下来。
例如,遵循使用f = 3和b = 5的这些规则,将生成如下所示的模式:
F 28 29 FB 1 2 F
26 4
F B B F
23 7
22 8
F B B F
19 11
F 17 16 FB 14 13 F
挑战
编写一个程序或函数,接受对应于f和b的两个数字作为输入,并为上述规则给出的这些数字生成模式作为输出。
格式要求:
- 每个单元格是两个字符宽
- 单元格内容在这两个字符内右对齐
- 同一行中的单元格由空格分隔
- 单元格的第一列必须包含一个非空单元格
- 所有行必须包含非空单元格
- 尾随空格不是必需的,但允许
- 但是,每行的总宽度不得超过非空列数的3倍
您的代码必须适用于提供的测试用例。
不允许出现标准漏洞。
这是代码高尔夫;以字节为单位的最短答案获胜。
测试用例
(为方便起见,在此重复f = 3,b = 5的情况)。
f=3, b=5 ->
F 28 29 FB 1 2 F
26 4
F B B F
23 7
22 8
F B B F
19 11
F 17 16 FB 14 13 F
f=4, b=10 ->
F 25 26 27 F
23 29
22 1 2 3 F
21 5
FB 6
19 7
18 B 9 F
17 11
F 15 14 13 F
f=3, b=11 ->
F 16 17 F
14 19
13 1 2 F
F B 4
10 5
F 8 7 F
f=5, b=9 ->
F 41 42 43 44 1 2 3 4 F
39 6
38 7
37 8
F B B F
34 11
33 12
32 13
31 14
F 29 28 B B 17 16 F
26 19
F 24 23 22 21 F
f=5, b=13 ->
F 31 32 33 34 F
29 36
28 1 2 3 4 F
27 6
F B 7
24 8
23 9
22 B 12 11 F
21 14
F 19 18 17 16 F