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