iwnow / bootcamp

Тестовое задание RBKmoney.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Bootcamp

Интересная задача от RBKmoney

В древней Гильдии состоят 60 торговцев. Каждый год они заключают друг с другом сделки. Ежегодно каждый торговец заключает сделки со всеми остальными членами Гильдии, от 5 до 10 сделок между каждой парой торговцев.

При свершении сделки у каждого из торговцев есть 2 варианта поведения: либо честно сотрудничать и выполнять все свои обязательства, либо сжульничать. От этого выбора зависит размер их прибыли:

  • в том случае, если оба проводят сделку честно, оба зарабатывают по 4 золотых;
  • если один торговец сжульничает, а другой продолжит честно сотрудничать, то жулик получит 5 золотых, а честный торогвец - всего 1;
  • если оба сжульничают, то каждый получит только по 2 золотых.

Мерило успеха в Гильдии - прибыль, которую торговец заработал за последний год. В конце каждого года 20% самых неуспешных торговцев с позором исключают из Гильдии, а их место занимает ровно столько же новых, которые копируют поведение 20% самых успешных членов Гильдии.

Торговцы хранят коммерческую тайну, не распускают слухов и ничего не рассказывают другим о свершённых сделках.

У торговцев существуют следующие стандартные стратегии поведения:

Название Описание
альтруист Всегда сотрудничает.
кидала Всегда жульничает.
хитрец Начинает с сотрудничества, потом повторяет ход оппонента.
непредсказуемый Поступает случайным образом.
злопамятный Начинает с сотрудничества и продолжает сотрудничать, пока против него не сжульничают. После этого сам начинает постоянно жульничать.
ушлый Всегда начинает с последовательности ходов: сотрудничество, жульничество, сотрудничество, сотрудничество. Далее, если к пятому ходу его хоть раз обманули, то играет как кидала, если нет, то как хитрец.

В процессе сделки для каждого торговца существует 5% вероятность ошибиться и принять неправильное решение: сжульничать вместо того, чтобы сотрудничать, или наоборот.

Изначально в Гильдии состоит равное число торговцев, выступающих приверженцами каждой из перечисленных стратегий.

Задача

  1. Реализовать описанную модель и все стратегии поведения на любом языке программирования. Мы будем оценивать в первую очередь качество кода вашего решения.
  2. Выяснить, какая из перечисленных стратегий наиболее выгодная в долгосрочной перспективе.
  3. (Дополнительное задание) Разработать стратегию которая будет ещё более выгодной при неизменных входных условиях. Даже если у созданной вами стратегии не получится победить, логика её поиска тоже будет нам интересна, и мы будем учитывать это в оценке.

Примечания

  • При всех дробных расчётах используется округление вниз.

About

Тестовое задание RBKmoney.