Асиметрична КОТЯ: Лови кота
ОНОВЛЕННЯ : Файли gist оновлюються (включаючи нові підрозділи), оскільки Controller.java не вловлює Винятки (лише помилки). Зараз він вловлює помилки та винятки, а також друкує їх.
Цей виклик складається з двох ниток, це котяча нитка, можна знайти нитку виловлювача тут .
Контролер можна завантажити тут .
Це несиметрична КОТЯ: Кожне подання - це або кішка чи ловець . Існують ігри між кожною парою кожної кішки та видовищем. Коти та ловці мають окремий рейтинг.
Ловець
На шестикутній сітці лежить кішка. Ваше завдання - зловити це якомога швидше. Щоразу, ви можете розмістити відро з водою на одній осередку сітки, щоб не допустити, щоб кішка могла туди ходити. Але кішка не є (можливо) такою німою, і кожен раз, коли ви помістите відро, кішка перейде до іншої сітки для сітки. Оскільки сітка є шестикутною, кішка може йти в 6 різних напрямках. Ваша мета - оточити кота відрами з водою, чим швидше, тим краще.
Кіт
Ви знаєте, що ловець хоче зловити вас, розміщуючи навколо себе відра з водою. Звичайно, ви намагаєтесь ухилитися, але, як ви лінива кішка (як і кішки), ви точно робите один крок на час. Це означає, що ви не можете залишитися на тому ж самому місці, але вам доведеться перейти на одне з шести навколишніх місць. Щоразу, коли ви побачите, що ловитель помістив нове відро з водою, ви йдете в іншу камеру. Звичайно, ви намагаєтесь уникнути якомога довше.
Сітка
Сітка є гексагональною, але оскільки у нас немає шестикутної структури даних, ми беремо 11 x 11
квадратний 2d масив і імітуємо шестикутну «поведінку», якою кішка може рухатись лише в 6 напрямках:
Топологія тороїдальна, це означає, що якщо ви наступите на клітинку "поза" масиву, вас просто перенесуть до відповідної комірки з іншого боку масиву.
Гра
Кішка починає в заданому положенні в сітці. Ловець може зробити перший хід, тоді кішка та її ловець чергують рухи, поки кішка не буде спіймана. Кількість кроків - оцінка за цю гру. Кішка намагається отримати максимально високий бал, видовище намагається отримати бал якомога нижче. Середня сума за всі ігри, в яких ви брали участь, складе бал за вашу заявку. Є два окремі рейтинги, один - для кота, один - для ловців.
Контролер
Даний контролер написаний на Java. Як ловця або кішка, ви повинні кожен із них реалізувати клас Java (вже є кілька примітивних прикладів) і помістити його в players
пакет (і оновити список котів / виловлювачів у класі Controller), але ви також можете написати додаткові функції в межах цього класу. Контролер постачається з двома робочими прикладами простих занять кішок / виловлювачів.
Поле - це 11 x 11
2D- int
масив, який зберігає значення поточних станів комірок. Якщо клітина порожня, вона має значення 0
, якщо є кішка, вона має значення, -1
а якщо є відро - є 1
.
Ви можете використовувати декілька заданих функцій: isValidMove()
/ isValidPosition()
для перевірки, чи ваш рух (кішка) / положення (ловець) дійсний.
Кожен раз, коли настає ваша черга, ваша функція takeTurn()
викликається. Аргумент містить копію поточної сітки a має методи, такі як 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}
.
Якщо ваш метод спричинить недійсний хід, ваше подання буде дискваліфіковано. Переміщення вважається недійсним, якщо у вашому пункті призначення вже є відро або переїзд заборонений / пункт призначення вже зайнятий (як кішка), або якщо вже є відро / кішка (як ловець). Ви можете перевірити це заздалегідь із заданими функціями.
Подання має працювати досить швидко. Якщо ваш метод займає більше 200 мс для кожного кроку, він також буде дискваліфікований. (Переважно набагато менше ...)
Програми дозволяють зберігати інформацію між етапами.
Подання
- Ви можете зробити скільки завгодно заявок.
- Будь ласка, не змінюйте суттєво подані вами матеріали.
- Будь ласка, кожне подання в новій відповіді.
- Бажано, щоб кожне подання мало унікальну назву.
- Подання має складатися з коду вашого класу, а також опису, який розповідає про те, як працює ваше подання.
- Ви можете написати рядок для
<!-- 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
методами?