山丘之王:银行抢劫


15

示例运行已添加4/11

规则澄清4/8:所有参赛作品将参加一场巨大的免费比赛,其中包括我的计算机在48小时内可以完成的所有比赛。

任何花时间在Twitch上观看直播的人都知道DeepBot的盛行,甚至可能熟悉Bank Heist的下注游戏。这场山丘之王锦标赛直接受到该游戏的启发。不过不要担心。我认为我在该版本中投入了足够多的纽带,以使事情变得有趣。

一个简单的例子

#####GAME 13: 16 players######

Round 1:
gunHeCK bet 0.
PassivePanga bet 69.
SnitcherKing bet 1.
Lurker bet 0.
OC'sRandomTpyos bet 1.
MonisAddiction bet 69.
RaysFive01K bet 28.
LimeadeSneaktar bet 1.
KaylorrCriterion bet 0.
HardHatUmar bet 0.
HeCKuSumer bet 185.

Round 2
HeCKuSumer decided to !guncheck.
LimeadeSneaktar decided to double cross.
MonisAddiction decided to all in.
OC'sRandomTpyos decided to acquire intel.
RaysFive01K decided to deposit.
SnitcherKing decided to finger.
PassivePanga decided to !guncheck.

Results
PassivePanga failed. :(
SnitcherKing failed. :(
OC'sRandomTpyos was successful, and may gain ¥0
MonisAddiction failed. :(
RaysFive01K was successful, and may gain ¥0
LimeadeSneaktar was successful, and may gain ¥1
HeCKuSumer failed. :(

Results:
0. KaylorrCriterion: 3600
1. Lurker: 3600
2. gunHeCK: 3600
3. SnitcherKing: 3586
4. PassivePanga: 2634
5. LimeadeSneaktar: 2496
6. HeCKuSumer: 1909
7. HardHatUmar: 490
8. RaysFive01K: 255
9. OC'sRandomTpyos: 170
10. MonisAddiction: 0

(In this round, 7 players joined the heist, but the dice only rolled right for 3 of them. Of those, only LimeadeSneaktar brought any home--having stolen it from OcsRandomTpyos. RaysFive01K won significantly more, but deposited it all at the bank before leaving. At this point, the players who did not heist are doing well, living off their day jobs.)

#####GAME 14: 231 players######

Round 1:
Lurker bet 0.
HeCKuSumer bet 190.
KaylorrCriterion bet 0.
HardHatUmar bet 0.
MonisAddiction bet 0.
OC'sRandomTpyos bet 1.
gunHeCK bet 0.
LimeadeSneaktar bet 1.
RaysFive01K bet 25.
PassivePanga bet 69.
SnitcherKing bet 1.

Round 2
PassivePanga decided to !guncheck.
OC'sRandomTpyos decided to buy guard.
HeCKuSumer decided to !guncheck.
SnitcherKing decided to finger.
RaysFive01K decided to deposit.
LimeadeSneaktar decided to double cross.

Results
HeCKuSumer failed. :(
OC'sRandomTpyos failed. :(
LimeadeSneaktar failed. :(
RaysFive01K failed. :(
PassivePanga failed. :(
SnitcherKing failed. :(

Results:
0. KaylorrCriterion: 3840
1. Lurker: 3840
2. gunHeCK: 3840
3. SnitcherKing: 3825
4. PassivePanga: 2805
5. LimeadeSneaktar: 2495
6. HeCKuSumer: 1959
7. HardHatUmar: 490
8. MonisAddiction: 240
9. RaysFive01K: 229
10. OC'sRandomTpyos: 161

Six players heisted--but should have been paying more attention to the rabble and backed out, because the probabilities dropped too low to win, and all failed.


#####GAME 15: 300 players######

Round 1:
OC'sRandomTpyos bet 1.
Lurker bet 0.
SnitcherKing bet 1.
MonisAddiction bet 69.
LimeadeSneaktar bet 1.
gunHeCK bet 0.
HardHatUmar bet 0.
RaysFive01K bet 22.
KaylorrCriterion bet 0.
HeCKuSumer bet 195.
PassivePanga bet 69.

Round 2
HeCKuSumer decided to !guncheck.
OC'sRandomTpyos decided to buy guard.
MonisAddiction decided to all in.
PassivePanga decided to !guncheck.
LimeadeSneaktar decided to double cross.
RaysFive01K decided to deposit.
SnitcherKing decided to finger.

Results
OC'sRandomTpyos failed. :(
SnitcherKing failed. :(
MonisAddiction was successful, and may gain ¥0
LimeadeSneaktar failed. :(
RaysFive01K failed. :(
HeCKuSumer failed. :(
PassivePanga failed. :(

And here, the probabilities dropped too low to win again--except for MonisAddiction, who went all in, and therefore avoided the probability modification incurred by the rabble backing out. No winnings are listed here, because a player who wins going all in immediately adds all winnings to its holdings without any possible modification by other players' actions.

游戏规则

比赛/比赛结构

  • 比赛将包括一系列在1000到1100之间随机选择的游戏,其中每项严肃的比赛将同时进行免费比赛。
  • 每个玩家在第一局游戏开始时获得240个筹码,随后的每个游戏都以之前游戏结束时的筹码数量开始。
  • 每局游戏进行2回合,并且在每回合中,将按照随机确定的统一顺序来召集玩家,以做出一个决定:
    • 在第一轮中,玩家可以支付0到其当前信用持有量之间的任意整数的信用,以参与银行抢劫。
    • 在第二轮中,每个通过至少下注一个信用而选择参加抢劫的玩家(以下称为“继承人”)都可以决定让其下注(并且在这样做的同时,还可以执行其他一些操作),选择退出抢劫,或全力以赴。(这些选项将在下面进一步描述。)
  • 根据继承人的数量和他们支付的信贷总数,选择了要进行抢劫的五家银行之一。这种选择会影响个人获胜的可能性以及确定支出的几率。(银行说明如下。)
  • 每个未选择退出的继承人,都将以银行的(修改后的)概率赢得本金乘以银行的(修改后的)下注赔率(四舍五入),否则失去本金。请注意,每个参与者的成功或失败都是单独确定的- 有些会在其他失败的情况下成功。
  • 所有参与者,无论是否参加,成功或失败,都将获得薪水(以下所述除外)。
  • 请注意,不可能永久离开游戏。在最坏的情况下,玩家可能必须等待游戏才能收到下一笔薪水。
  • 在所有1000-1100场比赛之后,积分最多的玩家将被宣布为比赛的获胜者。
  • 锦标赛将重复一次未指定的次数(可以在48小时内计算得出),并且将所有锦标赛中的玩家收入相加,以确定本次比赛的总冠军。

第二轮博彩

  • 任何在第一轮中下注正筹码的玩家都可以参加第二轮。
  • 在这一轮中,玩家可以:
    • 回复字符串“ back out”以取消其投注。这会将当前抢劫的赌注设置为零,并且还会稍微降低留在抢劫中的玩家成功的可能性。通过选择此选项,玩家将放弃在抢劫之后进行的240信用薪水支票,以惩罚将其余继承人置于危险之中。(其余的继承人将以银行的概率乘以没有“退出”的继承人的比例的概率来获得成功。)
    • 回复字符串“ all in”,以烧毁其全部信用资产-并在下一个240信用支票中提取发薪日贷款-购买所有最好的装备和情报以进行抢劫,然后独自一人走进去,枪支燃烧着,没有依靠任何人。此类玩家的获胜机率不会受到其他继承人从抢劫案中退出的影响,也不会被双发窃取者所窃取。获胜的支出将被确定为其押注是其全部信用持有量加上240,而亏损会将其持有量设为零。
    • 回答任何其他字符串(包括空字符串),以保持先前的下注并正常进行抢劫。(建议答复:“!guncheck”)。某些答复将产生其他副作用:
      • 回复“换工作”将导致玩家辞职。从本轮开始,在每轮结束时,玩家将有5%的机会被雇用到新的职位。如果成功,将雇用玩家并立即收到其第一笔薪水。保证每个新工作都比上一份(向下取整)多出5%。无论抢劫成功与否,此举都会成功。
      • 如果抢劫成功,“ acquire intel”的答复将使玩家花费从该抢劫中获得的所有奖金,从而获得每信用点额外获得0.00001的额外花费,从而花在了仅为该球员抢劫的银行赔率上。这种赔率修改是永久性的。举例来说,如果玩家在抢劫银行1时选择了该动作,并在抢劫中赢得6969个点数,则该玩家在银行1中的赔率将永久增加0.06969,而该抢劫不会给玩家带来任何好处。
      • 回复“购买警卫”将导致玩家在抢劫的银行购买一名警卫。为了永久减少该球员的薪水(后卫的定期贿赂)1点,该球员将在该银行获得“永久”增加的获胜概率(由于后卫在“警察”面前“忘记提及”该球员)问)。该概率将增加该玩家当前在该银行的获胜概率与100%之间的差值的正好1%。即使抢劫失败,此操作也会成功。注意:如果在任何时候,玩家没有足够的信用来支付其所有警卫贿赂,它都会立即并“永久”损失与无法支付的贿赂数量一样多的概率奖金,
      • 如果抢劫成功,则对“存款”的答复将使玩家的全部奖金留在抢劫银行的帐户中。积分将无法用于任何目的,也不会被计入玩家的分数,直到撤回为止。该帐户将为每个游戏支付0.14%的利息。
      • 如果抢劫成功,则对“提款”的答复将使玩家在所抢劫的银行帐户中的全部内容增加到奖金中。结果,该帐户将被清零。请注意,这些额外的赢利可能会被双倍盗走。
      • 回复“双叉”将执行以下两项操作之一:
        • 如果玩过“双十字”的女继承人人数最多是决定进行抢劫的非强奸女继承人总数的1/10(四舍五入)(如果少于10个,则为正数) ),则玩家将获得额外的奖金,该奖金等于所有非双底划线员的总奖金除以双底划线员的数目(四舍五入)。在这种情况下,所有非双打交叉者都从抢劫中获得了0个学分。换句话说,双线窃取者窃取了其他所有人的信用,并将其平均分配给彼此。
        • 如果玩“双十字”的继承人的数量超过了阈值,则该玩家将不会获得任何奖金(如果其抢劫成功),其薪水将减少一半,并被解雇。(请参阅“更换工作”。)在这种情况下,所有非双打比赛(包括掷骰子)将获得所有双打比赛的总奖金除以非双打比赛的总数的奖金。换句话说,阴谋太大而无法保密,阴谋者被根除并被排除在抢劫之外,每个人都将自己的赌注分摊给惩罚-他们因肮脏交易的声誉也失去了工作。
      • 如果抢劫成功,对“手指”的答复(如“对双交叉流氓老鼠的手指”中所述)将给予玩家八次机会(从非Rabble女继承人集中统一抽签替换)尚未确定的交叉器。
        • 以此方式确定的每个双重担保人将立即向其指尖支付其当前信贷持有量的25%(向下舍入)以代替被枪杀,失去工作并将其薪水削减一半(因为老板不会容忍不良行为) ,并在抢劫银行时失去其获胜概率的5%(因为其他继承人将来会更加可疑,如果事情变得多毛,有可能将其丢在公共汽车下)。Double-crossers识别出这种方式不会影响其他double-crosser是否成功,但是他们不会收到来自double-crosser的任何被窃取的信用额度,并表示被盗的信用额将重新分配给非双重交叉。
        • 如果未通过这种方式识别出双打交叉机,则告密者将因浪费每个人的时间而缝线-并从当前抢劫中支付一半的奖金,将其薪水削减5%(老板削减了故事的工时),并输了在当前银行的赔率的5%(因为其他继承人在未来的奖金中不太可能慷慨/公允)。如果双打成功,则损失的一半奖金将分配给无手指的双打;如果双打失败,则将分配给非双打(包括掷骰子)。

银行

使用索引选择银行numheisters + int(totalamountbet/100000),其中numheisters是在第一轮中下正赌注的玩家数量,totalamountbet是所有这些玩家的赌注总和。换句话说,十万个学分与另外一个继承人一样好。根据该指数,将选择以下银行之一,该银行达到或超过该指数的最高阈值:

Bank             Index Threshold   Victory Prob.  Bet Odds
----             ---------------   -------------  --------
0:Municipal                    0           0.540      0.80
1:City                        20           0.488      1.10
2:State                       40           0.425      1.30
3:National                    60           0.387      1.65
4:Federal Reserve             80           0.324      1.95

请注意,随着比赛的继续,达到最高银行级别的可能性将增加,因为每个玩家可以下注的数量呈上升趋势。还要注意,这些只是最初的几率和几率,之前已通过任何“获取情报”或“购买后卫”行动对其进行了修改。有了最初的概率和赔率,只有城市银行和国家银行的预期获利超过了预期损失。

Ra

  • 比赛还包括500名其他选手,称为“狂徒”,他们作为常规选手参加抢劫,但最终未获得得分。这些使每个游戏变得不同且难以预测,并且即使只有几个“真实”玩家,也可以到达风险更大/回报更高的银行。
  • 每个游戏都将包含一些Rabble子集,以在Rabble的所有子集上随机选择统一参与。
  • 所有的Rabble都使用以下策略:
    • 随机选择赌注的概率等于根据在本轮比赛中已经做出决定的玩家的决定选择的在银行成功的概率。
    • 如果下注一个非零的数字,请选择以下最大的数字,该数字不会超过其当前持有量:69、420、6969、80085。
    • 在第二轮中,“退回”的概率等于5%加上已经退回的投注者比例的50%,否则照常进行抢劫。(请注意,这意味着第二回合中的早期玩家可以在抢劫中产生巨大的连锁反应-注意并为抢劫做好准备,甚至在抢劫开始之前就崩溃。)

输入和输出

在这两个回合中,程序将按照命令行参数的确切顺序以下信息提供信息。除非另有说明,否则所有值都是不包含小数的整数。

  1. 当前游戏编号(零索引)
  2. 当前游戏的轮数(1或2)
  3. 当前游戏中的玩家人数(包括Rabble)。
  4. 已经轮到这个回合的球员数量。
  5. 迄今已作出积极贡献的继承人数量。(在第二轮中,这实际上是第一轮中购买的继承人的总数。)
  6. 到目前为止已投资的总积分。(在第二轮中,这实际上是在第一轮中投资的贷方总数-特别是,它包括超出“全押”继承人的初始注额,而是包括“撤回”贷方的注额。继承人。)
  7. 在第二轮中得到确认的继承人的数量(即没有“退出”)。在第一轮中该值为零。
  8. 要抢劫的银行的(零索引)编号(在第一轮中,如果没有其他人下注,将抢劫的银行)
  9. 当前可供玩家使用的点数。
  10. 玩家在第一轮中下注的点数。(在第一轮中始终为零。)
  11. 每次游戏结束时,玩家将在其薪水中获得的积分数。
  12. 如果玩家当前正在接收薪水,则为1,如果玩家失业,则为0
  13. 截至上一游戏结束时,该玩家在排行榜上的排名(不包括低吼)为1分。(定义为1+当时拥有严格积分的玩家数量。例如,在第一局中,所有玩家的排名均为1。)
  14. 所有玩家持有的平均点数(不包括拨浪鼓)(用十进制数表示)
  15. 所有玩家所拥有的点数的平均绝对偏差(不包括拨浪鼓)(以十进制数字表示)
  16. 任何玩家所拥有的最大积分数(即,排名1的玩家所拥有的积分数,不包括Rabble)
  17. 玩家已在银行0帐户中存储的积分数
  18. 银行1账户
  19. 银行2账户
  20. 银行3账户
  21. 银行4账户
  22. 玩家在第0行获胜的个人概率
  23. 银行1的概率
  24. 银行2概率
  25. 银行3的概率
  26. 银行4概率
  27. 玩家在0行成功抢劫的赔率
  28. 银行1赔率
  29. 银行2赔率
  30. 银行3赔率
  31. 银行赔率4

在游戏的第一轮中,玩家程序必须打印以输出0到该玩家帐户中的点数总数之间的整数。任何大于可用贷方余额的投注金额将被视为最大投注。任何其他输出(或错误情况)将被解释为零下注。

在游戏的第二轮中,玩家程序必须按照上面“第二轮下注”部分中的说明进行打印以输出字符串。默认情况下,将发生错误情况:默认情况下进行抢劫。

控制者

比赛将使用此控制器进行。那里的机器人例子。仍在测试中。更多代码来了。随时提交错误修复程序(在github上)。如果任何规则也更改,将被更新。

要在您自己的计算机上运行一个锦标赛,请在Competition.txt中添加一行,然后使用:

python bankheist.py 1000

比赛规则

  • 玩家可以用任何可自由获得的语言提交任何数量的玩家程序,这些程序的程序可以接收命令行参数。
  • 提交的内容必须包括有关如何编译程序并在我的PC上运行它们的相当明确的说明,包括所需工具的名称和要发出的确切命令。提交的内容必须至少包含一个执行该程序的命令,并且可能直接在其后附加命令行参数。
  • 提交还必须具有唯一的名称来标识它们(不包含空格)。
  • 程序必须在相当短的时间内运行。(我没有在合理的范围上设置上限。相反,我只是建议创建者任何看起来执行时间过长的条目,以加快执行速度。)
  • 程序可能无法读取或写入文件。他们也不能使用其他任何方法在两次运行之间存储信息。这一挑战的重点是在有限/汇总的信息基础上做出复杂的决策。
  • 如有必要,所有这些规则都可能随时更改。将在此帖子的顶部添加一条消息,指示任何此类更改。
  • 本次比赛结束不早于过去的一个星期后,用户的提交帖子他或她的第一次提交。在比赛结束之前,任何时候都可以对现有提交的内容进行修改。我会尽力在本帖子顶部的消息中保持当前截止日期的更新。
  • 竞赛最后一次更改规则(如果有)的一周内结束。我将尽力为所有受规则更改影响的用户留下评论。
  • 您最好打赌我会亲自参加这场比赛。;)

评论不作进一步讨论;此对话已转移至聊天
丹尼斯,

可能是因为我不熟悉抽搐或抢劫游戏,但是有很多规则可能最好通过一个小的实例进行演示。目前看来还不是很平易近人。
Moogie '17

山丘之王?我好几年没听说过这个名字了。
Beta Decay's

Answers:


6

程序的一些“坏”示例。

这些是我为测试控制器而编写的一些机器人。通常,他们只是做最少的必要工作来测试一种特定类型的动作。根据参与此KotH的级别,最终锦标赛中将包含从少数到全部的任何内容,因为游戏中的许多策略都将来自处理许多不同机器人的行为。

我将它们全部都包含在此处,以作为“用法”示例。

潜伏者

永远不要下注。如果您不反对,请重新考虑您的策略。

print 0

被动式潘加

总是下注69。

import sys


round = int(sys.argv[2])
myyattas = int(sys.argv[9])
if round == 1:
    if myyattas > 69:
        print "69"
    else:
        print "0"
else:
    print "!guncheck"

KaylorrCriterion

当且仅当符合凯利准则时,方可进行凯利投注。由于这种情况很少发生,因此先进行“获取情报”和“购买后卫”,通常可获得与Lurker相同的结果。

import sys
import ast
game,round,numplayers,alreadyplayed,numbet,yattasbet,numready,bankid,myyattas,mybet,mypayment,hired,myrank,mu_yattas,sigma_yattas,max_yattas = map(ast.literal_eval,sys.argv[1:17])
bankholdings = map(int,sys.argv[17:22])
bankprobs = map(float,sys.argv[22:27])
bankodds = map(float,sys.argv[27:32])

def get_bank(bettors,credits):
    selector = min(4,int(bettors+int(credits/100000.)/20))
    return bankprobs[selector],bankodds[selector]



if round == 1:
    if alreadyplayed < 0.37*numplayers or numbet==0:
        print 0
        #sys.stderr.write("1: %d,%d\n"%(alreadyplayed,numbet))
    else:
        ratiosofar = numbet/float(alreadyplayed)
        bettors = ratiosofar * numplayers
        ratesofar = yattasbet/float(numbet)
        credits = bettors*ratesofar
        p,b = get_bank(bettors,credits)
        f = (p*(b+1)-1)/b
        print max(int(f*myyattas),0)
        #sys.stderr.write("2: %d,%d\n"%(p,b))
else:
    if alreadyplayed < 0.37*numbet or numbet==0:
        print "!guncheck"
    else:
        p,b = get_bank(numbet,yattasbet)
        realp = p*numready/float(alreadyplayed)
        f = (realp*(b+1)-(1-240./(myyattas+240.)))/b
        print "!guncheck" if f>0 else "back out"

gunHeCK

当且仅当到目前为止看到的继承人数量表明该赌注符合凯利标准时,方可进行凯利投注(但如果出现错误,请不要后退)。通常做得比潜伏者差

import sys
import ast
game,round,numplayers,alreadyplayed,numbet,yattasbet,numready,bankid,myyattas,mybet,mypayment,hired,myrank,mu_yattas,sigma_yattas,max_yattas = map(ast.literal_eval,sys.argv[1:17])
bankholdings = map(int,sys.argv[17:22])
bankprobs = map(float,sys.argv[22:27])
bankodds = map(float,sys.argv[27:32])

def get_bank(bettors,credits):
    selector = min(4,int(bettors+int(credits/100000.)/20))
    return bankprobs[selector],bankodds[selector]

if round == 1:
    if alreadyplayed < 0.37*numplayers or numbet==0:
        print 0
        #sys.stderr.write("1: %d,%d\n"%(alreadyplayed,numbet))
    else:
        ratiosofar = numbet/float(alreadyplayed)
        bettors = ratiosofar * numplayers
        ratesofar = yattasbet/float(numbet)
        credits = bettors*ratesofar
        p,b = get_bank(bettors,credits)
        f = (p*(b+1)-1)/b
        print max(int(f*myyattas),0)
        #sys.stderr.write("2: %d,%d\n"%(p,b))
else:
    print "!gunHeCK"

莫妮成瘾

除非已经获胜,否则请“全押”。

import sys
import random


round = int(sys.argv[2])
myrank = int(sys.argv[13])
mybet = int(sys.argv[10])

if round == 1:
    if random.random()<0.1:
        print 1
    else:
        print 69
else:
    if myrank>1:
        print "all in"
    else:
        if mybet==1:
            print "back out"
        else:
            print "!guncheck"

赫克苏默

总是押一小部分恒定的股份。

import sys

round = int(sys.argv[2])
myyattas = int(sys.argv[9])

if round==1:
    print int(0.1*myyattas)
else:
    print "!guncheck"

OC的RandomTpyos

在早期比赛中大量换工作。花所有的钱来提高概率。然后花最后几场比赛全力以赴。如果不全力以赴,这可能会做得更好,除非已经名列前茅。

import sys
import ast
import random

game,round,numplayers,alreadyplayed,numbet,yattasbet,numready,bankid,myyattas,mybet,mypayment,hired,myrank,mu_yattas,sigma_yattas,max_yattas = map(ast.literal_eval,sys.argv[1:17])
bankholdings = map(int,sys.argv[17:22])
bankprobs = map(float,sys.argv[22:27])
bankodds = map(float,sys.argv[27:32])

if round == 1:
    if game<800 or myrank>3:
        print 1
    else:
        print myyattas/4
else:
    if game<800:
        if hired:
            print "change jobs"
        else:
            print random.choice(["acquire intel","buy guard"])
    else:
        if myrank>3:
            print "all in"
        else:
            print "!guncheck"

HardHatUmar

在大多数比赛中尽可能地更换工作。避免下注超过最低要求。做得不错,但不是很好。

import sys

game = int(sys.argv[1])
round = int(sys.argv[2])
hired = int(sys.argv[12])

if round==1:
    if game < 900 and hired:
        print 1
    else:
        print 0
else:
    print "change jobs"

柠檬汁

在比赛的第一部分,尽可能地换工作。花每隔两次比赛两次穿越。即使对抗SnitcherKing也表现不错。一旦许多其他僵尸程序被双重穿越和指法,其运行状况可能会更差。如果不是,规则可能需要更改。

import sys
import ast

game,round,numplayers,alreadyplayed,numbet,yattasbet,numready,bankid,myyattas,mybet,mypayment,hired,myrank,mu_yattas,sigma_yattas,max_yattas = map(ast.literal_eval,sys.argv[1:17])
bankholdings = map(int,sys.argv[17:22])
bankprobs = map(float,sys.argv[22:27])
bankodds = map(float,sys.argv[27:32])

if round==1:
    print 1
else:
    if hired and game<900:
        print "change jobs"
    else:
        print "double cross"

斯尼彻金

总是下注最小,并且总是手指。在包括LimeadeSneaktar的小型锦标赛中表现不错。

import sys

round = int(sys.argv[2])

if round == 1:
    print 1
else:
    print "finger"

射线Five01K

稍微复杂一点,因此实际上还不错。它的大部分优势来自于在早期比赛中存入所有奖金(保护他们免遭双打交叉),同时提高获胜概率(并更换工作以支付所有这些后卫和抢劫者的费用),然后在比赛结束时将其全部撤回(一旦他们获得了浓厚的兴趣,而未能撤出的可能性就足够低了-尽管在这里双倍输家的损失是一个严重的风险)。这肯定会出现在锦标赛中,可能会也可能不会是一个真正的竞争者。

import sys
import ast
import random
game,round,numplayers,alreadyplayed,numbet,yattasbet,numready,bankid,myyattas,mybet,mypayment,hired,myrank,mu_yattas,sigma_yattas,max_yattas = map(ast.literal_eval,sys.argv[1:17])

bankholdings = map(int,sys.argv[17:22])
bankprobs = map(float,sys.argv[22:27])
bankodds = map(float,sys.argv[27:32])

if round ==1:
    if game < 900:
        print myyattas/10
    else:
        print 1
else:
    if game < 500 and hired:
        print random.choice(["change jobs","finger","buy guard"])
    elif game < 900:
        print "deposit"
    elif bankholdings[bankid]>0:
        print "withdraw"
    else:
        if alreadyplayed/float(numplayers)<0.5:
            print "finger"
        else:
            print "back out"

我批准了这些名称<插入Twitch和
Panga

2

孤独的约翰

import sys
import ast

game,round,numplayers,alreadyplayed,numbet,creditsbet,numready,bankid,mycredits,mybet,mypayment,hired,myrank,mu_credits,sigma_credits,max_credits = map(ast.literal_eval,sys.argv[1:17])

bankholdings = map(int,sys.argv[17:22])
bankprobs = map(float,sys.argv[22:27])
bankodds = map(float,sys.argv[27:32])

if round == 1:
    if mycredits > 100 or hired:
        print(int(mycredits)/2)
    else:
        print(0)
else:
    if bankprobs[int(bankid)] > 0.6:
        print("all in")
    elif int(mypayment) > 50 :
        print("buy guard")
    elif int(mycredits) > 200 and int(game) < 900 and hired == "1":
        print("change jobs")
    elif bankprobs[int(bankid)] * (float(numready)+1)/(float(alreadyplayed)+1) < 0.30:
        print "withdraw"
    else:
        print "!guncheck"

贿赂后卫,直到他有机会获胜,然后全力以赴。独自一人。

当他需要更多钱来贿赂警卫人员时,换工作。


这个球员叫什么?
quintopia '17

@quintopia行动!我忘记了要发布的方式!名称和爆炸添加。
MegaTom '17年

真好 提示,您不需要进行所有这些类型转换。从一开始就评估一切都是正确的类型。这意味着条件hired == "1"将始终为假,并且永远不会更改工作。
quintopia'5

我只是在单轮中与其他所有对手进行了对决。排在最后。厄运:(
quintopia'5
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.