Lấy cảm hứng từ The Great API Easter Egg Hunt!
Tóm lược
Nhiệm vụ của bạn là tìm kiếm một số nguyên được xác định trước trong "không gian Collatz" (sẽ được giải thích sau) bằng cách sử dụng bước ít nhất có thể.
Giới thiệu
Thử thách này dựa trên phỏng đoán Collatz nổi tiếng mà hy vọng mọi người ở đây ít nhất nghe nói đến. Đây là một bản tóm tắt được lấy từ In các số Super Collatz .
Các Collatz trình tự (còn gọi là bài toán 3x + 1) là nơi mà bạn bắt đầu với bất kỳ số nguyên dương, ví dụ này, chúng ta sẽ sử dụng 10, và áp dụng này tập hợp các bước để nó:
if n is even: Divide it by 2 if n is odd: Multiply it by 3 and add 1 repeat until n = 1
Khoảng cách Collatz C(m,n)
giữa hai số m
và n
, cho mục đích của thử thách này, là khoảng cách giữa hai số trong biểu đồ Collatz (Tín dụng cho @tsh để cho tôi biết về khái niệm này), được định nghĩa như sau: (sử dụng 21
và 13
làm ví dụ ):
Viết trình tự Collatz cho m
(trong trường hợp này, 21
):
21, 64, 32, 16, 8, 4, 2, 1
Viết trình tự Collatz cho n
(trong trường hợp này, 13
):
13, 40, 20, 10, 5, 16, 8, 4, 2, 1
Bây giờ hãy đếm xem có bao nhiêu số chỉ xuất hiện trong một trong các chuỗi. Điều này được định nghĩa là khoảng cách Collatz giữa m
và n
. Trong trường hợp này 8
, cụ thể là,
21, 64, 32, 13, 40, 20, 10, 5
Vì vậy, chúng ta có khoảng cách Collatz giữa 21
và 13
như C(21,13)=8
.
C(m,n)
có các tính chất tốt đẹp sau:
C(m,n)=C(n,m)
C(m,n)=0 iff. m=n
Hy vọng định nghĩa của C(m,n)
bây giờ là rõ ràng. Hãy bắt đầu săn trứng trong không gian Collatz!
Khi bắt đầu trò chơi, bộ điều khiển quyết định vị trí của một quả trứng Phục sinh, được biểu thị bằng tọa độ một chiều của nó: Một số nguyên trong khoảng [p,q]
(nói cách khác, một số nguyên nằm giữa p
và q
, cả hai đầu bao gồm).
Vị trí của quả trứng vẫn không đổi trong suốt trò chơi. Chúng tôi sẽ biểu thị tọa độ này là r
.
Bây giờ bạn có thể đoán ban đầu là 0 và nó sẽ được ghi lại bởi bộ điều khiển. Đây là vòng thứ 0 của bạn. Nếu bạn thật may mắn khi bạn đã đạt được nó ngay từ đầu (tức là 0 = r), trò chơi kết thúc và điểm của bạn là 0
(Điểm càng thấp, càng tốt). Mặt khác, bạn vào vòng 1 và bạn đoán mới 1 , điều này sẽ tiếp tục cho đến khi bạn hiểu đúng, tức là n = r, và điểm của bạn sẽ là n
.
Đối với mỗi vòng sau số 0, bộ điều khiển cung cấp cho bạn một trong những phản hồi sau để bạn có thể đoán tốt hơn dựa trên thông tin đã cho. Giả sử bạn hiện đang ở n
vòng thứ và do đó bạn đoán là n
- "Bạn đã tìm thấy nó!" nếu a n = r, trong trường hợp đó trò chơi kết thúc và bạn ghi bàn
n
. - "Bạn gần hơn :)" nếu C (a n , r) <C (a n-1 , r)
- "Bạn đang đi vòng quanh quả trứng" nếu C (a n , r) = C (a n-1 , r)
- "Bạn ở xa hơn :(" nếu C (a n , r)> C (a n-1 , r)
Để lưu một số byte, tôi sẽ gọi các câu trả lời là "Phải", "Gần hơn", "Tương tự", "Xa hơn", theo thứ tự được trình bày ở trên.
Đây là một ví dụ trò chơi với p=1,q=15
.
- a 0 = 10
- a 1 = 11, trả lời: "Gần hơn"
- a 2 = 13, trả lời: "Xa hơn"
- a 3 = 4, trả lời: "Xa hơn"
- a 4 = 3, trả lời: "Gần hơn"
- a 5 = 5, trả lời: "Tương tự"
- a 6 = 7, trả lời: "Phải"
Điểm : 6
.
Thử thách
Thiết kế một chiến lược xác định để chơi trò chơi p=51, q=562
với số điểm tốt nhất.
Câu trả lời nên mô tả chi tiết các thuật toán. Bạn có thể đính kèm bất kỳ mã nào giúp làm sáng tỏ thuật toán. Đây không phải là codegolf nên bạn được khuyến khích viết mã dễ đọc.
Câu trả lời nên bao gồm điểm số tồi tệ nhất mà họ có thể đạt được cho tất cả các trường hợp có thể r
và người nào có điểm thấp nhất sẽ thắng. Trong trường hợp hòa, các thuật toán có điểm trung bình tốt hơn cho tất cả các r
s có thể (cũng nên được đưa vào câu trả lời) sẽ giành chiến thắng. Không có sự phá vỡ ràng buộc nào nữa và cuối cùng chúng tôi có thể có nhiều người chiến thắng.
Thông số kỹ thuật
- Để nhắc lại,
r
nằm trong khoảng[51,562]
. - Lỗ hổng mặc định áp dụng.
Bounty (Đã thêm sau khi câu trả lời đầu tiên được đăng)
Cá nhân tôi có thể đưa ra một tiền thưởng cho một câu trả lời trong đó tất cả các dự đoán được đưa ra trong phạm vi [51,562]
trong khi vẫn có điểm số thấp nhất hợp lý.