Nhiệm vụ của bạn là, được đưa ra x
, đầu ra 2*x
. Dễ nhỉ!? Nhưng có một nhược điểm: x
sẽ được đưa ra dưới dạng phân số tiếp tục (có thể là vô hạn) và đầu ra phải là phân số tiếp tục. Đầu vào được đảm bảo là một số đại số thực có mức độ nhiều nhất là 2.
Đầu vào : Phần tiếp tục của x
. Điều này được chia thành 3 phần: phần nguyên, tiền tố và phần lặp lại. Phần nguyên bao gồm một số nguyên duy nhất. Tiền tố và phần lặp lại là các mảng (có thể trống) của các số nguyên dương mô tả phần tiền tố và phần lặp lại của phần tiếp tục. Ví dụ, đầu vào (3, [1], [2, 4])
đại diện cho phần tiếp tục [3; 1, 2, 4, 2, 4, ...]
.
Nếu phần lặp lại trống, điều đó chỉ ra số hữu tỷ. Ví dụ, (3, [1, 2], [])
đại diện [3; 1, 2] = 11/3
. Bạn phải chấp nhận cả hai dạng số hữu tỷ (nghĩa (3, [1, 1, 1], [])
là [3; 1, 1, 1] = 11/3
cũng phải là đầu vào hợp lệ).
Đầu ra : Xuất ra phần tiếp tục của hai lần đầu vào, có cùng định dạng với đầu vào. Nếu đầu ra là hợp lý, bạn có thể xuất một trong hai dạng của phân số tiếp tục. Miễn là câu trả lời tương đương với câu trả lời đúng, nó vẫn ổn; không có "nén" là cần thiết, vì vậy phần vô hạn có thể "không được kiểm soát" một chút (ví dụ [1; 4, 2, 3, 2, 3...]
có thể được viết (1, [4], [2, 3])
hoặc (1, [4, 2, 3], [2, 3])
). Tất cả các câu trả lời phải chính xác.
Các trường hợp thử nghiệm : Cột biểu mẫu chính xác được đưa ra để thuận tiện.
Input Exact Form Output
(0, [] []) 0 (0, [] []) or (-1, [1], [])
(-5, [1, 1], []) -4.5 (-9, [], []) or (-10, [1], [])
(3, [1, 2], []) 11/3 (7, [3], []) or (7, [2, 1], [])
(1, [], [2]) sqrt(2) (2, [], [1, 4])
(-1, [2], [2, 1]) -1/sqrt(3) (-2, [1, 5], [2, 6])
Và cuối cùng là một trường hợp thử nghiệm lớn hơn một chút để đảm bảo độ chính xác : (0, [1], [6, 1, 3, 1, 42, 1, 3, 1, 6, 2]) --> (1, [], [1, 2, 1, 8, 1, 20, 1, 8, 1, 2, 1, 2])
.
Mã ngắn nhất sẽ thắng!
Gợi ý : Bạn có thể thực hiện số học theo cách khá đơn giản trên các phân số tiếp tục như được mô tả ở đây . Nhân đôi một phân số tiếp tục chỉ là một trường hợp đặc biệt của thuật toán này (mặc dù phần khó khăn có thể được tìm thấy khi phân số tiếp tục lặp lại).
Sqrt[2]
.
[3; 1, 1, 1]
sẽ (3, [1, 1, 1], [])
ở định dạng đầu vào mà chúng tôi đang sử dụng - vì vậy câu hỏi có lẽ nên đề cập đến ở định dạng đó (trong đoạn thứ ba), chỉ để đảm bảo sự rõ ràng.
(-2, [1, 5, 2], [6, 2])
được chấp nhận đầu ra cho đầu vào (-1, [2], [2, 1])
? Thế còn (-2, [1, 5, 2, 6, 2, 6], [2, 6])
?