Ви глобус слиз. Природно, будучи слизом, ви хочете просочитися якомога більше площі. Але є 3 інші шлейфи, які хочуть зробити те саме. Хто буде вищим слизом?
Опис
Всі шлаки будуть зібрані на одну арену. Судді (тобто програма контролю) пройдуть вичерпний перелік усіх можливих 4-х слизових комбінацій, розмістять їх на кутах столу та спостерігають, щоб за найбільшою площею просочився шлам.
Ваші шлейфи можуть виконувати одну з 3 дій кожного кроку: розкладати, стрибати або зливатися. Подальший опис того, що це означає, буде надано у розділі Вихідні дані .
Дошка / Арена
Арена буде квадратною дошкою (зараз 8х8, але це може змінитися в майбутньому). Ось приклад арени гри, що триває:
11111222
11111444
11.22444
.1222.4.
333.3244
33333.44
333...44
333....4
Слиз представлений числами 1 - 4 (гравці 1 - 4), а порожній простір - крапкою ( .
). Спочатку дошка починається як весь порожній простір, за винятком однієї одиниці слизу гравця 1 у верхньому лівому куті, гравця 2 у верхньому правому куті, гравця 3 в нижньому лівому куті та гравця 4 в нижньому правому куті.
Координати представлені індексом рядків і стовпців на основі 0 для читабельності в коді. Наприклад, координати (3, 6) являють собою 7-й квадрат у 4-му ряду (у наведеному вище прикладі, а 4
). (Це полегшує доступ до квадратів:. board[coords.x][coords.y]
) Ось візуальна ілюстрація:
(0, 0) (0, 1) (0, 2)
(1, 0) (1, 1) (1, 2)
(2, 0) (2, 1) (2, 2)
Вхідні дані
Вхід вашої програми буде тим, хто ви граєте (1, 2, 3 або 4), кома ( ,
), а потім вміст дошки / арени (з новими рядками, заміненими комами). Наприклад, якби ви були гравцем 3 у вищевказаному сценарії, ваш внесок буде:
3,11111222,11111444,11.22444,.1222.4.,333.3244,33333.44,333...44,333....4
Вихід
Ваша програма повинна вивести 4 цілих числа. Перші два - це індекс рядків і стовпців відповідно слизу, який ви хочете перемістити, а наступні два - індекс рядків і стовпців, куди ви хочете їх перемістити.
На кожному кроці є три варіанти: розкладіть, стрибайте або зливайтеся.
Поширити
Для розповсюдження координатні цілі повинні бути рівно на один квадратний від слизу, що переміщується, а квадрат у координатах цілі повинен бути порожнім. При розповсюдженні створюється новий шлам за цільовими координатами, а старий шлам - ні видаляється. Після створення нового шламу всі ворожі шлейфи на 8 квадратах навколо цього нового слизу перетворюються на гравця, який перемістився.
Наприклад, із дошкою на фіг. 1, якби вийшов гравець 1
0 1 1 2
, результатом стала б дошка на рис. 2.1. 2. 11.22 11.12 1..22 1.112 ..22. ..11. ..... .....
Стрибати
Щоб стрибати, цільові координати повинні бути рівно на два квадрати від слизу, який переміщується, а квадрат у координатах цілі повинен бути порожнім. При стрибку створюється новий шлам за цільовими координатами, а стара шлам видаляється. Після створення нового шламу всі ворожі шлейфи на 8 квадратах навколо цього нового слизу перетворюються на гравця, який перемістився.
Наприклад, із дошкою на фіг. 1, якби вийшов гравець 1
0 1 2 3
, результатом стала б дошка на рис. 2.1. 2. 11..2 1...2 1...2 1...1 ....2 ...11 ...22 ...11
Злиття
Для злиття цільові координати повинні знаходитися на відстані рівно одного квадрата від слизу, який переміщується, а квадрат у координатах цілі повинен бути слизом того ж гравця. При злитті старий шлам видаляється. Потім усі порожні пробіли у 8 квадратах навколо цільової слизу перетворюються на гравця, який перемістився (не враховуючи стару слизь, що переміщується).
Наприклад, із дошкою на фіг. 1, якби вийшов гравець 1
0 1 1 2
, результатом стала б дошка на рис. 2.1. 2. 11..2 1.112 1.1.2 11112 ....2 .1112 ..222 ..222
Ви також можете пройти, просто вивівши недійсні координати (наприклад 0 0 0 0
).
Правила та обмеження
Додаткові правила:
- Ви можете читати та писати файли у власній папці для збереження даних (матеріали зберігатимуться в
players/YourBotName/yourBotName.language
), але ви не можете змінювати або отримувати доступ до нічого іншого поза нею. Доступ до Інтернету заборонений. - Ваше повідомлення може не кодуватися спеціально, щоб допомогти або заподіяти шкоду іншому. (У вас може бути кілька записів, але вони не повинні конкретно взаємодіяти між собою.)
- Ваша подача повинна займати не більше 0,1 секунди за оборот. Якщо ви надсилаєте час від часу 0,105 секунди, це нормально, але це може не тривати значно довше, ніж цей термін. (Це в основному перевірка здоровості, щоб уникнути тестування занадто тривалий час.)
- Ваше подання не повинно бути точним дублікатом (тобто використовувати абсолютно ту ж логіку) іншого, навіть якщо це іншою мовою.
- Ваше подання має бути серйозним. Це ґрунтується на думці, але якщо ваше повідомлення явно не намагається вирішити проблему (наприклад, якщо ви проходите кожен крок), вона буде дискваліфікована.
Якщо ваше представлення порушує будь-яке з цих правил або не відповідає специфікації, воно буде дискваліфіковано, видалено з нього playerlist.txt
, і гра буде перезапущена з самого початку. Якщо ваше подання буде дискваліфіковано, я залишу коментар до вашого повідомлення з поясненням причини. В іншому випадку ваше подання буде додано до таблиці лідерів. (Якщо ви не бачите своїх публікацій на таблиці лідерів, не маєте пояснювальних коментарів до своєї публікації та опублікували свою заявку до часу "Останнє оновлення" нижче, будь ласка, скажіть мені!
Введіть:
- Ім'я.
- Командна оболонка для запуску програми (наприклад,
java MyBot.java
,ruby MyBot.rb
,python3 MyBot.py
і т.д.).- Зауважте, що вхід (ваш програвач та карта) буде доданий до цього як аргумент командного рядка.
- Програми будуть протестовані на Ubuntu 14.04, тому переконайтесь, що ваш код можна буде (вільно) запускати на ньому.
- Номер версії, якщо ваш код працює по-різному в різних версіях вашої мови.
- Код вашого бота.
- Інструкції про те, як скласти код, якщо це необхідно.
Код контролера / тестування, наприклад бот
Код контролера написаний на C ++ і його можна знайти в Github . Подальші інструкції щодо запуску та тестування коду можна знайти там.
simplebot.rb
, на Github також розміщується дуже простий бот, який поширює або стрибає випадковий шлам у випадкове місце .
Підрахунок балів та таблиця лідерів
Коли всі квадрати на дошці заповнені, гра закінчується і підраховуються рахунки. Кінцевий рахунок гравця - це кількість квадратів, які містять їх шлам в кінці гри. Якщо минуло 2000 оборотів (по 500 для кожного гравця), і гра все ще не закінчилася, гра все одно закінчиться, і про рахунки буде повідомлено так, ніби гра закінчилася.
В кінці турніру бали з усіх ігор будуть усереднені для підрахунку остаточного рахунку кожного гравця, який буде розміщений на таблиці лідерів. Немає терміну подання; Я продовжуватиму періодично оновлювати таблицю лідерів, коли надходять нові матеріали.
Потрібні 4 подання заявки, поки не з’явиться справжня таблиця лідерів.
+--------------------------+-----------+--------------------+
| Name | Avg Score | Last Updated (UTC) |
+--------------------------+-----------+--------------------+
| GreedySlime | 47.000 | Jul 22 10:27 PM |
| Jumper | 12.000 | Jul 22 10:27 PM |
| ShallowBlue | 5.000 | Jul 22 10:27 PM |
| Lichen | 0.000 | Jul 22 10:27 PM |
+--------------------------+-----------+--------------------+
Останнє оновлення: 22 липня 22:27 (UTC).