포인트 목록이 주어지면 모든 포인트를 방문하여 시작점으로 돌아 오는 최단 경로를 찾으십시오.
여행 세일즈맨 문제 로 / 계산을 근사하는 방법에는 여러 가지가 있으며, 컴퓨터 과학 분야에서 잘 알려져있다. 매우 큰 포인트 그룹에 대해 해결되었지만 가장 큰 일부는 완료하는 데 많은 CPU 년이 걸립니다.
감자에 타지 마십시오.
Hot Potato 는 음악을 재생하는 동안 2 명 이상의 플레이어가 원 안에 "감자"를 통과하는 게임입니다. 목표는 다음 플레이어에게 빠르게 전달하는 것입니다. 음악이 멈췄을 때 감자를 들고 있다면 밖에 있습니다.
의 목적 뜨거운 감자 세일즈맨 이다 :
100 개의 고유 한 점 세트가 주어지면 해당 점을 더 나은 순서로 반환합니다 ( 아래에서 정의 된 총 거리가 짧음 ). 이것은 다음 플레이어에게 문제를 "전달"합니다. 그들은 그것을 향상시키고 다음에 전달해야합니다. 만약 어떤 선수가 그것을 개선 할 수 없다면, 그들은 한 플레이어가 남을 때까지 나가고 게임을 계속합니다.
이것이 "경로의 힘 (brute-force-me-a-a-path)"경쟁이되지 않도록하기 위해 다음과 같은 규정이 있습니다.
감자를 통과하는 데 1 분 이상 걸릴 수 없습니다 . 1 분이 지날 때까지 더 짧은 솔루션을 찾지 못하고 지나갔다면 나갈 것입니다.
25 포인트 이상의 위치는 변경할 수 없습니다 . 정확하게,
>= 75
포인트는받은 포인트와 같은 위치에 있어야합니다. 중요하지 않습니다 어떤 당신이 변화에 바로 결정 것들 금액 변경합니다.
한 명의 플레이어 만 남으면 해당 게임의 승자가되고 1 점을받습니다. 토너먼트는 5*n
게임으로 구성되며 n
플레이어 수는 어디 입니까 ? 각 게임, 시작 플레이어가 회전 하고 나머지 플레이어 순서가 섞 입니다. 마지막에 가장 많은 점수를 얻은 플레이어가 토너먼트의 승자입니다. 토너먼트가 1 위로 동점 인 경우 해당 참가자 만 새로운 토너먼트를 진행합니다. 동점이 없을 때까지 계속됩니다.
각 게임의 시작 플레이어는 의사 순서대로 선택된 무작위 의사 점수를받습니다.
포인트는 x,y
데카르트 그리드에서 정수 좌표 쌍으로 정의됩니다 . 거리가 측정되는 맨하탄 거리 , |x1-x2| + |y1-y2|
. 모든 좌표가 [0..199]
범위 내에 있습니다.
입력
입력은 단일 문자열 인수로 제공됩니다. 현재 플레이어 수 ( m
)와 100 점을 나타내는 201 개의 쉼표로 구분 된 정수로 구성됩니다 .
m,x0,y0,x1,y1,x2,y2,...,x99,y99
이 지점의 순서는 현재 경로입니다. 총 거리는 각 점에서 다음 점까지의 거리를 더하여 구합니다 ( dist(0,1) + dist(1,2) + ... + dist(99,0)
).총 거리를 계산할 때 시작으로 돌아가는 것을 잊지 마십시오!
그 주 m
입니다 하지 게임을 시작 플레이어의 수, 그것은 여전히 수입니다.
산출
출력은 입력과 동일한 방식으로 마이너스 m
; 새로운 순서로 포인트를 나타내는 쉼표로 구분 된 정수를 포함하는 단일 문자열
x0,y0,x1,y1,x2,y2,...,x99,y99
제어 프로그램은 1 분 동안 만 출력을 기다립니다. 출력이 수신되면 다음을 확인합니다.
- 출력이 잘 구성되어 있습니다
- 출력은 다음과 같이 구성 만 하고 모든 100 점의 입력에 존재
>=75
포인트는 원래 위치에 있습니다- 경로 길이가 이전 경로보다 짧습니다.
이러한 검사 중 하나라도 실패하면 (또는 출력이없는 경우) 게임이 종료되고 다음 플레이어로 진행됩니다.
제어 프로그램
이 링크에서 제어 프로그램 을 찾을 수 있습니다 . 제어 프로그램 자체는 결정 론적이며 다음과 같은 더미 시드로 게시됩니다.1
. 스코어링 중에 사용 된 시드는 다를 수 있으므로, 뱉어 낸 턴 순서 / 포인트 목록을 분석하려고하지 않아도됩니다.
주요 수업은 Tourney
입니다. 이것을 실행하면 참가자는 논쟁으로 주어진 전체 토너먼트를 할 것입니다. 각 게임의 승자와 마지막에 탈리를 뱉어냅니다. SwapBots가 2 개인 샘플 토너먼트는 다음과 같습니다.
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
한 번에 하나의 게임 만 테스트하려면 Game
수업을 대신 실행할 수 있습니다 . 이것은 인수로 주어진 순서대로 플레이어와 하나의 게임을 실행합니다. 기본적으로 현재 플레이어와 경로 길이를 보여주는 재생 별 인쇄도합니다.
또한 포함 된 몇 가지 테스트 선수는 다음과 같습니다 SwapBot
, BlockPermuter
그리고 TwoSwapBot
. 처음 두 개는 점수 매기기에 포함되지 않으므로 테스트 중에 자유롭게 사용하고 남용하십시오. TwoSwapBot
의지 판단에 포함 된 그는 그래서 당신의 A-게임을 가지고, 능력있는 없습니다 수.
잡록
상태 정보를 저장할 수 없으며 각 차례는 프로그램의 개별 실행입니다. 매 차례마다 받게 될 유일한 정보는 포인트 세트입니다.
외부 리소스를 사용할 수 없습니다. 여기에는 네트워크 호출 및 파일 액세스가 포함됩니다.
TSP 문제점 또는 변형을 해결 / 지원하도록 설계된 라이브러리 기능을 사용할 수 없습니다.
어떤 식 으로든 다른 플레이어를 조작하거나 방해 할 수 없습니다.
제어 프로그램이나 포함 된 클래스 또는 파일을 어떤 식 으로든 조작하거나 방해 할 수 없습니다.
멀티 스레딩이 허용됩니다.
사용자 당 하나의 제출. 둘 이상의 항목을 제출하면 제출 된 첫 번째 항목 만 입력합니다. 제출물을 변경하려면 원본을 편집 / 삭제하십시오.
토너먼트는 i7-3770K CPU 및 16GB RAM이 장착 된 컴퓨터에서 Ubuntu 13.04에서 실행됩니다 . VM에서 실행되지 않습니다. 내가 악의적 인 것으로 인식하는 것은 귀하가 제출 한 현재 및 향후 출품작을 즉시 실격시킵니다 .
모든 항목은 명령 줄에서 무료 ( 맥주에서 와 같이 ) 소프트웨어 로 실행할 수 있어야합니다 . 항목을 컴파일 / 실행하는 데 문제가있는 경우 의견에 도움을 요청합니다. 응답하지 않거나 궁극적으로 실행할 수없는 경우 실격 처리됩니다.
결과 (2014 년 5 월 22 일)
새로운 결과가 나왔습니다! UntangleBot는 경쟁을 상당히 이겼습니다. TwoSwapBot은 7 승을 거두었으며 SANNbot도 승리를 거두었습니다. 다음은 스코어 보드와 원시 출력에 대한 링크입니다 .
Wins Contestant
22 (2) ./UntangleBot
7 (0) TwoSwapBot
1 (5) SANNbot.R
0 (1) BozoBot
0 (3) Threader
0 (4) DivideAndConquer
약자로 지금 , UntangleBot는 체크 표시를 수상했다. 더 많은 참가자가 나타날 때 토너먼트를 진행하고 이에 따라 허용되는 답변을 변경하기 때문에 참가를 방해하지 마십시오.