Chuỗi Collatz bắt đầu từ số nguyên dương n được xác định theo cách này:
- nếu n chẵn thì chia cho 2 (
n' = n / 2
) - nếu n là số lẻ thì nhân nó với 3 và thêm 1 (
n' = 3n + 1
)
Lặp lại lần lặp ở trên cho đến khi n đạt 1.
Người ta không biết (đó là một vấn đề lớn chưa được giải quyết trong lý thuyết số) nếu chuỗi cuối cùng sẽ đạt đến số 1, bất kể số nguyên dương nào được chọn ban đầu.
Máy hai bộ đếm (2CM) là máy được trang bị hai thanh ghi có thể chứa giá trị nguyên không âm và có thể được lập trình với tập lệnh sau:
INCX increase the value of register X
INCY increase the value of register Y
JMP n jump to instruction n
DJZX n if register X is zero jump to instruction n,
otherwise decrement its value
DJZY n if register Y is zero jump to instruction n,
otherwise decrement its value
HALT halt (and accept)
PRINTX print the content of register X
Chương trình 2CM chỉ đơn giản là một chuỗi các hướng dẫn, ví dụ chương trình sau chỉ đơn giản là sao chép nội dung của thanh ghi X để đăng ký Y:
cp: DJZX end
INCY
JMP cp
end: HALT
Lưu ý rằng 2CM là Turing Complete (nghĩa là nó có thể tính toán mọi hàm tính toán với một mã hóa đầu vào phù hợp, nhưng nó không liên quan ở đây). Cũng lưu ý rằng bộ hướng dẫn hơi khác một chút so với hướng dẫn trong bài viết Wikipedia.
Các thách thức
Viết chương trình 2CM ngắn nhất, tính toán và in chuỗi collatz lên đến 1 và dừng lại (thanh ghi X ban đầu chứa giá trị bắt đầu n
và thanh ghi Y ban đầu chứa 0). Lưu ý rằng độ dài của chương trình 2CM là số lượng hướng dẫn được sử dụng (không phải độ dài của văn bản).
Ví dụ: khi bắt đầu từ X = 3, nó phải in: 3 10 5 16 8 4 2 1
và HALT.
Vì vậy, bạn có thể sử dụng ngôn ngữ yêu thích của mình để xây dựng trình mô phỏng / trình thông dịch 2CM, nhưng mã cuối cùng (ngắn nhất) mà bạn đặt trong câu trả lời phải bằng ngôn ngữ 2CM .