Вступление
Вы оказались на необитаемом острове с несколькими слугами и охотитесь за сокровищами. Чем дольше человек ищет, тем больше сокровищ он находит. Чем меньше людей ищут, тем больше каждый человек находит.
Из-за ограниченных запасов лидер решил, что несколько человек, до четверти группы, должны умирать каждую ночь. Он решил никому точно не говорить, сколько людей умрет в любой день раньше времени.
Вы управляете небольшой группой из 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 .