编程拼图和代码高尔夫

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

4
秩序与混沌与密码高尔夫
Order and Chaos是在6x6板上播放的Tic-Tac-Toe的变体。然而,使游戏与众不同的是,两个玩家都可以放置X或O!每回合(从订购开始),玩家将在任何未占用的方块中放置X或O。 获胜很简单。如果板上连续有5个X或O(垂直,水平或对角线),则订单获胜。如果棋盘已满,并且棋盘上没有5个X或O的字符串,则混沌获胜。你的工作?好吧,由于这是《Programming Puzzles》和《 Code Golf》,因此您将对游戏进行编程,然后进行高尔夫。 规则 您必须接受输入为x y t,其中x和y是坐标,并且t是图块类型(X或O)。坐标从0 0左上角开始,一直增加到5 5(右下角)。 您必须接受q退出,并INVALID在用户输入无效的坐标,磁贴,任何非形式的输入时进行打印x y t,或尝试将磁贴放置在已经存在的位置。(唯一的例外是q,因为这会退出程序。) 如果Order获胜,您将输出P1 WINS。如果混沌获胜,您将输出P2 WINS。 必须先下订单。 空格由表示.。 磁贴为X和O(大写)。您不必接受小写字母,但必须使用大写字母。 您的董事会只能由组成.XO。 您实际上是在模拟两个玩家在玩游戏,而不是获得董事会和检查谁获胜。它接受一个动作作为输入,然后打印棋盘,接受另一个动作,依此类推,直到一个玩家获胜。 起始板如下所示: ...... ...... ...... ...... ...... ...... 在第一个玩家(订购)输入之后1 2 X,它应该如下所示: ...... ...... .X.... ...... ...... ...... 同样,当下一个玩家(混沌)输入时3 3 O,它将如下所示: ...... ...... .X.... ...O.. ...... ...... 直到一位玩家获胜为止。 …

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████ …

11
列出Sophie Germain素数
问题 阿柔Germain的素数是素数p使得2P + 1是素数为好。例如,11是Sophie Germain素数,因为23也是素数。编写最短的程序以升序计算Sophie Germain素数 规则 Sophie Germain素数必须由您的程序生成,而不是从外部源生成。 您的程序必须计算2³²-1以下的所有Sophie Germain素数 您必须打印程序找到的每个不同的Sophie Germain质数。 得分最低的人获胜 计分 代码的每个字节2点 如果您可以显示程序产生的质数大于2³²-1,则为-10

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

3
计算匹配任何一组掩码的平衡二进制字符串
一个二进制字符串是只包含绘制字符的字符串01。甲平衡二进制串是包含完全一样多一个二进制串0 S作为1秒。 您会得到一个正整数n和任意数量的掩码,每个掩码的长度为2n个字符,并且仅包含从012绘制的字符。如果二进制字符串和掩码的长度相同,并且在掩码没有2的每个位置上的字符都相同,则匹配该字符串。例如掩模011022比赛的二进制串011000,011001,011010,011011。 给定n和掩码作为输入(用换行符分隔),您必须输出与一个或多个掩码匹配的不同平衡二进制字符串的数量。 例子 输入值 3 111222 000112 122020 122210 102120 推理 唯一匹配111222的平衡二进制字符串是111000。 唯一匹配000112的平衡二进制字符串是000111。 匹配122020的平衡二进制字符串为111000(已计数),110010和101010。 匹配122210的平衡二进制串是110010(已经计数),101010(已经计数)和100110。 匹配的平衡二进制字符串102120是101100和100110(已计数)。 所以输出应该是 6 输入值 10 22222222222222222222 推理 有20个选择10个长度为20的平衡二进制字符串。 输出量 184756 优胜者 获胜者将是计算比赛输入最快的人,当然会像对待其他输入一样对待它。(我使用确定的代码来获得明确的获胜者,并避免出现不同的输入将给不同的获胜者的情况。如果您想找到一种找到最快代码的更好方法,请告诉我。) 比赛输入 http://pastebin.com/2Dg7gbfV

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 …

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.