筷子用KoTH点突变


13

基本规则(与我的不同)

故事

现在是4579年,人类现在有2只手,每只手有1001个手指。筷子已变得毫无根据。而且@Dennis比@Martin代表更多...手绘红色圆圈现在已被否决... Jon Skeet在每个SE网站上都达到2万亿代表...是的,我知道

筷子是一个已经解决的手游戏。因此,为了解决这个问题,我创建了它的变异体。我增加了手指的数量。

游戏规则

播放方式

每个人都从两只手开始。每只手有1001根手指。每只手都以每只手上的一根(一根)手指开始。在回合中,您可以“击中”其他玩家的手。要进行击中,请选择一只手来进行打击,然后选择一只手来进行打击。现在,被击中的手的手指数量与刚开始时的手指数量相同,并且在您用其击打时手上的手指数量也是如此。

P1: 1,1 P2: 1,1P1[0]命中P2[1]。现在手指在P1:1,1 P2:1,2。现在P2[1]点击p1[0]。现在,手指为P1:3,1P2 1,2

如果一只手的手指向上伸出1001或更多,则那只手伸出。然后,获得帮助的玩家(轮到他们)可以“分开”。分裂是指将手伸进去并且将手指的数量减半(向上舍入),然后将这些手指放在另一只手上,将其重新伸入。

P1:1000,2P2 7,7P2[0]命中P1[0]。分数为P1:0,2P2 1,1P1[1]轮到他拆分,得分为P1:1,1和P2 7,7

当一名玩家举手时游戏结束。得分由获胜者的手指数量来得分。积分越多越好。失败者一分未得。

使用了其他规则,但是这里使用了这些规则。

每个人都扮演所有人(循环赛)

结束游戏

从您赢得的每一轮中累计您的积分。然后平均每个人的分数。将您的总数除以平均分,得出最终分数。多数积分获胜。

实际规则

标准漏洞

请不要尝试解决游戏。我实际上必须能够运行它:P

确保机器人可以快速运行。判断轮数需要一段时间

程序中需要的所有库都必须位于默认的python库中。同时列出您需要导入的文件。进口也只是基本的进口(在数学我做的:import math

答案必须在Python 3.x中有效

处理程序

您的机器人将是带有play功能的自己的Python 3文件。

play将通过两个分别由两个数字组成的列表。该数字表示每只手上的手指数。第一个清单是您自己的手。

如果您选择打对方的手,则返回两位列表。第一位是您用来击打的手的索引(对于第一手01最后一位),第二位是您在对手上击打的手的索引。

如果选择拆分,则返回任何其他真实值。

多田!

控制器可以在这里找到。将每个漫游器保存在自己的文件中,并在中列出每个漫游器的文件名(不带.pybotnames

最后说明:

您和其他漫游器将首先轮流使用。如果游戏没有在100,000(十万)回合中终止,则该游戏将终止并且任何机器人都不会赢。

不能保护控制器免受永久性移动的困扰,但是不必要的开销将被强烈反对。



可以将“标准KOTH规则”链接吗?也许还有“标准漏洞”。
trichoplax

My handler is very simple, your bot must do it's logic then adjust the the finger scores as needed, remember!什么,那么我们是为KoTH进行计算的人吗?
HyperNeutrino

@HyperNeutrino修复。
Christopher

4
丹尼斯比马丁更代表现在。天哪,这996个额外的手指从何而来?
caird coinheringaahing

Answers:


6

编码与算法

这个答案实际上使用了编码和算法,与目前为止其他答案不同!参考:imgur(也胜过之前发布的所有答案)

def play(A, B):
    if sum(A) == 1:
        return [A.index(1), B.index(max(B))]
    elif max(A) + max(B) > 1000:
        return [A.index(max(A)), B.index(max(B))]
    elif 0 in A:
        return 1
    elif 0 in B:
        return [A.index(min(A)), 1-B.index(0)]
    else:
        return [A.index(min(A)), B.index(min(B))]

我得到了参考文献XD
Christopher

这才赢了。它永远不会丢失。
Christopher

恭喜你!我想我将不得不争取第二名。您的编码和算法比我的更强大
Value

3

注意机器人

def play(s,o):
 if max(s)+max(o)>1000 and (all(s) or max(s)+min(o)<1001):
  return [s.index(max(s)),o.index(max(o))]
 else:
  return [s.index(min(s)),o.index(min(filter(bool,o)))]if all(s) else 'split'

CautionBot不想造成太多麻烦,因此如果两只手都用较小的手击中对手的较小手,否则会分裂。但是,CautionBot并非傻瓜,因此,如果它可以在不立即失去下一轮的情况下伸出对手的手,那么它将代替其通常的举动。


非正式地,这是赢家
Christopher

凉!我们将看到事情的发展,因为当有人制定更好的策略时,我不会感到惊讶。我只是运用了我所理解的香草筷子策略(为了避免被杀死而胆怯并经常分裂),以最佳方式适应了新规则(因为在您分裂/合并时成为了胆小者并低下以避免被杀死)双手都违法)大声笑
值墨

3

均衡器

def play(s, o):
    if not all(s):
        return 1
    else:
        return [s.index(max(s)), o.index(min(filter(bool, o)))]

如果均衡器缺少一手,它将平分。否则,它会用自己最大的一手击中对手的最小手。


根据这些变异的规则,AFAIK只有在伸出一只手的情况下才可以拆分。
价值墨水

噢,我会解决的。
LyricLy

“如果均衡器没有手……”我的意思是,如果均衡器没有手,那么它已经输了吗?但这只是挑剔,以我的+1来补偿
Value Ink

3

侵略者

def play(s, o):
    return [s.index(max(s)),o.index(max(o))]if all(s)else 1

另一个首发机器人,攻击者如果两只手都不是空的,将用自己的较大手击中对手较大的手。否则,它将分裂。


2

RandomBot

import random

def play(s, o):
    return [random.randint(0,1)for i in'  ']if all(s)else 1

只是为了开始,这是一个机器人,如果两只手都不是空的,它会随机击中;否则,分裂。

打高尔夫球,因为为什么不:3


我正在解决问题
Christopher

@Christopher抱歉,没有看到您的评论。---修复它后,我将其删除。---我将其删除,因为它是愚蠢的xD
HyperNeutrino

@Christopher注意:我已将其编辑为有效的提交。我还将添加另一个解决方案;告诉我控制器是否无法正常工作:)
HyperNeutrino

很好地尝试一下
Christopher

@Christopher控制器是否正常工作?
HyperNeutrino

2

错误

是的,那是机器人的名字。

def play(s, o):
    if max(s)+max(o)>1000:
        return [s.index(max(s)),o.index(max(o))]
    if 0 in s:return ''
    return [s.index(max(s)),o.index(min(o))]

我是通过与其他机器人进行测试而得出的。但是,在我的仿真中,它始终是倒数第二。所以最终我会制造另一个机器人。

编辑:我似乎无法编写任何击败CautionBot的机器人,而我的额外测试似乎表明这是第二好,而不是第二坏。


1

马拉松运动员

我调整了“ HyperNeutrino”提供的Aggressor的代码,用两只手中的较小一只简单地击中了对手中较小的一只。当然,这是一个非常愚蠢的策略,但是我不能拒绝成为图表的顶部!(即使该图表将是损失)

我不确定该代码是否可以正确运行,因为由于工作而无法对其进行测试。但是,它应该完美运行。

def play(s, o):
     return [s.index(min(s)),o.index(min(o))]if all(s)else 1

不错的第一答案!您选择了一个很好的问题:P(无偏见)
Christopher

谢谢:)我非常紧张,因为我不确定是否允许像我一样调整其他人的代码。我认为只要您使它显而易见即可。我本来想制造一支只会在对手最大的牌中发挥最大作用的牌,但是HyperNeutrino恰好击败了我!哈哈
乔丹

是的 在此SE上经常使用调整代码:P
Christopher

很酷的答案!我担心的一件事(现在无法对其进行测试)是,我不知道如果您尝试打空手,控制器将如何响应,或者该因素如何影响规则。
价值墨水

1
这与均衡器非常相似,但是均衡器会检查以确保没有碰到对手的空手。@LyricLy
HyperNeutrino
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.