编程拼图和代码高尔夫

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

6
计算格雷厄姆数的最后一位数字
格雷厄姆的数字以7结尾。从理论上讲,这是一个庞大的数字,需要存储的信息比宇宙本身的大小还要多。但是,可以计算格雷厄姆数字的最后几位数。 最后几位数字是: 02425950695064738395657479136519351798334535362521 43003540126026771622672160419810652263169355188780 38814483140652526168785095552646051071172000997092 91249544378887496062882911725063001303622934916080 25459461494578871427832350829242102091825896753560 43086993801689249889268099510169055919951195027887 17830837018340236474548882222161573228010132974509 27344594504343300901096928025352751833289884461508 94042482650181938515625357963996189939679054966380 03222348723967018485186439059104575627262464195387 您的程序可能不包含这些(或相似的数字),但必须计算它们。它必须计算200位数或更多。 输出到标准输出。在适当的硬件上,运行时间最长为2分钟。最短的程序获胜。
13 code-golf  number 

5
以多种方式完善权力?
挑战 您的任务是编写一个给定正整数N的程序或函数,该程序或函数查找所有小于或等于N的正整数,这些正整数可以以多种方式表示为完美幂。 定义 完美的功率被定义为一个数我发现立方公尺ķ,其中: m和i是正整数 m!= k 测试用例 输入->输出 1000-> 16,64,81,256,512,625,729 56-> 16 999-> 16,64,81,256,512,625,729 81-> 16,64,81 1500-> 16,64,81,256,512,625,729,1024,1296 请提供一个可读的,注释的版本。


5
释放二叉树
因此,在阅读一些基本的计算机科学概念之前。 二进制树是动态分配的结构(通常用于有序存储)。 由于其性质,对二叉树的遍历通常是递归的。 这是因为当有两种循环方式时,线性遍历(通过循环)是不自然的。 递归:这意味着将调用自身的函数。 在老式语言中,内存管理需要手动进行内存管理。 手册:意味着您必须自己做。 当您执行手动内存管理时,您需要实际要求底层系统释放树的每个成员。 释放:将内存恢复到全局状态,以便可以重复使用,并且不会耗尽内存。 释放:这是通过调用函数free()并将要恢复的指针传递给函数来完成的。 指针:它像一个虚拟的棍子。最后是记忆。当您请求内存时,您会得到一个具有内存的指针(虚拟棒)。完成后,您将归还指针(虚拟棒)。 递归解决方案: freeTree(Node* node) { freeTree(node->left); freeTree(node->right); free(node); } 然后问题是递归意味着您要重复调用同一函数。这会增加堆栈。增加堆栈会占用更多内存。释放树的原因是,您希望使用更多的内存来回存是适得其反的(即使您确实收回了内存的两个位)。 最后的问题是: 因此,问题集中在将上述递归版本转换为线性解决方案(这样您就不必使用内存了)。 给出节点类型 typedef struct Node Node; struct Node { Node* left; Node* right; }; 编写函数以释放这些节点的树。 限制条件: 无法使用递归(甚至不能间接使用) 无法分配任何动态空间进行跟踪。 注意有一个O(n)解 优胜者: 最佳复杂性。 抢七局:首先提交 抢七局:最少的字符。

10
天气预报
编写最短的程序来预测未来7天的天气 输入(来自stdin)是工作日和季节 (到标准输出)的输出是工作日的七行,温度为摄氏度 工作日从输入的工作日开始 温度是随机数字,其范围取决于季节 弹簧10-30度 夏季20至40度 秋季5-25度(秋季是秋季的代名词) 冬季-5-15度 样本输入 Thursday Winter 样本输出 星期四-1 星期五3 星期六8 星期日7 星期一10 星期二10 星期三-1 每次使用相同的输入运行您的程序时,其输出都不得相同
13 code-golf  random 

9
教堂减法
教堂减法 Lambda演算一直是我的迷恋,并且将函数相互传递的新出现的行为令人愉快地复杂。教堂数字是自然数的表示,该自然数是由函数的重复应用构成的(通常是常数的一元加法)。例如,数字零返回x并“忽略”输入函数,一个为f(x),两个为f(f(x)),依此类推: ident = lambda x: x zero = lambda f: ident succ = lambda n: lambda f: lambda x: f(n(f)(x)) one = succ(zero) add1 = lambda x: x + 1 to_int = lambda f: f(add1)(0) print(to_int(one)) >>> 1 由此我们可以很容易地看到,通过将第一个函数应用于x然后将第二个函数应用于x可以完成加法运算: add = lambda m: lambda n: lambda f: lambda x: …

2
计数广义多胺
这项挑战将使您在缓冲正方形平铺上计算伪多边形。 我认为该序列在OEIS上尚不存在,因此在为该序列计算尽可能多的项方面存在挑战。 更新:这现在在OEIS上显示为A309159:n个单元格的缓冲正方形平铺上的广义多形形式的数量。 定义 缓冲正方形平铺是由等边三角形和正方形组成的平面的半规则平铺。 缓冲正方形瓷砖上的伪多边形是通过将这些三角形和正方形沿着它们的共享边连接在一起而构造的平面图,类似于多米诺骨牌。这是一个六单元格和八单元格伪多边形的示例: 例子 因为n = 1有两个1单元格伪多边形,即正方形和三角形: 因为n = 2有两个2单元格伪多边形,即一个带有一个三角形的正方形和两个三角形。 因为n = 3有四个3单元伪多态。 挑战 挑战的目标是按此顺序计算尽可能多的项 2, 2, 4, ...且第n个项是直至旋转和反射的n单元伪多形式的数量。 只要您愿意,就可以运行您的代码。挑战的胜者将是发布序列中最多术语以及其代码的用户。如果两个用户发布相同数量的条款,则以最早发布最新条款的人为准。 (一旦有足够的已知术语证明该序列在OEIS中尚不存在,我将在OEIS中创建一个条目,并根据需要将投稿人列出为合著者。)

30
确定澳大利亚足球比赛的获胜者
在澳大利亚足球中,进球价值6分,而落后价值1分。分数可能包括进球数和落后数以及总得分。给定两个不同球队的进球数和落后数目,确定哪个球队赢了比赛。 以四个整数g1, b1, g2, b2作为输入,并输出两个不同的值来表示输入的第一支球队还是第二支球队获胜。输入格式是灵活的,但是输入顺序必须使它显而易见,哪个团队在第一位。例如,g1, g2, b1, b2将被允许​​,但b1, g2, g1, b2不允许。 测试用例 测试用例将true用于第一队的获胜和false第二队的获胜。输入采用格式(g1,b1),(g2,b2)。 (1,0),(0,1) true (2,0),(0,11) true (10,8),(11,1) true (0,0),(1,0) false (100,100),(117,0) false (7,7),(5,12) true (2,0),(0,13) false 作为一个例子,对于输入(10,8),(11,1),球队1打入10个球和8个屁股,共计10 * 6 + 8 * 1 = 6810∗6+8∗1=6810*6+8*1=68点,而队2得分11 * 6 + 1 * 1 = 6711∗6+1∗1=6711*6+1*1=67点,这样球队1胜。 没有输入将成为绘图-程序在绘图输入上的行为无关紧要。

28
最短的十六进制转储程序
挑战 创建一个控制台程序以显示文件的每个字节。 获奖 由于这是代码高尔夫球,因此最少的字节获胜。 规则 程序必须是控制台应用程序,这意味着它将从某种命令行解释器运行; 每个字节必须为大写十六进制,并以空格分隔,并且必须为2位数字。(如果有1位数字,则将数字0放在前面) 必须使用IO或其他方式读取文件,并且不进行硬编码; 文件路径必须指定为命令行参数或用户提示符(如STDIN); 请没有漏洞 ; 例 test.txt(以LF结尾) Hello World! $ ./hexdump.exe test.txt 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 0A
13 code-golf 

3
实施强大的Darboux功能
根据Wikipedia的说法,强大的Darboux功能是 每个(非空)打开间隔的图像都是整个实线 换句话说,如果给定3个任意实数a,b和y,则函数fff强烈是Darboux ,总是有可能在a和b之间(相异)找到一个x,使得f (x )= y。aaabbbyyyxxxaaabbbf(x)=yf(x)=yf(x) = y 出于这一挑战的目的,我们将强烈考虑使用Darboux函数代替理性。 您面临的挑战是编写一个程序或函数以: 给出每个有理数输入的有理数作为输出, 对于给定的输入,总是给出相同的输出,并且 具有强烈的Darboux属性。 输入和输出可以是以下之一: 一种任意精度的数字类型,如果您的语言有一种(或具有一种用于该语言的库,例如GMP)。 数字的字符串表示形式,您可能会假设该数字将始终包含小数点,并且在每一侧至少包含一位数字。它可以是任何碱b≥2b≥2b \geq 2,但输入和输出必须是相同的基。您可以使用任何字符集作为数字和小数点(但同样,输入和输出之间的字符必须一致)。 输入将始终具有终止基数bbb扩展。至于输出,根据您对功能的选择,理论上它的基数bbb可能会是不终止的,您可以选择以下任意一种: 永远输出数字。 接受一个额外的整数作为输入,并输出至少那个位数。 输出至少与输入中的数字一样多的数字(可能包含尾随零)。 注意,通过这一挑战的性质,约定数可假定为是通过标准编号类型可表示没有不适用,除了在上面的选项2中描述的第二输入端。 为避免仅在非终止理性上定义的函数出现漏洞,您的提交必须能够在实践中任意产生接近所需值的输出。形式上,给定有理数aaa,bbb,yyy和εε\varepsilon,必须有一个以您选择的底数终止的有理数xxx,使得a&lt;x&lt;ba&lt;x&lt;ba<x<b和|f(x)−y|&lt;ε|f(x)−y|&lt;ε|f(x)-y|<\varepsilon。 为了给您一些想法,以下是Conway base 13函数的说明: 将xxx转换为以13为底并删除小数点。 如果结果的格式为[x]A[y]C[z]13[x]A[y]C[z]13[x]A[y]C[z]_{13},其中[y][y][y]和[z][z][z]仅由0到9的数字组成,则f(x)=[y].[z]f(x)=[y].[z]f(x) = [y].[z]。 如果结果的格式为[x]B[y]C[z]13[x]B[y]C[z]13[x]B[y]C[z]_{13},其中[y][y][y]和[z][z][z]仅由0到9的数字组成,则f(x)=−[y].[z]f(x)=−[y].[z]f(x) = -[y].[z]。 否则,f(x)=0f(x)=0f(x) = 0。 此功能强烈地是Darboux。例如,假设我们要在123.456 13和123.457 13之间找到一些xxx,以使f (x )= 7.89。以13为基的值123.456 A 7 C 89 13将满足此要求。123.45613123.45613123.456_{13}123.45713123.45713123.457_{13}f(x)=7.89f(x)=7.89f(x) = …
13 code-golf  number 

2
谁能逃脱一元游戏?
Nonary Game是一款虚构的游戏,使用同名的电子游戏三部曲进行。您的目标是找到尽可能少的代码字节(最多)可以让给定游戏逃脱的玩家人数。 游戏规则 有9位玩家,编号从1到9。 所有玩家都从同一房间开始。 门的数量不限,每个门的编号为1到9。门号可能重复或丢失。 门是房间之间的单向连接。每个门只能使用一次。 只有3至5名球员的团体才能进入。 如果一组人的模数之和为9与门的模数为9相匹配,则该组只能穿过门。 任何经过9门的玩家都会逃脱(获胜)。 例子 ┌───┬───┬───┐ │ 6 4 9 │ &lt; │ | | │ 3 5 9 └───┴───┴───┘ &lt;代表起点。所有玩家都从这里开始。 在这种情况下,每个人都可以逃脱。有多种方法可以实现此目的,其中一种是: [1、2、3、4、5]经过6号门((1 + 2 + 3 + 4 + 5)%9 = 6),而[6、7、8、9]通过3号门((6 + 7 + 8 + 9)%9 = 3)。大家在第二个房间见面。 [1、2、3、7]穿过门4,而[4、5、6、8、9]穿过门5。 [1、2、3、4、8]穿过9个门之一,[5、6、7、9]穿过另一个门。 ┌───┬───┐ …
13 code-golf  game 

7
找出字图的直径
介绍 一个流行的单词拼图是通过一系列步骤将一个单词转换为另一个单词,这些步骤仅替换一个字母,并且始终生成有效的单词。例如,可以通过五个步骤将BAG转换为DOG: 袋-&gt; BAT-&gt;猫-&gt; COT-&gt; COG-&gt;狗 在这种情况下,路径也较短。例如: 袋-&gt;沼泽-&gt;狗 如果绘制了一个图,其顶点被单词标记,则任何一对单词之间的边距相差一个字母,则从“ BAG”到“ DOG”的最短路径将由两个边组成。 挑战 您将要编写一个程序,该程序接收所有长度相同的单词的“字典”作为输入,这些单词代表所有可能出现的单词,这些单词可以沿路径显示为台阶。它应至少输出一个“最长最短路径”,即两个单词之间的路径: 不超过这两个词之间的任何其他路径; 至少与列表中任何其他单词对之间的最短路径一样长。 在上述图表的上下文中,这种路径的长度就是图表的直径。 在简并的情况下,所有输入单词都不能转换成其他任何单词,输出至少一个长度为零的路径,即单个单词。 例子 输入[“ bag”,“ bat”,“ cat”,“ cot”,“ dot”,“ dog”]应产生一条以该顺序(或相反顺序)遍历所有六个单词的路径,因为从“这个字典中“ bag”到“ dog”是最长的,五个步骤。 输入[“ bag”,“ bat”,“ bot”,“ cat”,“ cot”,“ dot”,“ dog”]应产生路径“ bag,bat,bot,dot,dog”和/或其路径逆转。 输入[“ code”,“ golf”,“ male”,“ buzz”,“ mole”,“ role”,“ mold”,“ cold”,“ gold”,“ mode”]应产生“ code”之间的路径和“高尔夫”。 输入[“ one”,“ …
13 code-golf 

7
打印所有“带引号”字符的总长度
规则 在这个挑战中,我将重新定义“引号”的定义。 引号(AKA 引号)是在各种书写系统中成对使用的任何相同字符,用于引出直接语音,引号或短语。该对包括一个引号和一个引号,它们是相同的字符(区分大小写)。 如果有报价对彼此重叠, 如果一对嵌套,则两个对仍然有效。 如果一对未嵌套,则第一个起始对保持有效。另一个不再被视为一对。 计算带引号的字符(一对引号的长度)时, 引号本身不计算在内。 每对的长度独立计算。重叠不会影响另一个。 目标 您的目标是打印所有有效报价的总长度。这是代码高尔夫球,因此字节最少的代码获胜。 例子 Legend: &lt;foo&gt;: Valid quotes ^ : Cannot be paired character Input : ABCDDCBA `A` (6): &lt;BCDDCB&gt; `B` (4): &lt;CDDC&gt; `C` (2): &lt;DD&gt; `D` (0): &lt;&gt; Output : 12 Input : ABCDABCD `A` (3): &lt;BCD&gt; `B` (0): ^ …

29
集合的第N个子集
任务 鉴于设置 小号= [ 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ]S=[1,2,3,4,5,6,7,8]S = \left[{1,2,3,4,5,6,7,8}\right] 和一个整数 0 ≤ Ñ&lt; 2| 小号|0≤N&lt;2|S|0 \leq N < 2^{|S|} 找到第N个子集。 输入输出 N在stdin上以无符号整数形式给出。您必须打印适合您的语言格式的第N子集(这可能包括[1,2,3],{1,2,3},[1, 2, 3],1 2 3,1,2,3等,只要它是人类可读的文本格式)。 关于子集的一点 在基数二中,子集和数字之间存在关系。每个数字 指定该集合的第i个元素是否在子集中。例如,00000000是空集,而10000001是包含(最后一个元素和第一个元素)的子集。通过将数字转换为基数2得到第N个子集,然后该子集包含所有元素。因此,第三个子集(3 = 00000011)包含。最右边的数字是数字#0。可以打印。该集不必排序。d一世did_{i} d i &gt; 0[1,8]d一世&gt; 0di&gt;0d_{i} > 0[1,2][2,1] 附录: 是的,集合固定为1..8。该集合不是输入的一部分。输入只是ñ。 是的,您可以使用其他输入形式。 所有N的所有预期输出:https : //tio.run/##SyotykktLixN/f/fyNS02qIoP8soJd1CwSAg2kY32LPWPaoqs7jg/38A
13 code-golf 

4
在python的128个字节内获得最低的pylint分数
pylint没有分数的下限,它将给您的代码。它使用以下指标对代码进行评分,最高分为10: 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) 使用python 3.6,尝试编写一个程序: 从命令行运行时输出“ Hello World”(即python script.py),没有其他输出。 在pylint默认设置下,从中获取最低的得分(例如pylint script.py) 严格小于或等于128个字节。

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.