O algoritmo euclidiano é um algoritmo amplamente conhecido para calcular o maior divisor comum (MDC) de dois números inteiros positivos.
O algoritmo
Para os propósitos deste desafio, o algoritmo é descrito abaixo:
Exiba as duas entradas como linhas adjacentes de um determinado caracter,
por exemplo, uma entrada de3,4
pode ser representada pelas linhas adjacentes000
e0000
Transforme os primeiros
length(short_line)
caracteres na linha mais longa em outro, diga-
agora que parece000
e---0
Elimine os primeiros
length(short_line)
caracteres na linha mais longa.
agora000
,0
Repetir os passos 2 e 3 até que os dois têm a mesma duração, utilizando as linhas mais curtas e mais longas depois de cada iteração, por exemplo
000
,0
-00
,0
00
,0
-0
,0
0
,0
- Você pode optar por parar aqui ou continuar a iteração e transformar uma das linhas em uma linha vazia.
Cada uma dessas etapas deve ser separada por um intervalo entre 0,3s e 1,5s.
O desafio
Escreva um programa que, dados dois números naturais como entrada, crie uma saída exatamente igual à saída do algoritmo acima. Você pode usar outros caracteres ASCII imprimíveis que não sejam espaços em branco além de 0
e -
, mas seja consistente e use apenas dois caracteres. Você também pode usar algoritmos alternativos, desde que a saída, incluindo o tempo, seja exatamente a mesma que seria produzida pelo algoritmo acima.
Exemplos
Este é um exemplo com entrada 24,35
, que são coprimes, portanto seu GCD é 1.
Este é um exemplo com entrada 16,42
, que possui o GCD 2.
Regras
- Este é um código de golfe , então os bytes mais curtos vencem
- Aplicam-se brechas padrão
- Você pode assumir que a entrada seja um número inteiro decimal positivo
Esclarecimentos
- As linhas que representam os números precisam permanecer em sua ordem original, ou seja, a primeira e a segunda linhas do primeiro "quadro" exibido precisam ser a primeira e a segunda linhas, respectivamente, em todos os quadros subsequentes.
- Depois que o algoritmo termina, nenhuma entidade visível adicional deve aparecer. No entanto, isso também significa que não há problema em deixar as linhas em branco, se você garantir que o último "quadro" seja exibido pelo menos na mesma quantidade de tempo que todos os outros quadros antes de apagar.
:-)