Вступление
Вы оказались на необитаемом острове с несколькими слугами и охотитесь за сокровищами. Чем дольше человек ищет, тем больше сокровищ он находит. Чем меньше людей ищут, тем больше каждый человек находит.
Из-за ограниченных запасов лидер решил, что несколько человек, до четверти группы, должны умирать каждую ночь. Он решил никому точно не говорить, сколько людей умрет в любой день раньше времени.
Вы управляете небольшой группой из 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 .
источник
Ответы:
Боб - C ++
Компилировать:
Бежать:
источник
Статистика, Питон 3
Статистики всегда работают вместе. На первом ходу они возвращаются в лагерь, когда две трети их противников сделали это. На последующих ходах они полагаются на данные, собранные за предыдущие ходы, чтобы предсказать привычки других слуг, и пытаются вернуться в лагерь в последний безопасный момент.
программа
Как видите, я бесстыдно украл структуру программы у @Mike Sweeney.
команда
РЕДАКТИРОВАТЬ: Исправлена ошибка в проверке для возвращения домой. Они должны работать несколько лучше сейчас.
РЕДАКТИРОВАТЬ 2: Статистики теперь умнее, чем раньше: они отслеживают, какие слуги вернулись в лагерь в текущий день, и соответствующим образом корректируют свои прогнозы. Кроме того, они рискуют, возвращаясь в лагерь, когда остается 3/4 от максимального числа умирающих слуг. Это толкает их обратно к вершине (едва; Боб стал очень опасным).
источник
Пьяница, Perl 5
Слишком много алкоголя, и они никогда не найдут дорогу обратно в лагерь.
Эта запись в первую очередь пример, но будет участвовать.
программа
команда
источник
$status[$i] eq 'A' ? 'S' : 'D';
будет$status[$i] eq 'A' ? 'S' : 'N';
встретить спецификации?Утренние Птицы
Ранняя пташка ловит червя !!!
Изменить: Сделано так, чтобы любой мог легко разделить его на подклассы. Просто переопределите
doMove(int playerNumber)
свой собственный бот. Я добавил несколько полезных полей и методов. Я тщательно проверил это. Это не сохраняет статусы от предыдущих симуляций. Пожалуйста, скажите мне, если есть какие-либо проблемы.Компилировать с:
javac ./players/MorningBirds/MorningBirds.java
Бежать с:
java players.MorningBirds.MorningBirds
источник
R
) в любой данный день, всегда умрет в этот день.Рандомайзеры - Ruby
Просто чтобы испортить статистику ботов, рандомизаторы довольно непредсказуемы. Все они возвращаются сразу, в случайном порядке, пытаясь обойти других.
(Не зависит от других игроков.)
источник
Блуждающие Дураки, Питон 2
Это простой Python-бот, который отправляет слуг до тех пор, пока не будет достигнуто заданное время возврата, затем они пытаются войти в лагерь и остаться до следующего дня.
Это также базовая структура для более сложных ботов, которые другие могут захотеть использовать. Это, однако, не проверено с помощью двигателя судьи, поэтому дайте мне знать, если я допустил ошибку.
программа
команда
Редактировать: Изменено действие решающего кода после уточнения правил.
источник
Evolved
Я использовал Генетическое Программирование (через JGAP), чтобы сделать этого бота. Он придумал простой ответ, который побеждает всех остальных (едва).
Компилировать с:
javac players/Evolved/Evolved.java
Бежать с:
java players.Evolved.Evolved
Редактировать: Grrr ... Боб испортил меня !!!
Редактировать: Yay !!! Боб, был убит мерзкой чумой !!!
источник
SlowReturners - Ruby
Посылает одного слугу обратно каждые 5 ходов.
источник
мор
Чума это болезнь. Это не рационально. Это предсказуемо. Болезни не могут собирать сокровища и не заботятся о них. Чума делает других игроков больными. Мудрые остаются дома и забывают о сокровищах. Глупые всегда глупы и никогда не получат много сокровищ. Эволюционировал (к счастью) невосприимчив к чуме. Он тоже мудрый. Он идет и собирает сокровища, и не умирает.
Компилировать с:
javac players/Plague/Plague.java
Бежать с:
java players.Plague.Plague
Боб и статистика теперь устойчивы к чуме.
источник