编程拼图和代码高尔夫

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

30
使单词适合字母网格
受到我今天早些时候看到的一个模因的启发。 挑战说明 考虑一个无限的字母网格: ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ... 取一个单词(CODEGOLF在此示例中)并使其成为网格的子序列,用空格替换未使用的字母,并在无限网格的末尾完全删除字母: C O DE G O L F 例子 STACKEXCHANGE ST A C K E X C H A N G E ZYXWVUTSRQPONMLKJIHGFEDCBA Z Y X W V U T S R Q P O N M L K J I …

24
重要空白
我们将空格定义为三个字符中的任何一个,即制表符(0x09),换行符(0x0A)或空格(0x20)。 为了应对这一挑战,您将使用相同的编程语言编写两个程序或函数,它们将执行以下任务: 计算给定字符串中的空白字符。例如,输入 123 -_- abc def 将返回7(假设没有结尾的换行符)。 在连续的空白处分割给定的字符串。如果字符串以空格开头或结尾,则结尾处不应返回任何空字符串。例如,相同的输入 123 -_- abc def 会回来的["123", "-_-", "abc", "def"]。 无论哪种情况,您都可以通过STDIN,命令行参数或函数参数接受输入,然后返回结果或将其打印为STDOUT。对于第二个程序,如果选择打印到STDOUT,请在每个字符串的一行上打印它们,不要用引号引起来。 对于这两个程序,您都可以假定输入仅包含可打印的ASCII(0x20至0x7E)和空格。 现在是要抓住的地方: 如果从两个程序/功能中都删除了所有空格,则产生的字符串必须相同。也就是说,您的两个提交内容只能在空格字符的数量和位置上有所不同。 程序/函数均不能包含任何字符串或正则表达式文字(如果您的语言具有指定的字符类型,则文字文字可以使用)。 程序/功能均不得包含任何注释。 您不得直接或间接阅读程序的源代码。 这是代码高尔夫。您的分数是两种解决方案的总和(以字节为单位)。最低分获胜。 排行榜 以下Stack Snippet会按语言生成常规排行榜和获胜者概述。因此,即使您选择的语言不能让您赢得全部挑战,为什么不尝试在第二名中夺取一席之地呢?我很高兴看到人们如何以多种语言应对这一挑战! 为确保您的答案显示出来,请使用以下Markdown模板以标题开头。 # Language Name, N bytes 这里N是总您提交的大小。如果您提高了分数,则可以通过打败旧分数来保持标题。例如: # Ruby, <s>104</s> <s>101</s> 96 bytes 您也可以在总计数之前包括单个计数,例如 # Python 2, 35 + 41 = 76 …

9
这是哪个tetromino?
给定一个无符号的16位整数N,您的任务是确定映射在4x4矩阵内的二进制表示形式是否与tetromino形状匹配,如果匹配,则匹配哪个形状。 矩阵 N的每一位都从最高有效位开始,从左到右,从上到下映射到4x4矩阵内。 范例: N = 17600 binary representation: 0100010011000000 matrix: [ [ 0, 1, 0, 0 ], [ 0, 1, 0, 0 ], [ 1, 1, 0, 0 ], [ 0, 0, 0, 0 ] ] Tetromino形状 基本形状 有7种tetromino形状,由字母O,I,S,Z,L,J和T标识: 旋转和平移 如果在4x4矩阵中平移和/或旋转形状,则仍将其视为同一四聚胺的有效变体。例如,应该将17600、1136、2272和1604都标识为J trotrominoes: 不要包! 但是,形状不能环绕或移出矩阵的任何边界。例如,既不是 568 也不 688应当认定为Ĵ tetrominoes(更不用说任何其它形状): 澄清和规则 …

30
做些字母雨
字母雨 任务: 基本前提是打印出输入字符串,然后根据其在(不区分大小写)字母中的位置(0索引)垂直地重复每个字符A-Z。A在位置0处因此不重复,e在位置4处因此重复4次,P在位置15处因此重复15次,!不在位置处A-Z因此重复0次,等等。 为了清楚起见,超出范围的任何内容B-Zb-z(例如数字或特殊字符)将不会重复,因此只会出现在第一行。 这是代码高尔夫,因此每种语言中最短的解决方案是获胜者。 输入: 输入将使用标准的可打印ASCII字符集,从32 到126 ~。 输入字符串的长度为1个字符或更长。 不会有任何前导或尾随空格。 您可以将输入作为字符串("hello")或字符列表(["h", "e", "l", "l", "o"]) 例子: 输入的aaaa给出: aaaa 输入的abcda给出: abcda bcd cd d 输入Programming Puzzles & Code Golf!,得到: Programming Puzzles & Code Golf! Progr mming Puzzles Code Golf Progr mming Puzzles Code Golf Progr mming Puzzles ode Golf Progr …

30
计算科拉科斯基序列
这是旧挑战的转折,以便将I / O要求调整为我们最近的标准。这样做是为了允许更多的语言参与有关此流行序列的挑战。有关重新发布的讨论,请参见此元发布。 Kolakoski序列是一个有趣的自引用序列,荣幸地成为OEIS序列A000002(比A000001更易于理解和实现)。序列以1开头,仅由1 s和2 s组成,序列元素a(n)描述序列中第n轮1 s或2 s 的长度。这唯一地定义了序列(具有下面的运行可视化): 1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,2,1,1,2,1,2,2,1,1,2,1,1,2,... = === === = = === = === === = === === = = === = = === === = === = 1, 2, 2, 1,1, 2, 1, 2, 2, 1, 2, 2, 1,1, 2, 1,1, 2, 2, 1, 2, …

17
填写扫雷线索
扫雷(Minesweeper)是一种流行的益智游戏,您必须在不单击这些图块的情况下发现哪些图块是“地雷”。每个图块要么是地雷(用表示*),要么是线索,即从0到8的数字表示在8个相邻图块中有多少是地雷。今天的任务是拿一个包含地雷的板子,并填写所有线索。例如,看下面的5x4板,有5个地雷: * * * * * 填写线索后,董事会将如下所示: 2*211 *33*1 12*32 0112* 细节 您必须编写一个完整程序或一个函数,该函数接受仅包含空格和星号的字符网格,并输出另一个网格,其中每个空格都用相邻的地雷(星号)替换。这些是您的网格可接受的格式: 带有换行符的字符串 二维字符列表/单个字符串 字符串列表 您可以假定网格至少为 1x1,尽管可能是所有地雷或所有空间。 输入网格将始终填充适当数量的空格。像往常一样,这是代码高尔夫球,因此存在标准漏洞,并且以字节为单位的最短答案为胜! 样品IO 为了看到空白,我将显示所有带有括号的示例IO。 Input: [ * ] [* ] [ ] [ ] [ ** ] [ * * ] Output: [1101*1] [*10111] [110000] [012210] [12**21] [1*33*1] Input: [****] [****] Output: [****] …

22
丹尼斯数字2.0
PPCG用户和当选mod,@ Dennis成为有史以来第二个收入超过10万的用户! 这是一个完全原始的想法,我没有从其他任何人那里得到,但是让我们根据他的用户ID进行挑战,12012以示敬意! 查看它,您会注意到他的ID有两个不同的“部分”。 12 和 012 这两个部分的总和为3。这是一个非常有趣的属性。 让我们将“ Dennis 2.0数字”定义为任何正整数,其中严格增加的数字的每个最大子序列加总为相同的数字。例如, 123 是Dennis 2.0的数字,因为只有一个严格增加数字的最大子列表,它的总和为6。另外,2,846,145也是Dennis 2.0的数字,因为三个增加的数字最大子列表,即 28 46 145 总计为10。此外,仅重复相同数字的数字必须是Dennis 2.0数字,因为例如777可以细分为 7 7 7 其中明确所有总和为7。 一些诸如42是不一个丹尼斯2.0数量,因为它被分解成 4 2 显然,它们的总和并不相同。 挑战 您必须编写程序或函数来确定给定数字是否为Dennis 2.0数字。您可以采用任何合理的输入格式进行输入和输出,例如从文件,函数参数/返回,STDIN / STDOUT等中以字符串,数字形式输入,然后如果该数字是Dennis 2.0 ,则返回真实值。数字,如果不是,则为假值。作为参考,以下是每个Dennis 2.0编号(最多1,000个): 1 2 3 4 5 6 7 8 9 11 12 13 14 15 …

30
输出文本“代码保龄球”
代码保龄球 Brunswick Bowling雇用您来创建一个简单的程序,Code Bowling在他们的监视器上输出文本。这家公司值得一分钱,您觉得可以骗他们一些的钱。 职位描述清楚地表明,他们按计分方式付款,并且您很有信心可以操纵自己的计分系统,从而从中获益,并从这些人那里获得最大的薪水支票。这样做将需要您将尽可能多的代码打包到程序/函数中,即使它们的计分系统旨在防止您这样做。 拿出您的存钱罐,让我们编码! 挑战 面临的挑战是简单地输出文本Code Bowling,使其与此处编写的内容完全一样,并获得最高分。(请参阅下面的评分系统部分) 开头和结尾的换行符(换行符)是可以接受的。 您的代码可以是整个程序,也可以是可执行函数。 规则 强制性:此挑战是使用代码收集:通用规则,修订版1.0.0;有关详细信息,请参见Meta。 字符:字节比率 在代码保龄球中,字符计数比字节计数优先。显而易见的原因是,可以使用多字节unicode字符(例如🁴)代替单字节unicode字符来弄乱字节数,并使更多人知道谁用高字节unicode字符重命名最多的变量,而不是而不是最有策略地创建有意义的复杂代码的人。 变量/功能/对象名称 所有变量名称(或对象指针,函数名称等)应为1个字符长。使用2个字符的变量名称的唯一可接受时间是在使用了所有可能的1个字符的变量之后。使用3个字符的变量名称的唯一可接受时间是在使用了所有可能的2个字符的变量之后。等等。 未使用的 代码必须使用所有代码。意味着如果删除了任何单个字符(或不同的字符集),程序必须无法始终正确地完成任务。自然,如果没有程序的其余部分,该程序的子集将无法独自完成任务。 注释 除非程序或功能以某种方式使用了注释,否则不允许对字符计数进行注释。 评分系统: Pangram挑战: 七巧板是每个字母至少使用一次的句子。(敏捷的棕色狐狸跳过了懒狗)。 这种挑战类型具有计分系统,其中完美的Pangram可以达到理论上的最高分数(尽管您不需要至少每个字符都使用一次。)此外,多次使用任何字符都将招致惩罚。这个挑战也扩展到了不仅仅是字母字符。 评分标准: 使用的每个字符都会使您的得分提高1。 重复使用任何字母数字字符(az,AZ,0-9)将导致每次重复扣除3分(首次使用不会导致扣除)。 重复使用基本标点符号([!?.-,":';])-包括方括号-将导致每次重复扣除2分。 重复使用其他ASCII字符{`~@#$%^&*_+=|\/><}(包括花括号)将导致每次重复扣除4点。 使用空格,制表符和换行符将导致每次使用减少1分。也就是说,它们不计入角色总数。 上面未提及的字符(奇异字符)每次使用将导致扣1分。也就是说,它们不计入角色总数。 计分工具: 一个自动计分的小工具已经创建,可以在这里找到。 这是一个代码收集变体。得分最高的程序将获胜!(由于最高得分为94,因此,只要得分最高的人(如果可以达到的话)将被标记为接受的答案,但是其他人则可以继续保持乐趣)

30
转换YYYYMM到MMMYY
基于这个SO问题。 挑战非常简单:给定日期格式的日期,将YYYYMM其以格式输出MMMYY。 规则: 输入将是数字或正好6个字符长的字符串,仅由数字组成。 后两位数字介于01和之间12。 输出必须采用形式MMMYY,其中MMM代表月份的大写三字母代码(以下),并YY代表输入部分的最后两位数字YYYY。 带有相应代码的月份列表: MM MMM 01 JAN 02 FEB 03 MAR 04 APR 05 MAY 06 JUN 07 JUL 08 AUG 09 SEP 10 OCT 11 NOV 12 DEC 例子: Input Output 201604 APR16 200001 JAN00 000112 DEC01 123405 MAY34
54 code-golf  string  date 

10
周边国家
各国在一维世界上拥有一系列领土。每个国家/地区均由数字唯一标识。可以通过以下列表来表示领土的所有权: 1 1 2 2 1 3 3 2 4 我们将一个国家的最边缘地区定义为最靠近任一边缘的两个地区。如果上述列表的索引为零,则该国家/地区1的最边缘地区位于0和4。 如果一个国家的两个最边缘区域之间的子列表包含另一个国家的所有领土,则该国家将包围另一个国家。在上面的示例中,国家/地区2最边缘地区之间的子列表为: 2 2 1 3 3 2 而且我们看到国家的所有领土3都在国家的最边缘地区之间2,因此国家2包围国家3。 一个只有一个要素的国家永远不会包围另一个要素。 挑战 以整数列表作为输入(任何格式),如果任何国家被另一个国家包围,则输出真实值,否则输出虚假值。 您可以假设输入列表是非空的,仅包含正整数,并且不会“跳过”任何数字:例如,1 2 1 5将是无效的输入。 测试用例 +----------------------+--------+ | Input | Output | +----------------------+--------+ | 1 | False | | 2 1 3 2 | True | | 2 1 …

1
构建移动最少的freecell求解器
在Freecell游戏中,您需要负责从王牌到国王建造四个基础桩,并在这些布置中以不同的颜色向下建造。但是,一次只能构建一张卡,因此会为您提供四个“自由单元”,每个单元可以包含一张卡来帮助您移动整个序列。想法是,您可以根据需要在空闲单元中编织单个卡片,以帮助解决游戏。 您的任务是建立一个程序,以尽可能少的动作解决这些游戏。 您的程序将采用以下格式输入52张卡片作为输入: 2S 9H 10C 6H 4H 7S 2D QD KD QC 10S AC ... 它将按以下顺序在初始布局中处理: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 …

8
这句话吗?
您应该编写一个程序或函数,该程序或函数以4个字符的字符串作为输入,并输出一个值,该值指示该字符串是否为英语单词。您可以在提供的15%的测试用例中出错。 输入详细信息: 输入是4个字符的字符串,仅包含小写英文字母(az)。 输出详细信息: 如果输入是英文单词,则应输出布尔值true或整数1。 如果输入的不是英语单词,则应输出布尔值false或整数0。 词表 4个字母的英语单词列表(2236个单词) 4个字母的非单词字符串(2236个字符串)列表 非单词列表包含统一随机生成的字母序列,其中已删除了真实单词。 测试中 您的程序或函数在给定单词列表上所犯的错误总数不应超过15%。这意味着您可以为4472个提供的输入中的670个提供错误的输出。 您也应该发布测试程序或功能,以便其他人可以检查您的答案。测试程序的时间不计入提交分数。 不允许出现标准漏洞。 您的程序不应使用任何外部资源,例如访问Web或从文件读取。 这是代码高尔夫球,因此最短的程序或函数会获胜。

30
打印N-bonacci序列
这不是很广为人知,但是我们称之为斐波那契数列 1, 1, 2, 3, 5, 8, 13, 21, 34... 实际上称为Duonacci序列。这是因为要获得下一个数字,您需要将前两个数字相加。还有Tribonacci序列, 1, 1, 1, 3, 5, 9, 17, 31, 57, 105, 193, 355, 653, 1201... 因为下一个数字是前三个数字的总和。和Quadronacci序列 1, 1, 1, 1, 4, 7, 13, 25, 49, 94, 181, 349, 673... 和每个人都喜欢的Pentanacci序列: 1, 1, 1, 1, 1, 5, 9, 17, 33, 65, …

27
生成字词
标识是对哈希值的直观描述,通常由几何形状的对称排列制成。您的默认Stack Exchange头像是一个identicon。挑战在于创建“ wordenticons”,即简单的基于文本的identicon图标版本,适用于小写字母(即单词)字符串。 挑战 编写一个接受字符串S并输出其wordenticon的程序或函数。S保证为非空,并且仅包含小写英文字母字符az。您可以选择假设S具有尾随换行符。 S的wordenticon是文本的正方形网格,其边长2*length(S)由空格( ),竖线(|)和横线(―)组成。 要生成S的词​​对像,形成一个正方形网格,其中每一列对应于S的一个字母(按从左至右的正常阅读顺序),每一行对应于S的一个字母(按从上至下的正常阅读顺序) )。 例如,如果S是food我们的初始网格, food f.... o.... o.... d.... 在哪里.只是一个占位符。 对于.网格中的每个空白点(每个): 如果列字母来排字母之前按字母顺序,替换.用|。 如果列字母来排字母后按字母顺序,替换.用―。 如果列和行字母相同,则.用 (空格)替换。 这是food每个步骤之后的示例: 添加|的: food f...| o|..| o|..| d.... 添加―的: food f.――| o|..| o|..| d―――. 添加 的: food f ――| o| | o| | d――― 要完成单词输入法,请删除包含单词的多余行和列 ――| | | | | …

30
迷信酒店电梯
描述 这是上海一个非常迷信的酒店电梯: 它避免使用数字13,因为在西方世界中有13位不幸,而避免使用数字4,因为在亚洲部分地区,有4位不幸。如果这家酒店更高,该怎么办? n从STDIN 读取一个代表楼层数的正整数,并打印按钮布局到STDOUT:的样子-1,然后是下一个n-1不等于13并且不包含数字4的正整数。两列中的数字,如上图所示:每行打印两个楼层号,并由水平制表符分隔,以便从左到右以相反的顺序读取行会产生升序的序列。(您也可以选择打印尾随换行符。) 测试用例 对于input 14,输出应如上图所示: 15 16 11 12 9 10 7 8 5 6 2 3 -1 1 其中每行的空白是单个水平制表符。 对于输入2,您应该打印-1 1。 对于输入100,您应该打印: 120 121 118 119 116 117 113 115 111 112 109 110 107 108 105 106 102 103 100 101 98 99 96 97 …

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.