Một hàm (hoặc chương trình) nhận đầu vào và cung cấp đầu ra có thể được gọi là có chu kỳ nếu gọi hàm trên đầu ra của chính nó liên tục đạt đến số ban đầu. Ví dụ, lấy chức năng sau:
Input: n 1 2 3 4 5 6
Output: f(n) 5 7 1 3 4 9
Nếu chúng ta bắt đầu với n=1
, f(n)=5
, f(f(n))=f(5)=4
, f(f(f(n)))=f(4)=3
, f(f(f(f(n))))=f(3)=1
.
Điều này được viết (1 5 4 3)
. Vì có 4 số duy nhất trong vòng lặp này, đây là một chu kỳ có độ dài 4.
Thách thức của bạn là viết một chương trình hoặc chức năng có chu kỳ ở mọi độ dài có thể. Nghĩa là, phải có một chu kỳ dài 1, dài 2, v.v.
Ngoài ra, chức năng / chương trình của bạn phải từ số nguyên dương sang số nguyên dương và nó phải là tính từ , nghĩa là phải có chính xác một giá trị đầu vào cho mỗi giá trị đầu ra có thể, trên tất cả các số nguyên dương. Nói cách khác, hàm / chương trình phải tính toán một phép tính của các số nguyên dương.
Chi tiết: Bất kỳ hệ thống đầu vào / đầu ra tiêu chuẩn nào đều được cho phép, bao gồm STDIN, STDOUT, đối số chức năng, trả về, v.v ... Các lỗ hổng tiêu chuẩn bị cấm.
Bạn không cần phải lo lắng về các giới hạn của các loại dữ liệu của mình - các thuộc tính trên chỉ cần giữ theo giả định rằng một int
hoặc float
có thể giữ bất kỳ giá trị nào, chẳng hạn.
Không có hạn chế nào đối với hành vi của hàm đối với các đầu vào không phải là số nguyên dương và các đầu vào / đầu ra đó sẽ bị bỏ qua.
Ghi điểm là mã golf theo byte, mã ngắn nhất sẽ thắng.