tło
Największy wspólny dzielnik ( w skrócie gcd ) jest wygodną funkcją matematyczną, ponieważ ma wiele przydatnych właściwości. Jednym z nich jest tożsamość Bézouta : jeśli d = gcd(a, b)
, to istnieją liczby całkowite x
i y
takie tam d = x*a + y*b
. W tym wyzwaniu Twoim zadaniem jest wizualizacja tej właściwości za pomocą prostej grafiki ASCII.
Wkład
Twoje wejścia są dwie dodatnie liczby całkowite a
i b
, biorąc pod uwagę w każdym rozsądnym formacie. Możesz również przyjmować jednoargumentowe dane wejściowe (powtórzenia jednego wybranego znaku ASCII do wydrukowania), ale musisz być spójny i używać tego samego formatu dla obu danych wejściowych. Dane wejściowe mogą być w dowolnej kolejności i mogą być równe.
Wydajność
Twój wynik jest ciągiem s
długości lcm(a, b) + 1
( lcm oznacza najniższą wspólną wielokrotność). Znaki s
reprezentują liczby całkowite od 0
do lcm(a, b)
. Znak s[i]
jest małą literą, o
jeśli i
jest wielokrotnością a
lub b
, a kropką w .
innym przypadku. Zauważ, że zero jest wielokrotnością każdej liczby. Teraz, ze względu na tożsamość Bézouta, będzie co najmniej jedna para znaków, o
w s
których odległości jest dokładnie gcd(a, b)
. Najbardziej z lewej taka para ma zostać zastąpiona wielkimi literami O
s; to jest końcowy wynik.
Przykład
Rozważ dane wejściowe a = 4
i b = 6
. Mamy więc, gcd(a, b) = 2
a lcm(a, b) = 12
więc długość s
będzie 13
. Wielokrotności a
i b
są podświetlone w następujący sposób:
0 1 2 3 4 5 6 7 8 9 10 11 12
o . . . o . o . o . . . o
Istnieją dwie pary o
s z odległością 2, ale zamienimy tylko te lewe z lewej na O
s, więc końcowy wynik to
o...O.O.o...o
Zasady i punktacja
Możesz napisać pełny program lub funkcję. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone.
Przypadki testowe
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
lubO
.) Czy też ma być1
? Czy0
?