Descripción del problema
Imagina que eres una tortuga en una cuadrícula. Te dan dos números f y b , y te enfrentas al este. Realiza una marcha a través de la cuadrícula, contando cada una de las celdas que encuentra, de acuerdo con las siguientes reglas:
- De forma predeterminada, escribe el recuento en la celda en la que se encuentra y luego camina hacia adelante.
- Si el recuento es divisible por f , escribe
F
en la celda en la que se encuentra, luego gira a la derecha y luego camina hacia adelante. - Si el recuento es divisible por b , escribe
B
en la celda en la que se encuentra, luego gira a la izquierda y luego camina hacia adelante. - Si el recuento es divisible por f y b , escribe
FB
en la celda en la que se encuentra y luego camina hacia adelante. - Si llegas a una plaza en la que ya has estado, te detienes.
Por ejemplo, seguir estas reglas usando f = 3 y b = 5 generará un patrón como este:
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
El reto
Escriba un programa o función que acepte dos números como entrada, correspondientes a f y b , y produzca como salida el patrón para estos números dado por las reglas anteriores.
Requisitos de formato:
- Cada celda tiene dos caracteres de ancho
- El contenido de la celda está alineado a la derecha dentro de estos dos caracteres
- Las celdas en la misma fila están delimitadas por un espacio
- La primera columna de celdas debe contener una celda no vacía
- Todas las filas deben contener celdas no vacías
- No se requiere espacio en blanco al final, pero está permitido
- Sin embargo, el ancho total de cada fila no debe exceder 3 veces el número de columnas no vacías
Su código debe funcionar para los casos de prueba proporcionados.
Las lagunas estándar no están permitidas.
Este es el código de golf; La respuesta más corta en bytes gana.
Casos de prueba
(f = 3, b = 5 caso repetido aquí como una conveniencia de cortesía).
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