Questions tagged «code-golf»

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

1
最简单的地板砖
您应该编写一个程序或函数,该程序或函数接收一个描述地板的字符串作为输入并输出或返回最简单的元平铺区域,该区域可以创建给定的地板图案。 地板是正方形网格的一部分。每个方形图块都用天蓝色或黑色上色(由a和b在输入中表示)。 一个示例楼层: aaaa ababab aaaaa 元平铺 由一个N由M天蓝色和黑色正方形组成的矩形meta-tile 构建 直到平移为止,使用的元瓦片都是相同的(您不能旋转或镜像它们) 如果两个meta-tile的边连接,则它们应沿其整个长度连接(即meta-tiles以网格状方式平铺空间) 元区块示例: ba aa 以及它创建的元平铺: . . . babababa aaaaaaaa ... babababa ... aaaaaaaa babababa aaaaaaaa . . . 此元平铺会创建显示的上方楼层,如左侧字母所示: . . . ******** ***aaaa* ... *ababab* ... *aaaaa** ******** ******** . . . 如果meta-tile的区域较小,则meta-tiling比另一个更简单。2*2 = 4对于示例楼层,我们的示例的面积最小。因此输出应4为示例。 输入值 由字符组成a b …
10 code-golf  grid  tiling 

30
十六进制计数器
十六进制是从0到的基数16计数系统f。您的工作是制作一个可以显示这些数字的计数器。 例: $ python counter.py 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d …

12
混合字符串中的字符
您必须编写一个函数/程序,该函数通过stdin/ command-line参数/ function参数接受输入,将字符串中的字符混合,然后通过来输出最终的字符串stdout。 输入将首先包含一个字符串(非空或null),一个空格,然后是偶数个全部由空格分隔的非负数。如果通过函数参数获取输入,则字符串将是参数之一,而由空格分隔的整数将是另一个。您必须在与连续的数字对相对应的索引处交换字符串的字符。 例如: Hello_world! 0 6 必须导致 wello_Horld! 假设条件 您可以在基于0的索引和基于1的索引之间进行选择,并可以假设给定的索引始终在范围内。 该字符串不得超过100个字符,并且只能包含范围!为~(字符代码0x21至0x7E,包括0x21至0x7E)的ASCII字符。请参阅ASCII表以获取参考。 一对中的两个索引可能相同(在这种情况下,该步骤不会交换任何内容)。 计分 这是代码高尔夫球,因此最短的提交(以字节为单位)获胜。 测试用例 Hello_world! 0 6 => wello_Horld! First 1 2 1 0 0 4 => tFisr (Second!$$) 8 7 10 1 => ()econd$!$S ~Third~ 0 0 6 6 0 6 6 0 => ~Third~
10 code-golf  string 

2
那又是几号?
在我的网站上,用户使用以下格式输入出生日期xx.xx.xx-用点分隔的三个两位数字。不幸的是,我忘了告诉用户确切使用哪种格式。我所知道的是,一个部分用于月份,一个部分用于日期,另一部分用于年份。绝对是20世纪(1900-1999),因此格式31.05.75为31 May 1975。另外,我假设每个人都使用公历或儒略历。 现在,我想浏览数据库以清除混乱情况。首先,我想与日期最不明确的用户打交道,即那些可能的日期范围最大的用户。 例如,日期08.27.53表示27 August 1953公历或儒略历。朱利安日历中的日期是13天后,因此范围是13 days。 相反,该符号01.05.12可以指代许多可能的日期。最早的是12 May 1901 (Gregorian),最新的是1 May 1912 (Julian)。范围是4020 days。 规则 输入是格式为的字符串xx.xx.xx,其中每个字段均为两位数字,并用零填充。 输出是该范围内的天数。 您可以假定输入将始终是有效日期。 您不得使用任何内置的日期或日历功能。 最短的代码(以字节为单位)获胜。 测试用例 01.00.31 => 12 29.00.02=> 0(唯一的可能性是29 February 1900 (Julian)) 04.30.00 => 13 06.12.15 => 3291
10 code-golf  date 

2
挖掘地牢的数字
编辑:在问题结束时,我将为奖金难题的第一个求解器颁发100信誉的赏金! 我只会在答案出现时才将赏金添加到问题中,因为该赏金没有截止日期。 给定一个非递减的一位正整数列表,您应该确定这些位数将挖掘多深的地牢。 ███ ███ A dungeon with 5 blocks removed and a depth of 3. ███ ███ ███ ████ ████████ 在开始挖掘之前,地面是水平的。 每个手指都可以从其下方精确地移除一个土块,但是它必须从地牢外部到达该位置,并且在移除后必须离开地牢。这样做时,数字在任何水平步长处的下降或上升都不能超过其数值。 数字使用以下策略进行挖掘: 值最小的数字首先挖掘,然后,下一个挖掘器始终是其余数字中的下一个最小值。 第一位数字可以在任何位置挖掘。(所有地面都相同。) 下面的数字总是在最左边的已经开始的列上挖掘,它们可以出来。如果不存在这样的列,他们将在最右边的列的右侧开始挖掘一个新列。 例如,数字1 1 1 2 3 3将挖出下面的地牢(逐步可视化,并用数字标记该位置挖出哪种数字): ███1████ ███11███ ███11███ ███11███ ███11███ ███11███ ████████ ████████ ███1████ ███1████ ███1████ ███13███ ████████ ████████ ████████ ███2████ ███2████ …

3
随机Brainfuck编译器
乔是您的普通BF开发人员。当他接到老板打来的电话时,他即将把代码更改检入到存储库中。“乔!新客户的机器坏了!动脑筋的解释器在程序执行之前将所有单元设置为随机值。没有时间修复它,您的代码将不得不处理它。” Joe对此考虑不多,当老板再次打断他时,他打算编写一个程序以将前一百万个单元格设置为零-“ ...而且不要考虑使用蛮力,代码必须尽可能地小。” 现在您必须帮助可怜的乔! 技术指标 您将获得一些有效的Brainfuck代码作为输入 然后,您的程序将修改代码,以便它可以在随机的Brainfuck解释器上运行 这意味着在程序执行之前,可以将单元格设置为任何值。 无论初始条件如何,新程序都应具有完全相同的行为。 解释器的最大像元值为255(带有换行符)和无限长的磁带。 计分 您的分数是编译器大小(以字节为单位)加上测试用例大小总和的10倍。最低分显然是获胜的。为了减轻测试用例的优化,如果我有任何怀疑,我保留更改测试用例的权利,并且可能会在选择获胜者之前这样做。 测试用例 (我从esolangs页面和此网页获得了这些信息:http : //www.hevanet.com/cristofd/brainfuck/)。最后还要感谢@Sparr。 你好,世界: ++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++. 反向输入: >,[>,]<[.<] 二的幂(无限流): >++++++++++>>+<+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<]>.>[->[ <++>-[<++>-[<++>-[<++>-[<-------->>[-]++<-[<++>-]]]]]]<[>+<-]+>>]<<] 10000以下的方块: ++++[>+++++<-]>[<+++++>-]+<+[>[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+>>>+[[-]++++++>>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<]<<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++>[-[<->-]+[<<<]]<[>+<-]>]<<-]<<-] 斐波那契流: >++++++++++>+>+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<<]>.>>[[-]<[>+<-]>>[<<+>+>-]<[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>[-]>+>+<<<-[>+<-]]]]]]]]]]]+>>>]<<<] 输入之前的ASCII序列:(,[.[>+<-]>-]这需要根据输入改变单元格编号)

1
Meta quine检查器
如果接受的话,这个挑战就是编写三个函数或程序A,B和C: A是输出所有A,B和C(这也是您提交的代码的全部内容)的方法。 B接受参数F并检查它是这样的奎因(输出FBC)还是做其他事情。 C接受参数G并检查G是否可能像B一样工作(检查F是否输出FGC)。不可能确定一个函数是否是quine检查器,所以让我们做一些简单的事情: 如果G对于B有效,则必须返回true。 如果G对所有有效的quines返回false,或者G对所有有效的非quines返回true,则必须返回false。 如果是其他情况,它可以返回任何内容,崩溃或不终止等。 注意,B是可能的。A和F没有任何输入,因此您可以运行它们并检查结果。 规则 应该有某种方法可以从A的输出中分辨出哪些部分是A,B和C。例如:每个部分只有一行,或者它们在解释器中被识别为三个功能。 每个函数都应仅使用自身的定义运行,而不应使用完整的代码。 您可以使用功能/程序或其源代码,或将两者都用作B(或G)和C的输入。 您可以将真/假重新定义为这些值的子集。您还可以始终要求F返回您选择的某种类型,例如单个字符串。 如果使用有效参数调用A,B,F和G,则始终不需要这些类型的其他输入或副作用,例如访问全局变量或读取stdin等。 您也可以假设F和G(如果使用有效参数调用它们)总是终止。 F应该在与A相同的条件下工作。因此,它不能依赖于B或C或另一个变量的存在,除非该变量在其输出中自己定义。 没有函数或程序可以读取其自己的源代码。 这是代码高尔夫,以字节为单位的最短代码(它是A的输出)。
10 code-golf  quine 

3
识别细胞自动机的序列
背景 出于这一挑战的目的,n-state元胞自动机只是一个二进制函数f,该函数从状态集中获取两个数字{0, 1, ..., n-1}作为输入,然后从该集合返回另一个数字作为输出。可以将其应用于长度至少为2 的数字列表L = [x0, x1, x2, ..., xk-1] f(L) = [f(x0, x1), f(x1, x2), f(x2, x3), ..., f(xk-2, xk-1)] 请注意,结果列表比原始列表少一个元素。甲时空图的f从开始L是通过重复应用获得列表的列表f来L,并收集在一个列表中的结果。最终列表具有长度为1,我们就说该列表L是识别序列为f,如果在所述状态集合中每两个元素的列表是从开始时空图的一些行的连续子列表L。这相当于没有其他n状态的CA具有确切的时空图的条件。 输入值 您的输入是一个n-by- n整数矩阵M,整数列表L至少2的长度,和任选的数目n。矩阵通过(使用基于0的索引)M定义n-stateCA 。确保和并且仅包含状态集的元素。ff(a,b) = M[a][b]n > 0ML{0, 1, ..., n-1} 输出量 如果L是CA的识别序列,则您的输出应为f一致的真实值,否则为一致的虚假值。这意味着所有“是”实例产生相同的真实值,而所有“否”实例产生相同的虚假值。 例 考虑输入n = 2,M = [[0,1],[1,0]]以及L = [1,0,1,1]。矩阵M定义了二进制XOR自动机f(a,b) = a+b mod 2,并且时空图从Lis 开始 …

1
粘液霉菌可以指望!
背景 粘液霉菌真棒。如果将它们放在有食物来源的表面上,它们将蔓延其卷须以寻找食物,然后它们在来源之间形成连接网络。在此挑战中,您将模拟一个黏液模具来寻找食物。而且,一旦找到足够的模具,该模具将停止。 输入值 您的输入应为使用L语言的本机格式的2D整数坐标列表,以及非负整数N。该列表L保证不会重复,但是可能无法排序。输入N介于0和的长度(L含)之间。 该列表L代表了一组食物来源坐标。例如清单 [(0,0),(2,-1),(3,1),(0,4),(5,5)] 可以在视觉上解释为 o o o o o 输出量 您的输出是另一个K2D整数坐标的无重复列表,其格式与输入相同。它代表由粘液模具形成的网络,并且应满足以下条件: 的交点L和K具有大小完全相同N。 该集合K作为整数网格的子集连接(通过正交或对角线邻接)。 如果K移除了的任何坐标,则它不再满足前两个条件。 请注意,如果N = 0,输出必须为空列表。 用于上述列表中的可接受的输出的一个例子L和N = 4将 [(0,0),(0,1),(0,2),(0,3),(0,4),(1,4),(2,4),(3,3),(3,2),(3,1),(3,5),(4,5),(5,5)] 可以可视化为 xxO Oxx x x x x x O O o 其中,每个O代表一个在两个坐标L和K,并且每个x代表一个坐标中K而不是在L。其他输出也是可以接受的,“卷轴”不必尽可能短。例如,这也是可接受的解决方案: xxOxx Oxx x x x x x x o x O x Ox 规则 …

4
前奏语法检查器
Prelude是一种深奥的编程语言,对构成有效程序的内容几乎没有限制,但有不同寻常的限制。只要满足以下条件,任何可打印的ASCII文本块(“块”表示可打印的ASCII行用换行符-0x0A分隔)都是有效的: 文本的每个(垂直)列最多包含(和之一)。 忽略它们的垂直位置,the (和and )是平衡的,也就是说,每个(和恰好)在其右侧配对,反之亦然。 编写一个程序或函数,给定包含可打印ASCII和换行符的字符串,确定该程序或函数是否构成有效的Prelude程序。您可以通过STDIN(或最接近的替代品),命令行参数或函数参数进行输入。可以使用您选择的任何两个固定的 真假值将结果返回或打印到STDOUT 。 您不得假定输入为矩形。 这是代码高尔夫球,因此最短的提交(以字节为单位)获胜。 例子 以下是有效的 Prelude程序(实际上,它们甚至是真正的 Prelude程序): ?1-(v #1)- 1 0v ^(# 0)(1+0)#)! (#) ^#1-(0 # 1(# 1) v # - 1+) vv (##^v^+ ? v-(0 # ^ #) ? 1+ 1-! 这是一些输入,所有输入都是无效的: #(#(##)##)##( )##(##(##)#)# #(#) )### #(## (##) (##) (#)# (##) (### …

5
Roman昧的罗马数字魔方
古罗马国王在确定魔方是否有效时遇到困难,因为他正在检查的魔方在数字之间不包含任何分隔符。他聘请了一名软件工程师来帮助他确定魔术方块是否有效。 输入说明 输入来自STDIN或命令行参数。您不能在变量中预先初始化输入(例如,“此程序需要在变量中输入x”)。输入采用以下格式: <top>,<middle>,<bottom> 每个的<top>,<middle>以及<bottom>是只会包含大写字符的字符串I,V和X。它将不包含空格或任何其他字符。每个字符串代表三个罗马数字,从而形成一个3x3的数字矩阵。但是,这些罗马数字可能(但不一定)是不明确的。请允许我用一个例子来说明。考虑以下三个罗马数字示例行,每个数字之间没有空格: IVIIIIX 因为字母之间没有空格,所以这里的数字有两个可能: 1,8,9(I VIII IX) 4,3,9(IV III IX) 当您认为矩阵的所有三行都可能模棱两可时,单个输入就有可能存在许多不同的3x3矩阵。 请注意,诸如1、7、1、9(I VII I IX)之类的序列是不可能的,因为每一行将始终代表三个罗马数字。另请注意,罗马数字必须有效,因此,诸如1、7、8(I VII IIX)之类的序列也是不可能的。 输出说明 输出: 一个整数A,其中A是可以由歧义输入形成的唯一3x3矩阵的数量,并且: 甲truthy值,如果任何独特的3×3矩阵的形成幻方,或: 一个falsy值,如果没有独特的3×3矩阵的形成幻方。 真实值和虚假值必须保持一致。它们用逗号分隔。 关于什么被认为是唯一的,需要一些解释。只要矩阵在与先前找到的矩阵完全相同的位置上没有完全相同的数字,就将其视为唯一。这意味着先前找到的矩阵的反射等被视为唯一。 输入和输出示例 在这些示例中,我将其true用作真实值和false虚假值。 输入:VIIIIVI,IIIVVII,IVIXII 输出:( 24,true 魔术三角形是8-1-6、3-5-7、4-9-2。) 输入:IIIXVIII,IVIII,VIIII 输出:210,false 附加功能 如果您选择的语言具有内置罗马数字转换功能,则不允许使用该功能。

6
实施可变长度哈希
我和我的朋友有我们用文字玩的游戏。这是一个有趣的消遣,它涉及单词中的“删除”字母,直到没有剩余为止。我真的很讨厌他比我快很多,所以实施它并让我最终击败他是您的工作。显然,由于我必须使程序尽可能容易地隐藏,因此它必须尽可能小。 这个游戏如何运作? 游戏是一个非常简单的算法。它减少了字母字符串,直到无法进一步减少为止,从而使其成为一种哈希。我们人类所做的实际游戏很难实现,但可以简化为以下算法: 首先将字母对折,然后将两部分对齐,如下所示: a b c d e f g h i j k l m z y x w v u t s r p q o n 然后,从中间开始,将正整数分配给上半部,将负整数分配给下半部: a b c d e f g h i j k l m 13 12 11 10 9 8 …

4
写一个班次翻译
编辑:你们中有些人怀疑,官方解释器中有一个错误:组成顺序.颠倒了。我有两种版本的解释器,在这里使用了错误的一种。这些示例也是针对此错误版本编写的。我已经修复了存储库中的解释器以及以下示例。的描述>也有点模棱两可,所以我已经解决了。而且,为此花了很长时间的道歉,我陷入了一些现实生活中。 EDIT2:我的解释器在实现中存在一个错误,该错误.反映在示例中(它们依赖于未定义的行为)。现在,此问题已解决。 介绍 Shift是我几年前制作的一种深奥的函数式编程语言,但今天发布了。它基于堆栈,但是像Haskell一样具有自动监视功能。 规格 Shift中有两种数据类型: 功能,具有任意的正元数(输入次数),并且其返回的输出的列表。例如,一个重复其唯一输入的函数具有arity 1,而交换其两个输入的函数具有arity 2。 空格完全相同,除了没有功能外没有其他目的。 Shift程序包含零个或多个命令,每个命令都是一个ASCII字符。共有8条命令: !(应用)弹出的功能f和值x从堆栈,并适用f于x。如果f为1,则将列表f(x)添加到堆栈的最前面。如果具有arity n > 1,则将一个新的(n-1)-ary函数g推入堆栈。它接受输入并返回。x1,x2,...,xn-1f(x,x1,x2,...,xn-1) ?(空白)将空白推入堆栈。 +(clone)将复制其输入的一元函数压入堆栈:任何值x都映射到[x,x]。 >(shift)将接受n-ary函数的一元函数压入堆栈f,并返回(n+1)-ary函数g,该函数忽略其第一个参数x,调用f其余参数,并x在结果前加钉。例如,shift(clone)是一个二进制函数,它接受输入a,b并返回[a,b,b]。 /(fork)将接受三个输入的三元函数压入堆栈a,b,c,[b]如果a为空白,[c]则返回,否则返回。 $(呼叫)推到堆栈弹出的功能的二元函数f和一个值x,并适用f于x完全一样!一样。 .(chain)将一个二进制函数压入堆栈,该函数会弹出两个函数f和g,并返回它们的组成:h具有与ar相同的Arity 的函数,该函数f通常接受其输入f,然后将它们应用于它们,然后完全应用于g结果(调用它的次数取决于其Arity的规定),而输出中的未使用项f保留在的结果中h。例如,假设f的是,克隆其第二个参数,和一个二进制函数g是呼叫。如果堆栈包含[f,g,a,b,c]并且我们包含.!!,那么它包含[chain(f,g),a,b,c]; 如果我们做!!下一个,然后f首次应用于a,b,产生[a,b,b],则将g其应用于该元素的前两个元素,因为其Arity为2,产生[a(b),b],堆栈最终为[a(b),b,c]。 @(比如)推送一元函数,该函数仅返回其输入,并0在其为空白以及1为函数的情况下进行打印。 请注意,除!简单地将一个值压入堆栈外,所有命令均无法执行输入,而输出任何内容的唯一方法是use @。通过逐一评估命令,在调用“ say”时打印0s或1s并退出来解释程序。此处未描述的任何行为(应用空格,应用长度为0或1的堆栈,在空格上调用“ chain”等)都是未定义的:解释器可能崩溃,无提示失败,要求输入或执行任何操作。 任务 您的任务是为Shift编写解释器。它应该从STDIN,命令行或函数参数中获取要解释的Shift程序,然后打印到STDOUT或返回0s和1s 的结果(可能是无限的)输出。如果编写函数,则必须能够以某种方式访问​​无限长的输出(Python中的生成器,Haskell中的惰性列表等)。另外,您也可以输入另一个数字n,n如果长度大于,则返回至少一个字符n。 最低字节数获胜,并且不允许出现标准漏洞。 测试用例 此Shift程序打印01: ?@!@@! 从左侧开始:推一个空格,按下say,然后将say应用于该空格。这输出0。然后,将发言权推两次,然后将第二个发言权应用于第一个发言权。这输出1。 该程序永远循环,不产生任何输出: $+.!!+!! 推动call和clone,然后对其应用链(!由于chain是二进制函数,我们需要两个s )。现在,堆栈包含一个函数,该函数接受一个参数,将其复制,然后在第二个参数上调用第一个副本。使用+!!,我们复制此函数并对其进行调用。 该程序打印0010: ?@$.++>!.!!.!!.!!!!+?/!!!@!@>!!! 推空白并说。然后,编写一个二进制函数,该函数复制其第二个参数b,然后复制第一个参数a并将其与自身组合,然后将该合成应用于的副本b,返回[a(a(b)),b]。其应用到说和空白,然后申请比如说剩余堆栈上的两个元素。 打印此程序0。对于!!!您追加的每个内容,它都会打印出一个额外的0。 ?@+$>!>!+>!///!!>!>!.!!.!!.!!+!!!! 推空白并说。然后,组成一个三元函数,将其f,g,x作为输入并返回[f,f,g,g(x)]。克隆该函数,并将其应用于自身(例如)和空白。该应用程序不会更改堆栈,因此我们可以根据需要多次应用该函数。 此程序将打印无限序列001011011101111...,其中1s 的数量始终增加一: @?/!@>!??/!!>!+.!!.!!.!!.+>!.!!$$$$+$>!>!$>!>!+>!$>!>!>!+>!>!///!!>!>!>!.!!.!!.!!.!!.!!.!!.!!.!!.!!.!!+!!!!! 存储库包含带注释的版本。

6
列出两个芬兰名词的案例
介绍 在这种挑战,你的任务就是要正确列出案件 2个芬兰名词。不同之处在于您可以使用其中一个清单作为指导来制作另一个清单。 名词 我们使用以下两个磁偏角表作为数据。他们以单数形式:复数形式列出了两个名词的情况,每行一个情况,与上面链接的Wikipedia文章中的顺序相同。 表1:ovi(“门”)的案例 ovi : ovet oven : ovien oven : ovet ovea : ovia ovessa : ovissa ovesta : ovista oveen : oviin ovella : ovilla ovelta : ovilta ovelle : oville ovena : ovina oveksi : oviksi ovin ovetta : ovitta ovine 表2:jalka(“脚”)的病例 jalka : …

7
本周四年级数学作业:效率最低的旅行推销员
我女儿的数学作业有以下任务。想象一下,有六个朋友生活在一条名为E,F,G,H,J和K的直线上。他们在直线上的位置如下所示(未按比例): 因此,F从E居住五个单元,从G居住两个单元,依此类推。 您的作业:设计一个程序,该程序以朋友的位置和n为输入,以总长度n个单位的长度来精确地访问每个朋友一次。如果找到它,它应该报告该路径(例如,对于长度17,它可能报告“ E,F,G,H,J,K”,并且如果不存在任何解决方案,则应正常退出。对于它的价值,我完成了Mathematica中271个字节的非解决方案,我怀疑这可能比这更简洁。

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.