编程拼图和代码高尔夫

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

2
这些列表是否相等?
如您所知,python有列表。您可能不知道这些列表可以包含自己。 a = [] a.append(a) Python 2 Python 3 这些很酷,您可以使用它们做很多有趣的事情,但是您无法将它们进行比较。 a = [] a.append(a) b = [] b.append(b) a == b Python 2 Python 3 任务 您的工作是用Python(或可以直接处理python对象的任何语言)编写一个函数,该函数将包含两个可能包含自身的列表并进行比较。 如果两个列表具有相同的长度,并且不存在数字序列,则两个列表是相等的,因此按此序列对两个列表进行索引会导致在此相等定义下两个对象不相等。为了简单起见,列表中包含的所有非列表对象都是python整数,应将其与python的内置相等性进行比较。 您的程序不应依赖python的递归深度来确定列表是否无限深。那是: def isInfinite(a,b): try: a==b return False except RunTimeError: return True 这不是确定两个列表是否为自引用的有效方法。 测试用例 假设您定义一个函数 equal a = [] a.append(a) b = [] …

20
愿第一个与你同在
编写一个程序,用“ first”替换所有出现的“ force”,并用“ force”替换所有出现的“ first”:保留所有字符位置的原始大小写: "ForcefoRcefOrcE" -> "FirstfiRstfIrsT" "FirstfiRstfIrsT" -> "ForcefoRcefOrcE" 字符串的其余部分必须保持不变,因此运行程序两次将返回原始字符串: "thirst of forces" -> "thirst of firsts" -> "thirst of forces" 您的程序应该可以在任何初始字符串上运行。因此,建议您最好避免使用魔术字符作为中间表示,因为如果尝试三遍替换("force" -> "zzzzz", "first" -> "force", "zzzzz" -> "first"),它将在包含的字符串上失败"zzzzz"。 您应该支持您的编程语言在字符串定义中允许的所有字符(在大多数情况下,它是Unicode)。例如,对不可打印的字符(\ u + 4位数字)使用JSON样式表示形式: "\u0000\u0001\u0002\u0003the Force of the firsT" | V "\u0000\u0001\u0002\u0003the First of the forcE"
19 code-golf  string 

6
矛盾多义
好吧,每个人都喜欢Polyglots。您将获得两个整数,采用任何标准输入形式(无需硬编码)。您的任务是编写一个多语言,该语言可以找到一种语言的最小值和另一种语言的两个数字之间的最大值,并执行以下操作: 找到最大值的代码也必须计算它们的总和。 找到最小值的程序还必须计算其减法(max - min)的结果 这是“棘手的部分”:如果两个数字相等,则两个程序都不得输出/返回任何内容( STDOUT和和STDERR或任何其他return方法) 有关格式的更多详细信息,请参见“ 输出规格”部分 输入项 如上所述,在任何一种标准方法中,两种语言都将两个整数用作输入。 输出规格 对于找到的程序max,格式应为:max_value, addition result 对于找到的程序min,格式应为min_value, subtraction result (max - min) 结果可以打印,与任何明确的分隔符(,\n,,或其他任何你想要的),从功能包含用分隔符或数字列表的两项预期值的字符串返回(如:[max_value,sum]) 例子: Input || Max Language Output || Min Language Output 100, 40 || 100, 140 || 40, 60 63, 67 || 67, 130 || 63, 4 -45, -5 …

2
折叠一些毛巾!
我在某处听说过技术尚无法做到的一件事就是折叠毛巾1。因此,现在要证明该声明为假! 给定一个作为输入的字符串,该字符串由矩形(毛巾)组成,如下所示,将每条毛巾对折两次。例如: +------+ +------+ +--+ | | | | | | | | | | | | | | -> +------+ -> +--+ | | | | | | +------+ 请注意,折叠一条毛巾后,首先将其折叠,然后再从左至右折叠。您的程序也必须模仿这种行为。另请注意,在测试用例中,毛巾停留在同一位置,但折叠了。 规则: 输入/输出的标准方法。 有标准漏洞。 输入和输出应为字符串。 只要毛巾相对彼此在正确的位置,就可以随便拖曳任何东西。 您可以假设毛巾两边的长度始终可以被2整除。 作为输入传递的毛巾将始终为矩形。 毛巾将始终分开-但是,它们可能会以可变的量分开。 代码高尔夫,所以最短的代码获胜! 测试用例: Input: +------+ | | | | | | | …

30
减少错误
任务 给定一个非空数组0和1,将的游程长度减半0。 输入项 的阵列0和1。可接受的格式: 使用您的语言的真实数组 换行分隔的字符串0和1 连续的字符串0和1 任何其他合理的格式 例如,以下三个输入均可接受: [1, 0, 0, 1] "1\n0\n0\n1"(哪里\n有换行U + 000A) "1001" 您可以假设的游程长度0是偶数。 输出量 的阵列0和1,在上述可接受的格式。 测试用例 input ↦ output [1,0,0,1,0,0,1] ↦ [1,0,1,0,1] [1,1,0,0,1,1,0,0,1] ↦ [1,1,0,1,1,0,1] [1,1,0,0,1,1,1,0,0,1,1] ↦ [1,1,0,1,1,1,0,1,1] [1,1,1] ↦ [1,1,1] [0,0,1] ↦ [0,1] [0,0] ↦ [0] [1,1,1,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0] ↦ [1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0] 计分 这是代码高尔夫球。以字节为单位的最短答案将获胜。 有标准漏洞。

4
费马的分解助手
我们希望因式分解半素。这项挑战的目标是找到两个小整数和,用Fermat方法将分解为,从而可以轻松的因数。ü v ü v ñ ñNNNuuuvvvuvNuvNuvNNNN 任务 给定一个半素数 和一个正整数,我们将和定义为:ķ X ÿNNNkkkxxxyyy Ŷ=X2-ķÑx=⌈kN−−−√⌉x=⌈kN⌉x=\lceil\sqrt{kN}\rceil y=x2−kNy=x2−kNy=x^2-kN 步骤#1-查找kkk 首先,您需要找到k的最小可能值,以kkk使yyy为平方数(也称为完美平方)。 这允许通过Fermat分解因子方法的单次迭代分解kN。更具体地说,这立即导致:ķ ñķñkN kN=(x+y√)×(x−y√)kN=(x+y)×(x−y)kN=(x+\sqrt{y})\times(x-\sqrt{y}) (更新:此序列现在发布为A316780) 步骤#2-分解ķķk 然后,您必须找到两个正整数üüu和vvv,使得: c u = x + √uv=kuv=ķuv=k dv=X- √cu=x+y√cu=x+ycu=x+\sqrt{y} dv=x−y√dv=x−ydv=x-\sqrt{y} 其中cCc和ddd是N的素因NNN。 摘要 您的任务是编写一个程序或函数,将作为输入,并以任何顺序和任何合理的格式打印或输出和。ü vNNNuuuvvv 例 让我们考虑N=199163N=199163N = 199163 步骤1 的最小可能值是,这给:40kķk404040 ÿ=28232-40×199163=7969329-7966520=2809=532ķÑ=(2823+53)×(2823-53)ķÑ=2876×2770x = ⌈ (40 × 199163----------√)⌉ = 2823X=⌈(40×199163)⌉=2823x = \lceil(\sqrt{40 …

3
大底,小数位
J语言的语法非常笨拙,无法指定常量。我想特别关注一个很酷的功能:以任意基础编写的能力。 如果编写XbY用于X任何数量和Y字母数字的任意字符串,则J将解释Y作为基础X数,其中0通过9具有其通常的含义,a通过z通过35表示10。 当我说X任何数字时,我的意思是任何数字。出于这个问题的目的,我将约束X为正整数,但是在J中,您可以使用任何东西:负数,分数,复数,等等。 奇怪的是,您只能使用0到35之间的数字作为基数,因为所有可用符号的集合都只包含0-9和az。 问题 我想要一个程序来使用这种方法帮助我像2,933,774,030,998这样的魔术数字打高尔夫球。好吧,好吧,也许没那么大,我会很轻松的对待你。所以... 您的任务是编写一个程序或函数,该程序或函数将一个(通常是较大的)十进制数N在1到4,294,967,295(= 2 32 -1)之间作为输入,并输出/返回该形式的最短表示形式XbY,其中X正整数Y是一个字符串,由字母数字组成(0-9和az,不区分大小写),并Y以base Xequals 解释N。 如果每个表示形式XbY表示的长度大于或等于的位数N,则N改为输出。在所有其他关系中,您可以输出最短表示形式的任何非空子集。 这就是代码高尔夫,所以越短越好。 测试用例 Input | Acceptable outputs (case-insensitive) ------------+------------------------------------------------------- 5 | 5 | 10000000 | 79bkmom 82bibhi 85bgo75 99bauua 577buld | 620bq9k 999baka | 10000030 | 85bgo7z | 10000031 | 10000031 | 12345678 | 76bs9va 79bp3cw 82bmw54 86bjzky …

2
岛屿高尔夫2:古怪的隐士
这是Island Golf系列挑战中的第二次挑战。先前的挑战 两个隐士到达了一个荒岛。由于他们寻求孤独,所以他们希望彼此之间住得尽可能远。他们应该在哪里建造小屋,以使他们之间的步行距离最大化? 相关阅读 输入项 您的输入将是一个由两个字符组成的矩形网格,分别代表土地和水。在下面的示例中,土地是#,水是.,但是您可以替换任意两个不同的字符。 ........... ...##...... ..#####.... ..#######.. .#########. ...#######. ...#####.#. ....####... ........... 始终将至少有两个地砖。地砖将是连续的(即只有一个岛)。瓷砖也将是连续的(即没有湖泊)。网格的外边界都是水瓦片。地砖将不会以对角线连接:即,您将永远不会看到类似 .... .#.. ..#. .... 输出量 您的代码必须输出相同的网格,并在网格上标记了两个小屋位置。在下面的示例中,小屋的位置用X标记,但是您可以替换任何字符,只要它与您的水陆字符不同即可。 小屋的位置必须为两个地砖,以选择它们之间的最大步行距离。我们将步行距离定义为两点之间完全在陆地上的最短路径的长度。地砖被视为水平或垂直相邻,但不对角。 上述岛屿的可能解决方案: ........... ...X#...... ..#####.... ..#######.. .#########. ...#######. ...#####.X. ....####... ........... 这两个点之间的步行距离是11,这是该岛上任何两个点之间的最大距离。还有另一个距离11解决方案: ........... ...##...... ..X####.... ..#######.. .#########. ...#######. ...#####.X. ....####... ........... 细节 您的解决方案可能是完整程序或功能。任何默认的输入和输出方法都是可以接受的。 您的输入和输出可以是多行字符串,字符串列表或2D数组/嵌套的字符列表/单字符字符串。您的输出可能(可选)有一个尾随换行符。如上所述,您可以使用任何三个不同的字符来代替#.X(请在提交中指定要使用的字符)。 测试用例 A.具有独特小屋位置的岛屿: .... .##. …

18
创建一个简单的行编辑器
输入:不带换行符的字符串* 允许用户编辑和提交换行符 :修改后的字符串(可选带尾随的换行符) 行编辑器至少必须允许用户: 左右移动可见光标 在光标位置插入和/或覆盖字符 删除光标位置的字符 提交新的字符串,即停止编辑会使修改后的字符串返回/打印/显示/保存(没有其他文本) 赞赏,但不是必需的: 您的代码的解释。 链接到可以演示您的程序/功能的在线测试站点 演示用法的动画图像(例如,TIO不允许交互) 注意: 键绑定仅是建议 不需要GUI或视觉样式 例子 在下面,用表示光标_。 进入: Just some text 允许用户编辑: Just some text_ 用户按下←九次(向左箭头键) Just ̲some text 用户按下Del四次 Just ̲ text 用户按下 用户按下Out:any Just any_text Enter Just any text 入: Remove me 允许用户编辑: Remove me_ 用户按Backspace九次 _ 用户按出:(空字符串)Enter …

8
彭罗斯三角Codegolf
的彭罗斯三角形,也被称为彭罗斯tribar或不可能tribar,是不可能的对象。 此挑战的目标是以尽可能少的字节显示Penrose三角形。 资料来源:维基百科 规则: 生成彭罗斯三角后,必须以数字方式显示它。 它们的外观必须与Wiki页面的上述图像相同(上述资源),而无需直接显示该图像。 具有相同配色方案的同一图像必须以至少400x400的尺寸显示。 应该尽可能准确。 祝好运并玩得开心点!

5
国际象棋分析信息有限
在此挑战中,您仅获得有关特定棋类游戏的有限信息,并且需要预测谁赢得了该游戏。 您将获得两组数据: 计件(哪些还活着) 木板颜色(木板上的棋子颜色) 更重要的是,您不知道这些碎片在哪里。您需要确定您认为会赢的人。 从2010年至今的PGNMentor上列出的所有事件中选择游戏。我从每场以胜利或失败告终的游戏中选择了所有董事会职位的10%。棋盘位置至少要有30步才能进入游戏。测试用例可以在这里找到。(首先列出白色胜利,然后是黑色胜利) 输入项 件数将是由每件的字符的字符串:kING,queen,rOOK,K n飞行,bishop,或p芒。小写表示黑色,大写表示白色。面板将是一个包含64个字符的字符串(8行8列)。B代表黑色,W代表白色,并且.代表空白。样品: W..WB......W.BB....W..B..W.WWBBB..W...B....W..BBWWW...BB.W....B.,BBKPPPPPPPQRRbbkpppppppqrr 将代表以下董事会 ...B.BB. .BBBBBBB .B.B.... B..W.... WWWW.W.. ....W.W. ...W..WW W.....W. 并且两种颜色都有2个主教,1个国王,7个兵,1个女王,2个白嘴鸦 输出量 您需要返回一个介于0和1(含)之间的浮点数,以确定白获胜的可能性。样品: 0.3 (30% chance that white wins) 更多细节: 每个测试用例价值1分。您的得分将是1 - (1-Output)^2白人获胜或1 - (Output)^2黑人获胜。 您的最终分数将是所有测试用例的总和。 如果我认为提交的内容对输入进行了硬编码,则我保留更改测试用例的权利。(如果我更改它们,它们将具有SHA-256哈希值893be4425529f40bb9a0a7632f7a268a087ea00b0eb68293d6c599c6c671cdee) 您的程序必须独立运行测试用例。没有将信息从一个测试用例保存到下一个用例。 如果您使用的是机器学习,我强烈建议对前80%的数据进行培训,并使用其余的20%进行测试。(或您使用的任何百分比)。我在数据中多次使用游戏,但是将相同的游戏顺序放置。 更新:为了测试和学习目的,我添加了超过一百万个测试用例。由于github repo大小限制,它们分为黑色​​和白色部分。 祝好运并玩得开心点!

16
增量密码
此任务非常简单,并使用了三个不同的“操作员”字符。你的任务是,给定的字母简单的顺序,请执行以下任务使用对它进行编码<,>,*。您可以选择使用大写或小写字母,而不必同时使用两者。 密码说明 密码很简单,您使用递增和递减运算从字母1到结尾字母移动, *具有“提交”功能。“增加”的运算符为>,“减少” 的运算符为<。 一个使用单词的例子adbc: 从单词的第一个字母开始,输出该字母。 a 接下来,使用>和<(例如Brainfuck)将当前字母“导航”到下一个字母。a>将导致a该字母“ 加1” b。a<会z因为您降低字母(它会自动换行,所以您必须始终选择导致最少操作数的方向)而导致。 输出和的正确最小化组合后<,>输出a *表示我们已经到达下一个字母。 编码步骤adbc如下: a # a a>>>* # ad a>>>*<<* # adb a>>>*<<*>* # adbc 例子 编码步骤aza如下: a # a a<* # az a<*>* # aza 更多示例: "abcdef" = "a>*>*>*>*>*" "zyaf" = "z<*>>*>>>>>*" "zzzzzz" = "z*****" "z" = "z" …
19 code-golf  cipher 

8
反向插入排序
目的 根据“ 插入排序”对列表进行排序的动作,生成原始的加扰列表。原始列表将包含从0到N-1(包括)的所有数字,其中N输入的大小。 输入项 一个包含对列表进行排序的必要动作的列表。每个值代表由原始数字(加扰的数字)移位到其右位置的插槽数量,请记住,此过程是从左到右。输入列表 中(0索引)位置的值i将介于0和之间i。 您不需要处理无效的输入,在这种情况下,任何行为都是可以接受的(崩溃,无限循环等)。 输出量 混乱的名单 逐步生成动作 Scrambled List | Moves to sort [4,0,2,1,3,5] | [0, , , , , ] #4 stay in place [4,0,2,1,3,5] | [0,1, , , , ] #0 is moved 1 slot to the left [0,4,2,1,3,5] | [0,1,1, , , ] #2 …
19 code-golf  array-manipulation  code-golf  code-golf  animation  code-golf  restricted-source  code-golf  java  code-golf  decision-problem  graph-theory  code-golf  conversion  electrical-engineering  code-golf  ascii-art  code-golf  string  substitution  code-golf  math  code-golf  string  set-theory  code-golf  code-golf  compile-time  code-golf  kolmogorov-complexity  binary  code-golf  sequence  cops-and-robbers  code-golf  subsequence  card-games  code-golf  sequence  primes  code-golf  code-golf  number  graphical-output  music  code-golf  ascii-art  code-golf  string  lambda-calculus  code-golf  string  code-generation  code-golf  unicode  code-golf  math  combinatorics  code-golf  balanced-string  code-golf  sequence  cops-and-robbers  code-golf  sequence  cops-and-robbers  code-challenge  fastest-code  chess  code-golf  math  graphical-output  code-golf  string  hello-world  animation  code-golf  number  arithmetic  code-golf  integer  code-golf  code-golf  combinatorics  code-golf  kolmogorov-complexity  graphical-output  code-golf  string  code-golf  code-golf  game  code-golf  math  combinatorics  code-golf  ascii-art  popularity-contest  random  code-golf  arithmetic  number-theory  integer  code-golf  tips  underload  code-golf  math  sequence  primes  code-golf  math  path-finding  code-golf  ascii-art  primes  code-golf  kolmogorov-complexity  alphabet 

3
高温辐射固化剂
背景 在这个站点上,我们偶尔会遇到一些问题,要求对程序进行“辐射加固”。这意味着程序必须能够删除一个或多个字节,无论删除哪个字节。 对于在编程挑战中经常遇到的任务很常见,很自然地想要制作一种特别适合这些挑战的语言。鉴于自然的方法是添加一些元数据,以使反向破坏成为可能,因此,实际上并不是真正需要设计的语言,而是一种编码。这个想法是将每个输入转换为一个字节序列,这样即使对序列稍加照射,也可以提取原始输入。 任务 编写两个程序或函数,E(编码器)和D(解码器),使得: E接受两个参数,一个八位字节序列(在本规范中称为“ 输入 ”)和一个非负整数“ radiation ”,并输出一个八位字节序列“ encoding ”。 D接受一个参数,即八位字节序列(“ encdng ”),并输出八位字节序列“ reconstruction ”; 如果同时运行E和D(使用encdng,则D的输入,通过从编码中删除不超过辐射元素(不一定连续)来选择),那么无论删除了哪些字符以形成encdng,重构都将等于输入。 澄清说明 如果您提交的功能,你不必叫他们E和D; 您可以选择最适合您的语言的名称。 “八位位组”基本上是0到255之间的整数,您可以将其编码为整数,字符或任何适合您的语言的字符。 E和D必须完全是确定性的(即给它们相同的输入将始终产生相同的输出,其中“输入”定义为E的输入和辐射,或D的编码)。特别是,E可能不会通过边信道将信息传达给D。 删除是通过删除序列的一个元素来完成的。可以考虑在编辑器中打开序列,将光标置于任意点,然后按Backspace键。如果一个元素出现多次,则可能只删除该元素的一个副本(即,同一八位位组的其他实例将不受影响)。 尽管仅根据相当短的输入量来计算分数,但是您的程序在理论上必须对任何输入量和辐射都有效。特别是,无论input中出现哪个八位字节,它都必须起作用。(很抱歉,希望使用他们知道的不可打印字符的能力不会出现在输入中,但是我需要确保输入不可压缩,以便挑战在于辐射硬化而不是压缩。) 您可以提交定义两个功能的一个文件。两个文件,每个文件都定义一个功能或都是完整程序;或三个文件,其中两个分别实现D和E(通过完整程序或通过定义函数),第三个文件是D和E通用的头文件或库。无论使用哪种提交形式,则您的编程语言实现必须能够理解两个程序而无需文件位置等其他参数(否则,按照我们的标准规则,您必须以不寻常的方式调用实现以支付字节罚款)。 胜利条件 对于每个长度和辐射,令f(长度,辐射)为编码 s 的总长度,其对应于具有长度length的所有输入以及给定的辐射。(也就是说,f(长度,辐射)= 输入总和的长度为长度 length(E(输入,辐射))。)然后令g(长度,辐射)等于f(长度,辐射)÷256 长度。换句话说,对于给定的输入长度和给定的辐射硬化要求,g是编码输出的平均长度。(理论上,您可以通过蛮力计算出来,但是以这种方式计算出您的分数可能会花费很长的时间。我希望大多数提交者能够对他们的分数做出数学上的论证。不确定,发布一个近似分数,如果另一个条目发布了相似的分数,您或其他人可以更深入地计算它。) 您的分数等于0到9(含)范围内的所有辐射的g(长度,辐射)的总和,0到99(含)范围内的所有长度的总和,加上(主要是避免硬编码,或者如果有人发现了数学上完美的编码;否则,这可能是一个最小的因素)提交给挑战的字节总数(加上对要求异常解释器标志或特定文件名之类的标准惩罚)。获胜者是得分最低的作品(被第一次提交的作品打破)。

16
修改浮标!
3D建模软件主要使用UV贴图将纹理映射到3D对象上。U和V的有效值通常位于一个包含[0..1]范围内。 挑战 您购买了一个超级易于使用的新3D建模软件。但是,它有一个问题:它会从UV值中添加或减去一个随机整数。您的任务是创建一个程序或函数,以修改输入值以获取包含[0..1]范围内的浮点值。 生成的浮点数应与原始浮点数相同,并尽可能接近原始浮点。因为0和1都在输出范围内,所以0或更小的整数应更改为0,1或更大的整数应更改为1。 JavaScript中的示例算法: function modFloat(input) { while (input < 0 || input > 1) { if (input < 0) input += 1; if (input > 1) input -= 1; } return input; } 规则 输入是单个整数或浮点值。只要您的答案中指定了任何合理的格式。 输出应为浮点值的十进制表示。 输出精度应至少等于输入的小数位。 允许尾随零。 确保您的代码正确选择要为整数输入输出的0或1。 测试用例 Input | Output ------------+--------- -4 | 0 -1 …
19 code-golf 

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.