编程拼图和代码高尔夫

编程益智爱好者和代码高尔夫球手的问答

5
任意长度的甲板完美洗净的循环长度
挑战 用最短的代码: 计算的任何大小的一副牌上的完美洗牌排列周期的长度Ñ(其中Ñ ≥2和Ñ是偶数)。 输出所有周期长度的2≤表Ñ ≤1000(Ñ偶数)。 请注意,定义完美混洗有两种基本方法。有一个out-shuffle,将第一张卡放在顶部,最后一张卡在底部,还有in-shuffle,将第一张和最后一张卡向中心移动一个位置。您可以选择进行混洗还是混洗。两者之间的算法几乎相同。 10张牌的随机洗牌次数:[1,2,3,4,5,6,7,8,9,10]↦[1,6,2,7,3,8,4,9,5, 10]。 10张牌的随机洗牌:[1,2,3,4,5,6,7,8,9,10]↦[6,1,7,2,8,3,9,4,10, 5]。 图形示例 在这里,我们看到20张卡片组的洗牌周期为18个步长。(这仅用于说明;您的解决方案不需要以图形方式输出周期。)另一方面,经典的52张卡座的洗牌周期只有8个步长(未显示)。 一个在洗牌 20卡甲板上具有仅6步骤的循环长度。 输出的表格示例 您的程序应该输出与此类似的内容,尽管您可以选择最喜欢的任何表格格式。这是为了洗牌: 2 1 4 2 6 4 8 3 10 6 12 10 14 12 16 4 18 8 20 18 22 6 24 11 26 20 28 18 30 28 32 5 34 …

7
非幂等Python
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 4年前关闭。 编写几行Python代码,X其中没有引用任何全局变量,例如 def method(): X print(a) method() 打印1但 def method(): X X print(a) method() 版画2。 所以,我讨厌被坚持己见,但看起来vars和locals实际上是在Python全局变量: def test_global_1(): global vars, locals vars = lambda: 2 locals = lambda: 3 def test_global_2(): print(vars()) print(locals()) test_global_1() test_global_2() 同样,人们似乎希望看到像这样的难题的客观获胜标准。代码长度在这里并不真正合适,所以也许我们可以为代码的各种新颖功能建立一个布朗尼积分系统?我不确定这些可能是什么,但这是一个开始: +1代表真正没有全局变量(否vars或locals) +1是第一个发布特定技术的人 +1为发布的最短解决方案 +1为仅涉及一条Python语句的解决方案 +1有趣的“ hacks”,例如加入词法非边界 +1不使用例外 …

10
通过填充空白填充空白
编写一个函数(例如placeAt),该函数需要一个非负整数数组和一个非负整数索引。它应该在给定的索引处放置1,可能将其他条目移动一个位置以腾出该位置,而0表示空白位置。 如果所需索引处的条目为0,则用1填充。 否则,请在索引左侧寻找最接近的0。将条目左移一位到该0处以腾出空间,然后用1填充索引。 如果左侧没有0,请执行相同的操作。 如果两者都不可行(即,如果没有0),则返回不变的数组。 这些项目的索引为0。函数名称可以是任何您想要的。 例子: (字母代表任何正整数。) [a, b, 0, c, d, 0] placeAt 2 // output [a, b, 1, c, d, 0] place 2 is 0, just fill [a, b, 0, c, d, 0] placeAt 3 // output [a, b, c, 1, d, 0] place 3 is filled, …
10 code-golf 

8
创建不同的总和
您应该编写一个程序或函数,该程序或函数接收一个整数作为输入,然后输出或返回两个总和为第一个整数的整数。 还有另一个要求:对于两个不同的输入,没有数字可以成为输出的一部分。 细节 您应该至少能够处理该范围-32768 .. 32767(包括该范围)的输入。 如果您的数据类型不能处理任意整数,那很好,但是从理论上讲,您的算法应适用于任意大小数。 例子 每个块以的格式显示正确或不正确解决方案的一部分input => output。 1 => 6 -5 2 => -2 4 15 => 20 -5 Incorrect, as `-5` is used in two outputs. -5 => -15 10 0 => 0 0 1 => 5 6 2 => -5 7 Incorrect, as `5 …
10 code-golf  number 

15
7 l8r比9好吗?(七点比九点晚吗?)
这是一个相当简单的高尔夫代码挑战。给定一个ASCII字符串,您的程序将把该字符串解析为两个字符串,它将对其求值。如果第二个字符串比第一个字符串“晚”,则将返回1;如果比第一个字符串“早”,则将返回-1;如果相同,则将返回0。弄清楚“稍后”和“更早”的含义,让我们看一下ASCII字符代码。您需要比较字符串中的每个字符,将每个字符视为一个数字。后来是指较大的数字,出现在较小的数字之后。字符串将使用连字符格式化,以分隔两个输入组。 看一下这个例子: 7-9作为输入应该返回1。 7转换为ASCII代码55,然后9转换为ASCII代码57。 如57数字后所示55,9晚于7。 另一个例子: LKzb-LKaj 作为输入应该返回 -1 为此的ASCII代码序列是76-75-122-98和76-75-97-106 这是一场高尔夫挑战赛,字节计数是对参赛作品进行评分的方式。 可以接受来自95个可打印ASCII字符的任何输入,但空格和连字符除外,除了分隔输入之外,都可以使用连字符。另外,不能保证字符串的长度相同。 祝好运! 编辑:更清楚地说,每个字符将被视为数字中的数字。在这个例子中LKzb-LKaj,虽然j是迟b,z迟于a,并且由于它是一个更显著的数字,它的优先级。提供的字符串将始终至少包含3个字符,从而从此问题的范围中消除了空字符串。 编辑:这是一些更多的测试用例,为您提供帮助: A-9 -> -1 11-Z -> -1 3h~J*-3h~J* -> 0 Xv-Y0 -> 1

5
高尔夫练习:Pyth [关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 2年前关闭。 这是在Pyth打高尔夫球时可以使用的技巧和优化的挑战。Pyth高尔夫球手可能会意识到其中涉及的许多技巧。但是,可能会涉及到不熟悉的方法和构造,因此如果遇到困难,请查看Pyth技巧以及Pyth角色参考。解决方案可以在这里进行测试。 目标:有8个问题,每个问题都有一个Pyth代码段供您优化。您的目标是创建等效但更短的对象。参考解决方案总共80个字节。您的目标是尽可能地击败它。 获胜者将参加以最小总字节数解决所有8个问题的提交。Tiebreaker是较早的帖子。 回答:除了总分,请破坏您的整个答案。您打算在提交自己的答案之前不要看别人的答案。 每个提交都应回答每个问题并给出相应的字节数,但是如果无法改进参考实现,请随意使用。 详细说明:如果一定值或输出的问题通话,q平等是需要的,所以1和!0是等价的。如果问题要求测试条件是否为真,则条件为真时输出必须为真,如果条件为假则输出为假,但不受此限制。您可能无法将true替换为false,或者将false替换为true。如果问题要求打印某些内容,则除了尾随换行符外,其他任何内容都无法打印。 自问题发布以来,所有答案都必须对最近的Pyth提交有效。 问题1:给定Q中的集合,以任何顺序输出包含Q元素的列表。 ; 3 bytes f1Q 问题2:输出列表[1, 1, 0, 0, 1, 1, 0]。 ; 9 bytes [J1JZZJJZ 问题3:给定Q中的正整数,请测试Q的所有数字是否均为正(而不是零)。 ; 7 bytes !f!TjQT 问题4:给定z中的字符串,请测试z是否包含引号- "或'。 ; 9 bytes |}\'z}\"z 问题5:将 Q = 1映射为“赢”,将Q = 0映射为“平局”,将Q = -1映射为“输”。 …
10 code-golf  pyth 

5
流放地图组合的路径
这个问题的特点是游戏“流放之路”中的机械师。在这个游戏中,有一些叫做“ MAPS”的东西,您可以用来打开高级区域,也可以将其中的三个结合起来以获得升级的区域。这个挑战的任务。升级组合如下: A Crypt Map 68 -> Sewer Map E Dungeon Map 68 -> Channel Map I Grotto Map 68 -> Thicket Map O Dunes Map 68 -> Mountain Ledge Map U Pit Map 68 -> Cemetery Map T Tropical Island Map 68 -> Arcade Map N Desert Map 68 …

8
打印英国国旗!
受到美国国旗印刷的启发!这是直接复制,但带有英国国旗,因为它具有一些对称性,但仍然相当复杂! 您面临的挑战是如何以尽可能少的字节产生以下ASCII艺术!将您的头部/屏幕(不要同时!)旋转90度以正确观看。 __________________________________________ |\ \XXXXXXXXXXXX 000000 XXXXXXXXXXXX//0/| |0\ \XXXXXXXXXXX 000000 XXXXXXXXXXX//0/ | |\0\ \XXXXXXXXXX 000000 XXXXXXXXXX//0/ | |\\0\ \XXXXXXXXX 000000 XXXXXXXXX//0/ /| |X\\0\ \XXXXXXXX 000000 XXXXXXXX//0/ /X| |XX\\0\ \XXXXXXX 000000 XXXXXXX//0/ /XX| |XXX\\0\ \XXXXXX 000000 XXXXXX//0/ /XXX| |XXXX\\0\ \XXXXX 000000 XXXXX//0/ /XXXX| |XXXXX\\0\ \XXXX 000000 XXXX//0/ /XXXXX| |XXXXXX\\0\ \XXX 000000 …

2
玩完美的4x4十六进制游戏
背景 Hex是在K×K六角形菱形菱形上玩的两人抽象策略游戏。菱形的两个相对的边都被涂成白色,另外两个被涂成黑色,两个玩家(黑与白)轮流将其颜色的标记放置在一个空置的瓷砖上。首先设法在其颜色的相对两侧之间建立路径的玩家是获胜者。众所周知,游戏无法以平局告终,并且不管棋盘大小如何,第一位玩家都有获胜的策略(有关详细信息,请参阅Wikipedia页面)。 任务 在此挑战中,我们将板子尺寸固定为K = 4,并将板子表示为以下网格。粗线表示相邻的图块。 您的任务是为第一个玩家制定一个获胜策略,您可以选择是黑人还是白人。这意味着无论对方球员采取何种合法行动,您的比赛都必须取得胜利。您的输入是一个游戏位置(板上的代币排列),而您的输出是合法移动,采用以下指定的格式。如果您想自己找到一个成功的策略,请不要阅读以下内容: 假设白人先行,则可能的制胜策略概述。 首先选择5。之后,如果您有从5到最底行的路径,或者黑色在任何时候都选择0或1,请选择0或1中的任何一个作为响应。如果黑色选择9或13,则选择10,然后选择14或15中的任何一个。如果黑色未选择9、13或14,则选择9,然后选择13或14中的任一个。如果黑色选择14,则通过选择15进行响应。接下来,如果空白则选择10;否则,选择10。如果黑色选择10,则响应为11。如果黑色选择6,则响应7,然后选择2或3中的任一个。如果黑色未选择6,请选择它,因此您具有从5到最底行的路径。 输入输出 您输入的字符串是16个字符WBE,代表白色,黑色和空白。它们代表了上面所列举的板块。您可以从以下选项中选择输入法(这也决定了您的输出法): 从STDIN输入,输出到STDOUT。 输入作为一个命令行参数,输出到STDOUT。 输入为16个单字符命令行参数,输出到STDOUT。 输入作为命名函数的参数,输出作为返回值。 您的输出代表您放置下一个标记的磁贴,因为该旋转了。您可以从以下输出格式中选择: 从零开始的索引(如上图所示)。 一个基于索引的索引。 输入字符串与一个E由两者的替代W或B您选择您的播放器。 规则 您的策略必须是确定性的。您不需要使用您的策略来正确处理空局无法到达的游戏位置,或已经为任一位玩家赢得的位置,您可能会因此而崩溃。相反,在使用您的策略可以到达的板上,您必须返回合法举动。 这是代码高尔夫球,因此最低的字节数为准。不允许出现标准漏洞。 测试中 我已经编写了一个Python 3控制器来验证条目,因为手工操作非常繁琐。你可以在这里找到它。它支持前三种输入格式和Python 3函数(必须将其他语言的函数包装到程序中),所有三种输出格式以及这两种播放器。如果某策略没有获胜,它将输出发现的失败游戏,因此您可以调整程序。

2
概率-您能走多高?
我之前曾问过一个问题,该如何快速准确地计算概率。但是,显然,提供封闭式解决方案太容易了!这是一个更困难的版本。 这项任务是关于编写代码以准确,快速地计算概率。输出应该是精确的概率,以最简化的形式写为分数。那是它永远不应该输出4/8,而应该输出1/2。 对于某个正整数n,请考虑一个长度为1s和-1s的均匀随机字符串,n并将其称为A。现在连接到A其自身的副本。那就是A[1] = A[n+1]从1开始索引,A[2] = A[n+2]依此类推。 A现在有长度2n。现在还考虑长度的第二随机串n,其第一n值是-1,0或1的概率是1 / 4,1 / 2,1/4每并调用它B. 现在考虑不同的Bwith 的内积。A[1+j,...,n+j]j =0,1,2,... 例如,考虑n=3。对于可能的值A,并B可能会A = [-1,1,1,-1,...]和B=[0,1,-1]。在这种情况下,前两个内积是0和2。 任务 对于每个j,从j=1您的代码开始,您的代码应该输出每个第一个j+1内积为零的概率n=j,...,50。 复制MartinBüttner生成的表,j=1我们得到以下示例结果。 n P(n) 1 1/2 2 3/8 3 7/32 4 89/512 5 269/2048 6 903/8192 7 3035/32768 8 169801/2097152 得分了 您的分数是j我的计算机在1分钟内完成的最大代码。为了澄清一点,每一个j都花一分钟。请注意,上一个链接的问题中的动态编程代码将很容易做到这一点j=1。 抢领带 如果两个条目获得相同的j分数,则获胜的条目将是n我机器上一分钟内得分最高的条目j。如果两个最佳作品在此标准上也相等,那么获胜者将是第一个提交的答案。 语言和图书馆 您可以使用任何喜欢的免费语言和库。我必须能够运行您的代码,因此请尽可能提供有关如何在Linux中运行/编译代码的完整说明。 我的机器时间将在我的机器上运行。这是在AMD FX-8350八核处理器上的标准ubuntu安装。这也意味着我需要能够运行您的代码。 获奖作品 j=2在Mitch Schwartz的Python中。 …

4
棋盘上的棋子太多
给定一个整数2n,找到在2n x 2n的棋盘上可以排列2n ^ 2个黑色棋子和2n ^ 2个白色棋子的可能方式的数量,这样就不会有其他棋子攻击对方。 黑色的棋子只能攻击白色的棋子,反之亦然。 遵循通常的棋牌进攻规则,即白色棋子在对角线前面立即攻击正方形,而黑色棋子在对角线后立即攻击正方形(如白色观察者所见)。 所有旋转,反射算作不同的。 可以在120秒内输出2n最大值的所有可能配置的程序将获胜。(尽管欢迎所有程序) 例如,爱丽丝的程序可以在120秒内处理n = 16,而鲍勃的程序可以在同一时间内处理n = 20。鲍勃赢了。 平台:Linux 2.7GHz @ 4 CPU

5
计数交叉词
考虑以下标准的15×15 填字游戏拼图网格。 我们可以通过将#方块和(空格)用于白方块来用ASCII艺术表示。 # # # # # # # ### ## ## ## # # # # ## ## ## ### # # # # # # # 给定上述ASCII艺术格式的填字游戏网格,请确定其包含多少个单词。(以上表格有78个字。碰巧是上周一的《纽约时报》难题。) 单词是垂直或水平延伸的两个或两个以上连续空间的组。单词以块或网格边缘开始和结束,并且始终从上到下或从左到右运行,从不对角或向后。请注意,单词可以跨越拼图的整个宽度,就像上面拼图的第六行一样。一个单词不必与另一个单词相连。 细节 输入将始终是包含字符#或(空格)的矩形,并且行之间用换行符(\n)分隔。您可以假定网格由任意2个不同的可打印ASCII字符(而不是#和)组成。 您可以假定存在可选的尾随换行符。尾随空格字符确实会计数,因为它们会影响单词的数量。 网格并不总是对称的,它可能是所有空格或所有块。 从理论上讲,您的程序应该可以在任何大小的网格上工作,但是对于这一挑战,它永远不会大于21×21。 您可以将网格本身作为输入或包含网格的文件的名称。 从stdin或命令行参数获取输入,然后输出到stdout。 如果愿意,可以使用命名函数而不是程序,将网格作为字符串参数,然后通过stdout或function return输出整数或字符串。 测试用例 输入: # # # 输出:(7每个空格之前有四个空格#。如果删除每个数字符号,结果将是相同的,但是Markdown将从其他空行中删除空格。) 输入: ## # ## …

5
准确快速地计算概率
[这是一个精确计算概率的伙伴问题] 这项任务是关于编写代码以准确,快速地计算概率。输出应该是精确的概率,以最简化的形式写为分数。那是它永远不应该输出4/8,而应该1/2。 对于某个正整数n,请考虑一个长度为1s和-1s的均匀随机字符串,n并将其称为A。现在将A其串联为第一个值。就是说A[1] = A[n+1]从1 A开始的索引 现在具有length n+1。现在还考虑长度的第二随机串n,其第一n值是-1,0或1的概率是1 / 4,1 / 2,1/4每并调用它B. 现在考虑的内积A[1,...,n]和B和的内积A[2,...,n+1]和B。 例如,考虑n=3。对于可能的值A,并B可能会A = [-1,1,1,-1]和B=[0,1,-1]。在这种情况下,两个内积是0和2。 您的代码必须输出两个内积均为零的概率。 复制MartinBüttner制作的表,我们得到以下示例结果。 n P(n) 1 1/2 2 3/8 3 7/32 4 89/512 5 269/2048 6 903/8192 7 3035/32768 8 169801/2097152 语言和图书馆 您可以使用任何喜欢的免费语言和库。我必须能够运行您的代码,因此请尽可能提供有关如何在Linux中运行/编译代码的完整说明。 任务 您的代码必须以开头,n=1并在单独的一行上为每个递增的n提供正确的输出。10秒后应停止。 比分 分数只是在n计算机上运行10秒后代码停止之前达到的最高分数。如果平局,获胜者将是最快获得最高分的人。 条目表 n = 64在Python中。Mitch Schwartz的第1版 n = 106在Python中。版本Mitch …

3
超音波多米诺瓷砖
任务 编写一个程序,从STDIN或作为命令行参数读取三个整数m,n,打印出所有可能的矩形为m×n且由2×1和1×2 Domino组成的平铺,最后打印有效平铺的数量。 单个平铺的多米诺骨牌必须用两个破折号(-)表示2×1,用两个竖线(|)表示1×2的多米诺骨牌。每个平铺(包括最后一个平铺)都必须紧跟换行符。 出于评分目的,您还必须接受来自STDIN的标志或作为命令行参数的标志,该标志使您的程序仅打印有效拼贴的数量,而不打印拼贴本身。 您的程序不得超过1024个字节。它必须适用于所有输入,使得m×n≤64。 (灵感来自于打印所有4x6矩形的多米诺骨牌。) 例 $ sdt 4 2 ---- ---- ||-- ||-- |--| |--| --|| --|| |||| |||| 5 $ sdt 4 2 scoring 5 计分 您的分数取决于设置了标志的输入8 8的程序执行时间。 为了使此代码成为最快的代码,而不是最快的计算机挑战,我将在自己的计算机上运行所有提交的文件(英特尔酷睿i7-3770、16 GiB PC3-12800 RAM)以确定官方成绩。 请留下有关如何编译和/或执行代码的详细说明。如果您需要使用特定版本的语言的编译器/解释器,请对此声明。 如果发生以下情况,我保留不对提交内容进行评分的权利: 我的操作系统(Fedora 21,64位)没有免费的(如在啤酒中)编译器/解释器。 尽管我们竭尽全力,但是您的代码无法正常工作和/或在我的计算机上产生不正确的输出。 编译或执行需要一个多小时。 您的代码或唯一可用的编译器/解释器包含对的系统调用rm -rf ~或同样令人讨厌的东西。 排行榜 我对所有提交进行了重新评分,以10,000次迭代进行编译,并以100至10,000次迭代执行(取决于代码的速度),并在循环中运行编译和执行(取决于代码的速度)并计算平均值。 结果是: User Compiler …

2
拜访每个漂移跟踪器
您的工作是在最短的时间内更换许多浮鱼追踪设备上的电池组。您必须将基地留在基地直升机中,并访问每个跟踪器一次,然后返回基地。 找出最佳路线是很困难的,但是还有一个额外的困难!每个跟踪器都有一个漂移速度(假设一天中的速度恒定)。 这是标准的旅行业务员问题,增加了移动节点的难度。找到有效的游览路线应该很容易。主要的挑战是开发一种算法来找到一个接近最佳的行程。我预计在当前N = 300的情况下不可能找到完美的旅行(但我希望证明事实是错误的)。 规则 您的程序将在STDIN上或通过命令行参数被提供一个跟踪器数据字符串。您应该找到一条路线,该路线将完全访问每个跟踪器一次并返回基准站。输出应为空格分隔的跟踪器ID:时间对列表。 位置以厘米(cm)为单位。 时间以秒为单位,从t = 0开始。 速度以厘米/秒为单位。 每个跟踪器ID为1至8个大写字母。 ID为“ BASE”的基地位于(0,0)。 输入和输出的所有数字值都使用带符号的整数。 输入是一个或多个空格或斜杠分隔的跟踪器。 每个跟踪器将有ID:x,y,vx,vy格式(例如:A:566,-344,-5,11) 在时间t,跟踪器将在(x+vx*t, y+vy*t)。 直升机的速度不得超过5000厘米/秒(180公里/小时)。 输出应为按时间顺序分隔的空白访问。 每次访问应该是在ID:时间格式(例如:A:5723) 在输出的最后一次访问必须是基础(如:BASE:6120) 如果在同一位置有多个跟踪器,则它们之间的移动时间为零。 禁止使用标准漏洞。 示例数据集 A:77000,88000,-120,80 B:52000,-12000,0,-230 C:-140000,-23000,-270,110 非最佳解决方案示例: A:30 B:60 C:120 BASE:160 请注意,这A:30 B:60 C:120 BASE:130将是无效的,因为直升机必须以17268厘米/秒的速度飞行,才能在10秒内回到基地。 测试数据集 AA:-164247,-378265,182,113 AB:-1494514,-385520,-25,80 AC:-744551,832058,-13,-123 AD:-930133,1598806,97,177 AE:-280777,-904936,-48,305 AF:-855362,-10456,-21,-89 AG:880990,154342,175,-100 AH:-319708,-623098,172,-17 AI:620018,-626908,-19,-164 AJ:-990505,164998,18,-120 …

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.