Giới thiệu
Bạn bị mắc kẹt trên một hòn đảo hoang vắng với một số người hầu và đang săn lùng kho báu. Càng tìm kiếm lâu, người ta càng tìm thấy nhiều kho báu. Càng ít người tìm kiếm, mỗi người càng tìm thấy nhiều hơn.
Do nguồn cung hạn chế, nhà lãnh đạo đã quyết định rằng một vài người, đến một phần tư của nhóm, sẽ bị bỏ lại mỗi đêm. Anh ta quyết định không nói cho ai biết chính xác có bao nhiêu người sẽ chết vào bất kỳ ngày nào trước thời hạn.
Bạn đang kiểm soát một nhóm nhỏ gồm 5 người, những người sẽ mạo hiểm ra khỏi trại để tìm kho báu cho bạn.
Mục tiêu
Mục tiêu của cuộc thi này là tích lũy càng nhiều kho báu càng tốt. Mỗi lượt mà người hầu của bạn không cố gắng quay trở lại trại, họ sẽ tìm thấy một số lượng kho báu nhất định. Người hầu của bạn có thể trở lại trại vào những thời điểm khác nhau.
Mỗi lượt mà một công nhân ở lại để tìm kiếm kho báu, công nhân tìm thấy 1+R
các mảnh kho báu, trong đó R
số công nhân (trong số tất cả các bot) đã trở lại trại. Các bot chết không tính đến yếu tố này.
Vào đầu mỗi ngày, một số ngẫu nhiên ( n
) từ 2
đến max(3, floor(num_live_players/4))
sẽ được chọn. (Đối với 10 cầu thủ vào ngày 1, đây là 2
đến max(3,50/4)=12
. Đối với 20 người chơi vào ngày 1, điều này sẽ 2
đếnmax(3,100/4)=25
.) Con số này đại diện cho số lượng người chơi người sẽ còn lại để chết cho ngày hôm đó, và sẽ không được trao cho chương trình của bạn .
Nếu một người hầu là một trong những người cuối cùng n
người trở về, anh ta / cô ta sẽ chết và không thể chuyển kho báu mà anh ta / cô ta tìm thấy để sở hữu. Hơn nữa, người hầu sẽ không thể tham gia săn tìm kho báu trong phần còn lại của cuộc phiêu lưu.
Điểm cuối cùng của bạn là số lượng kho báu trung bình bạn có được trong mỗi chuyến phiêu lưu (chạy bộ điều khiển).
Nếu nhiều người cố gắng quay trở lại trại trên cùng một lượt so với các vị trí mở, các số ngẫu nhiên sẽ xác định ai vào và ai chết.
Một ngày trên hòn đảo này từ bình minh đến hoàng hôn kéo dài 30 lượt. Vì có nhiều động vật nguy hiểm vào ban đêm, việc không trở về vào lúc hoàng hôn có nghĩa là bạn sẽ không được phép vào trại.
Đầu ra đầu vào
Chương trình của bạn sẽ chạy cho toàn bộ mô phỏng.
Khi bắt đầu mô phỏng, INDEX I
sẽ được nhập vào, I
chỉ mục bot của bạn ở đâu (chỉ số này được tính từ 1 trở lên).
Vào đầu mỗi ngày, START_DAY D/N
sẽ được nhập vào chương trình của bạn, D
số ngày (bắt đầu từ đâu 1
) và N
bằng với max(3, floor(num_live_players/4))
, đó là số người tối đa có thể chết vào ngày cụ thể đó.
Khi bắt đầu mỗi lượt, START_TURN T
sẽ được nhập vào chương trình của bạn, T
số lượt (bắt đầu từ đâu 1
).
Khi chương trình của bạn nhận được điều này, nó sẽ phản hồi với một danh sách các bước di chuyển của người hầu, mỗi lần được phân tách bằng dấu phẩy.
Di chuyển hợp lệ là:
R
: Cố gắng trở về trại.S
: Ở lại tìm kiếm kho báu.N
: Người hầu đã chết hoặc đang ở trong trại.
Bước vào một nước đi không hợp lệ sẽ được diễn giải như S
thể bot còn sống và không ở trong trại, và N
nếu không.
Vào cuối mỗi lượt, một chuỗi sẽ được chuyển đến chương trình của bạn:
END_TURN [Turn #] [Bot 1 Moves] [Bot 2 Moves] ...
nơi di chuyển của mỗi người hầu của bot được phân tách bằng dấu phẩy.
Những động thái này sẽ là một trong những điều sau đây:
R
: Thành công trở lại trại lần lượt.r
: Không thể trở lại trại lần lượt.S
: Vẫn đang tìm kiếm kho báu.D
: Chết trên một lượt trước đó.N
: Đã trở lại trại.
Bots và người hầu vẫn theo thứ tự trong toàn bộ mô phỏng.
Ví dụ:
INDEX 2
....
END_TURN 8 N,N,N,N,N r,r,r,r,D D,D,D,N,R S,D,D,N,D
Ở đây, bạn là bot thứ hai ( r,r,r,r,r
), người đã cố gắng trả lại cả bốn người hầu vẫn còn sống (và thất bại một cách không may mắn trên cả bốn người). Những người hầu của Bot 1 đều quay trở lại trại. Bot 3 có ba người hầu đã chết, một người nữa trở lại trại và một người hầu thứ năm đã trở về thành công. Bot 4 có một người hầu ở lại (và sẽ chết, vì đây là lượt cuối cùng của một ngày), một người hầu trong trại và ba người hầu đã chết.
Sau mỗi chuỗi này, trừ khi một chuỗi báo hiệu kết thúc ngày cũng đã được xuất ra (xem bên dưới), chương trình của bạn là để xuất các bước tiếp theo của người hầu, được phân tách bằng dấu phẩy. Tất cả người hầu phải được tính (với N
nếu đã ở trong trại và D
nếu đã chết). Di chuyển không hợp lệ sẽ được xử lý như S
thể người hầu chưa ở trong trại / đã chết. Thí dụ:
N,N,S,S,R
nghĩa là:
Servant # | Action
1 | Do nothing.
2 | Do nothing.
3 | Stay put (keep looking for treasure).
4 | Stay put (keep looking for treasure).
5 | Try to return to camp.
Vào cuối một ngày, chuỗi sau sẽ được chuyển sau END
chuỗi của lượt cuối cùng , thông báo cho mọi người biết ai còn sống:
END_DAY [Day #] [Bot 1 Status] [Bot 2 Status]
trong đó trạng thái là một danh sách được phân tách bằng dấu phẩy là A
(còn sống) hoặc D
(đã chết). Ngày tiếp theo bắt đầu ngay sau đó.
Mô phỏng kết thúc khi có ít hơn 6 người hầu sống. Chương trình của bạn sẽ nhận được đầu vào sau vào cuối mô phỏng:
EXIT
Quy tắc / Chi tiết
- Chỉ đến lượt mà hành động của bạn là
S
bạn sẽ tìm thấy kho báu. - Số lượng mô phỏng chạy: 1000 lần
- Chương trình của bạn không nên mất hơn 1 giây để xác định di chuyển.
- Chương trình của bạn không nên thoát sớm; nó sẽ được bắt đầu chính xác một lần.
- Đảm bảo rằng bộ đệm đầu ra (nếu có) được tuôn ra sau mỗi đầu ra.
- Các tập tin có thể được ghi vào thư mục bot của bạn (
./players/BotName/
). Tên bot của bạn là bất cứ tên nào bạn đặt tên cho bot của mình, với tất cả các ký tự không phải là chữ và số được xóa và viết bằng CamelCase. Các mục nhập có thể lưu dữ liệu giữa các lần chạy của bộ điều khiển, vì các lần chạy được thực hiện tuần tự. - Chương trình của bạn phải thoát sau khi nhận được
EXIT
. - Các chương trình không biên dịch hoặc ném lỗi hoặc xuất văn bản không hợp lệ (không ở định dạng 5 ký tự được phân tách bằng dấu phẩy) có thể được loại trừ khỏi cuộc thi. Một dòng mới phải theo từng đầu ra.
- Bộ điều khiển có thể được tìm thấy trên GitHub .
Vui lòng bao gồm tên bot, ngôn ngữ + phiên bản, mã và lệnh để biên dịch (nếu có) và chạy bot của bạn.
Thí dụ
Văn bản được xuất ra bởi chương trình có tiền tố ở đây với a >
. Chương trình của bạn không nên xuất ký tự này.
INDEX 2
START_DAY 1/3
START_TURN 1
>S,S,S,S,S
END_TURN 1 S,R,S,S,S S,S,S,S,S
START_TURN 2
>S,S,S,S,S
END_TURN 2 S,N,S,R,S S,S,S,S,S
START_TURN 3
>R,R,S,S,S
END_TURN 3 R,N,R,N,R R,R,S,S,S
START_TURN 4
>N,N,S,S,S
END_TURN 4 N,N,N,N,N N,N,S,S,S
START_TURN 5
>N,N,R,R,R
END_TURN 5 N,N,N,N,N N,N,r,r,R
END_DAY 1 A,A,A,A,A A,A,D,D,A
START_DAY 2/3
START_TURN 1
>S,S,N,S,N
END_TURN 1 R,R,R,R,R S,S,D,D,N
END_DAY 2 A,A,A,A,A D,D,D,D,D
EXIT
Điểm cho ví dụ trên là:
Bot# Day 1 Day 2 Total
1 10 0 10
S1 1+2 0 3
S2 0 0 0
S3 1+2 0 3
S4 1 0 1
S5 1+2 0 3
2 20 0 20
S1 1+2 0 3
S2 1+2 0 3
S3 0 0 0
S4 0 0 0
S5 1+2+3+8 0 14
Do đó, người chiến thắng là người chơi, bot 2. Lưu ý rằng người chiến thắng không phải sống sót đến cuối cùng tuyệt đối. (Cũng lưu ý rằng người chơi có thể duy trì đến 30 tuổi vào ngày 1, vì trại sẽ không đầy cho đến khi người chơi gửi thêm một bot nữa).
Điểm số
Bot Score
Bob 2939.422
Statisticians 2905.833
Morning Birds 1652.325
Evolved 1578.285
Slow Returners 1224.318
Wandering Fools 1065.908
Randomizers 735.313
Drunkards 0
Plague 0
Nhật ký có sẵn trên GitHub . Kết quả cho mỗi thử nghiệm có sẵn trên bảng tính google này .