Trong tương lai khi Time Travel (viết tắt là TT) sẽ phổ biến, việc tung đồng xu sẽ trở thành một môn thể thao trí óc nghiêm túc. Để chuẩn bị cho tương lai, chúng tôi tạo ra một cuộc thi cho các chương trình mà việc du hành thời gian sẽ thực sự xảy ra từ quan điểm của các mục.
Cuộc thi là King of the Hill theo phong cách vòng tròn bao gồm các trận đấu tung đồng xu giữa các lớp Java.
Quy tắc của trò tung đồng xu
- Có hai người chơi và 100 vòng.
- Trong mỗi vòng, một đồng xu được tung và dựa trên kết quả, một trong những người chơi ghi được 1 điểm. Mỗi người chơi có 50% cơ hội để ghi một điểm.
- Sau khi tung cả hai người chơi có cơ hội kiểm soát thời gian bằng cách kéo đòn bẩy.
- Nếu bạn kéo một đòn bẩy màu xanh (nút chặn hoàn nguyên) thì không thể thực hiện được vòng tròn mà đòn bẩy đã được sử dụng hoặc bất kỳ vòng nào trước đó nữa. Việc TT cố gắng đi đến những vòng này sẽ không có kết quả.
- Nếu bạn kéo một đòn bẩy màu đỏ ( hoàn nguyên ), bạn cố gắng hoàn nguyên thời gian trở lại vòng trước. Nếu thành công , bộ nhớ của đối thủ sẽ được hoàn nguyên về bộ nhớ của nó trước vòng đã chọn và kết quả tung đồng xu bắt đầu từ vòng đã chọn cũng sẽ bị xóa . Dấu hiệu khả dĩ duy nhất cho đối thủ của bạn về TT sẽ là số lượng đòn bẩy chưa sử dụng của nó sẽ không được hoàn nguyên.
- Mỗi người chơi có 5 đòn bẩy không sử dụng màu xanh và 20 màu đỏ khi bắt đầu trận đấu. Những đòn bẩy này không bị ảnh hưởng bởi TT.
- Nếu không có TT xảy ra vào cuối vòng thứ 100, trò chơi kết thúc và người chơi có số điểm cao hơn sẽ thắng.
Chi tiết
- Các vòng có một chỉ mục dựa trên 1 (mẫu 1 đến 100).
- Trước vòng
x
bạn được cung cấp số lượng đòn bẩy màu xanh và đỏ có sẵn, đồng xu tung kết quả cho đến khi lần lượtx
(bao gồm) và bộ nhớ củax-1
vòng thứ (cuối cùng) của bạn . - Kéo một đòn bẩy màu xanh trong vòng sẽ
x
dừng bất kỳ TT nào có điểm đến tại vòngx
hoặc trước đó (nó sẽ chặn một TT nếu nó cũng xảy ra trên cùng một vòng chính xác đó). - Trở lại vòng
x
có nghĩa là vòng tiếp theo sẽ trònx
. - Nếu cả hai người chơi chọn hoàn nguyên vào cuối vòng, thời gian sẽ được hoàn nguyên về đích trước đó không bị chặn. (Các) người chơi đã cố gắng hoàn nguyên về thời điểm này sẽ giữ lại bộ nhớ của họ.
Chi tiết kỹ thuật
- Bạn nên viết một lớp Java thực hiện giao diện Bot được cung cấp.
- Thêm bot của bạn vào dự án.
- Thêm một thể hiện của Bot của bạn
Bot
vào tệpController.java
. - Lớp học của bạn không nên giữ thông tin giữa các cuộc gọi . (Trong hầu hết các trường hợp chỉ có
final
các biến ngoài hàm đáp ứng yêu cầu này.) - Bạn có thể cung cấp thông tin cho bộ điều khiển trong
memory
trường củaAction
đối tượng được trả về của bạn . Điều này sẽ được trả lại cho bạn trong lượt tiếp theo nếu không có TT xảy ra. Nếu một TT xảy ra, bạn sẽ nhận được bộ nhớ tương ứng trước đó của bạn. - Bạn có thể sử dụng
totalScore()
phương thức củaGame
lớp để lấy điểm của chuỗi lịch sử.
Giao thức
Tại mỗi lượt của bạn
takeTurn(...)
phương pháp được gọi với 5 đối số:- số lượng đòn bẩy màu xanh không sử dụng
- số lượng đòn bẩy đỏ không sử dụng
- lịch sử tung đồng xu, một chuỗi bao gồm 1 và 0 đánh dấu chiến thắng và thua của bạn trong các vòng trước. Ký tự đầu tiên tương ứng với việc tung đồng xu đầu tiên. (Trong vòng đầu tiên, độ dài của chuỗi sẽ là
1
.) - một chuỗi, bộ nhớ được lưu trữ của bạn từ vòng trước
- chỉ số 1 dựa trên vòng này
Ở mỗi lượt, phương thức của bạn trả về một
Action
đối tượng có chứamột số nguyên trong
move
trường mô tả hành động của bạn:0
không có hành động-1
để kéo một đòn bẩy màu xanh và chặn TT đi qua vòng này- một số nguyên dương
x
, không lớn hơn vòng hiện tại, để kéo một đòn bẩy màu đỏ và cố gắng quay trở lại vòngx
- Số nguyên không hợp lệ được coi là
0
.
một chuỗi chứa bộ nhớ của bạn từ vòng này mà bạn muốn lưu giữ. Lưu ý rằng việc lưu trữ bộ nhớ không phải là một phần quan trọng của thử thách . Bạn có thể tạo các mục tốt mà không lưu trữ bất kỳ dữ liệu hữu ích nào trong chuỗi. Ở vòng đầu tiên, chuỗi sẽ là một chuỗi rỗng.
Phương pháp của bạn sẽ mất trung bình không quá 10 ms mỗi vòng trong một trận đấu.
- Thường xuyên thất bại trong thời gian giới hạn dẫn đến việc bị loại.
Chấm điểm
- Chiến thắng một trận đấu kiếm được 2 điểm và một trận hòa kiếm được 1 điểm cho cả hai người chơi. Mất không kiếm được điểm.
- Điểm của bot sẽ là tổng số điểm mà nó thu thập được.
- Số lượng trận đấu được chơi giữa mỗi cặp thí sinh sẽ phụ thuộc vào số lượng bài dự thi và tốc độ của chúng.
Hai bot ví dụ đơn giản được đăng dưới dạng câu trả lời.
Bộ điều khiển và cặp Bots đầu tiên có sẵn ở đây .
Kết quả kiểm tra với các bot được gửi cho đến ngày 3 tháng 11.:
Tổng số điểm:
Oldschool: 3163
Random: 5871
RegretBot: 5269
Nostalgia: 8601
Little Ten: 8772
Analyzer: 17746
NoRegretsBot: 5833
Oracle: 15539
Deja Vu: 5491
Bad Loser: 13715
(Bộ điều khiển dựa trên bộ điều khiển của người bắt mèo . Cảm ơn vì @flawr đã cung cấp nó làm cơ sở cho cái này.)
Phần thưởng: một bộ phim dài 6 phút dựa trên một khái niệm tương tự.
If you pull a blue lever (revert stopper) no TT is possible to the round the lever was used or any earlier round anymore. TT's attempting to go to these rounds will have no effect.
If you pull a blue lever (revert stopper) no TT is possible through that round anymore. TT's attempting to go through the round will have no effect.
"Đi qua một vòng" là gì?