Questions tagged «code-golf»

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

20
大于小于大于大于可疑
给定的一个长度为N的字符串小于和大于号(<,>),插入在所述开始和结束整数0至N和在每对的迹象,使得所有的不等式得到满足的之间。输出结果字符串。如果有多个有效输出,则输出其中任何一个(也只有一个)。 例如 <<><><< 有7个字符,因此必须插入0到7之间的所有数字。有效输出为 2<3<4>1<5>0<6<7 因为所有不等式一次都发生了 2<3 3<4 4>1 1<5 5>0 0<6 6<7 是真的。 如果需要,输出可以在符号周围有空格,例如2 < 3 < 4 > 1 < 5 > 0 < 6 < 7。 以字节为单位的最短代码获胜。 测试用例 空行之后的第一行是输入,下一行是有效的输出示例。 [empty string] 0 < 0<1 > 1>0 << 0<1<2 <> 1<2>0 >< 1>0<2 2>0<1 >> 2>1>0 <<< 0<1<2<3 …

11
运行Stackylogic
Stackylogic是一种基于逻辑的编程语言我提出了称取在0的和1为输入的,并输出一个单一的0或1在完成。 Stackylogic程序由只能包含三个字符的行组成,并且只能在01?其中一行<的末尾包含一个字符。行不能为空,并与该行<必须至少有一个0,1或?之前。 这是一个示例程序(如我将解释的那样),计算两个位的NAND: 1 ?< 11 ? 0 Stackylogic程序中的每一行都被视为一个堆栈,其底部在左侧,顶部在右侧。隐式地,在程序的第一行之前和最后一行之后有一个空堆栈(空行)。 的<,我们称之为的光标,标记堆栈的运行Stackylogic程序时开始。Stackylogic程序的执行过程如下: 将顶部字符从光标当前指向的堆栈中弹出。 如果该字符为?,则提示用户输入a 0或a,1并像该字符一样进行操作。 如果字符是0,则将光标向上移动一个堆栈(到当前行上方的行)。 如果字符是1,则将光标向下移动一个堆栈(到当前行下方的行)。 如果光标移动到的堆栈为空,则输出从堆栈弹出的最后一个值(始终为a 0或1),然后结束程序。 否则,如果光标移动到的堆栈不为空,请返回步骤1并重复该过程。 请注意,Stackylogic程序始终会结束,因为它们最终必须耗尽堆栈。 NAND范例 在NAND程序中,光标从以下位置开始?: 1 ?< 11 ? 0 我们假设用户1一旦输入,便输入a ?,这意味着光标将向下移动,使程序如下所示: 1 11< ? 0 现在,平原1位于游标堆栈的顶部。它会适当弹出,然后光标再次移动: 1 1 ?< 0 现在假设用户输入0的?,这意味着将光标向上移动: 1 1< 0 同样,1游标堆栈上还有a ,因此游标弹出并向下移动: 1 < 0 最后,游标堆栈为空,因此弹出最后一个值1,输出,程序结束。 这是准确的NAND门,因为1 NAND 0是1。如果您愿意检查的话,这当然适用于其他三个两位输入。 …

23
十六进制和字母
在此挑战中,您将收到输入,将其转换为十六进制,进行一些更改,然后输出结果。 因为它们只有十六进制的16个字符,所以您的代码将需要尽可能短。 例子 示例用空白行分隔。第一行输入,第二行显示步骤,第三行显示输出 234589 234589 -> 3945D -> 39454 -> 9A1E -> 9115 -> 239B -> 2392 -> 958 958 435234 435234 -> 6A422 -> 61422 -> EFEE -> 5655 -> 1617 1617 153 153 -> 99 -> 99 -> 63 1617 脚步 输入将始终为正整数 为了生成输出,您将遵循以下步骤: 将输入转换为十六进制 将所有字母替换为其字母索引(例如a -> 1, …

30
计算两个平方的和
给定一个非负数n,请输出表示n为两个整数平方的和的方式数n == a^2 + b^2(OEIS A004018)。请注意,a和b可以为正,负或零,并且它们的顺序很重要。最少的字节数获胜。 例如,n=25给出12因为25可以表示为 (5)^2 + (0)^2 (4)^2 + (3)^2 (3)^2 + (4)^2 (0)^2 + (5)^2 (-3)^2 + (4)^2 (-4)^2 + (3)^2 (-5)^2 + (0)^2 (-4)^2 + (-3)^2 (-3)^2 + (-4)^2 (0)^2 + (-5)^2 (3)^2 + (-4)^2 (4)^2 + (-3)^2 这是直到的值n=25。请注意,您的代码适用于n=0。 0 1 1 4 2 4 …

18
打印出所有IPv6地址
这使我想起几年前有人上传了洪流“黑客工具:所有IP地址的完整列表”。当然,这只是一个约40亿个IPv4地址的生成列表,但是有数千个“ h4xx0rz”下载了它。看妈妈,imahacker! 当时是这样,但如今每个人都已切换到IPv6。(对?) 您的任务是编写一个打印所有IPv6地址的程序。 您应该编写一个完整的程序,该程序不输入任何内容并打印IPv6地址,每行显示一个,而没有其他输出。您的程序必须打印所有2 128个可能的地址,包括无效的地址。每个地址必须打印一次。您可以按任何顺序打印地址。 每个地址都可以完整打印,用冒号分隔8组4个十六进制数字,例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334 您可以自行决定使用RFC 5952中的任何标准缩写: 可以省略组中的前导零,除非0不能再进一步缩写。 :: 每个地址最多可使用一次,以缩写一个或多个全零组的序列。 十六进制数字可以使用小写或大写。 如果您达到RFC 5952的推荐制式建议(仅小写字母,表示形式尽可能短,::如果可以在多个地方使用,请尽早使用),您将获得-20%的奖励。 由于输出的大小,当我们坐在那里时,您的程序无法完成。您的程序可能在某些时候被外部手段中断(Ctrl+ C,拔出电源,…)。您的程序必须将输出作为流产生,以便在“合理”等待之后,它将产生一些行。基本上,不允许在内存中构造一个巨大的字符串仅在最后打印出来。任何会在“标准” PC上用尽内存的程序都将被取消资格。(尽管如此,如果您的程序运行了足够长的时间,它必须打印所有IPv6地址,然后退出。) (如果这种情况对于运行该程序直到完成并随后让您看到输出的Web解释器来说是一个问题,并且您没有托管的解释器,请在问题的较小版本上测试您的程序,然后仔细进行调整到完整的2128。) 您的分数是程序的长度(以字节为单位),如果获得奖励,则乘以0.8。这是代码高尔夫球,因此得分最低者获胜。

1
线性时间中最长的公共子串
挑战在于编写代码以解决以下问题。 给定两个字符串A和B,您的代码应输出具有以下属性的A子字符串的开始和结束索引。 A的子字符串也应该与B的某些子字符串匹配。 不再有满足第一个属性的A子字符串。 例如: A = xxxappleyyyyyyy B = zapplezzz apple带有索引4 8(索引从1开始)的子字符串将是有效的输出。 功能性 您可以选择输入是本地目录中文件中的标准输入还是您自己的选择。文件格式将只是两个字符串,用换行符分隔。答案应该是完整的程序,而不仅仅是功能。 我最终想在从http://hgdownload.cse.ucsc.edu/goldenPath/hg38/chromosomes/的字符串中提取的两个子字符串上测试您的代码。 得分 这是带有扭曲的代码高尔夫球。您的代码必须及时运行O(n),其中n表示输入的总长度。 语言和图书馆 您可以使用具有免费编译器/解释器/等的任何语言。对于Linux。您应该只使用不是为解决此任务而设计的标准开源库。如有争议,我将其视为您的语言所标配的任何库,或者可以从默认存储库安装在默认ubuntu计算机中的任何库。 有用的信息 在线性时间内至少有两种方法可以解决此问题。一种是首先计算后缀树,第二种是首先计算后缀数组和LCP数组。 这是线性时间后缀树构造的完整(也许是过度)详细说明(不幸的是,有些数字被弄乱了)。关于https://stackoverflow.com/questions/9452701/ukkonens-suffix-tree-algorithm-in-plain-english的线性时间后缀树构造,还有一个非常好的SO答案。它还包括到源代码的链接。可以在这里找到另一个详细的说明,这一次提供了使用C的完整解决方案。 http://www.cs.cmu.edu/~guyb/realworld/papersS04/KaSa03.pdf的第2节给出了线性时间后缀数组构造算法,附录A具有C ++源代码。该答案告诉您如何计算最长的公共子字符串https://cs.stackexchange.com/questions/9555/computing-the-longest-common-substring-of-two-strings-using-suffix-arrays。https://courses.csail.mit.edu/6.851/spring12/scribe/lec16.pdf的第5节,其中也有相关的视频讲座https://courses.csail.mit.edu/6.851/spring12/lectures/L16 .html还解释了从1:16:00开始的相同算法。

30
单个像素沿圆形路径移动
这是一个图形输出挑战,任务是提供每种语言最短的代码。 任务 您的代码应绘制一个紫色像素(十六进制值#800080或rgb(128,0,128)),顺时针旋转一个圆圈。绕一圈完整的旅程大约需要60秒,并且应无限期地继续。除像素外,其他任何内容都不应显示在屏幕或窗口上。圆的宽度应为屏幕或窗口的宽度的0.75(适当舍入),背景应为白色。为了防止出现笨拙的溶液,屏幕或窗口的宽度至少应为100像素。 您的代码应为完整程序。 语言和图书馆 您可以使用任何喜欢的语言或库。但是,我希望能够在可能的情况下对您的代码进行测试,因此,如果您可以提供有关如何在Ubuntu中运行代码的明确说明,将不胜感激。 缺少前二十种语言。需要帮助。 以下前二十种编程语言目前根本没有任何解决方案。 C,C ++,C#,Python,PHP,Visual Basic .NET,Perl,Delphi / Object Pascal,Assembly,Objective-C,Swift,Pascal,Matlab / Octave,PL / SQL,OpenEdge ABL,R 目录 这篇文章底部的Stack Snippet会根据答案a)生成目录,a)作为每种语言最短解决方案的列表,b)作为整体排行榜。 为确保您的答案显示出来,请使用以下Markdown模板以标题开头。 ## Language Name, N bytes N您提交的文件大小在哪里。如果您提高了分数,则可以将旧分数保留在标题中,方法是将它们打掉。例如: ## Ruby, <s>104</s> <s>101</s> 96 bytes 如果要在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字: ## Perl, 43 + 2 (-p flag) = 45 bytes 您还可以将语言名称设置为链接,然后该链接将显示在代码段中: ## [><>](http://esolangs.org/wiki/Fish), …

30
爱我,不爱我
爱我,不爱我 这个简单的儿童游戏虽然古老,但仍然很受欢迎。由于我们现在生活在21世纪,因此我们将其数字化! 规格 程序必须不输入任何内容,除非您使用的语言不能生成随机种子-在这种情况下,您可以将种子用作输入。您的任务是编写一个程序,该程序将随机输出总共3到20行(包括3行和20行):“爱我...”和“爱我不...”,就像在游戏中一样(以及另外一行);读)。 但是,有一些限制。每行后应跟换行符。第一行必须是“爱我...”。最后一行(“爱我”或“不爱我”)应分别以感叹号或单个点结束。在最后一行之后,您需要在新行中输出一个heart(<3)或一个破碎的heart(</3),具体取决于是否“爱我!” 或“不爱我”。是最后一句话。 允许尾随空格。 示例输出 输出: 爱我... 不 爱我... 爱我...不 爱我... 爱我! <3 另一个输出: 爱我... 不 爱我... 爱我... 不爱我。 </ 3 这是代码高尔夫球,因此最短的条目将获胜! 另外,我的第一个挑战:)祝你好运!

4
猪会飞吗?
任务 您的任务是用您选择的语言编写函数或程序,该函数或程序分析几个语句并确定是否可以从这些语句中得出猪可以飞的结论。 输入项 输入是一个字符串,可以从STDIN读取,可以作为函数参数,甚至可以存储在文件中。可以使用以下EBNF描述输入: input = statement , {statement}; statement = (("Pigs are ", attribute) | ("Everything that is ", attribute, "is also ", attribute)), ". "; attribute = [not], ("able to fly" | singleAttribute); singleAttribute = letter, {letter}; letter = "a" | "b" | "c" | "d" | "e" …

19
弹枪编号
该猎枪的数字是一个相当简单的定义,但一些有趣的结构序列。从自然数开始: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ... 现在,将所有数字除以2整除的索引,将它们分成对,然后交换每对中的数字: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ... ^ ^ ^ ^ ^ ^ ^ <---> <---> <-----> <---- 1, …

18
您可以将这根弦切成多少块?
考虑一条字符串(如“绳子”,而不是“一串字符”),该字符串在实线上来回折叠。我们可以通过(按顺序)通过的点列表来描述字符串的形状。为了简单起见,我们假定所有这些点都是整数。 举个例子[-1, 3, 1, -2, 5, 2, 3, 4](注意,并非每个条目都包含一个折叠): 沿垂直方向延伸的字符串仅用于可视化目的。想象一下,所有的弦线都扁平化到了实线上。 现在的问题是:一次切割就可以切成最大的弦数(在上图中必须是垂直的)。在这种情况下,答案是6,且在2和之间的任意位置都有一个割线3: 为了避免歧义,切口具有在一个非整数的位置被执行。 挑战 给定一串可折叠的整数位置列表,您将确定一次可在非整数位置进行一次切割即可切割的最大片段数。 您可以编写完整的程序或函数。您可以通过STDIN,命令行参数,提示符或函数参数进行输入。您可以将输出写入STDOUT,在对话框中显示或从函数返回。 您可以假定该列表采用任何方便的列表或字符串格式。 该列表将包含至少2个且不超过100个条目。入口将整数,每个范围-2 31 ≤p 我 <2 31。您可以假定没有两个连续的条目相同。 您的代码必须在合理的台式PC上在不到10秒的时间内处理任何此类输入(包括下面的测试用例)。 测试用例 所有测试用例只需输入,然后输出即可。 [0, 1] 2 [2147483647, -2147483648] 2 [0, 1, -1] 3 [1, 0, -1] 2 [-1, 3, 1, -2, 5, 2, 3, 4] 6 [-1122432493, -1297520062, …

13
为无类型的lambda演算编写解释器
面临的挑战是为无类型lambda演算编写尽可能少的字符的解释器。我们将无类型的lambda演算定义如下: 句法 有以下三种表达式: Lambda表达式的形式为(λ x. e),其中x可以是任何合法变量名和e任何合法表达式。这里x称为参数,e称为函数体。 为简单起见,我们添加了进一步的限制,即不得存在与x当前作用域同名的变量。当变量的名称出现在(λ和之间时,变量就开始在范围.内,而在对应的变量处就停止在范围内)。 功能应用程序具有形式和形式(f a),它们是合法的表达式。这里称为函数,称为参数。fafa 变量的格式为xwhere x是合法变量名。 语义学 通过将函数体内参数的每次出现替换为其自变量来应用函数。更正式的形式的表达((λ x. e) a),其中x是变量名和e和a是表达式,评估(或减少)至表达式e',其中e'是取代的每次出现的结果x在e与a。 范式是无法进一步评估的表达式。 挑战 您的任务(如果您选择接受它)是编写一个解释器,该解释器将不包含自由变量的未类型化lambda演算的表达式作为输入,并产生该表达式的标准形式(或与该表达式一致的表达式)作为其输出。 。如果该表达式没有范式或它不是有效的表达式,则该行为是不确定的。 字符数最少的解决方案获胜。 一些注意事项: 输入既可以从stdin读取,也可以从作为命令行参数给出的文件名读取(您只需要实现一个或另一个即可-无需同时实现)。输出进入标准输出。 或者,您可以定义一个函数,该函数将输入作为字符串,然后将输出作为字符串返回。 如果非ASCII字符对您有问题,则可以使用反斜杠(\)字符代替λ。 我们计算字符数,而不是字节数,因此,即使您的源文件被编码为unicodeλ也算为一个字符。 合法变量名称由一个或多个小写字母组成,即a和z之间的字符(无需支持字母数字名称,大写字母或非拉丁字母-尽管这样做当然不会使您的解决方案无效)。 就此挑战而言,没有括号是可选的。每个lambda表达式和每个函数应用程序都将恰好由一对括号包围。变量名不会用括号括起来。 语法糖就像写(λ x y. e)的(λ x. (λ y. e))并不需要得到支持。 如果评估函数的递归深度大于100,则行为不确定。该值应该足够低,以至于无需在所有语言中进行优化即可实现,而且还应足够大以能够执行大多数表达式。 您可能还假定间距将与示例中的相同,即在输入的开头和结尾或a λ或之前没有空格,而在a .和之后.以及函数与其参数之间以及a 之后恰好有一个空格λ。 样本输入和输出 输入: ((λ x. x) (λ y. (λ z. …

30
在PowerShell中打高尔夫球的技巧
您在Windows PowerShell中打高尔夫球有哪些一般技巧?我正在寻找可以普遍用于解决高尔夫问题的想法,这些想法至少在某种程度上特定于PowerShell(例如,“删除评论”不是答案)。请为每个答案发布一个提示。 -几乎完全不听马尔可格的问题。

14
全部登上ASCII火车
全部登上ASCII火车! o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ o | C | | O | | D | | E | | | | G | | O | | L | | F | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| …

30
输出编程语言名称
挑战: 在您选择的编程语言中,不输入任何内容,而是输出您的编程语言的名称。 足够公平吧? 限制条件: 您的代码中不能使用编程语言名称中包含的任何字符。例如,如果使用批处理,则不得在代码中使用字符'B''a't''c''h'。请注意,这是区分大小写的。我仍然可以使用字符“ b”,因为它与“ B”不同。 您可以在语言名称之前或之后使用“垃圾输出” 版本号不算作语言名称的一部分。例如,如果在Python 3中,我可以在答案中使用数字3 编程语言名称的输出不区分大小写。 禁止强行使用所有可能的字母组合,并希望您获得自己的语言名称。 示例输出:(假设我的编程语言称为语言)(✔如果有效,否则为✖) Language ✔ Body language is a type of non-verbal communication in which physical behavior, as opposed to words, is used to express or convey information. Such behavior includes facial expressions, body posture, gestures, eye movement, touch and …

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.