Thuật toán Euclide là một thuật toán được biết đến rộng rãi để tính toán ước số chung lớn nhất (GCD) của hai số nguyên dương.
Thuật toán
Với mục đích của thử thách này, thuật toán được mô tả như dưới đây:
Hiển thị hai đầu vào dưới dạng các đường liền kề của một ký tự nhất định,
ví dụ đầu vào3,4
có thể được biểu thị bằng các đường liền kề000
và0000
Biến các
length(short_line)
ký tự đầu tiên trong dòng dài hơn thành một ký tự khác, nói-
bây giờ nó trông giống như000
và---0
Loại bỏ các
length(short_line)
ký tự đầu tiên trong dòng dài hơn.
tại000
,0
Lặp lại bước 2 và 3 cho đến khi hai có chiều dài bằng nhau, sử dụng các đường ngắn hơn và lâu hơn sau mỗi lần lặp, ví dụ như
000
,0
-00
,0
00
,0
-0
,0
0
,0
- Bạn có thể chọn dừng ở đây hoặc tiếp tục lặp lại và biến một trong các dòng thành một dòng trống.
Mỗi bước này nên được phân tách bằng khoảng cách giữa 0,3 và 1,5 giây.
Các thách thức
Viết chương trình, cho hai số tự nhiên làm đầu vào, tạo ra một đầu ra trông giống hệt như đầu ra của thuật toán ở trên. Bạn có thể sử dụng các ký tự ASCII không phải khoảng trắng khác hơn 0
và -
, nhưng nhất quán và chỉ sử dụng hai ký tự. Bạn cũng có thể sử dụng các thuật toán thay thế được cung cấp đầu ra, bao gồm cả thời gian, hoàn toàn giống với thuật toán được tạo ra ở trên.
Ví dụ
Đây là một ví dụ với đầu vào 24,35
, là các phần tử sao cho GCD của chúng là 1.
Đây là một ví dụ với đầu vào 16,42
, có GCD 2.
Quy tắc
- Đây là một môn đánh gôn , vì vậy các byte ngắn nhất sẽ thắng
- Áp dụng sơ hở tiêu chuẩn
- Bạn có thể giả sử đầu vào là số nguyên thập phân dương
Làm rõ
- Các dòng đại diện cho các số cần giữ nguyên thứ tự ban đầu, tức là dòng thứ nhất và thứ hai của "khung" được hiển thị đầu tiên cần phải là dòng thứ nhất và thứ hai tương ứng, trong tất cả các khung tiếp theo.
- Sau khi thuật toán kết thúc, không có thực thể hữu hình bổ sung nào xuất hiện. Tuy nhiên, điều này cũng có nghĩa là bạn có thể bỏ trống các dòng, nếu bạn chắc chắn rằng "khung" cuối cùng được hiển thị trong ít nhất cùng một khoảng thời gian như tất cả các khung khác trước khi xóa.
:-)