5.9 KiB
Bootcamp
Тестовое задание в школу разработки RBKmoney
В древней Гильдии состоят 60 торговцев. Каждый год они заключают друг с другом сделки. Ежегодно каждый торговец заключает сделки со всеми остальными членами Гильдии, от 5 до 10 сделок между каждой парой торговцев.
При свершении сделки у каждого из торговцев есть 2 варианта поведения: либо честно сотрудничать и выполнять все свои обязательства, либо сжульничать. От этого выбора зависит размер их прибыли:
- в том случае, если оба проводят сделку честно, оба зарабатывают по 4 золотых;
- если один торговец сжульничает, а другой продолжит честно сотрудничать, то жулик получит 5 золотых, а честный торогвец - всего 1;
- если оба сжульничают, то каждый получит только по 2 золотых.
Мерило успеха в Гильдии - прибыль, которую торговец заработал за последний год. В конце каждого года 20% самых неуспешных торговцев с позором исключают из Гильдии, а их место занимает ровно столько же новых, которые копируют поведение 20% самых успешных членов Гильдии.
Торговцы хранят коммерческую тайну, не распускают слухов и ничего не рассказывают другим о свершённых сделках.
У торговцев существуют следующие стандартные стратегии поведения:
Название | Описание |
---|---|
альтруист | Всегда сотрудничает. |
кидала | Всегда жульничает. |
хитрец | Начинает с сотрудничества, потом повторяет ход оппонента. |
непредсказуемый | Поступает случайным образом. |
злопамятный | Начинает с сотрудничества и продолжает сотрудничать, пока против него не сжульничают. После этого сам начинает постоянно жульничать. |
ушлый | Всегда начинает с последовательности ходов: сотрудничество, жульничество, сотрудничество, сотрудничество. Далее, если к пятому ходу его хоть раз обманули, то играет как кидала, если нет, то как хитрец. |
В процессе сделки для каждого торговца существует 5% вероятность ошибиться и принять неправильное решение: сжульничать вместо того, чтобы сотрудничать, или наоборот.
Изначально в Гильдии состоит равное число торговцев, выступающих приверженцами каждой из перечисленных стратегий.
Задача
- Реализовать описанную модель и все стратегии поведения на любом языке программирования. Мы будем оценивать в первую очередь качество кода вашего решения.
- Выяснить, какая из перечисленных стратегий наиболее выгодная в долгосрочной перспективе.
- (Дополнительное задание) Разработать стратегию которая будет ещё более выгодной при неизменных входных условиях. Даже если у созданной вами стратегии не получится победить, логика её поиска тоже будет нам интересна, и мы будем учитывать это в оценке.
Примечания
- При всех дробных расчётах используется округление вниз.