비대칭 KOTH : 고양이를 잡아라
UPDATE : Controller.java가 예외를 포착하지 않아 (오류 만) gist 파일이 업데이트됩니다 (새로운 서브 미슨 포함). 이제 오류와 예외를 포착하고 인쇄합니다.
이 도전은 두 개의 스레드로 구성되며, 이것은 포수 스레드이며, 고양이 스레드는 여기 에서 찾을 수 있습니다 .
컨트롤러는 여기에서 다운로드 할 수 있습니다 .
이것은 비대칭 KOTH입니다. 각 제출물은 고양이 또는 포수 입니다. 고양이와 포수의 각 쌍 사이에 게임이 있습니다. 고양이와 포수는 별개의 순위를 가지고 있습니다.
포수
육각형 격자에 고양이가 있습니다. 당신의 임무는 가능한 한 빨리 잡는 것입니다. 매 턴마다 고양이가 물에 빠지지 않도록 물통을 하나의 격자 셀에 놓을 수 있습니다. 그러나 고양이는 어리석지 않으며, 양동이를 넣을 때마다 고양이는 다른 격자 셀로 이동합니다. 격자는 육각형이므로 고양이는 6 가지 방향으로 갈 수 있습니다. 당신의 목표는 물통으로 고양이를 둘러싸고, 더 빠를수록 좋습니다.
고양이
당신은 포수가 당신 주위에 물통을 놓아서 당신을 붙잡고 싶어한다는 것을 알고 있습니다. 물론 당신은 피하려고 노력하지만, 당신은 게으른 고양이 (고양이처럼)로서 한 번에 정확히 한 걸음을 내딛습니다. 이것은 당신이 같은 곳에 머물 수는 없지만 6 개의 주변 지점 중 하나로 이동해야한다는 것을 의미합니다. 포수가 새로운 물통을 놓은 것을 볼 때마다 다른 세포로갑니다. 물론 당신은 가능한 한 오랫동안 피하려고 노력합니다.
그리드
격자는 육각형이지만 육각형 데이터 구조가 없으므로 11 x 11
정사각형 2d 배열을 취하여 고양이가 6 방향으로 만 이동할 수있는 육각형 '동작'을 모방합니다.
토폴로지는 환상적입니다. 즉, 어레이의 '외부'셀을 밟으면 어레이의 다른쪽에있는 해당 셀로 전송됩니다.
경기
고양이는 그리드의 지정된 위치에서 시작합니다. 포수는 첫 번째 이동을 할 수 있으며, 고양이와 캐처는 고양이가 잡힐 때까지 교대로 움직입니다. 걸음 수는 해당 게임의 점수입니다. 고양이는 가능한 한 높은 점수를 얻으려고 노력하고, 포수는 가능한 한 낮은 점수를 얻으려고 노력합니다. 참여한 모든 게임의 평균 합계가 제출 점수가됩니다. 고양이와 포수를위한 두 가지 등급이 있습니다.
제어 장치
주어진 컨트롤러는 Java로 작성되었습니다. 포수 또는 고양이는 각각 Java 클래스를 구현하고 (이미 몇 가지 기본 예제가 있음) players
패키지에 배치해야 하며 컨트롤러 클래스의 고양이 / 포수 목록을 업데이트해야합니다. 해당 클래스 내의 추가 기능. 컨트롤러에는 간단한 고양이 / 캐처 클래스의 두 가지 실제 예제가 제공됩니다.
이 필드는 셀의 현재 상태 값을 저장 하는 11 x 11
2D int
배열입니다. 셀이 비어 0
있으면 값 이 있고, 고양이가 -1
있으면 값이 있고, 버킷이 있으면가 있습니다 1
.
사용할 수있는 몇 가지 기능이 있습니다 : isValidMove()
/ isValidPosition()
이동 (고양이) / 위치 (포수)가 유효한지 확인하기위한 기능
차례가 될 때마다 함수 takeTurn()
가 호출됩니다. 인수는이 같은 방법이 현재 그리드의 사본이 들어 read(i,j)
있는 셀을 읽을 (i,j)
뿐만 아니라, isValidMove()/ isValidPosition()
답의 유효성을 그 검사를. 또한 토 로이드 토폴로지의 랩핑을 관리합니다. 즉, 그리드가 11 x 11 인 경우에도 셀에 액세스 할 수 있습니다 (-5,13).
이 메소드는 int
가능한 이동을 나타내는 두 요소 의 배열을 리턴해야 합니다. 고양이 {-1,1},{0,1},{-1,0},{1,0},{0,-1},{1,-1}
의 경우 고양이가 가고 싶은 위치의 상대 위치를 나타내며 포수는 양동이를 놓을 위치의 절대 좌표를 반환합니다 {i,j}
.
분석법이 유효하지 않은 이동을 제출하면 제출이 실격 처리됩니다. 목적지에서 버킷이 이미 있거나 이동이 이미 허용 된 목적지 / 고양이 (고양이) 또는 버킷 / 고양이 (캐처) 인 경우 이동은 유효하지 않은 것으로 간주됩니다. 주어진 기능으로 미리 확인할 수 있습니다.
제출물은 합리적으로 빠르게 작동해야합니다. 각 단계마다 방법이 200ms보다 오래 걸리면 실격 처리됩니다. (바람직하게는 훨씬 적습니다 ...)
프로그램은 단계 사이에 정보를 저장할 수 있습니다.
제출물
- 원하는만큼 제출할 수 있습니다.
- 이미 제출 한 제출물을 크게 변경하지 마십시오.
- 각 답변을 새로운 답변으로 작성하십시오.
- 각 제출물에는 고유 한 이름이 있어야합니다.
- 제출물은 수업 코드와 제출 방식을 알려주는 설명으로 구성되어야합니다.
<!-- language: lang-java -->
자동 구문 강조를 얻기 위해 소스 코드에 대한 행을 작성할 수 있습니다 .
채점
모든 고양이 는 모든 포수 와 같은 횟수로 경쟁 합니다. 나는 현재 점수를 자주 업데이트하려고 노력할 것이며, 활동이 감소하면 승자가 결정될 것입니다.
이 도전은 이 오래된 플래시 게임에서 영감을 얻었습니다.
테스트하고 건설적인 피드백을 준 @PhiNotPi에게 감사합니다.
현재 점수 (페어링 당 100 게임)
Name Score Rank Author
RandCatcher 191674 8 flawr
StupidFill 214246 9 flawr
Achilles 76820 6 The E
Agamemnon 74844 5 The E
CloseCatcher 54920 4 randomra
ForwordCatcher 94246 7 MegaTom
Dijkstra 46500 2 TheNumberOne
HexCatcher 48832 3 randomra
ChoiceCatcher 43828 1 randomra
RandCat 77928 7 flawr
StupidRightCat 81794 6 flawr
SpiralCat 93868 5 CoolGuy
StraightCat 82452 9 CoolGuy
FreeCat 106304 3 randomra
RabidCat 77770 8 cain
Dijkstra's Cat 114670 1 TheNumberOne
MaxCat 97768 4 Manu
ChoiceCat 113356 2 randomra