비대칭 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 191962 8 flawr
StupidFill 212688 9 flawr
Achilles 77214 6 The E
Agamemnon 74896 5 The E
CloseCatcher 54776 4 randomra
ForwordCatcher 93814 7 MegaTom
Dijkstra 47558 2 TheNumberOne
HexCatcher 48644 3 randomra
ChoiceCatcher 43834 1 randomra
RandCat 77490 9 flawr
StupidRightCat 81566 6 flawr
SpiralCat 93384 5 CoolGuy
StraightCat 80930 7 CoolGuy
FreeCat 106294 3 randomra
RabidCat 78616 8 cain
Dijkstra's Cat 115094 1 TheNumberOne
MaxCat 98400 4 Manu
ChoiceCat 113612 2 randomra
main.Controller
, 부르고 getCatchers()
, 시뮬레이트 / 방해하는 것을 막는 것은 무엇입니까 takeTurn
?