编程拼图和代码高尔夫

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


10
网格路由战
注意:该挑战目前已死,因为我无法安装运行比赛所需的语言。如果其他人有时间和兴趣去做,我并不反对。 有关排行榜,请参见帖子底部。 这是一种半合作式的“山上之王”挑战,机器人在其中通过二维网格图构建路径。控制流量最大的节点的机器人是赢家。但是,实际上需要一个机器人的资源来建立一条连接路径,因此这些机器人必须在某种程度上协同工作。 游戏玩法 在下面,N > 0设为正在运行的机器人的数量。 网格 游戏在尺寸为2的二维整数网格上进行,其左下坐标为。每个坐标与具有出边的三个坐标,以及在其上方,其中,所述坐标-取模 。这意味着网格在东边和西边环绕。每个下坐标是一个源,每个上坐标是一个下沉。⌊4/3N2⌋ × ⌊4/3N2⌋(0,0)(x,y)0 ≤ y < ⌊4/3N2⌋-1(x-1,y+1)(x,y+1)(x+1,y+1)x⌊4/3N2⌋(x,0)(x,⌊4/3N2⌋-1) 下图显示了一个8 × 8网格。 图的每个顶点是不活动的,活动的或损坏的。所有顶点都开始处于非活动状态,并且可以被漫游器激活,然后漫游器将成为其所有者。此外,漫游器可能会破坏顶点,因此无法修复。 转单 转弯包括破坏阶段和激活阶段。在销毁阶段,每个漫游器可能会破坏一个不活动的顶点。该顶点从那时起就被破坏了,任何人都不能激活它。在激活阶段,每个漫游器可以激活一个不活动的顶点。从那时起,他们拥有该顶点,并且其他任何人都无法重新激活它。如果多个漫游器都在同一转弯上激活单个顶点,则它们可能拥有一个顶点。在每个阶段,顶点选择是同时完成的。 计分 一轮持续一圈。此后,该回合得分如下。从每个活动的源顶点,我们沿着活动的顶点执行一次随机的深度优先搜索(这意味着每个顶点的子级均以随机顺序访问)。如果找到从源到某个汇的路径,则对于该路径上的所有顶点,顶点的每个所有者都会获得一个点。N2N 整个游戏持续100回合,而总分最高的机器人就是赢家。如果分数差异太大,我可能会增加这个数字。 附加规则 不会弄乱控制器或其他提交内容。 每个参赛者最多提交一份。 在游戏开始时,除了一个私人文本文件外,没有其他外部资源被清除。 不要设计您的机器人来击败或支持特定的对手。 提供命令来编译和运行您的机器人。可以免费使用任何可用于Debian Linux的编译器/解释器。 控制器 该控制器是用Python 3编写的,可以在GitHub中找到。有关详细说明,请参见README文件。这是一个让您入门的API: 僵尸程序在每个回合开始时开始,并一直持续到回合结束。使用换行符终止的消息,通过STDIN和STDOUT与控制器进行通信。 BEGIN [num-of-bots] [num-of-turns] [side-length] 在开始时输入。 DESTROY [turn]在每个销毁阶段开始时输入。您的漫游器应VERTEX x,y以选择一个顶点或做出响应NONE。 BROKEN [turn] [your-choice] [other-choices]在每个销毁阶段结束时输入。其他机器人的顺序在每个游戏开始时都是随机的,但在此过程中保持不变。选项显示为x,y或N。 ACTIVATE [turn]和OWNED …

9
凯撒(Caesar-Cypher)-Mania
的凯撒Cypher支架是一个非常简单的置换密码其中每个字母是由固定的偏移(围绕Z的循环至A)移动。同样,我们也可以为一组可打印ASCII字符设置一个Caesar密码。这是从代码点0x20到0x7E的95个字符。对于给定的偏移量d,我们将代码点映射C到 (C - 32 + d) % 95 + 32 会将所有字符移动a d并从~到循环。超出此范围的字符(控制字符,如换行符,制表符和ASCII范围以外的字符)不受影响。 您要编写两个程序或函数(可能使用不同的语言),它们需要一个偏移量d和一个字符串。第一个程序应返回或打印输入的凯撒密码。第二个程序应返回或打印逆凯撒密码(即使用offset -d)。您可以通过STDIN,命令行参数或函数参数进行输入。 为了使事情变得更有趣,第二个程序必须是第一个程序的凯撒密码。也就是说,如果将第一个程序的源代码传递给自身,则对于某些非零偏移量d,输出必须是第二个程序。 这两个程序以及输入字符串都必须仅包含可打印的ASCII字符,换行符和制表符。程序都不能包含任何注释,也不能直接或间接读取其自己的源代码,文件名或进程ID。 这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。由于两个程序必须具有相同的大小,因此您只需要计算一次即可。

6
相互负的奎因
这是受“ 打印代码否定”和“打高尔夫球”的共同启发的。 考虑一个满足以下限制的矩形字符: 仅由可打印的ASCII字符组成 尺寸均大于1 每一行每一列至少包含一个空格。 每一行和每一列至少包含一个非空格字符。 例如,以下是有效的6x4矩形: %n 2e 1 g 3 &* __ 3 此矩形的负数定义为等长的矩形,所有空格均由非空格字符替换,所有非空格字符均由空格替换。上面矩形的负数可以是: f ^ 33 > 9 $ ^ }|Q' 任何不可空格打印的ASCII字符都可以用来替换空格。 任务 您的任务是编写一个带有矩形源代码的程序,该程序向自身输出有效的否定值。输出的负数也必须是与原始语言相同的有效程序,并且必须输出原始的源。 除了在任一输出末尾的单个尾随换行符(可选)外,不得添加或删除尾随空格。 任何程序都不允许读取其中任何一个的源代码;也不能假设为REPL环境。 计分 您的分数是代码尺寸的乘积(即,如果源代码在12 x 25的矩形中,则分数为12 * 15 = 180)。此外,对于注释中使用的每个字符,您的得分将增加2(如果您/* .. */在代码中使用一次,并且您的代码位于10 x 10的矩形中,则得分将为10 * 10 + 8 * 2 = 116)。 …

19
产生幸运数字
故事: 露西问乔治他的幸运数字是多少。经过深思熟虑,乔治回答说他有几个幸运数字。在短暂的困惑之后,露西问乔治他的第一个n幸运数字是什么。乔治然后要求您,他的伙伴,为他编写一个程序来为他完成工作。 挑战: 您将编写一个程序/函数,该程序/函数将从标准输入/函数参数接收一个字符串或整数n。然后,程序/函数将返回/输出第一个n 幸运数字。幸运数字通过一个筛子如下定义。 以正整数开头: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, ... 现在删除第二个数字: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, ... 剩下的第二个数字是3,因此请删除第三个数字: 1, …

7
用矩形覆盖区域
输入项 您在此挑战中输入的是整数对列表。它们表示平面上单位正方形的西南角,列表表示它们作为平面的子集的并集。例如清单 [(0,0),(1,0),(0,1),(1,1),(2,1),(1,2),(2,2)] 代表此图片中的红色集: 输出量 您的输出是一个整数四倍列表,代表平面的矩形子集。更明确地说,四元组(x,y,w,h)代表一个矩形,该矩形的宽度w > 0和高度为h > 0西南角在(x,y)。在每个单位正方形是某个矩形的子集,每个矩形是该区域的子集的意义上,矩形必须形成输入区域的精确覆盖,并且两个矩形只能在其边界处重叠。为了避免琐碎的解决方案,封面不得包含两个可以合并成更大矩形的矩形。 例如清单 [(0,0,2,1),(0,1,3,1),(1,2,2,1)] 代表法律保障 以上区域,而由 [(0,0,2,2),(2,1,1,1),(1,2,1,1),(2,2,1,1)] 是非法的,因为相邻的1乘1正方形可以合并: 规则 您可以提供完整的程序或功能。在合理范围内,输入和输出的精确格式并不重要。最短的字节数获胜,并且不允许出现标准漏洞。我们鼓励您对算法进行解释,并提供一些示例输出。 测试用例 U形区域: [(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(2,0),(2,1),(3,0),(3,1),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5)] 大三角形: [(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(0,9),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(3,0),(3,1),(3,2),(3,3),(3,4),(3,5),(3,6),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(5,0),(5,1),(5,2),(5,3),(5,4),(6,0),(6,1),(6,2),(6,3),(7,0),(7,1),(7,2),(8,0),(8,1),(9,0)] 带孔的正方形: [(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(1,9),(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(3,0),(3,1),(3,2),(3,4),(3,5),(3,6),(3,7),(3,8),(3,9),(4,0),(4,1),(4,2),(4,3),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,7),(5,8),(5,9),(6,1),(6,2),(6,3),(6,5),(6,6),(6,7),(6,8),(6,9),(7,0),(7,1),(7,2),(7,3),(7,4),(7,5),(7,6),(7,7),(7,8),(7,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,4),(9,5),(9,6),(9,7),(9,8),(9,9)] 断开区域: [(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(1,0),(1,1),(1,2),(1,3),(1,4),(1,6),(1,7),(1,8),(1,9),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),(2,7),(2,8),(2,9),(4,0),(4,1),(4,2),(4,4),(4,5),(4,6),(4,7),(4,8),(4,9),(5,0),(5,1),(5,2),(5,3),(5,4),(5,5),(5,6),(5,7),(5,8),(5,9),(6,0),(6,1),(6,2),(6,4),(6,5),(6,6),(6,7),(6,8),(6,9),(8,0),(8,1),(8,2),(8,3),(8,4),(8,5),(8,6),(8,7),(8,8),(8,9),(9,0),(9,1),(9,2),(9,3),(9,7),(9,8),(9,9),(10,0),(10,1),(10,2),(10,3),(10,4),(10,5),(10,6),(10,7),(10,8),(10,9)] 验证者 使用此 Python 2程序来验证您的解决方案。它从STDIN中获取元组列表(输入)和四元组列表(您的输出),并用逗号分隔。 我还编写了此 Python 2程序来生成图片,您也可以使用它。它从STDIN中获取元组或四元组的列表,并生成一个名为的文件out.png。它需要PIL库。如果需要,您也可以更改网格单元的大小和网格线的宽度。

9
确定给定方程为真的基数
给定3个整数,请确定前两个整数乘以第三个整数的最低可能基数。如果您想到了关于生命,宇宙和一切终极问题的答案,则6 * 9 == 42在Base 13中是正确的。 输入可以包括任何数字,其数字使用字符0-9,az和AZ,其中以a10为基数等于10,以10为基数等于Z61。 输入应该以您喜欢的任何方式输入(硬编码除外),并且您可以编写单个函数或整个程序。 必须考虑的最大基数是62,最小基数是2。 您可以假定前两个值小于第三个值。您还可以得出结论,最小基数比输入中的最高数字/字符大一个(例如,如果输入为3 1a 55,则最小基数将为Base 11,因为a它是最高数字)。 如果没有这样的基准,则返回您选择的垃圾值。 这是代码高尔夫,所以最短的代码获胜。 测试用例 6 9 42 --> 13 a a 64 --> 16 aA bB 36jk --> 41 2 3 20 --> <junk value> 10 10 100 --> 2

3
编写一个平方程序,输出已被“展开”的次数
对于一个大于1的奇数整数N,考虑一个正方形的文本块,N个字符,宽N个字符。 例如,让N = 5,文本为: MLKJI NWVUH OXYTG PQRSF ABCDE 请注意,这是从左下角逆时针旋转的字母(Z以外)。有点像卷起的地毯。 将文本“展开”顺时针旋转四分之一圈,因此FGHI与以下ABCDE结果处于同一水平: PONM QXWL RYVK STUJ ABCDEFGHI 展开操作可以再进行7次,直到文本变为一行: SRQP TYXO UVWN ABCDEFGHIJKLM UTS VYR WXQ ABCDEFGHIJKLMNOP WVU XYT ABCDEFGHIJKLMNOPQRS XW YV ABCDEFGHIJKLMNOPQRSTU YX ABCDEFGHIJKLMNOPQRSTUVW Y ABCDEFGHIJKLMNOPQRSTUVWX ABCDEFGHIJKLMNOPQRSTUVWXY 挑战 面临的挑战是编写一个N×N文本块的程序,该程序在重新排列为展开模式并运行时输出其“展开”四分之一圈的次数。 这里确实有两个比赛:(希望不会太凌乱) 用最小的N进行此操作(下降到N = 3的限制) 用最大N来执行此操作(无限制) 不会有一个可接受的答案,但是这些类别中的每个类别的获胜者都会收到我的至少50笔赏金。如果是平局,则最早的答案将获胜。 例 如果您的代码块是 MyP rog ram 按原样运行它应输出0。 …

5
洋葱编程
仅使用可打印的ASCII(十六进制代码20至7E),编写一个方形N×N 核心程序,不带注释,并由另外4个层围绕,创建一个(N + 8)×(N + 8)方形程序(N> 0) 。对于N = 3,布局(将由实际代码替换)如下所示: 44444444444 43333333334 43222222234 43211111234 4321CCC1234 4321CCC1234 4321CCC1234 43211111234 43222222234 43333333334 44444444444 C代表核心3×3程序。 1代表第一层,2代表第二层,依此类推。 程序始终采用一串用空格分隔的整数,例如0 -1 31 -1 2 2 2通过stdin或类似的字符串(它应该只是纯数字,没有引号或方括号或其他任何东西)。输出取决于运行布局的哪些部分。 有五种运行程序的方式(运行中包括换行符)。每个函数都与列表不同: 只运行核心: CCC CCC CCC 这将计算输入列表元素的绝对值的最大值,并CORE在新行上打印多次。如果最大值为0,则不会输出任何内容(可以使用换行符)。 该输出0 -1 31 -1 2 2 2将 CORE CORE ... 31次。 在第1层运行核心: 11111 1CCC1 …

9
ASCII钢琴上的音乐弦
标准钢琴上有88个键,可打印 95个ascii字符(十六进制代码20至7E): !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ (“字符”是指此后的任何可打印ASCII字符) 在此JSFiddle中,我利用了这一点,并制作了一个简单的语法,该语法使用AudioSynth生成钢琴音乐。(如果有人可以引导我获得一组可链接的真实钢琴音,我将不胜感激。) 输入字符串中的每个字符还() 01+-对应一个钢琴键: CHARACTER: ! " # $ % & ' * , . / 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P …

13
KOTH:交战城镇
最终结果在这里! 介绍 该游戏的灵感很大程度上来自Manu的《城镇游戏》。它发生在剑与魔法的世界中。统治整个大陆的国王刚刚去世,许多城市国家的君主现在正在争夺领土。您是其中一位领主,您的目标是征服和统治每个小镇。 原理 人们分为8类: Warlocks : Fighter (magic) Crusaders : Fighter (melee) Amazons : Fighter (range) Corsairs : Utility (steal, guard, transport) Bishops : Utility (convert, exorcize) Necromancers : Utility (resurrect) Architects : Utility (build) Peons : Resource (income, recruits) 游戏开始时,您将统治一个城镇。每个城镇有100人。您必须将它们分成这8个类别。 然后,基于回合的实际游戏开始。转弯包括12个阶段,其中7 个阶段是交互式的(向机器人询问命令)。下一个阶段开始于每个城镇都已执行上一个阶段时(阶段1:城镇1,城镇2,城镇3 ...;阶段2:城镇1,城镇2,城镇3 ...): 1. Raise Taxes - …

2
识别手写数字
您的任务是读取包含手写数字的图像,识别并打印数字。 输入:一个28 * 28灰度图像,以784个纯文本数字序列(从0到255)给出,以空格分隔。0表示白色,255表示黑色。 输出:识别的数字。 评分:我将使用MNIST数据库训练集中的1000张图像(转换为ASCII格式)测试您的程序。我已经(随机)选择了图像,但是不会发布列表。测试必须在1小时内完成,并将确定n-正确答案的数量。 n您的程序必须至少为200才有资格。如果源代码的大小为s,则您的分数将计算为s * (1200 - n) / 1000。最低分获胜。 规则: 您的程序必须从标准输入读取图像并将数字写入标准输出 没有内置的OCR功能 没有第三方库 没有外部资源(文件,程序,网站) 您的程序必须可以使用免费提供的软件在Linux中运行(如果需要,可以接受Wine) 源代码只能使用ASCII字符 每次修改答案时,请发布您的估计分数和唯一的版本号 输入示例: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 …

2
DNA:脱氧核糖核酸ASCII
给定碱基序列腺嘌呤,胞嘧啶,鸟嘌呤和胸腺嘧啶(编码为ACGT),您将产生相应DNA双链的ASCII艺术表示。 股线将垂直延伸。左侧的链是您输入的链。右手链将为其补充。对于不熟悉DNA的人,A与T和C配对G。此外,双链的每一侧都具有骨架结构,该骨架结构对于所有碱基都是相同的。因此,如果提供输入TAGCAT,则ASCII艺术的大规模结构将是: BTAB BATB BGCB BCGB BATB BTAB 其中B代表骨干。现在这些字母代表一个完整的分子,您将重现实际的分子结构。 基地 对每个碱基使用以下模板1(每个碱基与其互补碱基和两个主链分子一起显示): 1感谢Peter Taylor提供的ASCII布局帮助。 腺嘌呤 O O \\ / P / \ --O O / | < N NH2 ..... O * | \ // \ / \\ / | +--O // ---- ---- | | \ | // \\ / …

1
将二维列表旋转45度
任务 目标是编写一个将任何二维列表旋转45度的程序,返回二维列表之前,它必须能够做到一次最大7 * 45的旋转。该列表不一定是正方形或矩形。您必须在答案中包括示例的输出。它也必须适用于示例中未涉及的情况...圆,三角形等。您不能使用预先存在的功能来完成全部操作。 所有列表将至少具有一个对称轴(N,S,E,W)。所有子列表均假定为居中对齐。奇偶列表将向左移动以正确对齐。有关子列表中间的空白,请参见示例4。 输入 您的程序将使用一个l包含列表的变量,以及一个n指定列表旋转量的变量(n * 45)(n始终小于7,并且可以为0)。它必须接受l包含任何可打印数据类型(十进制,List,int,String []等的子列表),但是子列表一次仅包含一种数据类型。 您不需要接受控制台输入或使用stdin。指定的测试值的线l和n不包括在所述字符计数,但必须包括在所提交的代码。 输出值 您的程序必须以正确的方向打印列表,如果需要,可以使用NIL填充列表,但是不需要填充(但是如果填充了,您会得到一张笑脸)。子列表不必像示例中那样用换行符缩进或分隔。 例子 1个 IN l= [[0 , 1 , 2], [3 , 4 , 5], [6 , 7 , 8]] n=1 OUT [ [0], [3 , 1], [6 , 4 , 2], [7 , 5], [8] ] 2 …
22 code-golf 

3
绘制Epicyclogons
一个外摆线是曲线上的圆上的点使得滚卷围绕另一个圆。甲cyclogon是形状上的一个点正多边形使得因为它跨过平面滚动。一个外延多边形是一条曲线在一个正多边形上围绕另一个点滚动时所跟踪的曲线。 编写绘制给予epicyclogon程序r,r1,r2,n1,n2: r = number of clockwise revolutions rolling polygon makes around stationary polygon (any real number as limited by float values) r1 = distance from center of stationary polygon to each of its vertices (positive real number) r2 = distance from center of rolling polygon to each of its …

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.