Classifica finale
+ ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + | Nome | Punteggio | WinRate | TieRate | Probabilità di eliminazione | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + | 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. MehBot | 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. CautiousGamblerBot2 | 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. CautiousBot | 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. CalculatingBot | 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. DeterminBot | 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. SurvivalistBot | 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. AggressiveBoundedRandomBotV2 | 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. AverageBot | 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. KamikazeBot | 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]% | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- +
Grazie per tutti coloro che hanno partecipato e congratulazioni a @Sarcoma per la vittoria!
Regole:
Tutti iniziano con 100 CV. Ogni round, 2 giocatori vengono scelti a caso dal gruppo di concorrenti che non hanno ancora partecipato a quel round. Entrambi i giocatori scelgono un numero compreso tra 0 e il loro CV attuale e rivelano quei numeri allo stesso tempo. Il giocatore che ha scelto il numero più basso muore immediatamente. L'altro giocatore sottrae il numero prescelto dai CV rimanenti e passa al turno successivo.
Il torneo funziona così:
Dal gruppo di concorrenti, 2 sono scelti a caso. Si affrontano e uno o entrambi muoiono. Un giocatore muore se:
- Scelgono un numero più piccolo di quello del loro avversario
- Il loro CV scende o scende sotto lo zero
- Legano tre volte di seguito con il loro avversario
In caso di pareggio, entrambi i giocatori generano semplicemente nuovi numeri, fino a 3 volte. Dopo il confronto, il sopravvissuto (se presente) viene spostato nel pool per il round successivo e il processo si ripete fino a quando non abbiamo esaurito il round pool corrente. Se c'è un numero dispari nel pool, quello dispari esce al turno successivo gratuitamente.
Il tuo compito è scrivere una funzione in python2.7 che prende come input la tua corrente hp
, un elenco dell'offerta del tuo avversario history
e un numero intero ties
che ti dice quante volte hai già legato con il tuo avversario attuale e un numero intero che ti dice come molti robot sono ancora alive
(incluso te) e un numero intero che elenca il numero di robot al start
torneo. Si noti che la cronologia non include i legami. La funzione deve restituire un numero intero compreso tra 0 e il tuo CV totale attuale. Di seguito sono riportati alcuni semplici esempi che ignorano i legami:
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)
Se la funzione restituisce un numero maggiore di HP, verrà reimpostata su 0. Sì, è possibile uccidere te stesso. La tua funzione non deve tentare di accedere o modificare alcun membro di alcun oggetto della classe RouletteBot. Non ti è permesso di intraprendere alcuna azione che identifichi in modo inequivocabile il tuo avversario indipendentemente dai futuri robot aggiuntivi. L'ispezione dello stack è consentita fintanto che teoricamente è possibile che più di un avversario distinto possa aver prodotto le informazioni che si raccolgono da esso, anche se attualmente esiste solo un bot che potrebbe. cioè, non puoi semplicemente leggere la pila per vedere quale funzione nemica è stata chiamata.
In base a queste regole è possibile che non ci sia vincitore e che gli ultimi due concorrenti si uccidano a vicenda. In tal caso, entrambi i finalisti ottengono mezzo punto ciascuno.
Questo è il mio primo tentativo di rompicapo di programmazione, quindi le critiche sono benvenute!
Il controller può essere trovato qui .