编程拼图和代码高尔夫

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

8
给我你的疲倦,贫穷,拥挤的群众向往自由呼吸
自由女神像基座上的一块青铜牌上陈列着艾玛·拉扎鲁斯(Emma Lazarus)的诗“ 新巨像 ”,其中一部分写着: 给我你的疲倦,你的贫穷, 你拥挤的群众,向往自由的呼吸, 你茂密的岸边那可怜的垃圾。 把这些无家可归的暴风雨寄给我, 我把灯抬到金门旁边! 为了简化针对这一挑战的诗的这一部分,我们将其全部大写,并用斜杠(/)替换换行符,并保持逗号和其他标点符号不变: GIVE ME YOUR TIRED, YOUR POOR,/YOUR HUDDLED MASSES YEARNING TO BREATHE FREE,/THE WRETCHED REFUSE OF YOUR TEEMING SHORE./SEND THESE, THE HOMELESS, TEMPEST-TOST TO ME,/I LIFT MY LAMP BESIDE THE GOLDEN DOOR! 我们将此字符串称为S。它具有md5 hash 8c66bbb9684f591c34751661ce9b5cea。您可以选择假定它具有尾随换行符,在这种情况下,md5哈希为0928ff6581bc207d0938b193321f16e6。 编写一个包含单个字符串的程序或函数。当字符串为S时,按顺序输出,每行一个,描述这首诗所描绘的人的类型的六个短语描述了Lady Liberty要求: TIRED POOR HUDDLED MASSES …

5
项链劈开问题
背景 我受到3Blue1Brown最近关于项链劈裂问题(或他所说的是被盗的项链问题)及其与Borsuk-Ulam定理的关系的视频的启发。 在这个问题上,两个小偷偷走了一条有价值的项链,该项链由几种不同类型的珠宝组成。每种珠宝的数量都是偶数,盗贼希望在两种珠宝中平均分配每种珠宝。要注意的是,他们必须这样做,方法是将项链分成若干个连续的片段,并将片段分配在两个片段之间。 这里是表示4种宝石类型的示例S,E,D,和R(对于蓝宝石,祖母绿,金刚石和红宝石,分别地)。假设项链如下: [S,S,S,E,S,D,E,R,S,R,E,S,S,S,D,R,E,E,R,E,D,E,R,R,D,E,E,E] 有8蓝宝石,10祖母绿,4钻石和6红宝石。我们可以如下分割项链: [[S],[S],[S,E,S,D,E,R,S],[R,E,S,S,S,D,R,E,E,R,E,D,E],[R,R,D,E,E,E]] 然后,如果我们将第一,第三和第五部分分配给一个小偷,而将第二和第四部分分配给另一个小偷,则每一个都会以4蓝宝石,5祖母绿,2钻石和3红宝石: [S], [S,E,S,D,E,R,S], [R,R,D,E,E,E] [S], [R,E,S,S,S,D,R,E,E,R,E,D,E], 使用 0 -indexing,这些削减发生在index处[1,2,9,22]。 目标 事实证明,这样的公平划分总是可以使用最多 n切割,这n是珠宝类型的数量。您的任务是编写一个完整的程序或函数,该程序或函数将一条项链作为输入,并输出最小的此类分割(最少的切割次数)。 输入项 输入可以采用任何方便的格式。项链应该是一系列珠宝,仅此而已;例如整数列表,字典,字典中的键代表珠宝类型,而值代表索引列表。您可以选择包括项链的长度或不同珠宝类型的数量,但您不应输入任何其他信息。 您可以假设输入的项链有效。您无需处理给定类型的珠宝数量奇数或项链为空的情况。 输出量 同样,输出可以采用任何方便的格式。例如,片段列表,切割位置列表,带有表示两个小偷的键的字典以及片段列表的值等。片段可以通过其起始索引,结束索引,连续索引列表,珠宝列表,它们的长度等。您可以使用0-或1-索引。如果顺序对您的格式不重要,则您的输出可以按任何顺序排列。以下是上述输出的几种不同格式: list of segments: [[S],[S],[S,E,S,D,E,R,S],[R,E,S,S,S,D,R,E,E,R,E,D,E],[R,R,D,E,E,E]] list of cuts: [1,2,9,22] list of lengths: [1,1,7,13,6] dictionary: {'thief1' : [(R,R,D,E,E,E),(S),(S,E,S,D,E,R,S)], 'thief2' : [(S),(R,E,S,S,S,D,R,E,E,R,E,D,E)]} 请注意,顺序在片段列表(小偷之间的片段交替)和长度列表(以识别片段)中很重要,但在剪切片段或字典中则不重要。 编辑:格雷格·马丁(Greg Martin)指出,这些将不是有效的输出,因为可以通过两次削减获得公平的划分 测试用例 [1,2,1,2,1,3,1,3,3,2,2,3] -> [[1,2,1],[2,1,3,1],[3,3,2],[2,3]] …

4
Brachylog打高尔夫的秘诀
Brachylog是一种最近开始在代码高尔夫中崭露头角的语言(并且刚刚获得了Terser语法的重大更新)。像Prolog一样,它的优点是通常仅通过对问题的外观进行足够准确的描述即可解决问题(通常通过蛮力),该功能意味着在正确的挑战下,它通常可与挑战相提并论。顶级高尔夫语言(众所周知,它有时会打败Jelly)。 您对Brachylog打高尔夫球有什么秘诀(即编写最短的程序)?这主要是在寻找特定于Brachylog的建议,而不是适用于多种语言的建议。(有关声明性语言打高尔夫球的小技巧,在这里可能更合适,这取决于他们对Brachylog以外的其他语言有多少应用程序,尽管另请参阅Prolog中的打高尔夫球技巧。)
19 code-golf  tips 

23
帮助经销商重建甲板
发牌人已经草率,不知道他/她的卡座中包含哪些卡以及缺少哪些卡,您能帮助他/她吗? 一个完整的牌组由52张扑克牌组成,即: 牌组中的每种颜色(心形,钻石,黑桃,球棒)都包含: 数字[2-10] 杰克 女王 国王 王牌 任务 您的程序将从STDIN读取卡座的内容,直到读取换行符为止。您可以假定输入将采用“ nX nX nX nX”等形式,其中: n-在[2-10]之间或 “ J”,“ Q”,“ K”或“ A” 之间的任何数字。(您只能假设大写字母适用于非数字字符) X-以下任意一项:“ H”,“ D”,“ S”,“ C”(您只能使用大写字母) 哪里: 'J'=千斤顶 'Q'=女王 'K'=国王 'A'=王牌 和 'H'=心 'D'=钻石 'S'=黑桃 'C'=俱乐部 您可以假设输入中没有重复项。 然后,您的程序必须以与输入(“ nX nX nX”)相同的方式将卡座中丢失的卡片打印到STDOUT上,或者如果提供了全部52张卡片,则打印“无丢失的卡片”。卡输出的顺序没有限制。 输入示例: 9H AH 7C 3S 10S KD JS 9C …
19 code-golf 

30
让我更多!
让我更多!我告诉你宽度,全麦饼干的数量,巧克力的数量和棉花糖的数量。一个例子: 输入: 宽度:10 格雷厄姆:3 巧克力:2 棉花糖:1。 输出: GGGGGGGGGG GGGGGGGGGG GGGGGGGGGG CCCCCCCCCC CCCCCCCCCC MMMMMMMMMM GGGGGGGGGG GGGGGGGGGG GGGGGGGGGG 它是那么容易?嗯...是的 请注意,输入应该是函数或程序的参数列表,而不是字符串。您可以选择第一个是Width,然后选择Graham,但是任何顺序都可以。 完整的测试用例,如果您有兴趣。 堆栈代码段(用于测试等) 这是为了测试输出。 var smore = function(width, graham, chocolate, marshmallow){ return ("G".repeat(width) + "\n").repeat(graham) + ("C".repeat(width) + "\n").repeat(chocolate) + ("M".repeat(width) + "\n").repeat(marshmallow) + ("G".repeat(width) + "\n").repeat(graham); }; Snippetify(smore); <script src="https://programmer5000.com/snippetify.min.js"></script> Width: <input …

12
字谜因素
在最近发生的QI中,将142857的前5个倍数描述为原始数字的字谜。当然,只要对数字有足够的了解,任何人都将知道这些数字实际上是循环的,而不仅仅是字谜。但这让我思考。 请编写一个程序或函数,以输出所有六位数或更少的数字,这些数字或数字具有其自身的字谜。该列表应以以下数字开头: 3105 (divisible by 1035) 7128 (divisible by 1782) 7425 (divisible by 2475) 8316 (divisible by 1386) 8712 (divisible by 2178) 9513 (divisible by 1359) 9801 (divisible by 1089) 如果愿意,您可以找到带有字谜的数字,该字谜是该数字的适当因数,但请注意从字谜中排除前导零。 这是代码高尔夫,因此以字节为单位的最短代码不会破坏任何标准漏洞。

9
不见不散!
每个人都听说过“存在或存在”一词。因此,我认为现在是应对这一挑战的时候了。 输入项 您将使用完整的绝对目录地址作为文本,通过STDIN或等效输入。 输出量 如果目录地址存在且有效,则程序将自身移动到计算机上的该文件夹。如果不是,它将通过STDOUT或等效的以下平方输出: +-+ | | +-+ 要求 不允许出现标准漏洞。 如果不可避免,您可以输出一个尾随换行符。 如果程序被移动,则它不会产生任何输出。 您的程序无论移到何处都必须能够再次运行。 假设条件 您可以假定输入永远不会为空。 您可能会假设该目录永远不会在文件末尾附加文件名。 您可以假设输入目录永远不是当前目录。 您可能会假设您有权在任何地方编写和执行。 这是代码高尔夫球,因此最短答案以字节为单位。

1
打印对不起板
我只是在玩棋盘游戏,对不起!与一些人一起,我意识到我可以从中解决一些有趣的挑战。这很简单。 您的任务仅仅是输出对不起的电路板的ascii艺术版本,将片段放置在我告诉您的位置。 眼镜 首先,这是实际抱歉的图片!董事会参考: 空板看起来像: # > - - o # # # # > - - - o # # # # S v o # H # # # # # | | # | | # S o | # # ^ H # # # # …

2
解决冰迷宫
冰迷宫一直是我最喜欢的主食之一的神奇宝贝,因为他们的神奇宝贝黄金和白银登场比赛。您的任务是编写一个解决这些类型问题的程序。 顾名思义,冰迷宫主要由冰组成。一旦玩家在冰上向某个方向移动,他们将继续向该方向移动,直到与某个障碍物碰撞为止。还有可以自由移动的土壤,将阻止任何玩家在其上移动。最后的障碍是石头。石头不能与玩家占据相同的空间,如果玩家尝试进入其中,他们将停止移动,然后才能移动。 您将收到一个二维的值容器,例如列表列表或用换行符分隔的字符串,其中包含3种地板类型(冰,土壤和石头)中的每种的3个不同值。您还将收到两对(或其他等效的两个值容器),它们指示迷宫中的起点和终点坐标。这些可以是零或一个索引。 您必须输出一个动作列表(在N,E,S,W上有两个双射的4个不同值),这将导致玩家在执行时到达终点。 输入始终在迷宫周围有一个封闭的石头周界,因此您不必担心玩家退出迷宫 这是代码高尔夫球,因此最少的字节获胜 测试用例 这里.代表冰,~代表土壤,O代表石头。坐标为1索引。解决方案中的每个字母代表以该字母开头的方向(例如N=北) 输入项 OOOOO OO.OO O...O OOOOO Start : 3,3 End : 3,2 输出量 N 输入项 OOOOOOOOOOOOOOOOO O........O.....OO O...O..........OO O.........O....OO O.O............OO OO.......O.....OO O.............OOO O......O.......~O O..O...........~O O.............OOO O.......O......OO O.....O...O....OO O..............OO OOOOOOOOOOOOOO~~O OOOOOOOOOOOOOOOOO Start : 15,12 End : 16,8 输出量 N,W,N,E,N,E,S,W,N,W,S,E,S,E,N,E,N 输入项 OOOOOOOOOOOOOOOO O~~~~~OOOOO~~~~O O~~O~OOOOOOO~~OO O...O..........O …

6
数字符-点点滴滴!
简单的部分:给定仅包含可打印ASCII字符(空格-波浪号)的输入字符串,计算每个字符的出现次数并以任何方便的格式返回结果。字符串的结果a%hda7a应类似于:a:3, %:1, h:1, 7:1, d:1。排序是不必要的,定界符和格式是可选的,但必须易于理解哪个数字对应哪个字符。输入的字符串中不得包含字符(a:3, b:0, c:0, d:1, ...不正确)。 真正的挑战: 将代码中的每个字符转换为8位二进制数(如果使用的是UTF-16或类似格式,则转换为16位),并枚举每个字符0。 对于每个字符(i是枚举数),- i%7bit 1 必须为1。这些位从右开始编号。其他所有位都可以是您想要的。 让我们以以下代码为例: [f]-xif)#f 将其转换为二进制,我们得到下面的数组。第一个数字(表示[有1在第0位置,这样一方面是OK。第二个数字(表示f有1在第1'位置,所以,一个是OK了。继续这样下去,你会看到上面的代码是有效的。 C 76543210位号 --------- ---------- [0101101 1 0-确定 f 011001 1 0 1-确定 ] 01011 1 01 2-确定 -0010 1 101 3-好 x 011 1 1000 4-好 i 01 1 01001 5-好 f …

1
制作一个正则表达式
编写一个至少可以在2种正则表达式版本(或版本)中运行的正则表达式,并在其运行的每种版本(或版本)中匹配一个不同的字符串。 在此挑战中要匹配的字符串是Ubuntu代码名称的第一个单词,下面列出。您的正则表达式必须与列表顶部匹配。也就是说,如果您的正则表达式可以使用3种样式,则必须与Warty Hoary和匹配Breezy,而不是其他。 Warty Hoary Breezy Dapper Edgy Feisty Gutsy Hardy Intrepid Jaunty Karmic Lucid Maverick Natty Oneiric Precise Quantal Raring Saucy Trusty Utopic Vivid Wily Xenial Yakkety Zesty 17.10 18.04 18.10 19.04 19.10 ... 如果您的正则表达式可以使用超过26种口味,则可以匹配Ubuntu版本号。从17.10开始,对于每个新口味,如果第二个数字为04,则将其更改为10,然后将第一个数字递增,将第二个数字更改为04。 在每种形式中,您的正则表达式应仅匹配假定的字符串,而不匹配其他字符串(不限于代码名称)。尾随换行符无关紧要。这意味着您的正则表达式可以只匹配不带尾随换行符的字符串,仅匹配带尾随换行符的字符串,或者匹配两者。而且不必在不同口味上保持一致。您可以假定输入使用可打印的ASCII(末尾的换行符除外,如果有的话)。 您的分数是(代码长度+10)/((风味数)^ 2)。最低分获胜。

14
您的基数为1-2-3-Tribonacci的二进制数为基数的基数
背景 1-2-3-Tribonacci序列 想象一下,您可以通过将标准迭代公式替换为以下内容来制作斐波那契数列: 基本上,不是将最后两个求和以获得下一个,而是将最后三个求和。这是1-2-3-Tribonacci序列的基础。 布朗的准则 布朗的准则状态,您可以将任何整数值表示为序列成员的总和,条件是: 对于所有n大于1, 这对挑战意味着什么 您可以将任何正整数描述为由以下初始条件形成的1-2-3-Tribonacci序列的成员之和: 对于此序列中的每个值,这被称为项之间的比率永远不会大于2(该比率的平均值约为1.839)。 如何在此数字表示系统中编写 假设您使用小尾数表示法。像这样排列序列的成员: 1 2 3 6 11 20 37 68 然后,将您要表示的数字表示出来(对于我们的测试,假设是63),然后找到给定的1-2-3-Tribonacci的值总和为63 (首先使用最大值!)。如果数字是总和的一部分,则在其下放一个1,否则不放0。 1 2 3 6 11 20 37 68 0 0 0 1 0 1 1 0 您可以对任何给定的整数执行此操作-只需先确认您使用低于给定输入的最大值即可! 定义(最终) 编写程序或函数,以给定n介于1和您的语言最大值之间的正整数输入(以任何标准基数编写)来执行以下操作: 将值转换为定义的1-2-3-Tribonacci的数字表示形式。 使用这种类似于二进制的表示形式,并像对待二进制一样读取它。这意味着数字保持不变,但是它们的含义改变了。 将此二进制数字转换为原始数字的基数。 输出或返回此新号码。 但是,只要输出有效,就不需要执行以下步骤。如果您神奇地找到了一些更短的公式(在数学上是等效的),请随时使用。 例子 令函数f为定义所描述的函数,并[]表示所采取的步骤(为小端,尽管无关紧要)(您无需遵循此过程,这只是描述的过程): >>> f(1) …

20
对前n个偶数斐波纳契数求和
似乎还没有比赛。 任务很简单。加上n斐波那契数列的第一个偶数,然后输出结果。 这是由OEIS A099919提供的,除了序列以fib(1) = 0代替移位了一个fib(1) = 1。 这是代码高尔夫。最低字节数获胜。 例子 n sum 1 0 2 2 3 10 4 44 5 188 6 798 7 3382 8 14328 9 60696 有关

11
作弊循环奎因
概念 编写一个程序,以其编程语言输出代码。该代码在执行时必须输出原始程序。 规则 由于这是一个骗子,您可以阅读原始源代码。 第一个输出程序必须使用与原始程序相同的语言。 您可能没有输出常规的奎因。这两个程序必须不同。 有标准漏洞。 这是代码高尔夫球,因此最短的答案会获胜,但是不会选择它。
19 code-golf  quine 

26
查找最小的文件
目标: 创建一个程序以查找当前文件夹中的最小文件。 文件大小可以字节或字符为单位。 如果多个文件具有相同的大小,则可以选择一个或全部显示。 您可以假定文件夹中至少有一个文件,并且没有文件的大小为0。 假设可以使用您所使用的语言加载文件夹中的所有文件。 假设当前目录中没有文件夹。 输入: 该程序不应接受用户的任何输入,除非: 如果您的语言没有“当前文件夹”,则可能会询问用户文件夹名称/路径。 如果您的语言无法直接访问计算机上的文件,则可能允许用户上载文件。(例如JavaScript) 输出: 应该显示最小文件的名称。 只要清楚地选择了哪个文件,就允许使用前导/尾随符号。 (打印所有文件的列表是违反规则的)。 笔记: 不允许使用标准漏洞。 您不能修改/创建/删除文件夹中的文件来更改结果。 这是代码高尔夫球;最短答案(以字节为单位)获胜。

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.