Clasificación final
+ ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + El | Nombre | Puntuación | WinRate | TieRate | Probabilidad de eliminación | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + El | 1. SarcomaBotMk11 | 0,06333 | 6,13% | 0,41% | [42 24 10 8 6 4]% | El | 2. WiseKickBot | 0,06189 | 5,91% | 0,56% | [51 12 7 10 7 6]% | El | 3. StrikerBot | 0,05984 | 5,78% | 0,41% | [46 18 11 8 6 5]% | El | 4. PerfectFractionBot | 0,05336 | 5,16% | 0,35% | [49 12 14 10 6 4]% | El | 5. MehRanBot | 0,05012 | 4,81% | 0,41% | [57 12 8 7 6 5]% | El | 6. OgBot | 0,04879 | 4.66% | 0,45% | [50 15 9 8 7 5]% | El | 7. SnetchBot | 0,04616 | 4,48% | 0.28% | [41 29 8 9 5 3]% | El | 8. AntiKickBot | 0,04458 | 4,24% | 0,44% | [20 38 17 10 6 4]% | El | 9. MehBot | 0,03636 | 3,51% | 0.25% | [80 3 4 4 3 3]% | El | 10. Meh20Bot | 0,03421 | 3,30% | 0.23% | [57 12 8 7 9 3]% | El | 11. GenericBot | 0,03136 | 3.00% | 0.28% | [18 39 20 11 5 3]% | El | 12. HardCodedBot | 0,02891 | 2,75% | 0.29% | [58 21 3 6 5 4]% | El | 13. GangBot1 | 0,02797 | 2,64% | 0,32% | [20 31 35 6 3 2]% | El | 14. SarcomaBotMk3 | 0,02794 | 2,62% | 0,34% | [16 15 38 17 7 4]% | El | 15. GangBot0 | 0,02794 | 2,64% | 0,30% | [20 31 35 6 3 2]% | El | 16. GangBot2 | 0,02770 | 2,62% | 0,31% | [20 31 35 6 3 2]% | El | 17. TitTatBot | 0,02740 | 2,63% | 0.21% | [54 10 15 10 5 2]% | El | 18. MataHari2Bot | 0,02611 | 2,35% | 0,51% | [39 26 11 11 6 5]% | El | 19. PolyBot | 0,02545 | 2,41% | 0.27% | [53 18 6 13 5 3]% | El | 20. SpitballBot | 0,02502 | 2,39% | 0.22% | [84 10 1 1 0 1]% | El | 21. SquareUpBot | 0,02397 | 2,35% | 0,10% | [10 60 14 7 4 3]% | El | 22. CautiousGamblerBot2 | 0,02250 | 2,19% | 0,13% | [60 18 10 5 3 1]% | El | 23. Bot13 | 0,02205 | 2,15% | 0,11% | [90 0 2 3 2 1]% | El | 24. AggroCalcBot | 0,01892 | 1,75% | 0.29% | [26 49 13 5 3 3]% | El | 25. CautiousBot | 0,01629 | 1,56% | 0.14% | [15 41 27 11 4 1]% | El | 26. CoastBotV2 | 0,01413 | 1,40% | 0,02% | [83 12 3 1 0 0]% | El | 27. CalculatingBot | 0,01404 | 1,29% | 0.22% | [87 9 1 1 1 1]% | El | 28. HalfPunchBot | 0,01241 | 1,15% | 0,18% | [47 20 13 12 5 2]% | El | 29. HalflifeS3Bot | 0,01097 | 1,00% | 0,20% | [76 9 5 4 2 2]% | El | 30. AntiGangBot | 0,00816 | 0,76% | 0,11% | [94 1 1 1 1 1]% | El | 31. GeometricBot | 0,00776 | 0,74% | 0,07% | [19 46 25 7 2 1]% | El | 32. GuessBot | 0,00719 | 0,05% | 1,34% | [65 17 4 6 5 3]% | El | 33. BoundedRandomBot | 0,00622 | 0,60% | 0,05% | [42 39 12 5 2 0]% | El | 34. SpreaderBot | 0,00549 | 0,54% | 0,02% | [32 43 19 4 1 0]% | El | 35. DeterminBot | 0,00529 | 0,45% | 0.16% | [22 41 20 11 4 2]% | El | 36. PercentBot | 0,00377 | 0,38% | 0.00% | [85 8 4 2 1 0]% | El | 37. HalvsiestBot | 0,00337 | 0.29% | 0,08% | [32 43 15 6 2 1]% | El | 38. GetAlongBot | 0,00330 | 0,33% | 0,01% | [76 18 4 1 0 0]% | El | 39. BandaidBot | 0,00297 | 0.29% | 0,02% | [76 9 10 4 1 0]% | El | 40. TENaciousBot | 0,00287 | 0.29% | 0.00% | [94 4 1 0 0 0]% | El | 41. SurvivalistBot | 0,00275 | 0.25% | 0,04% | [92 6 1 0 0 0]% | El | 42. RandomBot | 0,00170 | 0,13% | 0,07% | [42 36 14 5 2 1]% | El | 43. AggressiveBoundedRandomBotV2 | 0,00165 | 0.14% | 0,06% | [8 46 34 9 2 1]% | El | 44. BloodBot | 0,00155 | 0,01% | 0,30% | [65 28 5 1 1 0]% | El | 45. OutBidBot | 0,00155 | 0,03% | 0.25% | [65 6 21 6 1 1]% | El | 46. BoxBot | 0,00148 | 0,10% | 0,09% | [10 51 33 5 1 1]% | El | 47. LastBot | 0,00116 | 0,08% | 0,07% | [74 6 16 2 1 0]% | El | 48. UpYoursBot | 0,00088 | 0,07% | 0,03% | [37 40 17 5 1 0]% | El | 49. AverageBot | 0,00073 | 0,06% | 0,03% | [74 3 10 10 2 0]% | El | 50. PatheticBot | 0,00016 | 0,01% | 0,02% | [94 0 5 1 0 0]% | El | 51. OverfittedBot | 0,00014 | 0,01% | 0.00% | [58 40 2 0 0 0]% | El | 52. RobbieBot | 0,00009 | 0,01% | 0.00% | [32 41 24 2 0 0]% | El | 53. WorstCaseBot | 0,00002 | 0.00% | 0.00% | [4 71 23 2 0 0]% | El | 54. SmartBot | 0,00002 | 0.00% | 0.00% | [44 51 5 0 0 0]% | El | 55. AAAAUpYoursBot | 0,00000 | 0.00% | 0.00% | [40 58 2 0 0 0]% | El | 56. KickbanBot | 0,00000 | 0.00% | 0.00% | [67 32 1 0 0 0]% | El | 57. OneShotBot | 0,00000 | 0.00% | 0.00% | [2 95 3 0 0 0]% | El | 58. KickBot | 0,00000 | 0.00% | 0.00% | [100 0 0 0 0 0]% | El | 59. KamikazeBot | 0,00000 | 0.00% | 0.00% | [100 0 0 0 0 0]% | El | 60. MeanKickBot | 0,00000 | 0.00% | 0.00% | [100 0 0 0 0 0]% | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- +
¡Gracias a todos los que participaron y felicidades a @Sarcoma por la victoria!
Reglas:
Todos comienzan con 100 hp. En cada ronda, se eligen al azar 2 jugadores del grupo de concursantes que aún no han competido en esa ronda. Ambos jugadores eligen un número entre 0 y su HP actual, y revelan esos números al mismo tiempo. El jugador que eligió el número más bajo muere inmediatamente. El otro jugador resta su número elegido de sus CV restantes y pasa a la siguiente ronda.
El torneo funciona así:
Del grupo de concursantes, 2 son elegidos al azar. Se enfrentan y uno o ambos mueren. Un jugador muere si:
- Eligen un número más pequeño que el de su oponente.
- Su CV cae a cero o menos
- Empatan tres veces seguidas con su oponente
En el caso de los empates, ambos jugadores simplemente generan nuevos números, hasta 3 veces. Después del enfrentamiento, el sobreviviente (si lo hay) es trasladado al grupo para la siguiente ronda, y el proceso se repite hasta que hayamos agotado el grupo de ronda actual. Si hay un número impar en el grupo, entonces el número impar pasa a la siguiente ronda de forma gratuita.
Su tarea es escribir una función en python2.7 que tome como entradas su actual hp
, una lista de la oferta de su oponente history
y un número entero ties
que le indica cuántas veces ya ha empatado con su oponente actual, y un número entero que le dice cómo todavía hay muchos bots alive
(incluido usted) y un número entero que enumeró el número de bots en start
el torneo. Tenga en cuenta que la historia no incluye lazos. La función debe devolver un número entero entre 0 y su hp total actual. A continuación se muestran algunos ejemplos simples, que ignoran los lazos:
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)
Si su función devuelve un número mayor que su HP, se restablecerá a 0. Sí, es posible suicidarse. Su función no debe intentar acceder o modificar ningún miembro de ningún objeto de la clase RouletteBot. No tienes permitido realizar ninguna acción que identifique inequívocamente a tu oponente, independientemente de futuros bots adicionales. La inspección de la pila está permitida siempre y cuando sea teóricamente posible que más de un oponente distinto pueda haber producido la información que obtienes de ella, incluso si actualmente solo existe un bot que pueda. es decir, no puedes leer la pila para ver qué función enemiga se llamó.
Según estas reglas, es posible que no haya un ganador, y los dos últimos concursantes se matan entre sí. En ese caso, ambos finalistas obtienen medio punto cada uno.
Este es mi primer intento de rompecabezas de programación, ¡así que las críticas son bienvenidas!
El controlador se puede encontrar aquí .