описание проблемы
Представьте, что вы черепаха на сетке. Вам даны два числа 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