Đưa ra một danh sách các điểm, tìm con đường ngắn nhất truy cập tất cả các điểm và trở về điểm bắt đầu.
Các Salesman Du lịch Vấn đề là nổi tiếng trong lĩnh vực khoa học máy tính, như rất nhiều cách để tính toán / xấp xỉ nó. Nó đã được giải quyết cho các nhóm điểm rất lớn, nhưng một số điểm lớn nhất phải mất nhiều năm để hoàn thành CPU.
Đừng để bị cháy bởi khoai tây.
Hot Potato là một trò chơi trong đó hơn 2 người chơi vượt qua một "củ khoai tây" trong một vòng tròn trong khi nhạc phát. Đối tượng là nhanh chóng chuyển nó cho người chơi tiếp theo. Nếu bạn đang cầm củ khoai tây khi nhạc dừng lại, bạn sẽ ra ngoài.
Đối tượng của nhân viên bán hàng khoai tây nóng là:
Cho một bộ 100 điểm duy nhất , trả lại các điểm đó theo thứ tự tốt hơn ( tổng khoảng cách ngắn hơn như được xác định tiếp theo ). Điều này sẽ "vượt qua" vấn đề cho người chơi tiếp theo. Họ phải cải thiện nó và chuyển nó sang người tiếp theo, v.v ... Nếu một người chơi không thể cải thiện nó, họ sẽ ra ngoài và tiếp tục chơi cho đến khi một người chơi còn lại.
Để giữ cho điều này không phải là một cuộc thi "brute-force-me-a-path", có những quy định sau:
Bạn không thể mất hơn một phút để vượt qua khoai tây. Nếu bạn chưa tìm thấy và thông qua một giải pháp ngắn hơn trước khi hết một phút, bạn sẽ ra ngoài.
Bạn không thể thay đổi vị trí của hơn 25 điểm. Để chính xác,
>= 75
điểm phải ở cùng vị trí với bạn đã nhận được chúng. Nó không quan trọng mà những người bạn quyết định thay đổi, chỉ là số lượng bạn thay đổi.
Khi chỉ còn một người chơi, anh ta là người chiến thắng trong trò chơi đó và nhận được một điểm. Một tourney bao gồm các 5*n
trò chơi, trong đó n
số lượng người chơi. Mỗi trò chơi, người chơi bắt đầu sẽ được xoay và thứ tự người chơi còn lại sẽ được xáo trộn . Người chơi có nhiều điểm nhất ở cuối là người chiến thắng giải đấu. Nếu tourney kết thúc với một chiếc cà vạt cho vị trí đầu tiên, một tourney mới sẽ chỉ được chơi với những thí sinh đó. Điều này sẽ tiếp tục cho đến khi không có sự ràng buộc.
Người chơi bắt đầu cho mỗi trò chơi sẽ nhận được một tập hợp các điểm được chọn giả ngẫu nhiên không theo thứ tự cụ thể.
Các điểm được định nghĩa là một cặp x,y
tọa độ nguyên trên lưới cartesian. Khoảng cách được đo bằng khoảng cách Manhattan , |x1-x2| + |y1-y2|
. Tất cả các tọa độ sẽ nằm trong [0..199]
phạm vi.
Đầu vào
Đầu vào được đưa ra với một đối số chuỗi đơn. Nó sẽ bao gồm 201 số nguyên được phân tách bằng dấu phẩy đại diện cho số lượng người chơi hiện tại ( m
) và 100 điểm:
m,x0,y0,x1,y1,x2,y2,...,x99,y99
Thứ tự của các điểm này là đường dẫn hiện tại. Tổng khoảng cách có được bằng cách thêm khoảng cách từ mỗi điểm đến điểm tiếp theo ( dist(0,1) + dist(1,2) + ... + dist(99,0)
). Đừng quên quay lại để bắt đầu khi tính tổng khoảng cách!
Lưu ý rằng m
là không số lượng người chơi mà bắt đầu trò chơi, đó là con số đó vẫn đang ở.
Đầu ra
Đầu ra được đưa ra theo cách tương tự như đầu vào, trừ m
; một chuỗi chứa các số nguyên được phân tách bằng dấu phẩy biểu thị các điểm theo thứ tự mới.
x0,y0,x1,y1,x2,y2,...,x99,y99
Chương trình điều khiển sẽ đợi đầu ra chỉ trong một phút. Khi đầu ra được nhận, nó sẽ xác minh rằng:
- đầu ra được hình thành tốt
- đầu ra bao gồm chỉ và tất cả 100 điểm trình bày trong đầu vào
>=75
điểm ở vị trí ban đầu của họ- độ dài đường dẫn nhỏ hơn đường dẫn trước
Nếu bất kỳ kiểm tra nào trong số này không thành công (hoặc không có đầu ra), bạn sẽ ra ngoài và trò chơi sẽ chuyển sang người chơi tiếp theo.
Chương trình điều khiển
Bạn có thể tìm thấy chương trình điều khiển tại liên kết này . Chương trình điều khiển chính nó là xác định, và được đăng với một hạt giống giả 1
. Hạt giống được sử dụng trong quá trình ghi điểm sẽ khác nhau, vì vậy đừng cố gắng phân tích thứ tự lần lượt / danh sách điểm mà nó phun ra.
Các lớp chính là Tourney
. Chạy này sẽ làm một giải đấu đầy đủ với các thí sinh được đưa ra như là đối số. Nó phun ra người chiến thắng của mỗi trò chơi và một kiểm đếm vào cuối. Một tourney mẫu có hai SwapBots trông giống như:
Starting tournament with seed 1
(0) SwapBot wins a game! Current score: 1
(1) SwapBot wins a game! Current score: 1
(1) SwapBot wins a game! Current score: 2
(1) SwapBot wins a game! Current score: 3
(0) SwapBot wins a game! Current score: 2
(1) SwapBot wins a game! Current score: 4
(1) SwapBot wins a game! Current score: 5
(1) SwapBot wins a game! Current score: 6
(1) SwapBot wins a game! Current score: 7
(1) SwapBot wins a game! Current score: 8
Final Results:
Wins Contestant
2 (0) SwapBot
8 (1) SwapBot
Nếu bạn muốn kiểm tra chỉ một trò chơi cùng một lúc, bạn có thể chạy Game
lớp thay thế. Điều này sẽ chạy một trò chơi với người chơi theo thứ tự được đưa ra làm đối số. Theo mặc định, nó cũng sẽ in một lần phát cho thấy trình phát và độ dài đường dẫn hiện tại.
Cũng bao gồm một vài người chơi thử nghiệm: SwapBot
, BlockPermuter
, và TwoSwapBot
. Hai cái đầu tiên sẽ không được bao gồm trong các lần chạy điểm, vì vậy hãy thoải mái sử dụng và lạm dụng chúng trong quá trình thử nghiệm. TwoSwapBot
sẽ được đưa vào đánh giá, và anh ấy không hề lép vế, vì vậy hãy mang trò chơi A của bạn.
Sai
Bạn không thể lưu thông tin trạng thái và mỗi lượt là một lần chạy chương trình riêng biệt. Thông tin duy nhất bạn sẽ nhận được mỗi lượt là tập hợp các điểm.
Bạn không thể sử dụng tài nguyên bên ngoài. Điều này bao gồm các cuộc gọi mạng và truy cập tập tin.
Bạn không thể sử dụng các chức năng thư viện được thiết kế để giải quyết / hỗ trợ cho vấn đề TSP hoặc các biến thể của nó.
Bạn không thể thao túng hoặc can thiệp vào người chơi khác bằng mọi cách.
Bạn không thể thao tác hoặc can thiệp vào chương trình điều khiển hoặc bất kỳ lớp hoặc tệp được bao gồm trong bất kỳ cách nào.
Đa luồng được cho phép.
Một lần gửi cho mỗi người dùng. Nếu bạn gửi nhiều mục, tôi sẽ chỉ nhập mục đầu tiên được gửi. Nếu bạn muốn thay đổi trình của mình, hãy chỉnh sửa / xóa bản gốc.
Giải đấu sẽ được chạy trên Ubuntu 13.04, trên máy tính có CPU i7-3770K và RAM 16 GB. Nó sẽ không được chạy trong VM. Bất cứ điều gì tôi cho là độc hại sẽ ngay lập tức loại bỏ mục hiện tại và bất kỳ mục nào trong tương lai bạn gửi.
Tất cả các mục phải được chạy từ dòng lệnh với phần mềm miễn phí ( như trong bia ). Nếu tôi gặp vấn đề trong việc biên dịch / chạy mục nhập của bạn, tôi sẽ yêu cầu trợ giúp trong các bình luận. Nếu bạn không trả lời hoặc cuối cùng tôi không thể chạy nó, nó sẽ bị loại.
Kết quả (ngày 22 tháng 5 năm 2014)
Kết quả mới là trong! UntangleBot đã đánh bại các đối thủ cạnh tranh khá tốt. TwoSwapBot đã quản lý bảy chiến thắng và SANNbot cũng giành được một chiến thắng. Đây là bảng điểm và liên kết đến đầu ra thô :
Wins Contestant
22 (2) ./UntangleBot
7 (0) TwoSwapBot
1 (5) SANNbot.R
0 (1) BozoBot
0 (3) Threader
0 (4) DivideAndConquer
Khi đứng tại , UntangleBot đã giành được dấu kiểm. Tuy nhiên, đừng để điều đó ngăn cản bạn tham gia, vì tôi sẽ điều hành giải đấu khi có nhiều thí sinh xuất hiện và thay đổi câu trả lời được chấp nhận cho phù hợp.