Questions tagged «code-golf»

Code-golf是在最小的源代码字节中解决特定问题的竞赛。

16
星期一迷你高尔夫#4:JARVIS(又一大套整数序列)
星期一迷你高尔夫:每个星期一发布一系列简短的代码高尔夫问题(希望!)。 (对不起,我又迟到了;昨天和今天基本上都离开了我的电脑。) 美国程序员(尤其是代码高尔夫球手)肯定喜欢任意整数序列。我们甚至拥有一个专门用于这些序列的完整站点,目前大约有200,000个条目。在这个挑战中,我们将实现另一组这些序列。 挑战 您面临的挑战是编写一个程序或函数,该程序或函数采用整数N,并输出以10为底的整数序列,其中每个下一个整数都是通过以下方式确定的: 从1开始 对于先前整数的以10为底的表示形式的每个数字D: 如果D为0,则将当前整数加1。 否则,乘以目前的整数d。 细节 您可以假设0 < N <2 31。 您必须从输入数字开始输出序列中的每个整数,直到达到小于10的数字。 输出可以是数组,也可以是由空格,逗号,换行符或它们的组合分隔的字符串。 允许使用尾随空格和/或换行符,但不能使用尾部逗号。 永远不应有任何前导零。 例子 范例1: 77 这个例子很简单: 77 = 1*7*7 = 49 49 = 1*4*9 = 36 36 = 1*3*6 = 18 18 = 1*1*8 = 8 因此,正确的输出为77 49 36 18 8。 范例2: 90 …

7
看他们像多米诺骨牌一样倒下
您住在一个80字符宽的终端中。您很无聊,所以决定玩多米诺骨牌。不,不是像Scrabble这样的无聊类型,它是一种有趣的类型,您花一个小时设置它们,以观察它们在一秒钟内掉落。 在终端中,多米诺骨牌如下所示: | upright domino \ left-tilted domino / right-tilted domino __ fallen domino 众所周知,如果倾斜的多米诺骨牌碰到一个直立的多米诺骨牌,那么第二个多米诺骨牌也会倾斜。唯一的例外是两个倾斜的多米诺骨牌碰到它: |\ --> \\ /| --> // /|\ --> /|\ 调整终端的重力常数,使此转换过程需要100毫秒。 如果倾斜的多米诺骨牌是由另一个多米诺骨牌或航站楼的墙壁支撑的,则旅程结束。 没有倾斜的多米诺骨牌 \||||____||||/__ /|\ /\ /|\ __\||||____||||/ (80个字符)将移动,因为两个最向外倾斜的多米诺骨牌由终端墙支撑,而所有其他倾斜的多米诺骨牌均由其他多米诺骨牌支撑。 但是,如果倾斜方向上的空间为空,则多米诺骨牌会掉落: | \\ --> |__\ // | --> /__| 终奌站。引力常数。你明白了…… 最终,左边有一点风,所以右倾斜的多米诺骨牌下降得比左倾斜的多米诺骨牌快: |/ \| --> |__\| 任务 编写一个程序/函数,以显示在终端中播放多米诺骨牌的动画。 …

4
优化SKI编译器
该SKI演算是不使用Lambda表达式lambda演算的变体。相反,只有应用程序和组合器S,K,和我使用。在此挑战中,您的任务是将SKI术语转换为β范式的 Lambda术语。 输入规格 输入是以下文本表示形式的SKI术语。您可以选择接收可选的尾随换行符。输入是由字符S,K,I,(,和)与满足以下语法(在ABNF形式)sterm作为起始符号: sterm = sterm combinator ; application sterm = combinator ; sterm = '(' sterm ')' ; grouping combinator = 'S' | 'K' | 'I' ; primitives 输出规格 输出是以下文本表示中没有自由变量的lambda术语。您可以选择输出可选的尾随换行符。输出应满足以下ABNF格式的语法:lterm并以开始符号表示: lterm = lterm operand ; application lterm = ALPHA '.' lterm ; lambda lterm = operand operand = …

6
绘制千鸟格图案
编写一个程序或函数,使用两个正整数(宽度和高度),并使用此25×26文本网格作为基本单元,绘制具有这些尺寸的ASCII艺术千鸟格网格模式: .......#.....#####....... .......##.....#####...... .......###.....#####..... .......####.....####..... .......#####.....###..... .......######.....##..... .......#######.....#..... .......########.......... ####################..... .####################.... ..####################... ...####################.. ....####################. .....#################### #.....##############.#### ##.....#############..### ###....#############...## ####...#############....# #####..#############..... .#####.#############..... ..##################..... ........#####............ .........#####........... ..........#####.......... ...........#####......... ............#####........ 因此,如果输入为2,1输出,则将为: .......#.....#####..............#.....#####....... .......##.....#####.............##.....#####...... .......###.....#####............###.....#####..... .......####.....####............####.....####..... .......#####.....###............#####.....###..... .......######.....##............######.....##..... .......#######.....#............#######.....#..... .......########.................########.......... ####################.....####################..... .####################.....####################.... ..####################.....####################... ...####################.....####################.. ....####################.....####################. .....####################.....#################### #.....##############.#####.....##############.#### ##.....#############..#####.....#############..### ###....#############...#####....#############...## ####...#############....#####...#############....# #####..#############.....#####..#############..... .#####.#############......#####.#############..... ..##################.......##################..... ........#####....................#####............ …

14
欧几里得算法(用于找到最大公约数)
挑战 编写一个程序或函数,它接受两个输入整数i和j,并输出它们的最大公约数;通过使用欧几里得算法计算得出(见下文)。 输入项 输入可以作为和的空格分隔的字符串表示形式i,j或作为两个单独的整数。您可以假设整数将小于或等于10,000。您还可以假定输入整数不会互为素数。 欧几里得分解 之间的较大数量i和j由较小的分割多次可能的。然后,添加其余部分。对剩余数和前一个数字重复此过程,直到剩余数变为0。 例如,如果输入为1599 650: 1599 = (650 * 2) + 299 650 = (299 * 2) + 52 299 = (52 * 5) + 39 52 = (39 * 1) + 13 39 = (13 * 3) + 0 最终数字13是两个输入整数的最大公约数。它可以像这样可视化: 输出量 您的输出必须是上面表格中的细分,然后是换行符和GCD。可以通过任何介质输出。 例子 输入项 18 27 …
22 code-golf  math 

2
你会施法吗?
在《魔法:聚会》中,法师(称为“鹏洛客”)通过施展法术相互抗争。法术消耗魔法。存在五种法术力颜色:白色,蓝色,黑色,红色和绿色,分别表示为{W},{U},{B},{R}和{G}。 咒语的费用稍微复杂一些。成本可以是以下各项的任意组合: 一种或多种颜色 一个或多个无色,表示为{X},其中X是一个正整数 一个或多个杂种,表示为{Y / Z},其中Y和Z是一种颜色(由五个字母之一表示)或无色,由一个正整数表示 尝试施放咒语时,以下规则适用: 成本中的一种颜色必须由一种颜色的法术力来满足 无色成本{X}可以由任何颜色的X魔法值来满足 可以通过满足Y或Z来满足混合成本{Y / Z} 请注意,大括号不嵌套 Y和Z不混合 编写一个程序或函数,给定一个法术力和一个成本池,当且仅当该池中的法术力可以满足该成本,否则打印或返回true(或某个真实值),否则返回false(或某个虚假值)。 魔力池是以下格式的非空字符串: Color1,Color2,Color3,...,Colorn-1,Colorn 费用是以下格式的非空字符串: Cost1,Cost2,Cost3,...,Costn-1,Costn 例子 格式Pool Cost -> ExpectedOutput(在“池”和“成本”之间有一个空格): {R},{R},{G},{B},{R} {4},{R} -> True {G},{G},{G},{G},{W},{W},{W} {2/W},{2/U},{2/B},{2/R},{2/G} -> False {G},{G},{R} {R/G},{G/B},{B/R} -> True {R},{R},{R},{G} {1},{G},{2/G}-> True {R} {R},{R},{R},{R},{R} -> False {W},{R},{R} {2/W},{W/B} -> True {U},{U} {1} …

18
输出Iccanobif序列
编写程序或命名函数,该程序或函数将输出或返回序列,直到nIccanobif序列中的第th个整数,在OEIS上记录为A014258。请注意,0如果n为零,则仅打印序列()中的第零个元素。 该序列是通过像标准Fibonacci序列一样开始而生成的,但是在将前两个数字相加后,可以翻转结果并删除所有前导零。至少对我而言,一个有趣的事实是该序列没有严格增加(请参见下面的列表)。它似乎也(可能)严格大于或等于斐波那契数列。 程序的输入必须是整数。 为了您的观看乐趣,此处提供了序列的前20个数字: 0, 1, 1, 2, 3, 5, 8, 31, 93, 421, 415, 638, 3501, 9314, 51821, 53116, 739401, 715297, 8964541, 8389769 禁止出现标准漏洞。 最短的程序获胜。 编辑:添加了一条注释,以澄清该序列从第零个元素开始,如果n为零,则应包括在内。 IO可能性示例: 0 -> 0 1 -> 0 1 6 -> 0 1 1 2 3 5 8 17 -> [0, 1, 1, 2, …

8
盒子的高度图
看一下这张各种盒子的ascii艺术图: +--------------------------------------------------------------+ | | | +-------------------------------+ +-------+ | | | | | | | | | | | | | | | +----------------+ | | | | | | | | | +-------+ | | | | | | | | | | | | +-------+ | | | +----------------+ …

2
六角棒中的水
我有一堆六角棒粘在一起,成为一个奇怪的雕塑。棒长1至99厘米(cm),横截面积为1平方厘米。所有的杆都在六角面上粘贴到至少另一个杆上。杆都在其底部边缘对齐。 一阵大雨后,雕塑里充满了水。它容纳多少水? 输入项 您的程序应(通过stdin或文件)读入多行,这些行由成对的空格和成对的数字组成,以这种格式指定标尺的长度: aa bb cc dd ee ff gg 如示例中所示,每个杆(如此处的dd)最多可粘到6个周围的杆上。缺少杆是孔,不会积水。例如,输入 04 04 04 01 03 04 04 将代表以下雕塑: 中心杆是高度1(在该杆也可见的地方,我找不到合适的角度)。现在,该杆上方的柱子可以容纳2 cm的水,然后才能溢出3右侧的杆。由于其他任何一根杆都无法在其上方容纳任何水,因此答案为2。这是两个更复杂的示例: Example 2: 55 34 45 66 33 21 27 23 12 01 77 36 31 74 answer = 35 ( 2 on top of 21 +11 on top …

12
基数中阶乘的最后一个非零数字
您应该编写一个程序或函数,该程序或函数给出三个正整数n b k作为输入输出,或者返回k的基本b表示形式中的尾随零之前的最后一位数字n!。 例 n=7 b=5 k=4 factorial(n) is 5040 5040 is 130130 in base 5 the last 4 digits of 130130 before the trailing zeros are 3013 the output is 3013 输入项 3个正整数n b k,其中2 <= b <= 10。 输入整数的顺序可以任意选择。 输出量 返回或输出为整数或整数列表的数字列表。 前导零是可选的。 您的解决方案必须在一分钟之内在我的计算机上解决任何示例测试用例(我将仅测试关闭的用例。我的PC低于平均水平。)。 例子 添加了新测试以检查提交的正确性。(它们不属于1分钟内运行时规则的一部分。) 输入=>输出(可以选择省略前导零) 3 10 …

16
广义列阵
一个简单的高尔夫开始本周!您将获得三个数组:基本数组 B,值数组 V和索引数组 I。您应该生成另一个数组,其中from的值V将插入到B由指定的索引处I。这是一个例子: Base: [5, 1, 4, 1, 3] Values: [0, 0, 7] Indices: [5, 0, 3] 索引指向基数组中的以下位置: [ 5, 1, 4, 1, 3 ] ^ ^ ^ 0 3 5 因此,从值数组中插入相应的元素,结果应为: [0, 5, 1, 4, 7, 1, 3, 0] 规则 您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行参数或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或通过修改作为B参数给出的数组来输出结果。 如果您提交的内容是一种函数,I并且V可以以任何方式进行修改以及B不用于输出。 您可以对输入做出以下假设: 基数和值数组的所有元素都是非负整数。 该值数组最多比基本数组多一个元素。 值数组和索引数组将具有相同数量的元素。 索引数组将不包含重复的索引,并且所有索引都在范围内。 基数组和值数组可能包含重复的元素。 …

7
预测滑坡
滑坡 在此挑战中,您的工作是预测大规模滑坡造成的破坏程度。我们为其使用以下简化的二维模型,该模型以初始高度 h >= 0和临界系数为参数 c > 0。您从高度为的悬崖开始h,并假定地形在其左右两侧完全无限平坦。对于h = 6,情况如下: ########## ########## ########## ########## ########## ########## ----------------------- 将-是不可移动的基石,而且#是不稳定的土壤。如果相邻两列之间的高度差大于c,则会发生滑坡:c左列的土壤的最高单位落到右列的下一c列,每列一列。图中最右边的非空列对于不稳定c = 2,因此触发了滑坡: ######### ######### ########## ########## ########## ############ ----------------------- 柱子仍然不稳定,导致第二次滑坡: ######### ######### ######### ######### ############ ############ ----------------------- 现在,其左侧的柱子变得不稳定,因此在那里触发了新的滑坡: ######## ######## ######### ########### ############ ############ ----------------------- 此后,悬崖再次稳定。这个模型的优点是滑坡的处理顺序无关紧要:最终结果是相同的。 任务 您的程序被赋予整数参数h并c作为输入(顺序无关紧要,但是您必须在答案中指定它),并且它应该输出滑坡影响的总列数。这意味着在所得的稳定悬崖中其高度严格在0和之间的列数h。在以上示例中,正确的输出为4。 您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。 测试用例 这些以格式给出h c …
22 code-golf 

10
用这个修改后的圆平铺平面
取一个以原点为中心的单位圆。在任何两个相邻的象限中,将圆的曲线跨连接圆的x和y截距的线镜像。 使用生成的形状,可以平铺平面: 我用了不起的2D物理沙箱Algodoo制作了这张图片! 编写一个程序,以某种常见的无损图像文件格式输出与此图像相似的图像。您可以将图像另存为具有您选择的名称的文件,也可以只显示它。请勿输入任何内容。 规则: 必须使用任何两种视觉上不同的RGB颜色将整个图像与修改后的圆形图块进行镶嵌处理:一种用于垂直指向的图块,一种用于水平指向的图块。 圆形图块的半径至少应为32个像素。(上图中的半径大约为110像素。) 图像至少应宽4格,高4格。结合上面的规则,这意味着图像可以具有256×256像素的最小尺寸。(上图是4块x 4块。) 镶嵌可以任意转换。例如,图像的左上角不必是图块相交的顶点。(但是,不应旋转镶嵌。) 您可以使用具有用于绘制圆形和输出图像等命令的外部图形库。 曲线确实应该近似圆,就像使用中点圆算法可以做到的那样,大多数图形库都可以为您做到。 允许但不要求在图块边缘周围进行抗锯齿。 以字节为单位的最短提交获胜。

6
生成最短的De Bruijn
De Bruijn序列很有趣:它是最短的循环序列,其中包含给定长度的给定字母的所有可能序列。例如,如果我们考虑字母A,B,C且长度为3,则可能的输出为: AAABBBCCCABCACCBBAACBCBABAC 你会发现,使用字母每一个可能的3个字符的序列A,B以及C在那里。 您的挑战是如何以尽可能少的字符生成De Bruijn序列。您的函数应使用两个参数,一个代表序列长度的整数,以及一个包含字母的列表。您的输出应为列表形式的序列。 您可以假设字母表中的每个项目都是不同的。 可以在此处找到示例生成器 标准漏洞适用


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.