编程拼图和代码高尔夫

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

4
旋转矩阵中的每一行和每一列
挑战 给定一个n x n整数矩阵n >= 2 1 2 3 4 以及具有确切2n元素的整数列表 [1,2,-3,-1] 输出旋转的矩阵。该矩阵的构造方式如下: 取列表中的第一个整数,然后将此值向右旋转第一行。 取下一个整数并将第一列向下旋转此值。 取下一个整数并将第二行向右旋转此值,依此类推,直到将矩阵的每一行和每一列旋转一次。 该列表可以包含负整数,这意味着您将行/列向左/上移,而不是向右/下移。如果整数为零,请不要旋转行/列。 使用上面输入的示例 列表元素矩阵说明 -------------------------------------------------- ---------- 1 2 1将第一行右移1 3 4 2 2 1将第一列向下旋转2 3 4 -3 2 1将第二行左移3 4 3 -1 2 3将第二列向上旋转1 4 1 规则 您可以选择最方便的输入格式。只需弄清楚您使用的是哪一个即可。 允许功能或完整程序。 输入/输出的默认规则。 有标准漏洞。 这是代码高尔夫球,因此最低字节数获胜。Tiebreaker是较早提交的内容。 测试用例 输入格式是矩阵列表的列表和整数的普通列表。 [[1,2],[3,4]],[1,2,-3,-1]-> …

4
用ASCII艺术建造一个简单的房间
一个房间可以由相连的矩形组成,例如L形房间。这样的房间可以通过描述每个矩形尺寸的尺寸列表来描述。 假设您有两个输入列表。第一个包含彼此垂直垂直堆叠的矩形的宽度。第二个包含矩形的高度。 例如,输入[4 6][3 2]将是6 x 2矩形顶部的4 x 3矩形。下图显示了此形状。请注意,墙壁被认为是“薄”的,因此,墙壁之间的空间取决于输入。 [4 6][3 2] ____ | | | | | |_ | | |______| 面临的挑战是:将尺寸列表作为输入,并以ASCII艺术形式输出房间的形状。格式必须与示例图中的一样: 所有水平墙均使用下划线显示 所有垂直墙均使用条形图显示 矩形连接处不得有墙 左墙是直的 有关更多详细信息,请查看测试用例 您可以做出的假设: 所有尺寸均在范围内 [1 ... 20] 所有的卧式尺寸为偶数 矩形数将在范围内 [1 ... 10] 仅给出有效输入 可选的输入格式(您可以确定输入尺寸的顺序,请在答案中指定)。 测试用例: [2][1] __ |__| --- [4][2] ____ | | |____| …

18
排序矩形矩阵
给定一个矩阵A,我们可以说,如果矩阵的每一行和每一列都A被排序(对行从左到右,对列从上到下,则是“已排序” )。因此,该矩阵被排序: [ 1 2 3 4 5 ] [ 2 2 3 4 5 ] [ 3 3 3 4 5 ] [ 4 4 4 4 5 ] [ 5 5 5 5 5 ] 但是,此矩阵未排序: [ 1 2 3 4 5 ] [ 2 1 3 4 …

5
离外部有多远?
取一个2D空间区域,该区域划分为以轴对齐的单位正方形元素,其中心以整数间隔对齐。如果一条边由两个元素共享,则称该边为内部,否则为外部边。 您的目标是找到从每个元素的中心开始(即traversal distance或distance简称为)到达外部边缘必须经过的最小数量的相邻元素。您只能穿过一条边缘(即没有切角/对角运动)。注意,“外部元素”(具有至少一个外部边缘的元素)被认为需要遍历0相邻元素才能到达外部边缘。 输入值 输入是一个非负整数对坐标的列表,表示所有元素中心的(x,y)。假定不存在重叠元素(即x / y对唯一标识一个元素)。您可能不假定有关元素输入顺序的任何信息。 欢迎您将输入的原点转换到任何位置(例如0,0或1,1,等等)。 您可以假定所有输入元素都已连接,或者换句话说,可以使用上述规则从任何一个元素移动到任何其他元素。注意,这并不意味着2D区域只是简单连接。里面可能有孔。 示例:以下为无效输入。 0,0 2,0 不需要错误检查。 输入可以来自任何来源(文件,stdio,函数参数等) 输出量 输出应该是标识每个元素的坐标列表,并遍历相应的整数距离以到达边缘。输出可以按所需的任何元素顺序进行(例如,您不必按与输入相同的顺序输出元素)。 输出可以是任何源(文件,stdio,函数返回值等) 任何与元素的坐标与其外部距离匹配的输出都可以,例如,所有这些都可以: x,y: distance ... [((x,y), distance), ...] [(x,y,distance), ...] 例子 文本示例输入的格式为x,y,每行一个元素;欢迎您将其重塑为方便的输入格式(请参阅输入格式规则)。 文本示例输出的格式为x,y: distance,每行一个元素;同样,欢迎您将其重塑为方便的输出格式(请参见输出格式规则)。 图形数字的左下边界为(0,0),内部数字表示到达外部边缘的预期最小距离。请注意,这些数字仅用于演示目的;您的程序不需要输出这些。 例子1 输入: 1,0 3,0 0,1 1,2 1,1 2,1 4,3 3,1 2,2 2,3 3,2 3,3 输出: 1,0: 0 3,0: 0 …

18
倒置png图片
创建以文件名作为参数或从标准输入中读取文件名的程序或函数,并完成以下任务: 从png文件(名称作为参数)中读取图像。 反转该图像中的颜色,以便例如深绿色(0、75、30)变为(255、180、225)(因为255-0 = 255、255-75 = 180和255-30 = 225)。您不应更改Alpha通道值。 将该图像输出到一个名为a.png(png格式)的文件,或在GUI窗口中显示。 这是代码高尔夫球。有标准漏洞。

4
周五的返程:重新编号我的ZX Spectrum BASIC列表
我接触到的第一种编程语言是Sinclair BASIC。像许多BASIC方言一样,它要求对所有源代码行进行编号。 结果,该GO TO命令的使用是惯用的,并且将执行跳转到给定的行号(无标签)。 还有一个相关的GO SUB命令,可以用作基本功能调用。同样,执行跳到给定的行号,但是当RETURN到达命令时,执行跳回到下一个指令GO SUB。 同样,该RUN命令将在给定的行重新开始程序执行。 在行号BASIC解释器中花了任何时间的任何人都将学会使用带空格的编号方案。这样可以更轻松地插入新的代码行。但是即使那样,您仍然可能发现自己需要在连续编号的行之间插入新行。 给定行号为BASIC的列表作为输入,输出相同的程序,但重新编号,以使行号从10开始并以10递增。输入列表可能具有GO TO或GO SUB命令,因此也必须调整与它们相关的数字。 GO TO和GO SUB命令位于单独的行或行的末尾IF THEN。可以肯定地说^(\d+) .*GO (TO|SUB) (\d+)$,足以匹配这样的界线。这些带引号的命令应被忽略。 RUN命令将始终保持独立。在这种情况下,行号是可选的。如果缺少它,那么解释器仅从程序顶部开始。 如果一个GO TO,GO SUB或RUN命令引用不存在的线,那么这反而跳转到下一个定义的线。您的输入需要处理此问题,并确保所有此类行引用均已修复,以便它们指向正确的行。如果在这些命令之一中给出了程序结束后的行号,则行为可能不确定。 行号将始终为1到9999之间的正整数(根据手册)。这意味着输入程序永远不会超过999行。 输入行将始终以数字升序编号。 出于此挑战的目的,输入列表将仅包含可打印的ASCII。您无需担心ZX字符集。话虽如此,如果您的条目实际上是写在ZX BASIC或适当的Z80汇编/机器代码(也有模拟器了那里),那么你可以选择你的投入在编码ZX字符集来代替。 您不得使用专门为此目的量身定制的任何重新编号库或实用程序。 输入示例: 1 REM "A rearranged guessing game" 2 INPUT A: CLS 3 INPUT "Guess the number ", B 10 IF A=B THEN …
15 code-golf 

1
同色算术级数
范德瓦尔登定理说 对于任何给定的正整数r和k,都有一些数字N,如果这些整数{1, 2, ..., N}是有色的,每一个都具有一种r 不同的颜色,则k在算术级数中至少存在所有相同颜色的整数。最少的N是Van der Waerden数W(r, k)。 您的目标是给W(r, k)定正整数输入r和来计算范德瓦尔登数k。最少的字节数获胜。 请注意,此功能增长非常快,并且计算耗时。甚至W(4, 4)是未知数。您可能会假设您的代码在资源(时间,内存,堆栈深度等)无限制的理想计算机上运行。理论上,即使对于未知答案的值,您的代码也必须给出正确的答案。 不允许使用计算此功能的内置程序。 例 对于r = 2长度的颜色和渐变k = 3,存在8避免这种渐变的长度序列,即3相同颜色的等距元素: B R R B B R R B 但是,没有这样的长度9序列W(2, 3) == 9。例如, R B B R B R R B R ^ ^ ^ 包含所示的长度3相同颜色的算术级数。 测试用例 您可能只能测试小案例。 +-----+-----+-----+-----+-----+-----+------+ | | …

3
飞船去哪儿了?
基于Zgarb提出的想法。 宇宙飞船在规则的3D网格周围移动。网格的单元格在右手坐标系xyz中用整数索引。太空飞船从原点开始,沿x轴正方向指向,z轴正方向向上。 飞船将沿着由非空运动序列定义的轨迹飞行。每个运动要么是F使飞船朝其朝向移动一个单元的(向后)方向,要么是六个旋转之一UDLRlr。这些对应于以下的俯仰,偏航和横滚: 感谢Zgarb创建该图。 Up和D自己将飞船的俯仰改变90度(方向对应于飞船鼻子的运动)。 L和 R左右将飞船的偏航角改变90度。它们只是常规的左转和右转。 l和 r向后是90度的侧倾运动,方向指示哪个机翼向下运动。 请注意,应该始终相对于飞船解释这些内容,以便相关的轴随之旋转。 用数学术语来说,宇宙飞船最初位于位置(0, 0, 0),沿着(1, 0, 0)矢量(0, 0, 1)指向,指向上方。旋转对应于应用于坐标系的以下矩阵: U = ( 0 0 -1 D = ( 0 0 1 0 1 0 0 1 0 1 0 0 ) -1 0 0 ) L = ( 0 -1 0 R …

3
对N-Bonacci序列进行逆向工程
编辑:我将在2016年2月15日星期一接受答案。愿字节永远对您有利! @DJMcGoathem 在他的“打印N-Bonacci序列”挑战中,描述了N-bonacci序列,其中之前的N个数字相加,而不是斐波纳契序列的传统2个(称为“ 双 nacci序列”)。然后,他要求输入两个输入X和N,然后输出第X个N -nacci数。 我提出相反的建议。 给定一个序列,输出它是N -nacci序列的子集。我之所以说“子集”,是因为: A)这些序列是无限的 B)如果给定序列的开始,则可以只计算前导1的数量 如果它可能属于多个N -nacci序列,请选择最低的序列。 如果它不属于任何N-nacci序列,则您的程序可能会执行其他操作,而不是打印可能会误输出的内容。这些行为包括(但不限于):无限循环,错误,崩溃,删除自身(*咳嗽* 保持警惕 *咳嗽*)或创建黑洞(只要该黑洞不会产生任何可能被误认为是有效输出)。 为了应对这一挑战,这些序列以1开头。这意味着任何N -nacci序列都以N开头。此外,N必须为正整数。所以没有-1 -nacci等 测试用例: 1,1,1 -> 1 49, 97 -> 7 55, 89, 144 -> 2 1 -> 1 6765 -> 2 12, 23, 45, 89 -> 12 100, 199 -> 100

3
斐波那契的六进制
莱昂纳多·达·皮萨诺( Leonardo da Pisano)又名斐波那契( Fibonacci)在将印度-阿拉伯数字系统引入欧洲方面发挥了作用。在此之前,那里的数学家使用罗马数字以60为底数。 例如,两个的平方根可以近似为:一和二十四分之六十和五十一分之三千六百六十,写为:i xxiv li,其缩放比例取决于上下文。当时,“虚无”是已知的(即零),但在此数字系统中没有标准表示形式。 如果斐波那契忽略了他在旅途中遇到的这些新的十进制数字,他肯定会解决当前系统中的缺陷。这个改进的系统称为斐波那契(Fibonacci)的sexagesimals。 您的任务是编写一个程序,函数或代码片段,该片段采用ASCII或二进制格式的浮点数,并以60个基数罗马数字输出。输入可以是文件,控制台,命令行或函数参数,输出可以是文件或控制台,以最简单的为准。 输出可以是大写或小写,并且必须包括以下改进: 使用n或N表示空值,表示某个地点没有值,即 “零”(系统存在问题) 使用ë或ë以指示等对应于所述六十进制点(与系统的另一个问题) 使用中间的点·或星号*分隔罗马数字组(但系统还有另一个问题) 假设输入将是浮点数,尾数不大于lix·lix·lix·lix·lix。小于n·e·n·n·n·n·i的分数可以忽略。因此,如果输入具有这些限制,则最多可以输出十组带有一个e的罗马数字。 小于i的数字必须以n开头,以确保上下文清晰。 一些示例:input→ 输出 0→ n 1→ 我 60→ 我 0.1→ n·e·vi 3600→ i·n·n 10.5→ x·e·xxx 16777215→ i·xvii·xl·xx·xv 3.1415926536→ iii·e·viii·xxix·xliv·n·xlvii 输出必须避免在输出的尾数部分中不必要的前导n·,孤立的e或末尾的n。因此,例如,n·n·n·n·i,i·e和i·e·n·n·n·n·n是输入的不正确输出1。 输出中正负n·e·n·n·n·n·i的差在允许范围内且可以接受。 输入是您选择的语言中的任何合法浮点,因此只要输入不超出上述指定范围,就可以包含正或负指数。 最后,罗马数字内置插件是不允许的!

4
计算绕组数
的绕组数是净逆时针转观察者必须作出遵循给定闭合路径的整数。请注意,任何顺时针旋转都会对绕组数计数为负。路径允许自相交。 下面给出了一些示例(从Wikipedia中无耻地摘录): 您的目标是计算给定路径的绕组数。 输入值 假定观察者在原点(0,0)。 输入是来自任何所需输入源的有限点序列(整数对类似),描述了分段线性路径。如果需要,可以将其展平为一维整数序列,也可以使输入模糊不清,以在所有y坐标之前取所有x坐标,反之亦然。您也可以将输入作为复数a+b i。路径可能会自相交,并且可能包含零长度段。第一点是路径的起点,假定位于正x轴上的某处。 路径的任何部分都不会与原点相交。路径将始终是封闭的(即,第一个和丢失的点是相同的)。您的代码可能暗示最后一点,也可能要求将其包括在内。 例如,根据您的喜好,两个输入都指定相同的正方形: 隐含终点 1,0 1,1 -1,1 -1,-1 1,-1 明确的终点 1,0 1,1 -1,1 -1,-1 1,-1 1,0 输出量 输出是绕组号的单个整数。这可以指向任何源(返回值,stdout,文件等)。 例子 所有示例都明确定义了端点,并以x,y对的形式给出。顺便说一句,假设隐式定义的端点,您也应该能够将这些示例直接输入任何代码中,并且输出应该相同。 1.基础测试 1,0 1,1 -1,1 -1,-1 1,-1 1,0 输出量 1 2.重复点测试 1,0 1,0 1,1 1,1 -1,1 -1,1 -1,-1 -1,-1 1,-1 1,-1 1,0 输出量 1 3.顺时针测试 …

17
应用基尔霍夫定律
基尔霍夫定律说,当您对所有电流求和时(流向结点的电流为正,而离开结点的电流为负),您将始终得到结果0。 看下图: 使用基尔霍夫定律,您可以看到i1 + i4-i2-i3 = 0,所以i1 + i4 = i2 + i3。 给定两个列表,一个列出所有电流进入结点,另一个列出所有电流离开结点(除了一个),输出最后一个。 测试用例: [1, 2, 3], [1, 2] = 3 [4, 5, 6], [7, 8] = 0 [5, 7, 3, 4, 5, 2], [8, 4, 5, 2, 1] = 6 第二个列表总是比第一个列表少一个项目。输出不能为负。最小的程序获胜。

5
堆积块
给定输入要在某些点放下的块的列表,请输出结果“塔”的高度。 解释此挑战的最佳方法是通过示例。输入将是2n个代表n个块的整数的列表。第一个整数是块的x位置(从0开始),第二个整数是块的宽度。例如,输入2 4代表该块(下面标有x坐标): #### 0123456789 现在,假设输入为2 4 4 6。也就是说,x = 2处的一个块的宽度为4,x = 4处的一个块的宽度为6: ###### #### 请注意,a。)块始终从塔的顶部“掉落”,b。)块永远不会“掉落”(即,它们始终保持平衡)。因此,输入的 2 4 4 6 12 1代表: ###### #### # 请注意,最后一块已经完全落到了“地面”上。 您的最终输出应该是每个x值处塔的最大高度,直至最大。因此,输入2 4 4 6 12 1应产生输出 0011222222001: ###### #### # 0011222222001 输入可以以空格/逗号分隔的字符串,整数数组或函数/命令行参数的形式给出。块位置(x值)将始终为0或更大的整数,宽度将始终为1或更大的整数,并且始终至少有一个块。 输出可以是由非数字字符(例如"0, 0, 1, ...")分隔的单个字符串,列出所有数字的单个字符串(例如 "001..."-保证最大高度为9或更小)或整数数组。 由于这是code-golf,因此以字节为单位的最短代码将获胜。 测试用例: In Out --------------------------------------------------------- 2 4 …
15 code-golf 

2
苹果掉下来了
介绍 x轴上的苹果树干位于-2到2之间,一些苹果掉落在它周围: | | | | <-------|---|-------> -2 2 每天,有n个苹果掉下来。每个苹果都保持其x坐标,直落在地。 但是,如果它落在另一个苹果的顶部,它将按照以下规则滚动,直到到达地面或苹果的支撑层: 如果当前高度的x + 1处的空间为空,则当前的苹果会去那里。 否则,如果x-1处的空间为空,则当前的苹果进入该位置。 否则,当前苹果将停留在该其他苹果之上。 挑战 输入将按顺序是每个苹果的n个起始位置。您可以将其视为数组或分隔数字,也可以采用其他任何有效方式,只需确保在答案中对其进行了解释即可。 输出应该是树干和周围苹果的ASCII绘图。您不需要在最左边的苹果的左侧和最右边的苹果的右侧绘制x轴,但是您确实需要在某些苹果下方的任何位置绘制x轴。您还可以将树扩展到最高苹果上方。 您可以假设所有x坐标都在-100和100之间,但不在-2和2之间。 这是代码高尔夫球 ..以字节为单位的最短答案胜出! 例子 输入: [-3, 5, 5, -4, -4, 5, -3] 输出: a| | aaa| | aaa ---|---|---- 输入: [3, 3, 3, 3, 8, 9] 输出: | |a | |aaa …

10
整数序列中的代码字
介绍 Pareidolia:来自古希腊语;παρα(para,“并发,并排”)+ εἴδωλον(eídōlon,“ image”)。倾向于将模糊的刺激解释为观察者已知的东西,例如将火星上的标记解释为运河,看到云中的形状或听到音乐中的隐藏信息。资料来源:维基词典。 例如: 旁白:来自古希腊;παρα(para,“并发,并排”)+ λόγος(lógos,“语音,演说,单词,...”)。倾向于以任意字符序列感知单词,例如在代码高尔夫程序中。资料来源:是的,我编造了这个词(实际上,@ Martin指出,该词还具有其他含义)。 例如: df4$/H)hEy_^p2\ jtK2$)look|x1$ 挑战 编写一个程序,以正整数作为输入,生成一个整数作为输出,并在代码中包含一个英文单词。输入输出关系必须对应于OEIS中可以找到的整数序列。 规则 仅允许该列表中的单词。诚然,这是任意的,但至关重要的是,我们都同意接受哪些词。就此而言,此列表可能与其他列表一样好。 单词需要通过串联至少两个函数名称或语句来形成。例如,如果您的语言具有一个称为的函数correlation,则不能原样使用。串联必须严格:单词的各个部分之间不应出现其他符号。例如,bro~ken不会算作单词。 案例是不重要的:既valid和vaLiD是可以接受的。 字符串中的单词不计算在内。组成单词的字母必须是所选语言中的函数或语句,即实际执行的东西。例如,将不允许以下代码:'deoxyribonucleic'~1,其中'...'为字符串,~丢弃先前的内容,1仅打印number 1。 单词的每个字母都应该是必要的。这意味着从单词中删除单个字母应该会更改输入输出关系。这包括输出不同的序列,或输出任何其他东西,或不产生输出,或引起错误。 除数据类型或内存限制外,任何正整数都应可接受作为输入,并应产生输出。 对应于输入的输出1,2,3,...应当对应于出现在序列OEIS。不应产生其他输出;仅整数,可能带有尾随或前导空格。 输入和输出可以是函数参数或stdin / stdout。 得分了 分数计算为总代码长度减去最长单词长度(以字符为单位)的两倍。或等效地,非最长单词字符数减去最长单词的长度。 最低分获胜。 例子 考虑一种具有以下功能的假想后缀语言c:At:计算平方;$:加1。 cAt将是一个有效的程序(其输出对应于序列1,4,9,...,这是A000290),它会有得分-3。 cAt$也将是有效的(序列2,5,10,...,这是A002522),与分数-2。 c$At 无效,因为这里唯一的单词是“ At”,并且是由单个函数或语句产生的。
15 code-golf  number  word 

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.