Algoritma Euclidean adalah algoritma yang dikenal luas untuk menghitung pembagi umum terbesar (GCD) dari dua bilangan bulat positif.
Algoritma
Untuk tujuan tantangan ini, algoritme tersebut dijelaskan sebagai berikut:
Tampilkan dua input sebagai garis yang berdekatan dari karakter tertentu
misalnya input3,4
dapat diwakili oleh garis yang berdekatan000
dan0000
Ubah
length(short_line)
karakter pertama di baris yang lebih panjang menjadi karakter lain, katakan-
sekarang sepertinya000
dan---0
Hilangkan
length(short_line)
karakter pertama di baris yang lebih panjang.
sekarang000
,0
Ulangi langkah 2 dan 3 sampai keduanya memiliki panjang yang sama, menggunakan garis yang lebih pendek dan lebih panjang setelah setiap iterasi, misalnya
000
,0
-00
,0
00
,0
-0
,0
0
,0
- Anda dapat memilih apakah akan berhenti di sini atau melanjutkan iterasi dan mengubah salah satu garis menjadi garis kosong.
Masing-masing langkah ini harus dipisahkan oleh interval antara 0,3 dan 1,5.
Tantangan
Tulis program yang, diberi dua bilangan asli sebagai input, membuat output yang terlihat persis sama dengan output dari algoritma di atas. Anda dapat menggunakan karakter ASCII non-spasi putih yang dapat dicetak selain 0
dan -
, tetapi konsisten dan gunakan hanya dua karakter. Anda juga dapat menggunakan algoritma alternatif asalkan output, termasuk waktunya, persis sama dengan yang akan dihasilkan oleh algoritma di atas.
Contohnya
Ini adalah contoh dengan input 24,35
, yang merupakan koprimes sehingga GCD mereka adalah 1.
Ini adalah contoh dengan input 16,42
, yang memiliki GCD 2.
Aturan
- Ini adalah sebuah kode-golf , sehingga byte terpendek menang
- Celah standar berlaku
- Anda dapat menganggap input sebagai bilangan desimal positif
Klarifikasi
- Garis-garis yang mewakili angka-angka harus tetap dalam urutan aslinya, yaitu baris pertama dan kedua dari "bingkai" pertama yang ditampilkan masing-masing harus menjadi baris pertama dan kedua, di semua bingkai berikutnya.
- Setelah algoritma berakhir, tidak ada entitas tambahan yang terlihat yang muncul. Namun, ini juga berarti tidak apa-apa untuk mengosongkan garis, jika Anda memastikan bahwa "bingkai" terakhir ditampilkan setidaknya untuk jumlah waktu yang sama seperti semua bingkai lainnya sebelum dikosongkan.
:-)