Полювання на великодні яйця
Знайдіть яйце перед тим, як кролик знайде яйце. Бот щасливий.
Огляд
Це король-оф-хілл виклик на честь Великодня і пасхальне яйце полювання традиції!
Ваш бот має бачення двох пробілів у кожному напрямку, включаючи діагоналі, створюючи навколо себе квадрат 5х5, який ви можете бачити. Шукає яйця, і хто знайде найбільше яєць, той і виграє!
Дошка
Дошка буде складатися з o
s, що є писанками, #
s, які є стінами, *
s, які є іншими гравцями, і s, які є порожніми місцями.
- Це буде квадрат з довжиною краю
(number of entries) * 3
. - Він буде оточений стінами.
- Всередині стін буде асортимент випадково розміщених прямолінійних стін
#
, які матимуть випадкову довжину від 2 до 10 включно. Буде(number of entries) * 3
їх. - Потім яйця будуть розміщені випадковим чином. Там буде
(number of entries) * 4
їх, і вони будуть генеруватися тільки на заготівлі () квадратів.
- Для нормальної роботи ради має бути не менше 7 ентерів.
Ось JSFiddle, який генерує випадкову дошку для тестування. Ось приклад із (number of entries) = 7
:
#####################
# o ##
# # o ##
# #o ###### ##
###### # ##
## o # # ##
## o# #o# o o##
## #o # # o # #
## # o # # # #
## ## # # o # #
## # # o # # #
## # o # ## # # #
## # # # #
# o # ## # #
# o oo ##o #
#o ####### oo ## #
# # # #
# o o o# #
# o #### o o#
# #
#####################
Після генерування дошки кожен гравець розміщується на випадковому квадраті (порожнє місце).
Вхідні дані
Ви візьмете шість рядків введення. Перші п’ять рядків - це ваше поле зору (пробіли поза межами дошки будуть представлені символом X
, а середній простір завжди будете *
ви), а шостий рядок буде порожнім (спочатку).
Вихідні дані
Ви виведете три рядки. По-перше, напрямок, у якому потрібно рухатись:
1 2 3
8 YOU 4
7 6 5
(9 - не-оп, якщо ви не хочете рухатись), по-друге, з A
ttack, C
ounter або N
щось інше (це буде пояснено незабаром у глибині), а третя лінія буде будь-яким рядком довжиною до 1024 Це буде пам'ять вашого бота. Ви можете використовувати його для чого завгодно, або можете залишити його порожнім. Потім ця пам'ять стане шостим рядком введення вашої програми при наступному запуску.
Всі подальші рядки виводу ігноруються, і якщо є лише один рядок, другий вважається порожнім.
Переміщення
Наступний процес використовується для визначення місця переїзду:
- Якщо під час переміщення ви
опиняєтесь у порожньому просторі ( ), ваш програвач розміщується в цьому просторі.
- Якщо ви опинитесь у стіні (
#
), ваш хід ігнорується, і ви втрачаєте свою чергу. - Якщо ви опинитесь в яйці (
o
) або гравцеві (*
), ця інформація зберігається і буде використовуватися після переміщення всіх.
Після того, як усі переїхали, двозначності вирішуються.
Якщо є два гравці, які приземлилися на одному просторі, відбувається бійка! Ось тут A
/ C
/ N
приходить грати. A
ttack beats N
othing (нормальна атака), N
othing beats C
ounter (ти нічого не можеш протидіяти), and C
ounter beats A
ttack (контратака). Гравець, який виграє цю боротьбу, залишається на їхній площі, а гравець, який програє, повертається до початкового квадрата, на якому вони почали. У разі нічиїх обох гравців повертаються туди, де були.
Якщо програючий або прив'язаний гравець повернеться туди, де вони були, і там є інший гравець, то бійки немає, і інший гравець також повернеться до свого початкового місця. Якщо в цьому просторі є інший гравець, той гравець повертається назад, і це триває, поки всі гравці не опиняться в різних місцях.
Якщо на одному просторі є три або більше гравців, всі вони повертаються на свої початкові позиції.
Якщо якийсь гравець все ще стоїть на яйці ...
- Якщо гравець вибрав
A
, яйце знищується. - Якщо гравець вибрав
C
, нічого не відбувається, і гравець повертається до свого початкового простору. - Якщо гравець вибрав
N
, гравець вибирає яйце! Оцінка гравця збільшується на одиницю, а яйце видаляється.
Мови
Ви можете використовувати будь-яку мову, що є у вільному доступі в Windows, OSX та Linux, щоб забезпечити справедливість серед кожного учасника. Якщо код не вільно керується, але його можна скласти або упакувати у такий формат, будь ласка, включіть цей формат у свою відповідь. В ідеалі, якщо ви можете скласти свій код на більш поширеній мові (наприклад, CoffeeScript -> JavaScript), будь ласка, зробіть це.
Оцінка балів
Ваша оцінка буде середньою кількістю яєць, які ви збираєте за десять пробіжок. Пробіг закінчується, коли всі яйця зібрані або коли (number of entries * 25)
пройшли обороти. Я вручну переконуюсь, що можна досягти всіх яєць для кожної карти (постійно генеруючи карти, поки всі яйця не будуть доступні).
Табло
Таблиця буде додана, коли будуть виконані всі наступні умови:
- Надіслано щонайменше сім дійсних записів із позитивною чи нульовою оцінкою (не заперечується)
- З моменту створення цього виклику минуло щонайменше 48 годин (UTC 14:23)
Правила не змінюватимуться протягом цього періоду перед конкурсом, за винятком того, щоб додати роз'яснення, коли правило було незрозумілим. Після встановлення табло тут буде розміщена програма тестування, щоб ви могли перевірити свої записи. Код тестування для цього все ще працює, але він відтворюється і працює. Ось репортаж GitHub.
9
, він ніколи не може бути змістовно атакований. Якщо інший гравець (B) перейде на квадрат цього гравця і виграє, A буде переміщений назад до його початкового квадрата (який той самий). Але зараз відбувається зіткнення, бо і А, і Б там є, тому Б повинен повернутися до своєї власної площі. Отже результат не залежить від фактичної боротьби, B завжди повертається до початкового квадрата, а A завжди залишається поставленим. Це дозволило б мені написати те, що могло б допомогти іншому поданню, блокуючи шлях для всіх інших.