Вступ
Ви опинилися на безлюдному острові з деякими слугами і полюєте за скарбами. Чим довше шукати, тим більше скарбів знаходити. Чим менше людей шукає, тим більше кожна людина знаходить.
Через обмежені запаси лідер вирішив, що кілька людей, до чверті групи, залишатимуться помирати щовечора. Він вирішив нікому точно не сказати, скільки людей загине в будь-який день достроково.
Ви керуєте невеликою групою з 5 чоловік, яка вирушить з табору, щоб знайти скарб для вас.
Об'єктивна
Мета цього змагання - зібрати якомога більше скарбів. Щоразу, коли ваші слуги не намагаються повернутися до табору, вони знайдуть певну кількість кладів. Ваші слуги можуть повертатися до табору в різний час.
Щоразу, коли працівник відстоює шукати скарб, працівник знаходить 1+R
шматки скарбу, де R
кількість робітників (з усіх ботів) вже повертається до табору. Мертві боти не враховують цей розрахунок.
На початку кожного дня буде обрано випадкове число ( n
) від 2
до max(3, floor(num_live_players/4))
. (Для 10 гравців на 1 -й день, це 2
до max(3,50/4)=12
. Для 20 гравців на 1 -й день, це було б 2
в max(3,100/4)=25
.) Це число означає кількість гравців , які будуть залишені вмирати в цей день, і не будуть передані програмі .
Якщо слуга є одним із останніх n
людей, які повернулися, він помре і не зможе передати скарб, який він знайшов, у ваше володіння. Крім того, слуга не зможе брати участь у пошуку скарбів до кінця пригоди.
Ваш остаточний бал - це середня кількість скарбів, які ви отримали за пригоду (пробіг контролера).
Якщо більше людей намагаються повернутися в табір на тому ж розвороті, ніж є відкриті слоти, випадкові числа визначатимуть, хто потрапляє та хто вмирає.
День на цьому острові від сходу сонця до заходу сонця триває 30 оборотів. Оскільки вночі багато небезпечних тварин, відмова повернутися до заходу сонця означає, що вас не пустять у табір.
Введення-виведення
Ваша програма повинна працювати для всього моделювання.
На початку моделювання INDEX I
буде введено, де I
індекс вашого бота (цей індекс рахується від 1 вгору).
На початку кожного дня START_DAY D/N
буде введено у вашу програму, де D
номер дня (починаючи з 1
), і N
дорівнює max(3, floor(num_live_players/4))
, яка є максимальною кількістю людей, які можуть померти в цей конкретний день.
На початку кожного START_TURN T
кроку буде введено у вашу програму, де T
номер черги (починаючи з 1
).
Після того, як ваша програма отримає це, вона повинна відповідати переліком ваших службовців, кожен розділений комою.
Дійсні кроки:
R
: Спробуйте повернутися в табір.S
: Залишайтеся шукати скарб.N
: Слуга вже мертвий або в таборі.
Введення недійсного ходу буде тлумачитися так, S
ніби бот живий, а не в таборі, N
інакше.
В кінці кожного ходу рядок передається вашій програмі:
END_TURN [Turn #] [Bot 1 Moves] [Bot 2 Moves] ...
де ходи слуг кожного бота розділені комами.
Ці кроки будуть одним із наступних:
R
: Успішно повернувся до табору, що повернувся.r
: Повернення до табору не вдалося.S
: Ще шукає скарб.D
: Помер на більш ранній черзі.N
: Вже назад у таборі.
Боти та слуги залишаються в одному порядку протягом усього моделювання.
Наприклад:
INDEX 2
....
END_TURN 8 N,N,N,N,N r,r,r,r,D D,D,D,N,R S,D,D,N,D
Ось, ви другий бот ( r,r,r,r,r
), який намагався повернути всіх чотирьох слуг, які ще живі (і, на жаль, не вдалося на всіх чотирьох). Всі слуги Бота 1 повернулися до табору. Бот 3 має трьох мертвих слуг, ще одного назад у таборі та п'ятого слугу, який успішно повернувся. У боті 4 є один слуга, який залишився (і помре, оскільки це остання черга дня), один слуга в таборі та три мертві слуги.
Після кожного з цих рядків, якщо також не виводиться рядок, що сигналізує про закінчення дня (див. Нижче), ваша програма повинна виводити наступні кроки ваших службовців, розділені комами. Потрібно враховувати всіх слуг ( N
якщо вони вже перебувають у таборі, а D
якщо вже мертві). Неправильні кроки будуть розглядатися так, S
ніби слуга вже не в таборі / мертвому. Приклад:
N,N,S,S,R
що означає:
Servant # | Action
1 | Do nothing.
2 | Do nothing.
3 | Stay put (keep looking for treasure).
4 | Stay put (keep looking for treasure).
5 | Try to return to camp.
Наприкінці дня після рядка останньої черги буде передано наступний END
рядок, повідомляючи всіх про те, хто живий:
END_DAY [Day #] [Bot 1 Status] [Bot 2 Status]
де статус - це розділений комою список або A
(живих), або D
(мертвих). Наступний день починається одразу після.
Моделювання закінчується, коли менше 6 живих слуг. Після закінчення моделювання ваша програма отримає такий вхід:
EXIT
Правила / подробиці
- Тільки на поворотах, де ваша дія
S
, ви знайдете скарб. - Кількість виконаних моделювання: 1000 разів
- Ваша програма не повинна займати більше 1 секунди для визначення рухів.
- Ваша програма не повинна виходити рано; вона буде запущена рівно один раз.
- Переконайтеся, що вихідний буфер (якщо застосовується) змивається після кожного виводу.
- Файли можуть бути записані у папку вашого бота (
./players/BotName/
). Ім'я вашого бота - це те, що ви називаєте, бо всі нелітерно-цифрові символи видаляються та записуються в CamelCase. Записи можуть зберігати дані між запусками контролера, оскільки виконання виконується послідовно. - Ваша програма повинна вийти після отримання
EXIT
. - Програми, які не можуть зібрати або викинути помилки або вивести недійсний текст (не у форматі 5 символів, розділених комами), можуть бути виключені з змагань. Новий рядок повинен слідувати за кожним результатом.
- Контролер можна знайти на GitHub .
Будь ласка, включіть ім'я бота, мову + версію, код та команду для компіляції (якщо це можливо) та запустіть свого бота.
Приклад
Текст, що виводиться програмою, тут є префіксом а >
. Ваша програма не повинна виводити цей символ.
INDEX 2
START_DAY 1/3
START_TURN 1
>S,S,S,S,S
END_TURN 1 S,R,S,S,S S,S,S,S,S
START_TURN 2
>S,S,S,S,S
END_TURN 2 S,N,S,R,S S,S,S,S,S
START_TURN 3
>R,R,S,S,S
END_TURN 3 R,N,R,N,R R,R,S,S,S
START_TURN 4
>N,N,S,S,S
END_TURN 4 N,N,N,N,N N,N,S,S,S
START_TURN 5
>N,N,R,R,R
END_TURN 5 N,N,N,N,N N,N,r,r,R
END_DAY 1 A,A,A,A,A A,A,D,D,A
START_DAY 2/3
START_TURN 1
>S,S,N,S,N
END_TURN 1 R,R,R,R,R S,S,D,D,N
END_DAY 2 A,A,A,A,A D,D,D,D,D
EXIT
Оцінки для наведеного вище прикладу:
Bot# Day 1 Day 2 Total
1 10 0 10
S1 1+2 0 3
S2 0 0 0
S3 1+2 0 3
S4 1 0 1
S5 1+2 0 3
2 20 0 20
S1 1+2 0 3
S2 1+2 0 3
S3 0 0 0
S4 0 0 0
S5 1+2+3+8 0 14
Тому переможець - гравець, бот 2. Зауважте, що переможцю не доводиться виживати до абсолютного кінця. (Також зауважте, що гравець міг залишитися до 30-го дня першого дня, оскільки табір не був би повним, поки гравець не відправив ще одного бота).
Оцінки
Bot Score
Bob 2939.422
Statisticians 2905.833
Morning Birds 1652.325
Evolved 1578.285
Slow Returners 1224.318
Wandering Fools 1065.908
Randomizers 735.313
Drunkards 0
Plague 0
Журнали доступні на GitHub . Результати кожного випробування доступні в цій таблиці Google .