Questions tagged «python»

这个挑战与Python语言有关。请注意,通常不建议要求答案使用特定语言的挑战。

30
在Python中打高尔夫球的技巧
您使用Python打高尔夫球有哪些一般技巧?我正在寻找可以应用于代码高尔夫球问题的想法,并且这些想法至少也特定于Python(例如,“删除注释”不是答案)。 请为每个答案发布一个提示。
248 code-golf  python  tips 

11
到底llhuii如何在42个字节的Python中输出Evil Number?
这是Python中打高尔夫的技巧问题,涉及无政府状态高尔夫上的邪恶数字问题。 如果数字的二进制扩展数具有偶数1,则该数字是有害的。面临的挑战是打印前400个邪恶数字0,3,5,...,795,797,798,每行打印一个。 Python 2提交由llhuii领导,提供42字节的解决方案。次佳的是mitch的46个字节,然后是五个47字节的提交。llhuii似乎发现了一些真正神奇的东西,在过去两年多的时间里,许多强大的Python高尔夫球手都无法使用它。对于如此短的高尔夫球,节省4或5个字节是巨大的。 我仍然有47个字节。我希望我们可以解决这个社区难题。如果我们共同获得答案,我将以所有贡献者的名义提交。这个问题的答案可以是一段代码,一个新想法或一段分析。如果您是llhuii,请不要为我们宠坏它。 尽管由于此问题是“无尽的”,所以未公开提交,但我们得到了一些线索。获胜的提交花了0.1699秒来运行,比任何其他时间都要长得多,这表明该方法效率低下。根据字节统计,在42个字符中,23个字母数字字符[0-9A-Za-z]和19个ASCII符号。这意味着llhuii解决方案中没有空格。 您可以在问题页面上测试代码,从语言下拉列表中选择Python或上传.py文件。注意: 使用Python 2.7 您的代码必须是可打印的完整程序 没有输入用于解决此问题,例如kolmogorov-complexity 您的程序只需打印给定的400个值,即使较大的值会中断 程序有2秒的运行时间 程序可能会因错误而终止 您可以使用exec;“ exec被拒绝”是指shell exec

27
诚实的岩石,纸,剪刀
许多人认为RPS是一种机会游戏。如果两个玩家的比赛都变幻莫测,则最佳策略是随机比赛。但是,让我们介绍一下它的可预测性。 每个漫游器都有机会告诉另一个漫游器同时播放的内容。然后是一个停顿,每个机器人都将知道另一个玩家宣布了什么。如果它使用该武器,它会宣布除了赢球或平局的得分外,还将获得1分。 获胜者可得2分,平局,1分和失0分。 Honest Bot Dishonest Win 3 2 Draw 2 1 Loss 1 0 诚实是您的最大利益所在(但同时也要确保您的对手不相信您)。 比赛将以循环赛的形式进行,目的是使您在比赛中的总成绩最大化。 I / O格式: 您的机器人将是一个带有4个参数的Python 2.7函数,并且必须具有唯一的名称(用于表示您的提交)。 前两个参数始终按顺序排列:对手的过去动作,然后是您的过去动作。这些将是从第一轮到最近一轮的顺序列表,每个索引都包含一个列表,其中列出了对手声称要进行的动作,然后是他们实际进行的动作。 接下来的两个参数将使您的漫游器可以确定这是“诚实”回合还是“真实”回合。如果这是一次“诚实”的回合,那么它们都将为None。如果这是一个“真实”的回合,那么按照顺序,这将是对手声明要进行的动作,然后是声明要进行的动作。 代表移动的所有自变量或自变量的一部分将分别使用“ R”,“ P”和“ S”表示岩石,纸张和剪刀。 您的函数应该为岩石返回“ R”,为纸张返回“ P”,或为剪刀返回“ S”。有能力返回其他值的机器人将被取消比赛资格。 每个漫游器将与其他漫游器运行200次,而自身运行100次。我们的目标是成为比赛结束时获得最高分的机器人。 关于评论中的讨论,提交的内容不得读取或写入任何文件,也不得以任何方式破坏或读取对手的代码。 例子: 这是我快速整理的四个示例机器人。他们将作为其他机器人加入竞赛。如果输给最后一个,则需要做一些工作。 def honestpaper(I,dont,care,about_these): return "P" def honestrock(I,dont,care,about_these): return "R" def honestscissors(I,dont,care,about_these): return "S" import random …

30
骰子游戏,但避免数字6 [关闭]
比赛结束了! 比赛结束了!最终模拟是在夜间进行的,总共场比赛。获奖者是Christian Sievers和他的机器人OptFor2X。克里斯蒂安·西弗斯(Christian Sievers)也与Rebel一起获得第二名。恭喜你!您可以在下面看到比赛的官方高分列表。3∗1083∗1083*10^8 如果您仍然想玩游戏,欢迎使用下面发布的控制器,并使用其中的代码来创建自己的游戏。 我受邀玩从未听说过的骰子游戏。规则很简单,但我认为这对于KotH挑战将是完美的。 规则 游戏开始 骰子绕着桌子转,每次轮到您时,您都可以随意扔骰子多次。但是,您必须至少抛出一次。您可以跟踪本轮的所有掷出的总和。如果您选择停止,则该回合的分数将添加到您的总分数中。 那么,为什么要停止扔骰子呢?因为如果您得到6,则整个回合的分数将变为零,并且骰子会继续传递。因此,最初的目标是尽快提高您的分数。 谁是赢家? 当桌子周围的第一个玩家达到40分或以上时,最后一轮开始。一旦上一轮开始,除了发起上一轮的人以外的所有人都将获得另一回合。 上一轮的规则与其他任何轮次相同。您选择继续投掷或停止。但是,您知道,如果您没有获得比上一轮比赛之前更高的分数,那么您就没有机会获胜。但是,如果您走得太远,那么您可能会得到6。 但是,还有另一条规则需要考虑。如果您的当前总得分(您的上一得分+您当前的总得分)为40或更高,并且您打6,则您的总得分将设置为0。这意味着您必须重新开始。如果您在当前总得分为40或更高时达到6,则游戏将继续正常进行,除非您现在排在最后。重设总分时不会触发最后一轮。您仍然可以赢得一轮比赛,但这确实更具挑战性。 胜者是最后一轮结束后得分最高的球员。如果两个或两个以上的玩家共享相同的分数,则将全部计为胜利者。 附加规则是游戏最多可以持续200回合。这是为了防止多个机器人基本上一直抛出直到它们达到6保持当前分数的情况。第199轮通过后,last_round将其设置为true,然后再玩一轮。如果游戏进行200轮,则得分最高的机器人(即使机器人得分不超过40分)也将是获胜者。 概括 每回合您都会掷骰子直到选择停止或得到6 您必须掷一次骰子(如果您的第一掷是6,则您的回合立即结束) 如果您得到6,则您的当前分数将设置为0(而不是总分数) 您在每个回合后将当前分数添加到总分数中 当漫游器结束转弯时,其总分至少达到40分时,其他所有人将获得最后一转 如果您当前的分为而您得到6,则您的总得分将设为0,并且您的回合结束了≥ 40≥40\geq 40 发生上述情况时,不会触发最后一轮 最后一轮比赛总得分最高的人是获胜者 如果有多个获胜者,则全部计为获胜者 游戏最多持续200回合 澄清分数 总分:您在前几轮中保存的分数 当前分数:当前回合的分数 当前总分:以上两个分数之和 你如何参加 要参加KotH挑战,您应该编写一个Python类,该类继承自Bot。您应该实现以下功能:make_throw(self, scores, last_round)。轮到您时该函数将被调用,并且您的第一个掷球不是6。要继续掷球,您应该yield True。要停止投掷,您应该yield False。每次抛出之后,update_state都会调用父函数。因此,您可以使用变量访问当前回合的掷球self.current_throws。您还可以使用来访问自己的索引self.index。因此,要查看自己的总成绩,您可以使用scores[self.index]。您也可以使用来访问end_score游戏的self.end_score,但您可以放心地假定此挑战将是40。 您可以在类中创建帮助器函数。您也可以覆盖Bot父类中现有的函数,例如,如果要添加更多的类属性。除yield True或之外,您不得以任何其他方式修改游戏的状态False。 您可以从这篇文章中自由地寻求灵感,并复制我在此处包括的两个机器人中的任何一个。但是,恐怕它们并不是特别有效... 关于允许其他语言 在沙盒和第十九字节中,我们都讨论了有关允许使用其他语言提交的问题。在阅读了这样的实现并听取了双方的争论之后,我决定将这一挑战仅限于Python。这是由于两个因素造成的:支持多种语言所需的时间,以及此挑战的随机性,需要大量的迭代才能达到稳定性。我希望您仍然会参与其中,如果您想学习一些Python来应对这一挑战,我将尽可能多地在聊天中提供帮助。 如有任何疑问,您可以在聊天室中写下此挑战。到时候那里见! 规则 允许并鼓励破坏行为。也就是说,对其他玩家的破坏 任何试图修改控制器,运行时或其他提交内容的尝试都将被取消资格。所有提交都应仅使用输入的输入和存储。 任何使用超过500MB内存做出决定的漫游器都会被取消资格(如果您需要那么多内存,则应重新考虑选择) 机器人不得有意或无意地实施与现有机器人完全不同的策略。 …

30
机器人轮盘:高赌注的机器人赌博
最终排名 + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + | 姓名| 分数| WinRate | TieRate | 消除概率| + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + | 1. SarcomaBotMk11 | 0.06333 | 6.13%| 0.41%| [42 24 10 8 6 4]%| | 2. WiseKickBot …

30
有已知的
美国前国防部长唐纳德·拉姆斯菲尔德(Donald Rumsfeld)著名地推广了“已知的已知物”。在这里,我们将把他的言论提炼成四行节。 具体来说,输出以下文本: known knowns known unknowns unknown knowns unknown unknowns 大小写无关紧要(例如,Known unKnowns可以),可以使用单行尾的换行符,但不允许其他格式更改。这意味着单词之间有一个空格,行之间有LF(59字节)或CR/LF(62字节)。 规则 完整的程序或功能都是可以接受的。如果是函数,则可以返回输出而不是打印输出。 禁止出现标准漏洞。 这是代码高尔夫球,因此所有常用的高尔夫规则都适用,并且最短的代码(以字节为单位)获胜。

26
制作平方字
挑战 您的任务是创建一个程序,该程序接受任何给定的字符串输入,并以平方格式输出输入。空字符串应返回一个空字符串。 例子 给定输入: golf 您的程序应输出: golf o l l o flog 输入: 123 输出: 123 2 2 321 输入: a 输出: a 输入: Hello, world! 输出(注意,和之间的空格-间隙不只是换行符): Hello, world! e d l l l r o o , w w , o o r l l l d e !dlrow …

3
解决魔方
编写最短的程序,以在合理的时间范围内移动并解决Rubik的多维数据集(3 * 3 * 3)(例如,在您的计算机上最多5秒,而最多移动1000秒)。 输入的格式为: UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR (此特定输入表示已解决的多维数据集)。 前12个2个字符的字符串是UF,UR,... BL位置中的边(U =上,F =前,R =右,B =后,L =左,D =下),然后是下8个3个字符的字符串是UFR,URB,... DBR位置中的角。 输出应以这种格式给出一系列移动: D+ L2 U+ F+ D+ L+ D+ F+ U- F+ 其中D1或D +代表将D(下)面顺时针旋转90度,L2代表将L面旋转180度,U3或U-代表将U面逆时针旋转90度。 字母不区分大小写,空格是可选的。 …

22
基本ASCII提示
替代标题:在墙上统计您的监狱判决 给定一个数字n,输出记录分为传统的每组5个和每行50个。 例子 1个 | | | | 4 |||| |||| |||| |||| 5 |||/ ||/| |/|| /||| 6 |||/ | ||/| | |/|| | /||| | 50 |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| |/|| |/|| …
36 code-golf  ascii-art  number  code-golf  number  integer  binary  base-conversion  code-golf  array-manipulation  code-golf  chemistry  code-golf  number  sequence  fibonacci  code-golf  matrix  optimization  code-golf  number  code-golf  math  number  sequence  code-golf  math  array-manipulation  matrix  linear-algebra  code-golf  kolmogorov-complexity  cops-and-robbers  cops-and-robbers  code-golf  tips  basic  code-golf  decision-problem  binary  tiling  game  king-of-the-hill  python  code-golf  c  code-golf  ascii-art  code-golf  string  kolmogorov-complexity  alphabet  code-golf  number  code-golf  string  code-golf  number  sequence  integer  code-golf  number  permutations  restricted-complexity  restricted-time 

23
嘈杂的囚徒困境
在此挑战中,您将扮演吵杂的囚徒困境。 在囚徒困境是博弈论中一个场景,其中有两名球员,每两种选择:合作或者缺陷。如果每个球员都缺阵,他们会为自己做得比他们合作时更好。 反复犯人的困境是相同的游戏,只是您反复与同一个对手比赛,并且您知道对手过去玩过什么。您的目标始终是为自己积累最高分,而不管对手的表现如何。 嘈杂的囚徒困境使沟通变得有些混乱。您对对手过去玩过的游戏的了解会带来一些干扰。您还将了解过去的举动。面对同一个对手的回合中,噪声率是恒定的,但是不同回合之间的噪声率却不同。 挑战 在这个挑战中,您将编写一个Python 3程序来解决嘈杂的被囚徒的困境。 您的程序将收到三个输入: 您自己的动作,无需应用随机翻转。 对手的动作,并应用随机翻转。 状态变量,每轮以一个空列表开头,可以根据需要进行修改。如果您不想使用它,则可以忽略它。 您的程序应输出'c'以配合或'd'缺陷。 例如,这是一个程序,如果对手过去至少60%的时间在应用了随机翻转之后并且在前10次翻转中进行了合作,则该程序可以进行合作: def threshold(my_plays, their_flipped_plays, state): if len(their_flipped_plays) < 10: return 'c' opp_c_freq = their_flipped_plays.count('c')/len(their_flipped_plays) if opp_c_freq > 0.6: return 'c' else: return 'd' 如果您不了解Python,请使用伪代码编写提交内容,然后某个人(我或该站点的另一个成员)可以制作相应的Python程序。 游戏玩法 比赛亚军可以在这里找到:noisy-game。运行noisy-game.py以运行锦标赛。我将使用新提交的内容更新该存储库。示例程序可以在中找到basic.py。 程序的总体得分是其在100多个游戏中得分的总和。 游戏由每个玩家与每个玩家(包括其自身)的循环赛对决组成。一场对决包括100发回合。一回合包含300个动作,每个动作涉及输出'c'或'd'。 您的提交将与每个提交(包括您自己的提交)进行对战。每场比赛将进行100场比赛。在每个回合中,翻转概率将从中均匀地随机选择[0, 0.5]。 每回合将包含300步。在每次移动时,两个程序都将收到他们尝试过的所有先前播放的声音,以及在应用了翻转之后另一个程序已经做出的所有先前播放的声音,以及一个状态变量,该变量是可变的列表,程序可以根据需要对其进行修改。程序将输出其动作。 动作得分如下:如果一个程序播放a 'c',则相反的程序将获得2分。如果某个程序播放'd',则该程序将获得1分。 然后,以等于翻转概率的概率独立地翻转每个动作,并存储以显示给对手。 在完成所有回合之后,我们求和每个对战中每个球员获得的积分。然后,我们使用以下评分系统来计算每个玩家的游戏得分。在所有比赛完成后执行此评分。 计分 我们将使用进化评分。每个程序以相等的权重开始。然后,使用游戏中的总点数,权重更新如下,进行100次迭代: 每个程序的新权重与之前权重和平均总分的乘积成正比,再乘以其对手的权重。 …

4
FOIL Python的强类型!
您的任务是用Python 2或3编写一些代码,使该表达式如下: (a+b)(c+d) == a*c + b*c + a*d + b*d 将评估为,True而不会引发任何异常。 为了澄清,我将您的代码复制到一个文件中,然后复制到from该文件中import *。然后,将表达式输入控制台,并确认它是True。 这是代码高尔夫球,因此长度最短(以字节为单位)的答案会获胜。
35 code-golf  python 

6
在Lambda中分配的Python解决方法
这是使用Python打高尔夫球的提示问题。 在Python打高尔夫球中,提交通常是定义为lambda的函数。例如, f=lambda x:0**x or x*f(x-1) 计算 x 的阶乘。 lambda格式有两个主要优点: f=lambda x:...或的样板lambda x:...比def f(x):...return...或短x=input()...print... 可以使用递归调用以很少的字节开销进行循环。 但是,lambda具有一个很大的缺点,即只允许一个表达式,没有语句。特别是,这意味着没有类似的分配c=chr(x+65)。当一个人有一个长表达式需要将其值引用两次(或更多)时,这是有问题的。 类似E=enumerate的赋值可以在函数外部或作为可选参数,但前提是它们不依赖于函数输入。可选参数f=lambda n,k=min(n,0):...失败,因为n在定义时k评估输入时尚未定义输入。 结果是有时您会因为在lambda中重复一个长表达式而感到厌烦,因为替代方案是一个较长的非lambda。 lambda s:s.strip()+s.strip()[::-1] def f(s):t=s.strip();print t+t[::-1] 收支平衡点约为11个字符(详细信息),超过此字符您将切换到a def或program。将此与通常的长度为5的收支平衡点进行比较以得到重复的表达式: range(a)+range(b) r=range;r(a)+r(b) print s[1:],s[1:]*2 r=s[1:];print r,r*2 其他语言也有解决方法,例如Octave。有一些已知的Python技巧,但它们使用时间长,笨拙和/或用途有限。一种用于在lambda中模拟分配的简短通用方法将彻底改变Python高尔夫。 Python高尔夫球手有哪些方法可以克服或解决此限制?当他们看到一个长表达式在lambda中重复两次时,他们应该想到什么潜在的想法? 我的这个提示问题的目标是深入研究此问题,并: 编目并分析高尔夫变通方法以在lambda中进行假分配 探索新的线索以寻求更好的方法 每个答案都应说明解决方法或潜在的领先优势。
34 code-golf  tips  python 

9
“排序”算法
有一种“排序算法”,有时也称为Stalin排序,在该算法中,为了对列表进行排序,您只需从列表中删除元素,直到其按升序进行排序即可。例如清单 [1, 2, 4, 5, 3, 6, 6] 当使用斯大林排序进行“排序”时 [1, 2, 4, 5, 6, 6] 这三个被删除,因为它故障。 现在显然有许多方法可以删除元素以对列表进行排序。例如,任何少于两个元素的列表都必须进行排序,因此只要盲目地删除足够的元素,我们就可以对列表进行排序。既然是这种情况,我们只在乎斯大林排序可能的最长结果。 您的任务将是获取一个正整数列表,并输出可以通过从原始列表中删除元素而得出的最长排序(递增)列表的长度。那就是找到最长排序的(可能是非连续的)子列表的长度。 排序的列表可以连续多次具有相同的元素。除非程序本身为空,否则不需要支持空列表。 计分 您的答案将根据其可能的最长斯大林排序长度进行评分。程序将被解释为字节序列而不是字符序列,并且它们的顺序将是通过将字节解释为数字而产生的自然顺序。分数越低越好。 这不是代码高尔夫 这是一个简洁的工具,可帮助您对答案进行评分。 测试用例 [1, 2, 4, 5, 3, 6, 6] -> 6 [19, 2] -> 1 [3, 3, 4, 3] -> 3 [10] -> 1 [1, 2, 4, 9] …

30
一口价密封式拍卖
最后结果 比赛结束了。恭喜hard_coded! 一些有趣的事实: 在40920次拍卖中,有31600次(77.2%),第一轮的获胜者赢得了该拍卖中的最多回合。 如果例如机器人包括在比赛中,前九位地方不再只是改变AverageMine和heurist将交换自己的立场。 拍卖的前10名结果: [2, 2, 3, 3] 16637 [0, 3, 3, 4] 7186 [1, 3, 3, 3] 6217 [1, 2, 3, 4] 4561 [0, 1, 4, 5] 1148 [0, 2, 4, 4] 1111 [2, 2, 2, 4] 765 [0, 2, 3, 5] 593 [1, 1, 4, 4] …

7
高尔夫练习:Python [关闭]
这是在Python中练习高尔夫优化的挑战-可重复使用的技巧和捷径以剃除一些角色。许多人会熟悉Python高尔夫球手,并使用Python技巧中的常见想法。其中一些使用了Python特有的功能,除非您已经看过它们,否则可能不知道它们存在,因此,如果遇到问题,请仔细阅读提示。 目标: 有十个问题,每个问题都是供您优化的Python代码参考片段,并提供了代码描述。您的目标是将其重写为更短,但仍在功能上等效。 您试图最小化的分数是所有代码段的总代码长度。参考片段的长度为150。抢先注是最早的帖子。 发布答案:对于每个问题,请发布您的代码及其字符数。如果找不到更短的内容,则可以发布参考代码段。目的是在发布您的答案时不要看别人的答案。请扰乱标记每个单独的问题,包括单独的字符数。您可以显示总数。现在就可以随意破坏您的解决方案或发布新的,没有伪造的解决方案。 有关合法性的详细信息:功能对等意味着可以在不影响其行为的情况下将其替换为程序中的代码(忽略内存使用和运算符优先级之类的表达式)。表达式应产生与等效的值==。注意1.0==1==True。除非另有说明,否则您的代码不应有任何副作用。我不希望这些问题是特定于版本的,但以防万一,您可以为每个问题指定一个Python版本。 问题1:只要列表L中至少包含7个元素,就可以进行迭代 # 16 chars while len(L)>=7: 问题2:检查两个浮点x和y两者是否均为正。 # 11 chars x>0 and y>0 问题3:如果布尔b值为true,则删除的第一个元素L。否则,请保持不变。 # 12 chars if b:L=L[1:] 问题4:检查非空L数字列表中的所有元素是否相等。对于此问题,可以修改列表。 # 22 chars all(x==L[0]for x in L) 问题5:仅当一个数字已经包含该数字时,才将其添加n到列表末尾。LL # 16 chars if n in L:L+=[n] 问题6:表示浮点数的符号x:+1为正,0为0,-1为负。 # 20 chars abs(x)/x if x else 0 …
31 code-golf  python 

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.