Підсумкова таблиця
+ ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + | Назва | Оцінка | WinRate | TieRate | Ймовірність усунення | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + | 1. SarcomaBotMk11 | 0,06333 | 6,13% | 0,41% | [42 24 10 8 6 4]% | | 2. WiseKickBot | 0,06189 | 5,91% | 0,56% | [51 12 7 10 7 6]% | | 3. StrikerBot | 0,05984 | 5,78% | 0,41% | [46 18 11 8 6 5]% | | 4. PerfectFractionBot | 0,05336 | 5,16% | 0,35% | [49 12 14 10 6 4]% | | 5. MehRanBot | 0,05012 | 4,81% | 0,41% | [57 12 8 7 6 5]% | | 6. OgBot | 0,04879 | 4,66% | 0,45% | [50 15 9 8 7 5]% | | 7. SnetchBot | 0,04616 | 4,48% | 0,28% | [41 29 8 9 5 3]% | | 8. AntiKickBot | 0,04458 | 4,24% | 0,44% | [20 38 17 10 6 4]% | | 9. МехБот | 0,03636 | 3,51% | 0,25% | [80 3 4 4 3 3]% | | 10. Meh20Bot | 0,03421 | 3,30% | 0,23% | [57 12 8 7 9 3]% | | 11. GenericBot | 0,03136 | 3,00% | 0,28% | [18 39 20 11 5 3]% | | 12. HardCodedBot | 0,02891 | 2,75% | 0,29% | [58 21 3 6 5 4]% | | 13. GangBot1 | 0,02797 | 2,64% | 0,32% | [20 31 35 6 3 2]% | | 14. SarcomaBotMk3 | 0,02794 | 2,62% | 0,34% | [16 15 38 17 7 4]% | | 15. GangBot0 | 0,02794 | 2,64% | 0,30% | [20 31 35 6 3 2]% | | 16. GangBot2 | 0,02770 | 2,62% | 0,31% | [20 31 35 6 3 2]% | | 17. TitTatBot | 0,02740 | 2,63% | 0,21% | [54 10 15 10 5 2]% | | 18. MataHari2Bot | 0,02611 | 2,35% | 0,51% | [39 26 11 11 6 5]% | | 19. PolyBot | 0,02545 | 2,41% | 0,27% | [53 18 6 13 5 3]% | | 20. SpitballBot | 0,02502 | 2,39% | 0,22% | [84 10 1 1 0 1]% | | 21. SquareUpBot | 0,02397 | 2,35% | 0,10% | [10 60 14 7 4 3]% | | 22. ОбережнийGamblerBot2 | 0,02250 | 2,19% | 0,13% | [60 18 10 5 3 1]% | | 23. Bot13 | 0,02205 | 2,15% | 0,11% | [90 0 2 3 2 1]% | | 24. AggroCalcBot | 0,01892 | 1,75% | 0,29% | [26 49 13 5 3 3]% | | 25. ОбережноБот | 0,01629 | 1,56% | 0,14% | [15 41 27 11 4 1]% | | 26. CoastBotV2 | 0,01413 | 1,40% | 0,02% | [83 12 3 1 0 0]% | | 27. ОбчисленняBot | 0,01404 | 1,29% | 0,22% | [87 9 1 1 1 1]% | | 28. HalfPunchBot | 0,01241 | 1,15% | 0,18% | [47 20 13 12 5 2]% | | 29. HalflifeS3Bot | 0,01097 | 1,00% | 0,20% | [76 9 5 4 2 2]% | | 30. AntiGangBot | 0,00816 | 0,76% | 0,11% | [94 1 1 1 1 1]% | | 31. GeometricBot | 0,00776 | 0,74% | 0,07% | [19 46 25 7 2 1]% | | 32. GuessBot | 0,00719 | 0,05% | 1,34% | [65 17 4 6 5 3]% | | 33. BoundedRandomBot | 0,00622 | 0,60% | 0,05% | [42 39 12 5 2 0]% | | 34. SpreaderBot | 0,00549 | 0,54% | 0,02% | [32 43 19 4 1 0]% | | 35. ВизначитиBot | 0,00529 | 0,45% | 0,16% | [22 41 20 11 4 2]% | | 36. PercentBot | 0,00377 | 0,38% | 0,00% | [85 8 4 2 1 0]% | | 37. HalvsiestBot | 0,00337 | 0,29% | 0,08% | [32 43 15 6 2 1]% | | 38. GetAlongBot | 0,00330 | 0,33% | 0,01% | [76 18 4 1 0 0]% | | 39. BandaidBot | 0,00297 | 0,29% | 0,02% | [76 9 10 4 1 0]% | | 40. TENaciousBot | 0,00287 | 0,29% | 0,00% | [94 4 1 0 0 0]% | | 41. ВиживанняБот | 0,00275 | 0,25% | 0,04% | [92 6 1 0 0 0]% | | 42. RandomBot | 0,00170 | 0,13% | 0,07% | [42 36 14 5 2 1]% | | 43. АгресивнийBoundedRandomBotV2 | 0,00165 | 0,14% | 0,06% | [8 46 34 9 2 1]% | | 44. BloodBot | 0,00155 | 0,01% | 0,30% | [65 28 5 1 1 0]% | | 45. OutBidBot | 0,00155 | 0,03% | 0,25% | [65 6 21 6 1 1]% | | 46. BoxBot | 0,00148 | 0,10% | 0,09% | [10 51 33 5 1 1]% | | 47. LastBot | 0,00116 | 0,08% | 0,07% | [74 6 16 2 1 0]% | | 48. UpYoursBot | 0.00088 | 0,07% | 0,03% | [37 40 17 5 1 0]% | | 49. Середня кількість | 0.00073 | 0,06% | 0,03% | [74 3 10 10 2 0]% | | 50. PatheticBot | 0.00016 | 0,01% | 0,02% | [94 0 5 1 0 0]% | | 51. OverfittedBot | 0.00014 | 0,01% | 0,00% | [58 40 2 0 0 0]% | | 52. RobbieBot | 0,00009 | 0,01% | 0,00% | [32 41 24 2 0 0]% | | 53. WorstCaseBot | 0,00002 | 0,00% | 0,00% | [4 71 23 2 0 0]% | | 54. SmartBot | 0,00002 | 0,00% | 0,00% | [44 51 5 0 0 0]% | | 55. AAAAUpYoursBot | 0,00000 | 0,00% | 0,00% | [40 58 2 0 0 0]% | | 56. KickbanBot | 0,00000 | 0,00% | 0,00% | [67 32 1 0 0 0]% | | 57. OneShotBot | 0,00000 | 0,00% | 0,00% | [2 95 3 0 0 0]% | | 58. KickBot | 0,00000 | 0,00% | 0,00% | [100 0 0 0 0 0]% | | 59. КамікадзеБот | 0,00000 | 0,00% | 0,00% | [100 0 0 0 0 0]% | | 60. MeanKickBot | 0,00000 | 0,00% | 0,00% | [100 0 0 0 0 0]% | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- +
Дякуємо всім, хто брав участь, та вітаю @Sarcoma за перемогу!
Правила:
Усі стартують зі 100 к.с. Кожен раунд, 2 гравці вибираються навмання з пула учасників, які ще не змагалися в цьому раунді. Обидва гравці вибирають число між 0 та їх поточним к.с. та виявляють ці цифри одночасно. Гравець, який обрав нижчу кількість, негайно гине. Інший гравець віднімає вибране число від своїх кінцевих сил і переходить до наступного раунду.
Турнір працює так:
Із дужки учасників 2 вибираються навмання. Вони стикаються, і один або обидва вмирають. Гравець помирає, якщо:
- Вони вибирають число менше, ніж у опонента
- Їх к.с. падає до або нижче нуля
- Вони зав’язують три рази поспіль з опонентом
У разі зв’язків обидва гравці просто генерують нові номери, до 3 разів. Після виходу з особи виживший (якщо такий є) переміщується до пулу для наступного раунду, і процес повторюється, поки ми не вичерпали поточний пул круглих. Якщо в басейні є непарне число, то непарний вихід переходить до наступного раунду безкоштовно.
Ваше завдання полягає в тому, щоб написати функцію в python2.7, яка приймає як вхідну точку hp
, список ставки вашого опонента history
і ціле число, ties
яке повідомляє, скільки разів ви вже зв'язали з вашим поточним супротивником, і ціле число, яке говорить вам, як багато ботів все ще є alive
(включаючи вас) і ціле число, яке перераховувало кількість ботів на start
турнірі. Зауважте, що історія не включає зв’язків. Функція повинна повертати ціле число між 0 і поточним загальним к.с. Нижче наведено кілька простих прикладів, які ігнорують зв'язки:
def last(hp, history, ties, alive, start):
''' Bet a third of your hp at first, then bet your opponent's last bid, if possible '''
if history:
return np.minimum(hp-1, history[-1])
else:
return hp/3
def average(hp, history, ties, alive, start):
''' Bet the average opponent's bid so far, on the assumption that bids will tend downward '''
if history:
num = np.minimum(hp-1, int(np.average(history))+1)
else:
num = hp/2
return num
def random(hp, history, ties, alive, start):
''' DO YOU WANT TO LIVE FOREVER?! '''
return 1 + np.random.randint(0, hp)
Якщо ваша функція поверне число, яке перевищує ваш к.с., воно буде скинуто на 0. Так, можна вбити себе. Ваша функція не повинна намагатися отримати доступ або змінити будь-який член будь-якого об'єкта класу RouletteBot. Вам не дозволяється вживати жодних дій, які б однозначно ідентифікували опонента незалежно від майбутніх додаткових ботів. Перевірка стека дозволена до тих пір, поки теоретично можливо, що більше ніж один окремий противник міг отримати інформацію, яку ви отримуєте з неї, навіть якщо на даний момент існує лише один бот, який міг би. тобто ви не можете просто прочитати стек, щоб побачити, яка функція противника викликалася.
За цими правилами можливо, що переможця немає, а останні два учасники вбивають один одного. У цьому випадку обидва фіналісти отримують по половині очок кожен.
Це моя перша спроба головоломки програмування, тому критики вітаються!
Контролер можна знайти тут .