编程拼图和代码高尔夫

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

3
单词搜索求解器
我昨天想知道我是否可以编写一个程序来梳理给定的单词搜索并输出答案。实际上,这非常简单。现在我想知道我们能得到多小。 规则 您的第一个输入是一个字符串或n行的集合,每行长度为n个字符 您的第二个输入是要在拼图中找到的任何格式的单词列表 搜索列表中的所有单词都一定会在拼图中 单词可以在四个基本方向中的任何一个方向上定位,也可以对角线前后移动 拼图中仅包含大写AZ字符 您的代码必须找到搜索字符串中的每个单词,并输出起始字母的坐标位置,其中0,0是左上角的字符。 如果您找到同一单词的多个实例,则可以根据需要进行处理。多次输出或仅输出一次,由您决定 示例/测试用例 鉴于以下董事会: ABCD EFGH IJKL MNOP 以及以下搜索字符串: ABCD,CGKO,POMN,NJF,AFKP,CFI,LGB,MJGD 您的程序应以任何顺序输出以下内容: ABCD at 0,0 CGKO at 0,2 PONM at 3,3 NJF at 3,1 AFKP at 0,0 CFI at 0,2 LGB at 2,3 MJGD at 3,0 一如既往,最短答案胜出

1
所有的光所有的光所有的光!
在Soulgit Games开发的All Light 启发下,这项挑战已完全消除。 挑战 您是一名电工,将所有灯连接到电池是您的工作。 灯和电池布置在网格中。 您可以将灯或电池连接到最近的灯或电池,将其连接到其北,南,东和西。 电池可以有任意数量的连接。 每个指示灯指定需要多少个连接。你必须准确到光,许多连接。 您可以在两个灯(或灯和电池)之间创建单连接或双连接。 电线不能交叉。 每个灯和电池之间必须有一条路径。 保证至少存在一个有效的解决方案。 给定电池和每个灯的位置以及每个灯所需的连接数,请输出它们之间允许这些属性的连接。 获胜条件 这是代码高尔夫球,因此每种语言中最短的代码将获胜。 测试用例 I / O像往常一样灵活。 对于输入,我将使用网格大小的二维数组,该数组存储灯光的正整数,空白的零和电池的-1。另一个好的选择可能是灯列表,其中灯是一个包含灯的位置和所需连接数的元组。 对于输出,我将使用连接列表,其中连接是包含开始位置和结束位置的元组。如果连接加倍,则列表中将有2个(另一个选项是在元组中包含此参数)。另一个不错的选择可能是某种网格布局。 如果使用坐标系,则可以指定起始索引以及从中开始索引。我的示例将使用0索引,并使用(0,0)作为左上角(行,列)。(我使用{}只是为了引入另一种定界符,因此更容易阅读,而不是因为它们是集合。) 这是测试用例的图形视图:测试1-12 测试1: [-1 | 0 | 1 ] => [{(0, 0), (0, 2)}] 测试2: [-1 | 0 | 2 ] => [{(0, 0), (0, 2)}, {(0, …
13 code-golf 

26
简单的高尔夫口译员
挑战: 您的工作是为一种简单的高尔夫语言创建一个简单的解释器。 输入: 输入将采用以空格分隔的字符串形式。 您可以用所需的空格代替空格 输出: 输出执行所有操作后获得的结果(数字或字符串)。如果有多个输出,则将在一起将得到一个结果(没有分隔符)。变量的初始值始终为零。即:它开始于0 语言语法: 该语言具有以下运算符: inc ---> add one to variable dec ---> remove one from variable mult ---> multiply variable by 2 half ---> divide the variable by 2 Pri ---> print the variable to console (or whatever your language has) exit ---> end the …

7
迷宫中的切点
迷宫以任何方便的格式表示为0(墙壁)和1(可步行空间)的矩阵。每个单元都被视为连接到其4个(或更少)正交邻居。阿连接成分是一组可行走单元中的所有传递地彼此连接的。您的任务是确定切入点 -可行走的单元格,如果将它们变成墙壁,将改变连接的组件数。仅在这些位置输出带有1-s的布尔矩阵。我们的目标是用最少的代码字节做到这一点。 输入矩阵将至少包含3行和3列。它的至少一个单元将是一堵墙,至少一个将是可步行的。您的函数或程序必须能够在一分钟内在TIO上(或在您自己的计算机上,如果TIO不支持该语言)处理下面的任何示例。 in: 11101001 11011101 00000001 11101111 11110101 00011111 10110001 11111111 out: 01000000 00001001 00000001 00000101 00110000 00010000 00000000 11100000 in: 1111111111111111 1000000000000001 1111111111111101 0000000000000101 1111111111110101 1000000000010101 1011111111010101 1010000001010101 1010111101010101 1010101111010101 1010100000010101 1010111111110101 1010000000000101 1011111111111101 1000000000000001 1111111111111111 out: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 …

13
算术循环
输入: 整数n,其是>=0或>=1(f(0)可选) 输出: n以下序列中的第'个数字,或直到第n'个数字并包括第一个数字的序列。 顺序: (0),1,-1,-3,0,5,-1,-7,0,9,-1,-11,0,13,-1,-15,0,17,-1,-19,0,21,-1,-23,0,25,-1,-27,0,29,-1,-31,0,33,-1,-35,0,37,-1,-39,0,41,-1,-43,0,45,-1,-47,0,49,-1,-51,0,53,-1,-55,0,57,-1,-59,0,61,-1,-63,0,65,-1,-67,0,69,-1,-71,0,73,-1,-75,0,77,-1,-79,0,81,-1,-83,0,85,-1,-87,0,89,-1,-91,0,93,-1,-95,0,97,-1,-99 这个序列如何建立? f(n=0) = 0(可选) f(n=1) = f(0) + n或其他f(n=1) = 1 f(n=2) = f(1) - n f(n=3) = f(2) * n f(n=4) = f(3) / n f(n=5) = f(4) + n 。 或使用伪代码: function f(integer n){ Integer result = 0 Integer i = 1 …

6
RGB到Xterm色彩转换器
256色Xterm兼容终端在通常的16种系统颜色之上增加了240种颜色。颜色16-231使用6级(0、95、135、175、215、255)红色,绿色和蓝色(按字典顺序排列)。颜色232-255仅是24级灰度(8 ... 238 x 10s)。要更好地了解我在说什么,请参阅此表。 挑战 您的目标是制作一个程序或函数,将rgb值作为输入,并输出与该rgb值最接近的Xterm颜色对应的数字。由于通常可以自定义16种系统颜色(颜色0-15),因此您将无法将它们从此转换中排除。 为了更好地定义“最接近的”颜色是什么,请沿红色,绿色和蓝色分量使用曼哈顿距离。例如,rgb(10, 180, 90)距离rgb(0, 175, 95)(颜色35)20个单位abs(10 - 0) + abs(180 - 175) + abs(90 - 95) == 20。如果输入颜色等于两个或多个Xterm颜色,则输出具有最高索引的Xterm颜色。 例子 R G B Xterm 0 0 0 ==> 16 95 135 0 ==> 64 255 255 255 ==> 231 238 238 238 ==> 255 90 …
13 code-golf  color 

30
等距检查器
挑战: 给定一个单词,检查它是否为等轴测图。 什么 : 等距图是仅由字母组成的单词,没有重复(不区分大小写)。空字符串是等轴测图。 例子 : "Dermatoglyphics" ---> true "ab" ---> true "aba" ---> false "moOse" ---> false "abc1" ---> false "" ---> true 输入: 您可以接受任何合理格式的输入 输入内容仅包含字母和/或数字,不包含空格([a-zA-Z0-9]) 输出: true 或任何真实值(如果输入是等轴图) false 或其他任何虚假的值 这是代码高尔夫球,因此每种语言中以字节为单位的最短代码获胜。

6
文字转脑
您面临的挑战是将输入文本转换为能输出文本的大脑代码。 教程取自这里有权限在这里 Brain-Flak具有两个堆栈,分别称为“左”和“右”。活动堆栈从左侧开始。如果弹出一个空堆栈,它将返回0。就是这样。没有其他变量。程序启动时,每个命令行参数都被压入活动堆栈。 Brain-Flak程序中唯一有效的字符是()[]{}<>,并且必须始终保持平衡。函数有两种类型:Nilads和Monads。一个nilad是一个函数,0参数。这是所有的尼拉德人: () 评估为一。 [] 计算到当前堆栈的高度。 {}弹出活动堆栈。评估为弹出值。 <>切换活动堆栈。评估为零。 在评估它们时将它们串联在一起。因此,如果我们在活动堆栈的顶部有一个“ 3”,则此代码段: ()(){} 将评估到1 + 1 + active.pop()将评估为5。 单子组采用一个参数,即一大堆Brain-Flak代码。这是所有单子: (n) 在活动堆栈上按“ n”。 [n] 评估为负数“ n” {foo} 虽然零不在堆栈的顶部,但请执行foo。 <foo> 执行foo,但将其评估为0。 这些函数还将返回它们内部的值,因此 (()()()) 将推3但 ((()()())) 将两次推3 。 在{}将评估所有运行的总和。因此,如果我们在堆栈的顶部有“ 3”和“ 4”: {{}} 评估为7。 程序执行完毕后,将打印保留在活动堆栈上的每个值,并在它们之间使用换行符。其他堆栈上的值将被忽略。 规则 您可能会认为Brain-Flak正在以ascii格式运行。(-A) 脑筋急转弯的代码一定不需要输入 所有标准规则均适用 对于TIO上最多1024个字节的任何输入,代码必须在1分钟内运行。(如果没有可用的TIO输出,请提供解释器,我将在我的机器上运行它(我的机器应该能够接近TIO))。 您必须支持任意长度的输入。 您可以从文件中获取输入。 不允许针对测试用例进行优化 确定性输出是必需的 …

3
展平Stack Cats程序
Stack Cats是一种可逆的基于堆栈的语言。它的可逆性导致一些怪异的循环。这个挑战是关于条件循环的(...)。当这些循环以某些方式嵌套时,可以对代码进行转换以减小嵌套深度。下面是规则(其中A,并B代表任意片段): 当一个循环从另一个循环开始时,我们可以将内部循环提取到最前面:((A)B)变成(A)(B)。 当一个循环以另一循环结束时,我们可以将内部循环提取到最后:(B(A))变成(B)(A)。 空循环()可以从程序中完全删除。作为推论(结合其他规则),((A))等效于(A)。 唯一的嵌套循环所留的形式为(A(B)C),其中A,B和C非空。 挑战 您将获得一个有效的Stack Cats程序,并且您的任务是使用上述转换尽可能地降低循环的嵌套级别,不留空循环。 有效的Stack Cats程序... ...仅由字符组成()/\<>[]{}!"*+-:=ITX^_|。 ...具有镜像对称性(例如,\(]{}!{}[)/是有效程序,但/|/不是)。 ...已正确匹配和嵌套,()并且{}([],<>并且\/不一定要像往常一样进行匹配,尽管由于镜像对称性要求,它们将成对出现)。 您可以将字符串或字符列表作为输入,但是输出必须以相同的格式显示。 您可以编写程序或函数,并使用我们的任何标准方法来接收输入和提供输出。请注意,默认情况下,这些漏洞是禁止的。 这是代码高尔夫球,因此以字节为单位的最短有效答案为准。 测试用例 测试用例每行两行(输入和输出),用空行分隔。请注意,一个输出为空。您还需要支持空输入(这将导致空输出)。 (((=+|+=))) (=+|+=) ({(=+|+=)}) ({(=+|+=)}) ((\)/)I(\(/)) (\)(/)I(\)(/) (()()(())()()) ((<|>((X((T)))[_]))\^/(([_](((T))X))<|>)) (<|>)(X)(T)([_])(\^/)([_])(T)(X)(<|>)

1
你能超越比尔·盖茨吗?
煎饼分类是一个数学问题的通俗术语,即当可以将抹刀插入堆叠中的任意点并用来翻转其上方的所有煎饼时,按大小顺序对无序的煎饼堆叠进行分类的数学问题。煎饼数P(n)是n个煎饼所需的最小翻转次数。1个 1979年,年轻的比尔·盖茨(Bill Gates)和克里斯托斯(Christos Papadimitriou)撰写了一篇论文,证明P(n)=(5n + 5)/ 3的上限。2 我认为可以肯定的是,盖茨(和/或帕帕第米特里奥)编写了一个程序,使用他们开发的算法(可能晚于1979年)执行煎饼分类。由于盖茨是一位熟练的程序员,因此他们可能会尽可能地尝试编写此代码,但是源代码的大小尚未公开(AFAIK)。 挑战: 创建一个执行煎饼分类的函数/程序,最大翻转次数不超过盖茨和帕帕第米特里乌找到的界限。3您可以选择是要列表递增还是递减,只要它是一致的即可。 您可以假设n <50。因此,您必须将翻转次数限制为(一些随机选择的n值): n P(n) 38 65 49 83 50 85 输出应该是每次翻转之前刮刀的位置。输出可能是零索引或一个索引,您可以选择从顶部还是底部进行计数。 附加规则: 运行时必须是确定性的 没有固定的时间限制,但是您必须能够提供包含50个元素的列表的输出 测试清单: 我无法提供最困难的列表(如果是的话,我会写一篇论文,而不是挑战),所以我将提供一些随机数字列表,您可以在这些数字上测试函数/程序。如果事实证明这些列表“容易”,我可能会添加其他人。 9, 63, 62, 75, 45, 78, 59, 75, 69, 3, 28, 94, 51, 10, 45, 93, 97, 80, 72, 36, 80, 88, 30, 93, …

3
从数组中删除条目以对其进行排序并最大程度地增加元素总数
这个挑战是从入学考试到封闭数字网络安全课程。无论如何,它与网络安全无关,只是为了测试学生的逻辑和编码技能。 任务 编写一个程序,该程序从数组中删除条目,以便以严格的降序对其余值进行排序,并且在所有其他可能的降序中将其总和最大化。 输入输出 输入将是整数值的数组严格地大于0和所有彼此不同。您可以自由选择是从文件,命令行还是标准输入中读取输入。 输出将是输入之一的降序子数组,其总和大于任何其他可能的降序子数组。 注意: [5, 4, 3, 2]是的子数组[5, 4, 1, 3, 2],即使4和3不相邻。只是因为1弹出了。 暴力解决方案 当然,最简单的解决方案是在给定数组的所有可能组合中进行迭代,并搜索具有最大和的排序后的数组,即在Python中: import itertools def best_sum_desc_subarray(ary): best_sum_so_far = 0 best_subarray_so_far = [] for k in range(1, len(ary)): for comb in itertools.combinations(ary, k): if sum(comb) > best_sum_so_far and all(comb[j] > comb[j+1] for j in range(len(comb)-1)): best_subarray_so_far …

3
出色的扫雷
Hexcells是一款基于Minesweeper的六边形游戏。(完全披露:我与Hexcells无关。事实上,我并不真正喜欢游戏。)大多数Hexcells规则都可以很容易地用Generalized Minesweeper(在任意图表上播放的Minesweeper)表示。{X}和-X-规则是最困难的一个。 该{X}规则告诉我们,一个X地雷与地雷接壤,所有这些地雷以连续的路径彼此接壤。例如,如果我们有董事会: ? ? ? {3} ? ? ? 排雷的6种可能性是 * . . . . . . * * * * * * {3} . * {3} . . {3} * . {3} * . {3} * * {3} . * . * * * * . * . …

2
如何以21个字符解决“重获成功”的全部任务
有一个名为“ Return True to Win”的网站,其中有一些有趣的任务供Javascript程序员使用。目的是找到给定函数的参数,迫使其返回true。 以下是任务之一: function total(x) { return (x < x) && (x == x) && (x > x); } 用户必须找到代码片段的值,x以使函数返回true。要测试代码段,请使用代码段作为参数(即total(<snippet>))来调用函数。 我找到了一个22个字符的解决方案: {valueOf:_=>n++%3},n=0 有人找到21个字符的解决方案。我找不到这种解决方案。21个字符的解决方案是什么?

3
代码高尔夫模拟高尔夫
给定一系列孔码,果岭尺寸,切角和最大距离,即可计算出高尔夫球得分。 假设条件 地球是平坦的 所有果岭都是圆形的 切片角度将在-45至45度之间,以度为单位 所有距离均以同一度量标准(码或米,无关紧要) 没有界限,障碍物或狗腿 任何洞的最高分数是8 所有镜头在与孔的角度加上切片角度所定义的方向上移动的最大距离或与孔的距离中的较小者。 距离以起点或终点之间的直线或欧几里得距离的形式测量。 所有孔上的所有镜头的最大距离和切片角度均相同 高尔夫球手总是在果岭上两次击球(或者恰好在果岭边缘)。 例 让我们从下面测试用例#5的漏洞#2看一下黑客。黑客可以将球打到320码,但始终会切成30度。如果我们不失一般性地假设发球区框在{0,0}而果岭在{497,0},那么他将击球到以下点,并在第七杆处到达果岭: {{0.,0.},{277.128,-160.},{547.543,-131.372},{569.457,7.67088},{502.872,37.2564},{479.159,7.92741},{490.646,-7.85868},{500.078,-4.22987}} 此时,由于需要两个推杆,他的分数将为9,因此根据假设,他的最终分数不得超过8。 在图形上,它将如下所示: 测试用例 所有测试用例均具有标准的18孔路线 Case#1 {MaxDistance->280,SliceAngle->10,HoleDistances->{181,368,161,416,158,526,377,427,509,148,405,443,510,494,396,388,483,172},GreenDiameters->{26,18,17,23,27,23,21,23,25,21,19,24,21,23,25,24,22,22}} Scores: {4,5,4,5,4,5,5,5,5,4,5,5,5,5,5,5,5,4} Output: 85 Case#2 (same course as Test Case #1, shorter more accurate golfer) {MaxDistance->180,SliceAngle->5,HoleDistances->{181,368,161,416,158,526,377,427,509,148,405,443,510,494,396,388,483,172},GreenDiameters->{26,18,17,23,27,23,21,23,25,21,19,24,21,23,25,24,22,22}} Scores: {4,5,4,5,4,6,5,5,6,4,5,5,6,6,5,5,5,4} Output: 89 Case#3 (Same golfer as test case #1, shorter course) …

3
共产子串标准化
如果长度为K的字符串T在字符串S中出现K次或多次,则有潜在的共性。例如,in 可能是共通的,因为它出现2次且长度为2。请注意,这些子字符串不能重叠。1010/10 甲共产变换是一个取该字符串Ť和移动每个字符吨我的Ť到我的发生Ť在小号。因此,对于前面的示例,共产主义转化会产生1/0;第一次找到10替换10的第一个字符,第二次找到。100 甲共产正常化是一个函数,它的所有这样的串Ť与ķ ≥2并执行共产变换他们。 该算法的一些细节: 首先对最长的有效字符串T 执行公共转换。支持T的第一次出现。 然后,对下一个最长的字符串执行共性转换,然后对下一个最长的字符串进行等等。 重复直到字符串中不存在这样的字符串。 注意,可以用两种不同的方式来解释一些字符串,例如测试用例中的“ Hello,Hello”示例。您可以使用ell的牛逼,但你也可以使用llo。在这种情况下,您的代码可以选择任何一个。所示的测试用例使用llo,但是您可能会获得不同且有效的输出。 您的任务是实现社区标准化。输入将仅包含可打印的ASCII字符(0x20至0x7E,空格至波浪号)。您可以编写程序或函数来解决此任务;输入可以当作来自STDIN的一行,字符串/字符数组参数,来自ARGV的参数等。 测试用例 '123' -> '123' '111' -> '111' '1111' -> '11' 'ABAB' -> 'AB' '111111111' -> '111' 'asdasdasd' -> 'asd' '10/10' -> '1/0' '100/100+100' -> '1/0+0' ' + + ' -> ' + ' 'Hello, hello, dear fellow!' …
13 code-golf  string 

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.