Kết quả cuối cùng có sẵn
Giới thiệu
Sau KOTH trước đây của tôi với các chủ đề nặng nề ( chiến tranh giả tưởng , đại dịch toàn cầu ...), tôi trở lại với một trò chơi nhẹ nhàng mới. Lần này, bạn phải đối mặt trong một tình huống "giống như trò chơi cờ". Một đống tiền xu lộn ngược được đặt ở trung tâm của một cái bàn thực sự lớn, và bạn quyết tâm lấy phần của mình về chiến lợi phẩm!
Bảng chú giải
Tiền xu : Mã thông báo có thể được lật hoặc không bị lật.
Unflipped : Tiền xu được đặt trên bàn với giá trị của chúng chỉ xuống. Đây là trạng thái mặc định của các đồng tiền.
Lật : Tiền xu được đặt trên bàn với giá trị của chúng hướng lên.
Địa phương : Đề cập đến đống tiền của bạn.
Toàn cầu : Đề cập đến đống tiền xu tại trung tâm.
Nguyên tắc
Khi bắt đầu trò chơi, mỗi người chơi bắt đầu với 0 điểm và 0 xu (lật hoặc không bị lật). Trò chơi được chơi theo lượt. Trong lượt của mình, người chơi có thể thực hiện tối đa 3 hành động tương tác với đống tiền xu ở giữa bàn, đống tiền riêng của họ hoặc với người chơi khác.
Thứ tự chơi được xác định ngẫu nhiên khi bắt đầu trò chơi. Thứ tự của người chơi trong danh sách đối số thể hiện thứ tự lần lượt và nó đi từ trái sang phải trong danh sách đó. "Tiếp theo" và "Trước đó" tương ứng với "bên phải trong danh sách đó" và "bên trái trong danh sách đó" với một vòng lặp nếu bạn là người cuối cùng của một trong hai bên.
Trò chơi kéo dài trong 50 vòng hoặc cho đến khi có 0 đồng xu ở trung tâm khi kết thúc lượt người chơi (nghĩa là bạn sẽ hoàn thành 3 hành động của mình ngay cả khi cọc trống sau hành động đầu tiên của bạn và bạn có thể đặt lại xu để cho trò chơi tiếp tục). Số lượng tiền xu toàn cầu bắt đầu được xác định ngẫu nhiên với công thức này:
(2 ^ nb_players) + (nb_players * 10) - random(1 + (nb_players ^ 2))`
Mỗi hành động sẽ giúp bạn có điểm (hoặc khiến bạn mất một số) và vào cuối trò chơi, mỗi đồng xu bạn có sẽ được thêm vào số điểm của bạn ( -1 cho số lần bỏ, +2 khi lật ). Người chơi với chiến thắng điểm số cao nhất.
Bộ điều khiển cung cấp cho bạn đầu vào thông qua các đối số lệnh và chương trình của bạn phải xuất qua thiết bị xuất chuẩn.
Cú pháp
Đầu vào
Mỗi khi chương trình của bạn được gọi, nó sẽ nhận được các đối số ở định dạng này:
Round;YourPlayerId;Coins;PlayerId_Points_Flipped_Unflipped;PlayerId_Points_Flipped_Unflipped;...
Các vòng được lập chỉ mục 1.
Ví dụ đầu vào
6;2;52;1_20_3_12;0_-2_0_1;2_12_1_0
Ở đây, bạn thấy đó là vòng thứ 6 và bạn là người chơi 2. Có 52 đồng xu trong đống trung tâm. Bạn có 12 điểm, 1 đồng xu lật và 0 đồng xu không bị lật. Điểm có thể âm.
Đầu ra
Bạn phải xuất ba ký tự (không có khoảng trắng, không có dấu phân cách), mỗi ký tự tương ứng với một hành động bạn sẽ thực hiện lần lượt này. Thứ tự của các nhân vật xác định thứ tự của các hành động. Bạn có thể xuất các hành động tương tự nhiều lần. Trong trường hợp không có đủ tiền để hoàn thành hành động của bạn, nó sẽ sử dụng tối đa số xu có sẵn và chỉ tính điểm cho số tiền được sử dụng.
N
: Không làm gì
1
: Lấy 1 đồng xu từ đống trung tâm [Hiệu ứng: +1 cục bộ không bị xóa / -1 điểm / -1 toàn cầu không bị xóa]
2
: Lấy 2 đồng xu từ cọc trung tâm [Hiệu ứng: +2 không bị xóa cục bộ / -2 điểm / -2 unflipped toàn cầu]
3
: Lấy 3 đồng xu từ đống trung tâm [Hiệu ứng: +3 unflipped cục bộ / -3 điểm / -3 toàn cầu unflipped]
A
: Đặt lại 1 xu từ đống của bạn [Hiệu ứng: -1 điểm không bị xóa / +1 điểm / +1 unflipped global]
B
: Đặt lại 2 xu từ đống của bạn [Hiệu ứng: -2 unflipped cục bộ / +2 điểm / +2 unflipped toàn cầu]
C
: Đặt lại 3 xu từ đống của bạn [Hiệu ứng: -3 unflipped / +3 điểm / +3 unflipped toàn cầu]
X
: Xóa 1 đồng xu khỏi đống của bạn[Hiệu ứng: -1 cục bộ không bị xóa / 0 điểm]
Y
: Xóa 2 đồng xu khỏi đống của bạn [Hiệu ứng: -2 cục bộ không bị xóa / 0 điểm]
Z
: Xóa 3 đồng xu khỏi đống của bạn [Hiệu ứng: -3 cục bộ không bị xóa / 0 điểm]
R
: Xoay đồng xu cho người chơi trước [Hiệu ứng: -1 điểm cho mỗi lần không nhận được, +2 điểm cho mỗi lần lật được nhận / áp dụng cho tất cả người chơi]
T
: Xoay xu cho người chơi tiếp theo [Hiệu ứng: -1 điểm cho mỗi lần không nhận được, +2 điểm cho mỗi lần lật được nhận / áp dụng cho tất cả người chơi]
F
: Lật 1 đồng xu [Hiệu ứng: -1 cục bộ không bị lật / +1 lật cục bộ / +2 điểm]
U
: Bỏ 1 đồng xu [Hiệu ứng: +1 cục bộ không bị lật / -1 lật cục bộ / -2 điểm]
Ví dụ đầu ra
2FF
: Kiếm hai đồng xu và lật hai đồng xu, ghi điểm -2 + 2 + 2 = 2 points
Nếu đầu ra của bạn không chính xác, bộ điều khiển sẽ giả định NNN
.
Bộ điều khiển
Bạn có thể tìm thấy bộ điều khiển trên GitHub . Nó cũng chứa hai mẫu, được viết bằng Java. Để làm cho nó chạy, hãy xem dự án và mở nó trong Java IDE của bạn. Điểm vào trong main
phương thức của lớp Game
. Yêu cầu Java 8.
Để thêm bot, trước tiên, bạn cần có phiên bản được biên dịch cho Java (tệp. Class) hoặc nguồn cho các ngôn ngữ được diễn giải. Đặt chúng trong thư mục gốc của dự án. Sau đó, tạo một lớp Java mới trong players
gói (bạn có thể lấy ví dụ về các bot đã có). Lớp này phải thực hiện Player
để ghi đè phương thức String getCmd()
. Chuỗi trả về là lệnh shell để chạy bot của bạn. Ví dụ, bạn có thể làm cho bot Ruby hoạt động với lệnh này : return "C:\Ruby\bin\ruby.exe MyBot.rb";
. Cuối cùng, thêm bot trong mảng người chơi ở đầu Game
lớp.
Quy tắc
- Bots không nên được viết để đánh bại hoặc hỗ trợ các bot cụ thể khác.
- Viết vào các tập tin được cho phép. Vui lòng viết thư cho "mineubmissionname.txt", thư mục sẽ được xóa trước khi trò chơi bắt đầu. Các nguồn lực bên ngoài khác không được phép.
- Trình của bạn có 1 giây để trả lời.
- Cung cấp các lệnh để biên dịch và chạy đệ trình của bạn.
Ngôn ngữ được hỗ trợ
Tôi sẽ thử và hỗ trợ mọi ngôn ngữ, nhưng nó cần có sẵn trực tuyến miễn phí. Vui lòng cung cấp hướng dẫn để cài đặt nếu bạn không sử dụng ngôn ngữ "chính thống".
Ngay bây giờ, tôi có thể chạy: Java 6-7-8, PHP, Ruby, Perl, Python 2-3, Lua, R, node.js, Haskell, Kotlin, C ++ 11.
Kết quả cuối cùng
Đây là kết quả của 100 trò chơi (điểm được cộng lại):
1. BirdInTheHand: 1017790
2. Balance: 851428
3. SecondBest: 802316
4. Crook: 739080
5. Jim: 723440
6. Flipper: 613290
7. Wheeler: 585516
8. Oracle: 574916
9. SimpleBot: 543665
10. TraderBot: 538160
11. EgoisticalBot: 529567
12. RememberMe: 497513
13. PassiveBot: 494441
14. TheJanitor: 474069
15. GreedyRotation: 447057
16. Devil: 79212
17. Saboteur: 62240
Kết quả cá nhân của các trò chơi có sẵn tại đây: http://past.co/63f1e924 (với số xu bắt đầu và số vòng cho mỗi trò chơi).
Tiền thưởng 50 danh tiếng được trao cho người chiến thắng: Bird In The Hand của Martin Büttner .
Cảm ơn tất cả các bạn đã tham gia, hẹn gặp lại KOTH tiếp theo ~