Description du problème
Imagine que tu es une tortue sur une grille. On vous donne deux nombres f et b , et vous faites face à l'est. Vous effectuez une marche à travers la grille, en comptant chacune des cellules rencontrées, selon les règles suivantes:
- Par défaut, vous écrivez le nombre dans la cellule dans laquelle vous vous trouvez, puis vous avancez.
- Si le nombre est divisible par f , vous écrivez
F
dans la cellule dans laquelle vous vous trouvez, puis tournez à droite puis avancez. - Si le nombre est divisible par b , vous écrivez
B
dans la cellule dans laquelle vous vous trouvez, puis tournez à gauche et avancez. - Si le nombre est divisible par f et b , vous écrivez
FB
dans la cellule où vous vous trouvez, puis avancez. - Si vous atteignez une place où vous êtes déjà allé, vous vous arrêtez.
Par exemple, suivre ces règles en utilisant f = 3 et b = 5 va générer un motif comme celui-ci:
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
Le défi
Ecrivez un programme ou une fonction qui accepte deux nombres en entrée, correspondant à f et b , et produit en sortie le motif pour ces nombres donné par les règles ci-dessus.
Conditions de formatage:
- Chaque cellule est large de deux caractères
- Le contenu de la cellule est aligné à droite entre ces deux caractères.
- Les cellules de la même ligne sont délimitées par un espace
- La première colonne de cellules doit contenir une cellule non vide
- Toutes les lignes doivent contenir des cellules non vides
- Les espaces de fin ne sont pas obligatoires, mais autorisés
- Cependant, la largeur totale de chaque ligne ne doit pas dépasser 3 fois le nombre de colonnes non vides
Votre code doit fonctionner pour les cas de test fournis.
Les failles standard sont interdites.
C'est du code golf; réponse la plus courte en octets gagne.
Cas de test
(f = 3, b = 5 cas répété ici à titre gracieux).
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