fundo
O maior divisor comum ( gcd para abreviar) é uma função matemática conveniente, pois possui muitas propriedades úteis. Uma delas é a identidade de Bézout : se d = gcd(a, b)
, então existem inteiros x
e y
tal d = x*a + y*b
. Nesse desafio, sua tarefa é visualizar essa propriedade com arte ASCII simples.
Entrada
Suas entradas são dois números inteiros positivos a
e b
, dados em qualquer formato razoável. Você também pode receber entradas unárias (repetições de um único caractere ASCII imprimível de sua escolha), mas deve ser consistente e usar o mesmo formato para ambas as entradas. As entradas podem estar em qualquer ordem e podem ser iguais.
Saída
Sua saída é uma sequência s
de comprimento lcm(a, b) + 1
( lcm significa o menor múltiplo comum). Os caracteres de s
representam números inteiros de 0
até lcm(a, b)
. O caractere s[i]
é minúsculo o
se i
for múltiplo de a
ou b
, e um período .
caso contrário. Observe que zero é um múltiplo de cada número. Agora, devido à identidade de Bézout, haverá pelo menos um par de caracteres o
na s
distância exata gcd(a, b)
. O par mais à esquerda deve ser substituído por O
s maiúsculo ; este é o resultado final.
Exemplo
Considere as entradas a = 4
e b = 6
. Então nós temos gcd(a, b) = 2
e lcm(a, b) = 12
, portanto, o comprimento de s
será 13
. Os múltiplos de a
e b
são destacados da seguinte forma:
0 1 2 3 4 5 6 7 8 9 10 11 12
o . . . o . o . o . . . o
Existem dois pares de o
s com a distância dois, mas substituiremos apenas os mais à esquerda por O
s, então a saída final é
o...O.O.o...o
Regras e pontuação
Você pode escrever um programa completo ou uma função. A menor contagem de bytes vence e as brechas padrão não são permitidas.
Casos de teste
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 precisa ser1
? Ou0
?