Questions tagged «code-golf»

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

25
棋盘上的棋子数
介绍 普通的棋盘包含8 x 8 = 64个正方形: 您可以看到总共有 12个白色小块。黑白始终具有相同数量的碎片。如果棋盘上还有其他棋子,这些棋子将相邻,这是此挑战所不允许的。为了说明问题,下面是一些示例: 应对这种挑战的最小木板为3 x 3: 您可以看到最大件数等于2。因此,当给定N = 3时,您需要输出2。如果输入为N = 4,则得到以下结果: 您可以看到最大数量也是2。因此,对于N = 4,输出应为2。对于N = 5,输出应等于5: 例子 STDIN: 3 STDOUT: 2 STDIN: 4 STDOUT: 2 STDIN: 5 STDOUT: 5 STDIN: 6 STDOUT: 6 STDIN: 8 STDOUT: 12 规则 您提交的内容必须是一个程序或函数等,它需要一个整数并输出或返回板上的棋子数 您可以放心地假设输入是非负整数> 2 这是代码高尔夫球,因此字节最少的程序将获胜! 请注意,板左下方的正方形始终是深色的。作品只能放在深色方块上 你必须整整地占据一排

1
计数坎宁安链
素数总是让人着迷。2300年前,欧几里得在他的《元素》中写道 质数是仅由一个单位测量的质数。 这意味着素只能被 1(或本身)。 人们一直在寻找素数之间的关系,并提出了一些非常奇怪的东西(如“有趣的”)。 例如,一个索菲·热尔曼质数是一个主要p针对2*p+1也是素数。 一个安全素是一种主要p用于哪些(p-1)/2也是黄金,而这正是一个索菲·热尔曼质数的倒退状态。 这些与我们在此挑战中寻找的东西有关。 一个坎宁安链型我是一系列素数,其中除了最后一个的每一个元素是的索菲·热尔曼质数,而除了第一个的每一个元素是一个安全的黄金。该链中元素的数量称为它的length。 这意味着我们从素数开始p计算q=2*p+1。如果也q为质数,则我们有长度为2的I型Cunnigham链。然后进行测试2*q+1,以此类推,直到下一个生成的数字为复合数为止。 II型坎宁安链是按照几乎相同的原理构造的,唯一的区别是我们检查了2*p-1在每个阶段。 坎宁安链的长度可以为1,这意味着2 * p + 1和2 * p-1都不是素数。我们对这些不感兴趣。 坎宁安链的一些例子 2启动长度为5的I型链。 2, 5, 11, 23, 47 下一个构造的数字95不是素数。 这也告诉我们,那5,11,23和47不启动类型的任何链我,因为这将有前述的元素。 2也开始长度为3的II型链。 2, 3, 5 接下来是9,这不是素数。 让我们尝试II11型(之前我们将其排除在I型之外)。 好吧,接下来是下一个,它不是素数,因此该“链”的长度为1,我们不将其计入此挑战。21 挑战 写一个程序或功能,给定一个号码n作为输入,写入/返回的起始数第n个的坎宁安链I或II型的至少长度为2,后跟一个空格,随后链的类型它开始(我或II),然后是冒号,然后是该类型链的长度。万一素数同时启动两种类型的链(类型I 和型 II型),则首先计算型链。 例: 2 I:5 请记住,这n可能是任何类型的先前启动链的一部分,在这种情况下,不应将其视为该类型链的起始编号。 让我们看看这是如何开始的 我们从开始2。由于它是第一个素数,因此我们可以确定没有链从包含的较低素数开始2。 类型I中的下一个数字将是2*2+1 == 5。5是素数,因此我们已经有了至少长度为2的链。 我们将其视为第一条链。那II型呢?下一个号码是2*2-1 == 3。3是素数,因此II型的链长也至少为2。 …

5
是L凸的吗?
背景 甲四角被称为L-凸,如果有可能从任何瓦到任何其他瓦片行程由L形路径,即,云在基本方向并且至多一次改变方向的路径。例如,1图中的s 的多米诺骨牌 0 0 1 1 1 0 1 1 1 1 0 0 1 1 0 0 0 0 不是L凸的,因为从左下角1到右上角的两个L形路径1都包含0: 0>0>1>1>1 0 ^ ^ 1 1 1 1 0 0 ^ ^ 1>1>0>0>0 0 但是,1此图中s 的多米诺是L凸的: 0 1 1 1 0 0 1 1 1 1 1 1 …

6
知己号码
知己号码 让x是任意的基础上,使得一个整数D是其数字的阵列。x如果n是1且介于的长度之间,则为Confidant Number D: D[n+1] = D[n] + D[n-1] + ... + D[1] + n 例如,以34910为底的数字。如果我们为该数字标记索引,则具有以下内容。 Index Digit ----- ----- 1 3 2 4 3 9 从第一个数字开始,我们有1 + 3 = 4,它产生下一个数字。然后,使用第二个数字3 + 4 + 2 = 9,再次产生下一个数字。因此,该号码是密友号码。 给定一个整数,其底数在1到62之间,请计算该底数的所有Confidant Number,并输出它们的列表,并用换行符分隔。您可以假设给定的基数有有限数量的Confidant Number。 对于大于9的数字,请使用字母字符A-Z,对于大于数字的数字,请Z使用字母字符a-z。您不必担心超出的数字z。 它们不必以任何特定顺序输出。 样本输入: 16 样本输出: 0 1 2 3 4 …
14 code-golf  number 

7
伪随机细胞自动机
介绍 在这个挑战中,我们将使用非常差的伪随机数来模拟某个概率的细胞自动机。元胞自动机是通过以下本地规则在二进制字符串上定义的。假设一个单元格的左邻居和该单元格本身具有状态a和b。 如果为min(a,b) == 0,则的新状态b为max(a,b)。 如果为min(a,b) == 1,则b从中随机选择的新状态{0,1}。 下图显示了单个的可能的10步演变1。 1 11 101 1111 11001 101011 1111111 10001001 110011011 1010111101 请注意,两个相邻的1s有时如何演变为1,有时演变为,并且0最边界位始终1是s。您的任务是产生这种形式的细胞自动机进化。 输入项 您的输入是一个正整数n(表示要显示的行数),以及一个非空的位列表(L我们将其用作随机性来源)。 输出量 您的输出是一个列表列表或2D位数组,如上图所示,描述了单个对象1在n时间步长上的演变。0如果需要,可以用s 填充输出以获取相等长度的行,但不能以0s开头。 元胞自动机中的随机选择必须从列表中得出,L用尽时会跳回到开头。更明确地讲,如果输出从上到下,从左到右一次遍历一行,那么连续的随机选择将形成L重复所需次数的列表。 例 假设输入是n = 7和L = [0,1,0]。然后,细胞自动机在以下7个步骤中演化如下,其中我们v在每个随机选择上方都放置了一个右键: [1] [1,1] v [1,0,1] [1,1,1,1] v v v [1,1,0,0,1] v [1,1,1,0,1,1] v v v [1,0,0,1,1,1,1] 如果我们读取所有标有a的位,则会v得到01001001,该值L重复2.66次。下一个随机位是0。 规则和计分 您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。输入和输出的确切格式不重要(在合理范围内)。 …

2
Karel J. AlphaBot序列生成器
分数 输入提交内容后,将填写此部分。 正常 1. bopjesvla Perl 54 2. edc65 Javascript (ES6) 91 3. name language score 4. name language score 5. name language score 奖金回合 1. name language score 2. name language score 3. name language score 4. name language score 5. name language score Karel J.AlphaBot 背景 Java的热门入门课程是Karel J. …
14 code-golf 

4
计算ASCII Art的端点
您应该编写一个程序或函数,该程序或函数接收表示ASCII艺术作品的字符串作为输入,然后输出或返回输入中端点的数量。 输入将包含字符space - | +(分别具有0、2、2和4个端点)和换行符。例如: -|++- + 在以下情况下,两个相邻的字符相连,因此每个端点丢失1个端点: -- -+ +- | | + + ++ | + | + 第一个例子有 2+2+2+2+1+ 3 = 12 端点。 输入值 输入将包括空格字符,串-,|,+和换行符。 输入长度可以为0长度,并且与上述描述匹配的任何输入均有效(在regex输入中为[ -+|\n]*)。 尾随换行符是可选的。 输出量 单个非负整数,端点数。 例子 输出在其输入的最后一行之后。 + 4 -|++- + 12 +--+ | | +--+ 8 | | +--+-- ||| 12 …

5
文字处理1:连字
背景 这是有关文本处理的3洞高尔夫球场的第一部分。最重要的想法是,如果您输入一个输入文本并通过解决所有这三个挑战的解决方案(使用少量的粘合代码)来传递它,则它会吐出一段格式精美的段落。在第一个挑战中,您的任务是使用给定的连字模式对文本片段进行连字。 输入值 您的程序应采用两个字符串输入:一段文本和一个连字符模式列表。第一个输入只是一个可打印的ASCII字符和空格的非空字符串;它不会包含换行符或波浪号~。第二个输入是一个以逗号分隔的单词列表,由小写ASCII字符的代字号分隔的音节组成。一个例子是ex~cel~lent,pro~gram~ming,abil~i~ties。 输出量 您的程序应按以下方式修改第一个输入。在第二个输入中找到带连字符的小写字母的任何单词(字母ASCII字符的最大子串)都应由该带连字符的字母替换,但应保留其大小写。在上面的示例列表中,如果文本包含单词Excellent,则应将其替换为Ex~cel~lent;然而,Excellently应不会被修改。您的输出应为此修改后的字符串。 详细规则和计分 您可以假设以下有关输入的信息: 第一个输入不包含波浪号,也没有前导,尾随或重复的空格。它不是空的。 第二个输入至少包含一个单词,并且每个单词中至少包含两个音节。每个音节都是非空的。 第二个输入不包含在另一个单词中作为音节出现的单词。 如果需要,可以更改两个输入的顺序,还可以选择在输出中添加一个尾随换行符。 您可以编写函数或完整程序。最低字节数获胜,并且不允许出现标准漏洞。 测试用例 这些以格式列出1st input [newline] 2nd input [newline] output。 Excellent programming abilities, you work excellently! ex~cel~lent,pro~gram~ming,abil~i~ties Ex~cel~lent pro~gram~ming abil~i~ties, you work excellently! Superman (sometimes incorrectly spelled "Super-man") is super #&%@ing strong. su~per,some~times,in~cor~rectly,spell~ing Superman (some~times in~cor~rectly spelled "Su~per-man") is …

3
检查键盘的所有键
编写等待标准101键美国键盘的每个键的最短程序 *的被按下,然后退出写入OK! 每次按下一个键时,程序都会在新行上显示需要按下的剩余未按下唯一键的数量,直到所有键至少被按下一次。该程序应该能够测试101键盘并查看每个键是否正常工作。因此,只要指定给用户,就允许按两次键或回车键。 两次或多次按下同一键既不会打扰代码,也不会更改剩余未按下键的显示数量。 所有按键(Left Shift,Right Shift,Right Control,Esc,Enter,等)应包括在内。 实际的键盘上的按键都在这个挑战的重要所以从程序的角度(A与a,是相同的,所以是6和^)。 组合键不会被注册为组合命令,并且如果按下Ctrl+ Alt+,Del则仅会注册单个键,这将对所按下组合中的所有单个键进行计数。因此,如果您已经按了小写,则无需按大写字母,反之亦然。 数字小键盘上的数字键与程序的角度不同,因此,如果您使用的笔记本电脑或任何其他没有美国标准101键盘布局的键盘,则仍需要按数字键才能完成程序。你除非您插入兼容的键盘,否则无法完成挑战。 * 不支持具有Fn键和笔记本电脑键的键盘以使此挑战可行 这是美国标准101键盘布局的键的列表: backspace tab enter right shift right ctrl right alt left shift left ctrl left alt print screen pause/break caps lock escape page up page down end home left arrow up arrow right arrow down arrow …

1
丢失的典当问题
丢失的典当问题 象棋比赛结束后,幸存的棋子被留在了敌后。让我们帮助他找到回家的最短途路。 最初的问题描述了nXn“棋盘”板以及f: {1,..,n-1}X{1,..,n}X{-1,0,1} => R+权重的函数。目标是找到一条最佳路径,从对接线中的某个正方形到顶线中的其他正方形,其中可能的移动是:左上,上,右上,并且您可能不退出木板。 这个问题相对容易使用动态编程在O(n ^ 2)中解决,但这是代码高尔夫,我们不在乎诸如运行时复杂性之类的无用的东西。 问题 输入:一个3维数组(或您选择的其他集合,通过stdin接收,或作为函数参数接收),对应于常规棋盘,大小完全相同:7X8X3(#linePasses X #rowSize X #movesPerPass)包含非负整数。的移动花费从一些位置(i,j),其中i是行索引,并且j是列指数,分别是: a[i][j][0]从左上角到正方形(i+1,j-1)或以图形方式显示的费用:\。 a[i][j][1]到达正方形(i+1,j)或以图形方式显示的费用:|。 a[i][j][2]垂直移动到正方形(i+1,j+1)或以图形方式移动的费用:/。 您可能会假设它不包含总和大于的路径MAX_INT。 输出:显示最佳(最短,即最小权重之和)路径的8X8 ASCII输出(如果有超过1个最佳结果,则可以显示您选择的任意路径)。路径是从下到上绘制的,在每一行中,与典当在路径中的位置相对应的字符是它要创建的字符。例如,如果棋子要从第3列向左移动(移至第2列),则应绘制: #?###### ##\##### 在哪里?应该替换为下一步。最终职位需要画成X。 例子 输入: [ [[1,1,1],[1,1,1],[0,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]], [[1,1,1],[1,0,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]], [[1,1,1],[1,1,0],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]], [[1,1,1],[1,1,1],[1,1,0],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]], [[1,1,1],[1,1,1],[1,1,1],[1,0,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]], [[1,1,1],[1,1,1],[1,1,1],[1,0,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]], [[1,1,1],[1,1,1],[1,1,1],[0,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]] ] 输出: ##X##### ###\#### ###|#### ###|#### ##/##### #/###### #|###### ##\##### 输入: [ [[41,27,38],[12,83,32],[50,53,35],[46,32,26],[55,89,82],[75,30,87],[2,11,64],[8,55,22]], [[56,21,0],[83,25,38],[43,75,63],[56,60,77],[68,55,89],[99,48,67],[94,30,9],[62,62,58]], [[23,18,40],[24,47,61],[96,45,72],[71,6,48],[75,63,98],[93,56,51],[23,31,30],[49,34,99]], [[20,47,42],[62,79,72],[32,28,44],[68,61,55],[62,39,57],[4,17,49],[97,85,6],[91,18,12]], …
14 code-golf  chess 

8
按字母顺序排列的Fannkuch
Fannkuch是一个经典的基准程序。该名称来自德语“ Pfannkuchen”(煎饼),该算法类似于翻转煎饼叠。Fannkuch的数字序列形成如下: 以{1 ..... n}的排列为例,例如:{4,2,1,5,3}。取第一个元素(这里为4),并颠倒前四个元素的顺序:{5,1,2,4,3}。重复此操作,直到第一个元素为1,这样翻转就不再更改:{3,4,2,1,5},{2,4,3,1,5},{4,2,3, 1,5},{1,3,2,4,5} 您将要编写一个程序或函数来为字母字符串计算出类似于Fannkuch的序列。应该使用字母在字母表中的位置,而不是使用数字来指示每次应翻转列表中的多少元素。例如,前导c表示您应该颠倒前3个元素的顺序,而前导a表示序列已完成。 输入值 输入将通过stdin作为字符串或作为函数参数提供。该字符串将包含1到26个不同的小写字母。字符串将不包含字母,这些字母的等效索引将导致Fannkuch算法翻转比现有数量更多的元素。 输出量 程序或函数应返回或打印以输出通过应用Fannkuch算法产生的术语序列,直到a遇到前导为止,包括初始字符串。例如,如果输入为bca,则可以打印: bca cba abc 打印的结果可以使用任何合理的分隔符-逗号,换行符等。可以选择任何空白。 再举一个例子,如果输入的是eabdc您可能会返回: ("eabdc" "cdbae" "bdcae" "dbcae" "acbde") 规则和计分 这是代码高尔夫球 -最短的程序获胜。不允许使用标准漏洞。

4
实现bzip2的行程编码
背景 应用BWT(在Burrows,Wheeler和Back中看到)和MTF(在Move到可打印的ASCII front中看到)之后,bzip2压缩器应用了一种相当独特的游程长度编码形式。 定义 出于这一挑战的目的,我们将转换BRLE定义如下: 给定仅包含ASCII字符且代码点在0x20和0x7A之间的输入字符串s,请执行以下操作: 用单次出现的字符替换每次运行的相等字符,并在第一个字符之后存储重复次数。 使用双射基数2以及符号和和对字符首次出现后的重复次数进行编码。{} 非负整数n被编码为字符串b k …b 0,使得n = 2 k i(b k)+ ... + 2 0 i(b 0),其中i({)= 1和i(})= 2。 请注意,此表示始终是唯一的。例如,数字0被编码为空字符串。 插入大括号字符串,该字符串编码相应字符单次出现后的重复次数。 分步示例 Input: "abbcccddddeeeeeffffffggggggghhhhhhhh" Step 1: "abcdefgh" with repetitions 0, 1, 2, 3, 4, 5, 6, 7 Step 2: "" "{" "}" "{{" "{}" …

11
清空一个游泳池。。。只带一个红色独奏杯
您有一个充满水的游泳池。您需要清空它,但您无法想到一种有效的方法。因此,您决定使用红色的独奏杯。您将一路重复装满杯子并将其倾倒在游泳池外。 挑战 清空游泳池需要多长时间? 输入值 [shape of pool] [dimensions] [shape of cup] [dimensions] [speed] shape of pool将这些字符串之一:circle,triangle或rectangle。请注意,这些实际上是指3维形状:圆柱,三角形棱柱和矩形棱柱。 dimensions 会因形状而异。 圈子:[radius] [height]。体积=πr 2 h 三角形:[base] [height] [length]。体积= 1/2(bh)*长度 矩形:[width] [length] [height]体积= lwh shape of cup并dimensions以相同的方式工作。杯子也可以是圆形,三角形或矩形。 speed是几秒钟内倒空一杯水所需的时间。 输出量 清空游泳池所需的秒数。可以四舍五入到最接近的秒数。 笔记 输入中将没有单位。假定所有距离单位都相同(形状不会以英寸为单位的高度和以英尺为单位的宽度)。 将3.14用于pi。 输入将由字符串和浮点数组成。 永远不会下雨。永远不会添加水。 您的手非常稳固。每次您都将杯子完全塞满边缘,而且绝对不会溢出。 一旦接近尾声,将很难捞出一整杯水。您无需为此担心。您非常强壮,因此您可以将游泳池倾斜到其一侧(无需花费更多时间)。 每次进行计算时,都可以四舍五入到最接近的百分之一。您的最终答案将不一定是准确的。 测试用例 输入:triangle 10 12.25 3 circle …

7
递归二进制描述
递归二进制描述 最近,我对OEIS做出了第一个贡献,方法是将b文件扩展并添加到序列A049064中。该序列以开头0,然后通过给出最后一项的“二进制描述”来得出下一个值。 例如,第二项将是10,因为0第一个元素中有一个。第三项是1110,因为有一个1和一个0。第四个是11110。因为有三个(11二进制!) 1和一个0。以下是第五个术语的细目分类,以使该过程更加清晰: > 11110 > 1111 0 (split into groups of each number) > 4*1 1*0 (get count of each number in each group) > 100*1 1*0 (convert counts to binary) > 100110 (join each group back together) 这是一个从第六学期到第七学期的示例: > 1110010110 > 111 00 1 0 11 0 …
14 code-golf 

3
最高周长的多米诺骨牌
这是代码高尔夫。获胜者是字节数最少的有效代码。 挑战 给定输入M和N,即正方形矩形网格的宽度和高度,输出满足以下条件的多边形: 多边形边缘仅由正方形边缘组成:没有对角线边缘-全部为垂直或水平。 多边形没有孔:从多边形外部边界上的多边形开始,可以在多边形外部的正方形上通过正交步骤到达多边形外部的每个正方形。 多边形没有自相交:在一个顶点相交的正方形边缘中,多边形周长的一部分不得超过2个。 多边形已连接:多边形中的任何正方形都必须可以通过停留在多边形内的正交步距多边形中的任何其他正方形。 多边形具有最大可能的周长:根据下面显示的公式。 您的代码必须适用于从1到255的M和N。 最大周长的公式 这里的挑战是要找到具有最大周长的那些多边形中最可打的高尔夫。最大周长本身始终由以下公式定义: 这是正确的,因为对于最大周长,每个正方形顶点必须在该周长上。对于奇数个顶点,这是不可能的,而可获得的最佳顶点数少一个顶点(因为周长始终为偶数)。 输出量 将形状输出为由换行符分隔的字符串(N行,正好是M个字符)。在这里,我为多边形外部的正方形使用空格,为多边形内部的正方形使用'#',但是您可以使用任何两个视觉上不同的字符,只要它们的含义对于所有输入都是一致的。 您最多可以包含一个前导换行符和最多一个尾随换行符。 如果愿意,您可以输出M个正好N个字符的行,对于某些输入,您可以选择M by N输出,而对于其他输入则选择N by M输出。 例子 由于孔无效: ### # # ### 由于交集(对角线触摸-顶点在外围具有4个正方形边缘)和一个孔而无效: ## # # ### 由于断开连接而无效: # # # # 最大周长的有效多边形: # # # # ### 学分 最初,我低估了可以计算出最大周长的值的速度,并只是要求将该值作为输出。感谢聊天中非常有帮助的人们,他们解释了如何计算任意N和M的最大周长,并帮助将其变成一项挑战,将持续多个答案... 特别要感谢: 斯帕尔,兹加布,费瑟姆,吉米23013。
14 code-golf  grid 

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.