Hintergrund
Der größte gemeinsame Divisor (kurz gcd ) ist eine bequeme mathematische Funktion, da er viele nützliche Eigenschaften hat. Eines davon ist Bézouts Identität : Wenn d = gcd(a, b)
, dann gibt es ganze Zahlen x
und y
solche, die es gibt d = x*a + y*b
. In dieser Herausforderung besteht Ihre Aufgabe darin, diese Eigenschaft mit einfacher ASCII-Grafik zu visualisieren.
Eingang
Ihre Eingaben bestehen aus zwei positiven ganzen Zahlen a
und b
werden in einem angemessenen Format angegeben. Sie können auch unäre Eingaben vornehmen (Wiederholungen eines einzelnen druckbaren ASCII-Zeichens Ihrer Wahl), müssen jedoch konsistent sein und für beide Eingaben dasselbe Format verwenden. Die Eingaben können in beliebiger Reihenfolge und gleich sein.
Ausgabe
Ihre Ausgabe ist eine Zeichenfolge mit s
einer Länge lcm(a, b) + 1
( lcm steht für das niedrigste gemeinsame Vielfache). Die Zeichen von stehen s
für Ganzzahlen von 0
bis lcm(a, b)
. Das Zeichen s[i]
ist ein Kleinbuchstabe, o
wenn i
es ein Vielfaches von a
oder ist b
, und .
ansonsten ein Punkt . Beachten Sie, dass Null ein Vielfaches jeder Zahl ist. Aufgrund von Bézouts Identität wird es nun mindestens ein Zeichenpaar geben, o
in s
dessen Abstand genau ist gcd(a, b)
. Das am weitesten links stehende Paar wird durch O
s in Großbuchstaben ersetzt . Dies ist die endgültige Ausgabe.
Beispiel
Betrachten Sie die Eingänge a = 4
und b = 6
. Dann haben wir gcd(a, b) = 2
und lcm(a, b) = 12
, so wird die Länge s
sein 13
. Die Vielfachen von a
und b
werden wie folgt hervorgehoben:
0 1 2 3 4 5 6 7 8 9 10 11 12
o . . . o . o . o . . . o
Es gibt zwei Paare von o
s mit Abstand zwei, aber wir werden nur die ganz linken durch O
s ersetzen , so dass die endgültige Ausgabe erfolgt
o...O.O.o...o
Regeln und Wertung
Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.
Testfälle
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
oderO
.) Oder muss es sein1
? Oder0
?