Lý lịch
Trò chơi của Morra là một trò chơi đơn giản. Trong phiên bản "gốc", một số người chơi đồng thời ném số 0-5 bằng tay trong khi đoán tổng số bàn tay của mọi người. Phiên bản tôi sẽ sử dụng ở đây đã được sửa đổi để tăng tiềm năng cho chiến lược không tầm thường, và nó được mô tả dưới đây:
- Có hai người chơi.
- Giống như trong trò chơi kéo giấy bằng đá, người chơi di chuyển đồng thời.
- Mỗi lượt, mỗi người chơi chọn một số 0-5 và cũng đoán đối thủ của họ chọn 0-5. Điều này có nghĩa là hai số được xuất ra mỗi lượt. Để làm rõ, cả hai đầu ra số phải nằm trong phạm vi 0-5, bao gồm.
- Nếu bạn đoán đúng lựa chọn của đối thủ nhưng đối thủ của bạn không đoán đúng, bạn sẽ giành được một số điểm nhất định bằng tổng của hai số đã chơi. Ví dụ: nếu các số được chơi là 3 và 5, một dự đoán đúng sẽ có giá trị 8 điểm.
- Nếu cả hai hoặc không người chơi đoán đúng, không có điểm nào được trao.
- Người có nhiều điểm nhất sau 1000 vòng sẽ thắng trận đấu đó.
Giải đấu
Giải đấu sẽ được thực hiện theo kiểu vòng tròn và sẽ được điều hành bằng cách tạo ra từng cặp thí sinh có thể. Với mỗi chiến thắng, thí sinh đạt được 2 điểm chiến thắng. Mỗi trận đấu kết quả trong 1 điểm chiến thắng. Không có điểm chiến thắng có được cho một mất mát.
Theo trực giác, người chiến thắng của giải đấu sẽ là thí sinh có nhiều điểm chiến thắng nhất trước người khác.
Làm thế nào để nhập
Sẽ có hai phương pháp gửi bot để cạnh tranh. Phương thức đầu tiên và được ưa thích nhất là triển khai giao diện Java do bộ điều khiển cung cấp. Phương pháp thứ hai là viết một chương trình độc lập.
Trước tiên hãy bao quát phương thức Java. Giao diện bạn sẽ cần thực hiện là Player
và nó xác định hai phương thức: public String getName()
xác định bot của bạn và public int[] getMove(String[] args)
lấy args
như một mảng gồm sáu chuỗi , mychoices myguesses myscore opponentchoices opponentguesses opponentscore
. Một ví dụ là như sau:
042 045 0 324 432 6
Điều này có nghĩa là tôi đã chọn 0 ở vòng đầu tiên và đoán rằng đối thủ của tôi sẽ ném 0. Đối thủ của tôi đã ném 3 và đoán tôi sẽ ném 4. Trong vòng thứ ba, đối thủ của tôi đã đoán đúng rằng tôi sẽ ném a 2, nghĩa là anh ta tăng 2 + 4 = 6 điểm.
Phương thức của bạn sẽ trả về một mảng gồm hai số nguyên, tương ứng là sự lựa chọn và đoán của bạn. Một ví dụ là {4,2}
cho lựa chọn 4 và đoán 2.
Dưới đây là một ví dụ về bot Java hoàn chỉnh được viết dưới dạng phương thức. Nếu bạn muốn, bài nộp của bạn chỉ phải bao gồm những gì đang diễn ra trong getMove
phương thức.
import java.util.Random;
/**
* A simple example Morra bot to get you started.
*/
public class ExampleBot implements Player
{
public String getName()
{
return "ExampleBot";
}
public int[] getMove(String [] args)
{
//easiest way I know to break down to create a move history
//(just contains their throw history)
char[] theirThrowsC = args[3].toCharArray();
int[] theirThrows = new int[theirThrowsC.length];
for(int i = 0; i < theirThrowsC.length; i++)
{
theirThrows[i] = Integer.parseInt(Character.toString(theirThrowsC[i]));
}
//get my score
int myScore = Integer.parseInt(args[2]);
Random r = new Random();
int guess = r.nextInt(6);
if(theirThrows.length > 0)
{
guess = theirThrows[theirThrows.length-1];
}
//throws a random number, guesses what they threw last
return new int[] {r.nextInt(6),guess};
}
public static int otherMethod(int example) //you can write additional static methods
{
return 0;
}
}
Là một chương trình độc lập
Tôi hiện đang bị hạn chế trong việc hỗ trợ các ngôn ngữ bổ sung. Ngoài Java, tôi có thể chấp nhận các chương trình được viết bằng Python 3.4, Perl 5 hoặc Ruby 2.1.5. Nếu có một ngôn ngữ mà nhiều người dường như muốn, tôi sẽ cố hết sức để thêm ngôn ngữ đó.
Đầu vào cho chương trình của bạn sẽ là đối số trên dòng lệnh. Nó có thể trông như thế này:
perl awesomebot.plx 042 045 0 324 432 6
Đầu ra của chương trình nên là lựa chọn của bạn theo sau là dự đoán của bạn, mỗi lần theo sau là khoảng trắng.
Vui lòng bao gồm trong câu trả lời của bạn lệnh chính xác cần thiết để chạy nó. Hãy nhớ rằng tôi đang chạy Windows 8.1.
Quy tắc bổ sung
Tiết kiệm trạng thái và thời gian chờ
Chương trình của bạn sẽ được phép tạo một tệp văn bản trong thư mục cục bộ, nơi bạn có thể lưu trữ thông tin. Thông tin này sẽ được giữ trong suốt giải đấu nhưng sau đó sẽ bị xóa. Đặt tên cho tập tin tôi có thể xác định.
Có giới hạn thời gian là 500 mili giây để mã của bạn phản hồi. Việc không đáp ứng trong thời hạn (hoặc đưa ra một động thái không hợp lệ) sẽ dẫn đến việc bị mất quyền đối với trận đấu cụ thể đó. Các bài nộp Java hiện có thời gian chờ thụ động (mà tôi có thể nâng cấp lên hoạt động), trong khi các bài nộp không phải Java có thời gian chờ hoạt động trong đó quá trình của chúng bị chấm dứt sau 500 mili giây.
Thêm quy tắc trình
- Bạn được phép gửi nhiều lần, miễn là họ tuân thủ các quy tắc và không gắn thẻ nhóm.
- Mỗi mục phải là duy nhất. Bạn không thể tạo một bản sao chính xác logic của bot khác bằng một ngôn ngữ khác.
- Các bot không thể tương tác với nhau (để tạo thành một nhóm bất kỳ).
- Bạn không thể sử dụng logic của các bot khác trong bot của mình để xác định đối thủ cạnh tranh và dự đoán hành động của nó. Tất nhiên, bạn có thể cố gắng xác định chiến lược của đối thủ.
- Đừng cố gây rối với bộ điều khiển, các thí sinh khác hoặc máy tính của tôi. Đừng kết nối với các nguồn thông tin bên ngoài.
Bộ điều khiển
Phiên bản hiện tại của bộ điều khiển được tìm thấy ở đây . Nó được viết bằng Java 8. Tệp "Giải đấu" là bộ điều khiển chính, cũng chứa danh sách các đối thủ cạnh tranh (nếu bạn muốn tổ chức các cuộc thi của riêng bạn).
Bảng xếp hạng
Tôi thực sự không thể cập nhật bảng xếp hạng rất thường xuyên. Cuối tuần này tôi khá bận. Bởi "khá bận" Tôi có nghĩa là không có quyền truy cập vào máy tính từ 6:30 sáng đến 9:30 tối. Dưới đây là điểm số sau 5 lần chạy. Bot "Echo" bị tịch thu vì một số lý do (có thể là lỗi của tôi, tôi chưa điều tra).
170 - Quinn and Valor
158 - Historian
142 - DeltaMax
140 - MorraCowbell
132 - Extrapolator
115 - Rainbolt
102 - Popularity
100 - Interpolator
83 - CounterBot
80 - Basilisk
76 - Erratica
65 - Trendy
63 - Scholar
62 - RandomGuesser
60 - KingFisher
59 - NullifierBot
55 - EvolvedBot
48 - Confused
tín dụng
Rất cám ơn Rainbolt và Peter Taylor đã giúp đỡ họ với bộ điều khiển.