编程拼图和代码高尔夫

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

7
这是子矩阵吗?
这是该挑战的二维概括。 出于我们的目的,如果可以通过从B完全删除许多行和列来获得A,则一个矩阵(或2D数组)A被视为另一个矩阵B的子矩阵。(注意:某些来源有不同/限制性更强的定义。) 这是一个例子: A = [1 4 B = [1 2 3 4 5 6 2 1] 6 5 4 3 2 1 2 1 2 1 2 1 9 1 8 2 7 6] 我们可以从B删除第2、3、5、6和第2、4行以获得A: B = [1 2 3 4 5 6 [1 _ _ 4 _ _ …

12
交织两个字符串的所有可能方法
我最近在stackoverflow上看到了这个问题。这是一个很好的问题,但是这个问题有一个致命的问题。他们正在寻求最佳方法。例如,最容易阅读,最惯用,最整洁等。他们不知道这并不重要吗?您应该问如何用最少的代码字节来做! 因为我怀疑这个问题会在stackoverflow上得到赞赏,所以我决定在这里提问。 挑战 您必须编写最短的程序或函数,以生成所有可能的方式来交织任意两个任意字符串。例如,如果两个字符串是'ab'和'cd',则输出为: ['abcd', 'acbd', 'acdb', 'cabd', 'cadb', 'cdab'] 如您所见,a总是在b,并且c总是在d。 IO可以采用任何合理的格式。使用此python代码进行验证以检查您的输出。(信用:JeD) def shuffle(s,t): if s=="": return [t] elif t=="": return [s] else: leftShuffle=[s[0]+val for val in shuffle(s[1:],t)] rightShuffle=[t[0]+val for val in shuffle(s,t[1:])] leftShuffle.extend(rightShuffle) return leftShuffle 样本IO: shuffle("$", "1234"): ['$1234', '1$234', '12$34', '123$4', '1234$'] shuffle("az", "by"): ['azby', 'abzy', 'abyz', 'bazy', …

3
遵循不完整的指示
您的一位朋友已为您指示了镇上最好的餐厅。这是一系列的左转和右转。不幸的是,他们忘了提到在这些转弯之间需要走多长时间。幸运的是,您有一张包含所有餐厅的街道地图。也许您能弄清楚他们的意思是哪家餐厅? 输入项 该地图以ASCII字符的矩形网格形式给出。.之路,#是一个建筑,A到Z是各种餐馆。您从左上角开始,向东行驶。例: .....A .#.### B....C ##.#.# D....E ##F### 您朋友的说明将以(可能为空)字符串或包含Ls和Rs 的字符列表的形式给出。 输出量 您可以走与输入字符串中的左转和右转相对应的任何路径,前提是您在每个位置之前和末端至少向前走了一步。特别是,这意味着如果字符串以R您开头,则不能在最左边的列中立即向南移动。这也意味着您不能当场旋转180°。 除了最后到达的那栋建筑物或餐厅,您不能漫步。您可以假设左上角为.。 您应该将您朋友指示下可以到达的所有餐馆输出为字符串或列表。 您可能会认为这些说明将导致至少一家餐馆。例如,一张单张L对于以上地图无效。 上图的一些示例: <empty> A R F RR B,D RL C,E RLRL E RLLR C RLLL B RLRR D RLRRRR A,C RLLLRLL B 请特别注意R达不到B。 您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行自变量或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。 适用标准代码高尔夫球规则。 其他测试用例 这是一张较大的地图,由Conor O'Brien提供(我对此做了一些修改): .......Y..........................###### .####.....#.##....##..######....#.###.## B.........#.##.#..##....##...##.#.#P...# .#.#####..#.##..#.##....##.#....#.####.# .#.#...C..#.##...G##..#.##.#....#.#....# .#.#.#.#..#.####.###.#..##.#....#.#.NO.# .#.#A#.#..#.##...F###...##.#.##.#......# …

14
生成最小余数序列
每个数字都可以使用无限长的余数序列表示。例如,如果我们把7号,并执行7mod2,那么7mod3,那么7mod4,依此类推,我们得到的1,1,3,2,1,0,7,7,7,7,....。 但是,我们需要尽可能短的余数子序列,该子序列仍可用于将其与所有较低的数字区分开。再次使用7 [1,1,3]是最短的子序列,因为所有先前的子序列都不以开头[1,1,3]: 0: 0,0,0,0... 1: 1,1,1,1... 2: 0,2,2,2... 3: 1,0,3,3... 4: 0,1,0,4... 5: 1,2,1,0... 6: 0,0,2,1... 请注意,[1,1] 它不能代表7,因为它也可以代表1。但是,您应该[1]输入1。 输入输出 您的输入是一个非负整数。您必须输出如上定义的余数的最小长度序列或序列。 测试用例: 0: 0 1: 1 2: 0,2 3: 1,0 4: 0,1 5: 1,2 6: 0,0,2 7: 1,1,3 8: 0,2,0 9: 1,0,1 10: 0,1,2 11: 1,2,3 12: 0,0,0,2 30: 0,0,2,0 …

9
矩形检测
编写一个包含0“ s”和1“ s ”的多行字符串的程序或函数。字符串中不会再有其他字符,并且字符串始终将是矩形的(所有行将具有相同数量的字符),尺寸小至1×1,但否则可以任意排列0'和1'。 您可以假设该字符串具有可选的尾随换行符,并且如果需要,可以使用任意两个不同的可打印ASCII字符代替0和1。 打印或返回truthy值,如果所有的的路径连接的区域都0的和1的中的字符串是实心矩形,否则输出falsy值。 甲路径连接区域的0“是,从任何一个S是指0在该区域中,所有其它0的可以通过仅向上移动达到,下,左,右等0的(和不倾斜地移动,不移动到任何1和不会超出字符串范围)。同样的想法适用于1路径连接区域。 甲实心矩形的0的手段的矩形的整个区域被填充0的和没有1的。同样的想法适用于1实心矩形。 以字节为单位的最短代码获胜。抢七是较早的答案。 (请注意,字符串不会与环形边界条件一起环绕。) 例子 1)此输入字符串具有3个路径连接的区域(2个用于0,1个用于1)。但是,只有右下角的00区域是一个实心矩形,因此输出将是虚假的。 0011 0111 0100 2)该输入字符串具有4个路径连接的区域(2两者0和1)。它们都是实心矩形,因此输出将是真实的。 0011 0011 1100 3)此输入具有2条路径连接的区域,但其中只有一个是实心矩形,因此输出将是虚假的。 00000000 01111110 00000000 4)此输入只有1条路径连接的区域,并且是一个实心矩形,因此输出是真实的。 11111111 11111111 11111111 测试用例 T输入字符串下方的A 表示真实,F表示虚假。 0 T 1 T 00 T 01 T 10 T 11 T 0000000 T 1111111 T 011100100100101100110100100100101010100011100101 T 00 11 …

30
计算ILD的总和
输入: 一个整数 输出: 输入本身的总和+输入的长度+输入的每个数字。 nr + nr-length + {sum of digits} = output 例子: 输入:99 输出:99(nr)+ 2(nr-length)+ (9 + 9)(数字)→119 输入:123 输出:123 + 3 + (1 + 2 + 3)→132 挑战规则: 输入也可以包含负输入,这些输入经过特殊解析。的-/减号也+1为长度,并且是第一的一部分digit。 例如: 输入:-123 输出:-123 + 4 + (-1 + 2 + 3)→-115 您可以假设输入或输出都不会超出(32位)整数的范围。 一般规则: 这是代码高尔夫球,因此最短答案以字节为单位。 不要让代码高尔夫球语言阻止您发布使用非代码高尔夫球语言的答案。尝试针对“任何”编程语言提出尽可能简短的答案。 标准规则适用于您的答案,因此您可以使用STDIN / STDOUT,具有正确参数的函数/方法和返回类型的完整程序。你的来电。 …

4
九个男人的莫里斯伯爵米尔斯
介绍 九个人的莫里斯(Mills)(也称为米尔斯)是一款由两名玩家组成的棋盘游戏,在以下棋盘上进行播放(图片摘自链接的Wikipedia页): 每个玩家有9个人,黑白相间。具体规则对于此挑战并不重要,但如果您有兴趣,请查看Wikipedia页面。 挑战 给定一个网格作为输入,它表示在一定boardstate,输出的总研磨计数m用0<=m<=8。 当三个相同颜色的人在相连点的直排中时,他们就形成了磨坊。 b2到f2不是因为磨的人具有不同的颜色。另外d2,d5由于必须连接三个点,因此也不会形成磨机。 上图中的木板包含两个磨房。一个从f2到f6一个从e3到e5。 输入项 该板表示为具有24个点的2D网格,如上面的示例图像所示,这些点已连接。该示例a-g在列中使用字母,1-7在行中使用数字,但是您可以选择任何合理的输入格式,只要它将24个唯一坐标映射到以下状态之一即可: 空的 黑色拍摄 采取白色 具体的表达方式取决于您,而颜色并不限于“ b”或“ w”。 除此之外,您的输入内容可能不包含任何其他信息。 附加条款 您不必通过任何值来映射点。如果要将输入作为2D数组,也可以。但是请记住,并不是所有的点都被使用,并且您必须考虑它们之间的连接。 输入可能为空,在这种情况下,您必须输出零(空板->无磨)。 由于每个玩家有9个人,因此输入的总得分不会超过18。 您可以在输入中省去空点,因此只取取输入点。 可以以任何方式订购输入。您不能依赖特定的顺序。 您可以假设输入将始终有效。这意味着每种颜色的人不会超过9个人,并且每个点都是唯一的。 规则 明确您在解决方案中使用的输入格式。强烈建议提供示例程序运行。 允许功能或完整程序。 输入/输出的默认规则。 有标准漏洞。 这是代码高尔夫球,因此最低字节数获胜。Tiebreaker是较早提交的内容。 测试用例 这里的输入格式是一个元组列表,其中的坐标如上例中所示为第一个元素,点的状态为第二个元素。白色标记的点标记为“ w”,黑色标记的点标记为“ b”。所有其他点均被忽略,并且为空。 [(“ a4”,“ w”),(“ b2”,“ b”),(“ b4”,“ b”),(“ c4”,“ b”),(“ d1”,“ w”) ,(“ d2”,“ w”),(“ e3”,“ w”),(“ …

1
分隔我的整数
介绍 在称为拓扑的数学领域中,有一些东西称为分离公理。直观地,您有的集合X和子集的集合X,我们可以将其视为属性。如果一个人可以X根据其属性来区分所有项目,则该系统可以很好地分开。分离公理正式化了这个想法。在此挑战中,您的任务是检查给定的三个分离公理X和属性列表。 输入项 您的输入是一个integer n ≥ 2,以及一个整数列表的列表T。中的整数T来自X = [0, 1, ..., n-1]。中的列表T可能为空且未排序,但不会包含重复项。 输出量 您的输出是由三个分离公理确定的四个字符串之一,每个公理都强于最后一个。还有其他公理,但是为了简单起见,我们坚持使用这些公理。 假设对于in 中的所有unique x和,存在一个列表,其中恰好包含其中一个。然后和满足公理T0。yXTXT 假设对于所有in x和yin X,都有两个列表T,其中一个包含x但不包含y,另一个包含y但不包含x。然后X和T满足公理T1。 假设上面的两个列表也不包含公共元素。然后X和T满足公理T2。 你的输出中的一个T2,T1,T0或TS,这取决于上述条件成立(TS手段它们都不做)。请注意,T2比T1强,T1比T0强,并且您应始终输出尽可能强的公理。 规则和计分 您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。 测试用例 2 [] -> TS 2 [[],[1]] -> T0 2 [[0],[1]] -> T2 3 [[0],[0,1,2],[1,2]] -> TS 3 [[],[0],[0,1],[2]] -> T0 3 [[0],[0,1],[2,1],[0,1,2]] -> T0 3 …

4
分割倒数
给定一个n> 77的数字,编写一个程序或函数,以找到一组不同的正整数,使得该组的总和等于n,而该组的倒数之和等于1。 80的示例: 80 = 2 + 4 + 10 + 15 + 21 + 28⟶1/2 + 1/4 + 1/10 + 1/15 + 1/21 + 1/28 = 1 您的程序或函数必须(理论上)对n <2 32起作用,并且不能为浮点舍入错误辩解。请注意,存在所有n> 77的解。 以字节为单位的最短代码获胜。 有一个额外的奖励措施:我将奖励适用于任何n并运行log(n)的最小解决方案。对于小n,它必须快速(由我自行决定)。是的,这是可能的。

5
在JavaScript中生成字母
我敢肯定,没有更好的方法可以做到这一点,但认为提出这一要求不会有任何伤害。 我厌倦了打字a='abcdefghijklmnopqrstuvwxyz'。 很酷的语言有Range('a'..'z')或类似 尽可能简短的JS能为我们带来什么? for(i=97,a='';i<123;){a+=String.fromCharCode(i++)} 比字母还长-但可以保证我不会在某个地方搞砸。 我希望有一种讨厌的位移方法可以生成少于50个字符的az。 我搞砸了 i=97;Array(26).map(x=>String.fromChar....i++ 但是到我加入时总是更长一些,然后将array(26)拆分为可用 编辑:我已经把它归结为 [...Array(26)].reduce(a=>a+String.fromCharCode(i++),'',i=97) 60字节

18
Repdigit基础调查
甲纯位数是可以单独通过重复相同的位被写入的自然数。例如,777是repdigit,因为它仅由7重复3次的数字组成。 这不仅限于十进制(以10为底)数字,但是: 每个梅森数(格式为M n当用二进制(基数2)编写时, = 2 n -1)都是一个位数。 以一进制(基数1)写入时,每个数字都是一个小数位数。 每个数字n也可以用11基数表示为小数位n-1(例如,17以十六进制(基数16)写为11,而3以二进制数(基数2)写也)。11)。 这里的挑战是找到 输入数字可能是重复数字的其他基础。 输入项 正整数 x > 3任何方便格式的。 输出量 一个正整数b,(x-1) > b > 1其中xin 的表示形式为brepdigit。 如果不b存在,则输出0或出现错误值。 如果b存在多个,则可以输出其中任何一个或全部。 规则 该(x-1) > b > 1限制是为了防止琐碎转换到一元或“减一”基。的输出数可以写在一元或任何方便的基础,但碱本身必须不平凡的转换中的一个。 输入/输出可以通过任何合适的方法。 适用标准漏洞限制。 例子 In --> Out 11 --> 0 (or other falsey value) 23 --> 0 (or other …

4
一门小语言值得一口小口译员
这是一个非常简单的语言定义: A Variable is any string that does not contain ^, <, >, !, or ? The empty string is a valid variable identifier The value of every variable starts at 0. A Statement is one of (var is a Variable, P is a Program): var^ -> changes var to …

7
生成尺寸越来越大的程序
在这个挑战中,您将编写一个程序,该程序输出的程序是原始程序长度的两倍。输出的程序应以长度两倍的程序输出一个新程序。 例子 如果我的程序是a: < a > aa < aa > aaaa < aaaa > aaaaaaaa 规则 没有内置奎因 原始程序必须至少一个字节 该序列理论上应该无限工作 您的程序不允许读取任何内容(文件,stdio) 您的分数是原始程序的大小。

7
简单系统的静电势
在物理学中,电荷像排斥电荷一样,与电荷吸引不同。 的距离分开的两个单元之间的电荷的电势的能量d是1/d对于像费和-1/d用于不同于电荷。电荷系统的势能是所有电荷对之间的势能之和。 挑战 确定由字符串表示的单位电荷系统的势能。 这是代码高尔夫球,因此以字节为单位的最短解决方案为准。 输入项 阿非空多行字符串,仅由+,-, 和换行符,其中每行具有恒定的宽度。的+和-表示的1和-1分别收费。例如,以下字符串: + - + (以左上角为原点)表示一个系统,其正电荷为(4,0)和(1,-1),负电荷为(6,0)。 或者,您可以将输入作为行列表。 输出量 一个带符号的实数,代表收费系统的势能。输出应正确到四个有效数字或10 -4,以较小者为准。 测试用例: -- 应该输出0。没有排斥或吸引的成对电荷,并且空白不会改变任何东西。 + - 只有两项费用;它们在垂直方向上相距1个单位,在水平方向上相距2个单位,因此它们的距离为sqrt(5)。输出应为-1 / sqrt(5)= -0.447213595。 + - - + 应该给-2.001930531。 - -- -+ - - -+-++-+ +-- + +-- + ++-++ - ---++-+-+- -+- - +- -- - -++-+ --+ …

1
计算常见的生活游戏模式
此处的任务是从Golly .rle或纯文本文件(您的选择)中读取文件(提供您的文件名)(在STDIN上或作为命令行参数),并在其中编码的网格中识别和计数通用模式。 或者,您可以选择直接通过STDIN提供文件的内容。 您的程序应该至少能够识别和区分15种最常见的严格静物,5种最常见的振荡器以及滑翔机。 应该识别出这些振荡器的所有相位,以及滑翔机的所有四个相位。 它应该输出一个列表,其中包含每个图案的最终计数,并在单独的行上包含每个图案的名称和数量。您的程序可能会将所有这些模式都包含在输出列表中,或者仅将其中至少一个找到。 作为计数中的其他图案的一部分的图案不应该计数。(例如,信标的8单元阶段也不应计为两个街区,并且船舶领带也不应计为两艘船) 您可以假定输入已经稳定并且不包含上述集合中没有的任何模式。您可能还假设输入网格将适合1024x1024框。 这是代码高尔夫球,因此最短的程序为准。 RLE文件格式说明 RLE文件包含游程长度编码的生命网格。以开头的所有行#均为注释,应忽略。 第一行非空,非注释行的格式为x=<width>,y=<height>,rule=<rule>。就此任务而言,规则将始终为B3/S23。它可能包含在处理该行之前应删除的空格(当然,根本不需要处理此行。) 第一行之后的非注释行应视为单个字符串。该名称只能由十进制数字,字符$,,b和o和换行符组成,并且不能以数字结尾。换行符将被忽略,但是您可以假定换行符不会中断数字字符串。 这可以由单个终止!。 b代表一个死单元,o代表一个活单元,并$代表一行的结尾。任何十进制数字表示以下符号将被视为重复多次。 纯文本模式编码 另一个选择是以此处描述的另一种纯文本格式读取模式。在此编码中,关闭的单元格用连字符表示,打开的单元格用大写字母Os表示,换行符分隔行。 您可以假定所有非注释行都将用连字符填充到相等的长度。 以开头的行!是注释,将被忽略。 一些测试案例 RLE: #This is a comment x = 35, y = 16, rule = B3/S23 bo$2o$obo5$22bo$22bo$22bo2$18b3o3b3o2$22bo$22bo10b2o$22bo10b2o! 纯文本: !This is a comment -O--------------------------------- OO--------------------------------- O-O-------------------------------- ----------------------------------- ----------------------------------- ----------------------------------- ----------------------------------- ----------------------O------------ ----------------------O------------ ----------------------O------------ …

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.