L'algoritmo euclideo è un algoritmo ampiamente noto per il calcolo del massimo comun divisore (GCD) di due numeri interi positivi.
L'algoritmo
Ai fini di questa sfida, l'algoritmo è descritto di seguito:
Visualizza i due input come linee adiacenti di un certo carattere,
ad esempio un input di3,4
può essere rappresentato dalle linee adiacenti000
e0000
Trasforma i primi
length(short_line)
personaggi della linea più lunga in un altro personaggio, ad esempio-
ora sembra000
e---0
Elimina i primi
length(short_line)
caratteri nella riga più lunga.
adesso000
,0
Ripetere il punto 2 e 3 finché i due hanno uguale lunghezza, utilizzando le linee più corte e più dopo ogni iterazione, ad esempio
000
,0
-00
,0
00
,0
-0
,0
0
,0
- Puoi scegliere se interrompere qui o continuare l'iterazione e trasformare una delle righe in una riga vuota.
Ognuno di questi passaggi deve essere separato da un intervallo tra 0,3 secondi e 1,5 secondi.
La sfida
Scrivi un programma che, dati due numeri naturali come input, crea un output che è esattamente uguale a quello dell'algoritmo sopra. È possibile utilizzare altri caratteri ASCII stampabili non bianchi rispetto a 0
e -
, ma essere coerenti e utilizzare solo due caratteri. Puoi anche usare algoritmi alternativi a condizione che l'output, incluso il timing, sia esattamente lo stesso che verrebbe prodotto dall'algoritmo sopra.
Esempi
Questo è un esempio con input 24,35
, che sono coprimes quindi il loro GCD è 1.
Questo è un esempio con input 16,42
, che ha GCD 2.
Regole
- Questo è un codice-golf , quindi vince byte più brevi
- Scappatoie standard applicano
- Si può presumere che l'input sia intero decimale positivo
chiarimenti
- Le righe che rappresentano i numeri devono rimanere nel loro ordine originale, ovvero la prima e la seconda riga del primo "frame" visualizzato devono essere rispettivamente la prima e la seconda riga, in tutti i frame successivi.
- Al termine dell'algoritmo, non dovrebbero apparire ulteriori entità visibili . Tuttavia, ciò significa anche che va bene svuotare le linee, se si assicura che l'ultimo "fotogramma" sia visualizzato per almeno la stessa quantità di tempo di tutti gli altri fotogrammi prima di oscurare.
:-)