首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

自从学会Python后,这样的牌局可以轻易破解,想输都难

在现实生活中,一个人想要出牌的话,必然需要知道自己手上的所有:me_pokers,也需要知道上一手:last_hand。...假设轮到我出牌时,如果我手上的都出完了,那么我立刻知道我赢了;反之如果对手的都出完了,而我没有,则我失败了。 ? 因为现在轮到我出牌,所以我首先需要知道我现在能的所有手组合。...注意:这个组合中,包括过(即不出牌)的策略。 ? 现在我们要对所有可能的手组合进行遍历。 首先我需要知道,上一手对方是什么。...如果对方上一手选择过,或者没有上一手,那么我这一必须不能过,但是我可以出任意的 如果对手上一手的了,则我必须要一个比它更大的或者选择这一直接过(不出牌) 关键点来了,在出我的或选择过后...即对我方手和敌方手和上一的描述(str(me_pokers)+str(enemy_pokers)+str(last_hand))为键,求出的结果存进缓存字典中。

98230

小白用Python | 用Python破解斗地主残局

在现实生活中,一个人想要出牌的话,必然需要知道自己手上的所有:me_pokers,也需要知道上一手的:last_hand。...假设轮到我出牌时,如果我手上的都出完了,那么我立刻知道我赢了;反之如果对手的都出完了,而我没有,则我失败了。 因为现在轮到我出牌,所以我首先需要知道我现在能的所有手组合。...注意:这个组合中,包括过(即不出牌)的策略。 现在我们要对所有可能的手组合进行遍历。 首先我需要知道,上一手对方是什么。...如果对方上一手选择过,或者没有上一手,那么我这一必须不能过,但是我可以出任意的 如果对手上一手出了,则我必须要一个比它更大的或者选择这一直接过(不出牌) 关键点来了,在出我的或选择过后...即对我方手和敌方手和上一的描述(str(me_pokers)+str(enemy_pokers)+str(last_hand))为键,求出的结果存进缓存字典中。

1.8K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    BZOJ1965: SHUFFLE 洗牌(exgcd 找规律)

    对于扑克的一次洗牌是这样定义的,一叠N(N为偶数)张扑克平均分成上下两叠,取下面一叠的第一张作为新的一叠的第一张,然后取上面一叠的第一张作为新的一叠的第二张,再取下面一叠的第二张作为新的一叠的第三张...……如此交替直到所有的。...游戏是这样的,如果给定长度为N的一叠扑克,并且面大小从1开始连续增加到N(不考虑花色),对这样的一叠扑克,进行M次洗牌。最先说经过洗牌后的扑克序列中第L张扑克面大小是多少的科学家得胜。...Sample Input 6 2 3 Sample Output 6 HINT Source 非常巧妙的一道题、 通过找规律不难发现,第$i$个位置下一的位置为$2i \pmod {n + 1...}$ 那么下$m$的位置为$2^m i \pmod {n + 1}$ 我们需要找到一个位置$x$,使得$2^m x \equiv L  \pmod {n + 1}$ 那么$x \equiv L * 2

    32710

    Python破解 斗地主残局 ,对王,然后3带2!

    在现实生活中,一个人想要出牌的话,必然需要知道自己手上的所有:me_pokers,也需要知道上一手的:last_hand。...首先我需要知道,上一手对方是什么。...如果对方上一手选择过,或者没有上一手,那么我这一必须不能过,但是我可以出任意的 如果对手上一手出了,则我必须要一个比它更大的或者选择这一直接过(不出牌) 关键点来了,在出我的或选择过后...# 如果上一对手出了,则这一我必须要比对手更大的 或者 对手上一选择过,那么我只需出任意,但是不能过 if (last_hand and can_comb2_beat_comb1...即对我方手和敌方手和上一的描述(str(me_pokers)+str(enemy_pokers)+str(last_hand))为键,求出的结果存进缓存字典中。

    1.3K50

    纸牌游戏——小猫钓鱼

    一、游戏规则 一副扑克平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克放在桌上,然后小哈也拿出手中的第一张扑克,并放在小哼刚打出的扑克的上面,就像这样两人交替出牌。...出牌时,如果某人打出的与桌上某张面相同,即可将两张相同的及其中间所夹的全部取走,并依次放到自己手中的末尾。当任意一人手中的全部时,游戏结束,对手获胜。...当有人赢的时候,依次从桌上拿走,这就相当于栈。 枚举桌上的每一张,如果某人打出的与桌子上的某张相同,即可将两张以及中间所夹的全部取走。...,所以需要将赢得的依次放入小哼的手中: if(flag==1) //小哼此可以赢 { q1.head++; //小哼已经打出一张,所以要把打出的队 q1.data[q1...{ q1.head++; //小哼已经打出一张,所以要把打出的队 q1.data[q1.tail]=t; //因为此可以赢,所以紧接着把刚才打出的又放到手中的末尾

    1.1K30

    哪类游戏AI难度更高?用数学方法来分析一下

    除了信息集的数目,还有一个重要的指标:信息集的平均大小,即在信息集中平均有多少不可区分的游戏状态。以两人德州扑克为例,假定我们的手是 AA,考虑对手的手为 AK 或者 AQ 两种不同情况。...第二,每个玩家剩余12张,玩家只能看到自己的12张手以及第一的四张,因此第二信息集数目为C_52^13 C_13^1 C_39^1 C_38^1 C_37^1=C_52^13 A_13^1...麻将 信息集数目:每一局麻将结束的时候,底下有14张不会被用到,所以不考虑吃碰杠的情况下,每一局至多会进行17.5(136减去13x4共52张手再减去14张底牌,总共剩70张,每一4张)。...第二,由于第一每个玩家各出一张,一副麻将总共有34种不同的,所以第一的四张所有可能的情况至多为34^4,因此第二信息集数目为C_136^13 ∙34^4。...第二,除去自己13张手,以及第一的四张,总共剩余119张,因此每个信息集大小为C_119^13 C_106^13 C_93^13。

    1.5K20

    python实现四人制扑克游戏

    本文实例为大家分享了python实现四人制扑克游戏的具体代码,供大家参考,具体内容如下 题目: 设计一个简单的四人制扑克游戏,能够完成以下功能: 1. 洗牌 2....发牌 3.自定义规则,在每单张出牌时,判定赢家 4.自定义规则,判定最终的赢家 规则简化版: 仅能单张,且出牌时,每个人的是自己手中中刚好能压过上家的最小牌,最先出的为赢家 import...(k == list[x]): value3.append(d[k]) list.pop(x) break list3.append(k) d0 = dict(zip(list0,value0))#每个人的转换为字典形式...and n = l2[len(l2) - 1]): n = l3[0] l3.pop(0) break y = 0 if (len(l3) == 0): print("赢家:第四个人") break #剩余从键值转化成...) print("第二个人的:",l1) print("第三个人的:",l2) print("第四个人的:",l3) 以上就是本文的全部内容,希望对大家的学习有所帮助。

    27030

    24点游戏实现(下)

    1827914 全排列组合实现方法:https://cloud.tencent.com/developer/article/1827915 最早有讲过GUI程序的原理,其实本质上和写其他的程序是一样的,主要就是输入输出换了一个形式...python GUI界面设计的那些事 https://cloud.tencent.com/developer/article/1812505 python GUI界面设计的那些事(二) https://.../article/1812517 GUI程序比一般的程序其实更好写,因为控件以及功能一开始就帮你划分好了,你只需要依次实现每个控件的功能。...选择,设置和设置按钮数字 ? 清空文本框和输入内容 ? 确定答案 ? 无答案 ? 下一 ? 计算所有可能的排列组合 ? 显示答案 ?...__ == "__main__": app = QApplication(sys.argv) window = Game() sys.exit(app.exec_()) (全文)

    55720

    一道算法题:德州扑克多家ALLIN如何分筹码?算法+代码

    数据结构 我们必须要记清楚,每个玩家本局总共投入了多少筹码,才方便后续计算。 以下变量类型都是python。...RAISE = 3 ALLIN = 4 FOLD = 5 WIN = 6 # 胜利,不摊牌(适用其他人都Fold的情况) WIN_SHOW = 7 # 胜利,需要摊牌...LOSE_SHOW = 8 # 失败,需要摊牌 开发 排序逻辑 注:cards就是所有,是一个长度52的list,每一项的值都是0-51,开局前会做一次shuffle(随机打乱顺序)。...(附带python实现)》 。算出得分后,按付出的筹码从小到大排序,放到final_seats里,为什么叫final呢?表示他们会最终参与到分筹码流程里(都是亮牌的人)。...每次分配,计算bonus_together,表示这分配的总筹码,加上赢家投入的筹码、所有输家要付出的筹码。之后本轮赢家会平分bonus_together。

    4.5K72

    AI学高数达到MIT本科水平,学了微积分线性代数概率论等6门课,不光能做题还能出题

    6门课程每门随机25道题,再加上一个ACT水平(美国高考)的数据集里的60道题。 总计210道题,AI全部答对。 题目包括需要求出具体数值的,比如菌落繁殖的经典问题。 也有要求给出方程式的。...要知道在短短几个月前,AI还在挣扎于“小明种了5颗柠檬树,每年从每棵树上得到6个柠檬,10年间他总共得到多少柠檬”这样的问题。 短短几个月,从小学数学跨越到了高等数学。...列好解题需要用到的Python库。 把问题扩充成更精确的数学语言。 原问题: 计算扑克中一副手中有两对的概率。 改写问题: 一副手有5张,从13组每组4张一共52张中随机抽取。...他们觉得AI的题要稍微难一些,但大多数题目放在课程里也算合适。 AI的题你会做吗? 论文中列出了这项研究还存在几个局限性。 首先是做不了题干带配图的题,这次试验中也没有需要大量证明的题。...https://www.reddit.com/r/MachineLearning/comments/rutbpv/r_a_neural_network_solves_and_generates/ —

    48110

    AI赌神超进化:德扑六人局击溃世界冠军,诈唬如神,每小时能赢1千刀 | Science

    因为扑克有隐藏信息,你不知道对手的。赢下比赛需要诈唬,需要许多国际象棋、围棋等等游戏里涉及不到的技能。 这是AI打牌的一个巨大障碍,而另一个障碍是多人。...不过,纳什平衡并不是总能找到: 首先,如果是观察对手的弱点来获得纳什平衡,比如对手常常剪刀,AI就可以一直石头,但对手也能根据AI的选择来调整自己的策略。这种方法需要的数据量也比较大。...所以,Pluribus在任何给定的决策点只需要考虑几种不同的下注大小。它所考虑的投注数量在1到14之间变化,具体多少取决于实际情况。...在算法的每次迭代中,MCCFR一个玩家指定为“遍历者”,其当前策略在迭代时更新。 在迭代开始时,MCCFR根据所有玩家的当前策略随机模拟一手。...—

    64010

    每周学点大数据 | No.22 外排序

    在最后一中,两个长度为n/2 的序列进行了归并,合并成长度为n 的序列。每个元素被访问了几次?...王:由此发现,不管有多少个序列参与归并,其实在每一的归并中,都是访问了所有的元素常数次,每一都进行了cn 次的操作。这意味着归并排序中每一的复杂度都是O(n)。...小可:这个我懂了,只要知道整个归并排序进行了多少,再乘以O(n) 就可以了。 Mr. 王:很好,思路是非常正确的。现在我们来观察一下合并这个过程。 Mr....在现实生活中,需要排序的数据量有时候是很大的,当内存中无法容纳这么大的数据量时,我们就要尝试这些数据存储在磁盘上,利用内存作为数据的暂存地进行排序。 小可:那么在外排序中,归并排序又该怎么做呢?...整个数组分为多少路,要考虑内存能装下多少个磁盘块,我们要分的路数等于内存能装下的磁盘块数。也就是说,一定要保证每一路都有一块在内存中。 内容来源:灯塔大数据

    1.1K60

    【小算法】插入排序

    插入排序也是一种非常容易理解的算法,核心思想就是每次新的元素往原本有序的数组中插入。 算法思路 假设有下面一组数据,需要从小到大升序排列。 插入排序的算法是 1. 进行多迭代。 2....每一次迭代的前提是当前的数值插入到前面已经排序好的子数组当中。 也许描述有写抽象,但用显示当中玩扑克的经验可以很好地类比插入排序。 比如你手里已经有一堆。...你一定会插入到 6 与 J 之间 5、6、 、J、K 现在,整个面仍然是有序的,以后的操作都是如此的。...而在 Python 中,需要给 List 中的数字提前挪窝,所以最后给指定位置赋值,就相当于插入了一样。 时间复杂度 用大 O 表示法,选择排序的时间复杂性度是 O(n2)O(n^2)O(n2)....看看最坏的情况,如果一个数组完全逆序的话,每一次插入都要移动前面的元素,那么需要进行多少次移动呢?

    30610

    Python量化 | 10年翻400倍的炒股策略(视频讲解)

    市值的意思就是,在市场上买下这个股票所有的股份,总共需要多少钱。而对于选股而言,市值是越小越好。也就是说,市值越小的股票,在将来上涨的概率越大。...试问有多少人可以跑赢呢?...如果需要数据,请根据文末提示加邢老师微信咨询。 其中第四列的【是否交易】字段,含义是这个股票在当月最后一个交易日是否交易。用于排除那些在月末最后一天停而不能买入的股票。...邢老师经过多直播,精心打磨的《python量化投资入门》视频课程,也在最近上线了!...python从入门到熟练,手把手教你从安装到常用工具库的使用。 量化投资从基础到策略编写,手把手教你从获取数据到自动下单。 课程注重实际,学后能自己写出量化策略并自动交易。

    6.1K92

    概率入门:双色球中奖、购车摇号中签和德扑同花顺,哪个更容易?

    第一是在每位玩家只能看到自己2张底牌的情况下加注。 第二是在每位玩家能看到自己2张底牌,以及桌面上3张公共的情况下加注。...第三是在每位玩家能看到自己2张底牌,以及桌面上4张公共的情况下加注。 第四是在每位玩家能看到自己2张底牌,以及桌面上5张公共的情况下加注。 最多只会经历这四,一局游戏结束。...这个地方需要注意一下。 3....卫峥,西山居软件架构师,多年的软件开发和架构经验,精通C/C++、Python、Golang、JavaScript等多门编程语言。 尹会生,西山居高级系统工程师。...点击上图了解及购买 转载请联系微信:togo-maruko 推荐语:以降低学习曲线和阅读难度为宗旨,重点讲解了统计学、数据挖掘算法、实际应用案例、数据价值与变现,以及高级拓展技能,清晰勾勒大数据技术路线与产业蓝图

    1.5K30

    【重磅】AI 首次在德州扑克战胜人类职业玩家,新算法让机器拥有“直觉”(附论文)

    作为对比,计算机已经在围棋上胜人类专业棋手,围棋是一个完美信息的游戏,约包含有10的170次方个决策点。 非完美信息游戏要求更复杂的推理能力。...但是, 对手的行为如何暗示他的信息,反过来也要取决于他对我们的私人信息有多少了解,我们的行为已经透露了多少信息。...这种估计可以被看成是 DeepStack 的直觉:在任何可能的扑克情境下,持有任何可能的个人面大小的直觉。 最终,从某种程度上来说与人类的很像的 DeepStack 的直觉,是需要被训练的。...我们解释 DeepStack 在 HUNL(heads-up no-limit,一对一无限注)德州扑克中的作用。...这种本地的计算使得 DeepStack 在对现有算法来说规模太大的游戏中可推理,因为需要抽象的游戏的10的160次方决策点下降到10的14次方,这让算法变得易处理。 ?

    83180

    字节跳动面经(一、二、三+大boss+hr面)

    现有两个人要交替从堆顶拿,每次至少拿一张,至多拿M张,直到堆被拿。 每个人拿至手中的的分数和即为其最终得分。...假设两个人都会采取最佳策略拿来使自己的得分最大化,请问先手拿的人的得分为多少? 输入描述 输入第一行是样例个数; 对于每个样例,第一行是N,M,第二行有N个整数,代表堆顶到堆底N张的分数。...(三面) A:喜欢,跑过,4小时40分钟,不追随速度的那种跑 Q:那一公里配速多少呢?(三面) A:舒服跑5-6分钟吧,最快的话5公里20分钟 Q:每天跑量多少?...具体说一下,时间复杂度多少?...Q:简历上看你会C 和Python,哪个比较熟悉一些? A:C 熟悉,Python属于项目里现学现用的那种。 Q:看你是做图像的,你觉得你的学习方法是什么?

    7.2K30

    上班摸鱼系列|Python开发命令行斗地主

    python开发这样一个斗地主游戏,我们先来想想进行一场斗地主游戏所经历的过程:首先生成54张扑克,然后这54张扑克随机发给三名玩家,每个玩家17张并保留三张底牌,接着从第一个玩家开始询问是否抢地主...,如果成为地主则获得三张底牌,这样依次循环直到地主出现,之后就是根据出牌规则完成一系列的出牌动作,最先出的人取得胜利并按照记分规则累积分数(欢乐豆)。...(你可以修改ai.py部分代码调整规则) 分析手 先看是不是王炸 看是不是炸弹,如果是对手的炸弹,能打就打 再看是不是大于K,如果是队友的,就过,否则就试着打掉,用炸弹 如果对手手少于9张大于...K或者的大于8张的飞机/顺子/连对有王炸/炸弹就用掉 否则无脑跟 不用炸弹和火箭 如果跟对方并且对方小于9张,没有1,2张的就拆2,3张的打 自己出牌lastcard应该是[] 若自己手小于5...张,先出王炸,炸弹,最大牌 再看下家手数量和阵营 同阵营最小单/对 不同阵营比他多的或者大牌 由于篇幅原因就不展示全部代码。

    2K101

    上班摸鱼系列|Python开发命令行斗地主

    先来看个效果: 简单讲讲如何使用python开发这样一个斗地主游戏,我们先来想想进行一场斗地主游戏所经历的过程:首先生成54张扑克,然后这54张扑克随机发给三名玩家,每个玩家17张并保留三张底牌,接着从第一个玩家开始询问是否抢地主...,如果成为地主则获得三张底牌,这样依次循环直到地主出现,之后就是根据出牌规则完成一系列的出牌动作,最先出的人取得胜利并按照记分规则累积分数(欢乐豆)。...(你可以修改ai.py部分代码调整规则) 分析手 先看是不是王炸 看是不是炸弹,如果是对手的炸弹,能打就打 再看是不是大于K,如果是队友的,就过,否则就试着打掉,用炸弹 如果对手手少于9张大于...K或者的大于8张的飞机/顺子/连对有王炸/炸弹就用掉 否则无脑跟 不用炸弹和火箭 如果跟对方并且对方小于9张,没有1,2张的就拆2,3张的打 自己出牌lastcard应该是[] 若自己手小于5...张,先出王炸,炸弹,最大牌 再看下家手数量和阵营 同阵营最小单/对 不同阵营比他多的或者大牌 由于篇幅原因就不展示全部代码。

    93210

    Python实现希尔排序

    插入排序参考:Python实现插入排序 希尔排序是先取一个小于待排序列表长度的正整数d1,把所有距离为d1的数据看成一组,在组内进行插入排序。...在插入排序中,如果数据几乎已经排好序时,效率是很高的(想一下抓和插),时间复杂度为 O(n) 。...依次用 d1, ..., di 作为数据的距离对列表进行分组和组内插入排序,一共需要进行 i 排序。 3. 在最后一排序前,列表中的数据达到了“几乎排好序”的状态,此时进行最后一插入排序。...先将第一个数据作为已排序序列,后面的数据作为未排序序列,然后依次未排序序列中的数据插入到已排序序列中。 ? 7. 5插入已排序序列中,10大于5,交换位置。 ? 8....希尔排序需要进行多少次排序,完全取决于选择了多少个 di,i 越大,需要进行的排序轮数越多,最后一次排序前也越接近“几乎排好序”的状态。

    60440
    领券