Contexte
Le plus grand diviseur commun ( gcd pour faire court) est une fonction mathématique pratique, car elle possède de nombreuses propriétés utiles. L'un d'eux est l'identité de Bézout : si d = gcd(a, b)
, alors il existe des entiers x
et y
tels que d = x*a + y*b
. Dans ce défi, votre tâche consiste à visualiser cette propriété avec un art ASCII simple.
Contribution
Vos entrées sont deux entiers positifs a
et b
, donnés dans n'importe quel format raisonnable. Vous pouvez également prendre des entrées unaires (répétitions d'un seul caractère ASCII imprimable de votre choix), mais vous devez être cohérent et utiliser le même format pour les deux entrées. Les entrées peuvent être dans n'importe quel ordre et elles peuvent être égales.
Sortie
Votre sortie est une chaîne s
de longueur lcm(a, b) + 1
( lcm représente le plus petit commun multiple). Les caractères de s
représentent des entiers de 0
à lcm(a, b)
. Le caractère s[i]
est en minuscule o
si i
est un multiple de a
ou b
, et un point .
sinon. Notez que zéro est un multiple de chaque nombre. Maintenant, en raison de l'identité de Bézout, il y aura au moins une paire de personnages o
à s
distance exacte gcd(a, b)
. La paire la plus à gauche doit être remplacée par des majuscules O
; c'est la sortie finale.
Exemple
Considérez les entrées a = 4
et b = 6
. Ensuite, nous avons gcd(a, b) = 2
et lcm(a, b) = 12
, donc la longueur de s
sera 13
. Les multiples de a
et b
sont mis en évidence comme suit:
0 1 2 3 4 5 6 7 8 9 10 11 12
o . . . o . o . o . . . o
Il y a deux paires de o
s avec une distance de deux, mais nous ne remplacerons que les plus à gauche par O
s, donc la sortie finale est
o...O.O.o...o
Règles et notation
Vous pouvez écrire un programme complet ou une fonction. Le nombre d'octets le plus bas l'emporte et les failles standard sont interdites.
Cas de test
1 1 -> OO
2 2 -> O.O
1 3 -> OOoo
4 1 -> OOooo
2 6 -> O.O.o.o
2 3 -> o.OOo.o
10 2 -> O.O.o.o.o.o
4 5 -> o...OO..o.o.o..oo...o
8 6 -> o.....O.O...o...o.o.....o
12 15 -> o...........O..O........o.....o.....o........o..o...........o
19 15 -> o..............o...o..........o.......o......o...........o..o..............OO.............o....o.........o........o.....o............o.o..............o.o............o.....o........o.........o....o.............oo..............o..o...........o......o.......o..........o...o..............o
.
,o
ouO
.) Ou faut-il que ce soit1
? Ou0
?