编程拼图和代码高尔夫

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

3
编写JSON验证器
编写一个确定其输入是否为有效JSON的程序。 输入: ASCII文本:[\x00-\x7F]* 注意:如果ASCII有问题,请随时使用其他编码,但请在帖子中注明。 输出: Valid或Invalid。尾随换行符可以省略。 例: $ echo '{"key": "value"}' | ./json-validate Valid $ echo '{key: "value"}' | ./json-validate Invalid 规则: 不要使用JSON解析库。 允许使用部分正确的解决方案,但对此不以为然。 发布您的测试套件分数(见下文)。 在最短的正确的解决方案获胜。 请在您的程序上运行json-validate-test-suite.sh,然后发布分数。例: $ ./json-validate-test-suite.sh ./buggy-prog fail: should be invalid: [ 0.1e ] fail: should be invalid: [ 0.1e+-1 ] fail: should be invalid: [ 0.1e-+1 …
12 code-golf 

7
你下了多少雪?
我很抱歉。我们在内部打高尔夫球的过程中玩得很开心,但是需要澄清一些电子邮件,所以我希望我能第一时间抓到大部分。 问题 给定一个“模拟的”降雪快照(作为函数/方法的字符串,stdin或参数),请报告4个值:最小深度,最大深度,平均深度和持续时间。 这是一个格式化的示例来说明输入: * * ** ** * *** ** * * * -------- “ *”是一片雪花,“-”是地面。想象一下所有落在地上的“雪花”。这是最终的“快照”: * * ** * ** ******** -------- 您需要报告以下内容: 最小深度-计算最短的“桩”(在上面的示例中为1) 最大深度-计算最高的“桩”(在上面的示例中为4) 平均深度-所有“桩”的平均数量(在上面的示例中为1.9-舍入为十分之一) 持续时间-(每个“下降” = 1秒)-从第一个快照到最后一个快照的时间(3秒,在上面的示例中) 另一个例子供参考: * * * * * -------- 最终快照: * * *** -------- 输入 起始的“快照”将具有8个“行”,8个“列”,并用管道定界(管道将行分隔开)。例如(不包括引号): “ | | | | …
12 code-golf 

14
打印NxN升序螺旋形[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 2年前关闭。 数字应在长度=(N ^ 2的位数)的字段中以前导零开头。 输入(N): 4 输出: 01 12 11 10 02 13 16 09 03 14 15 08 04 05 06 07 我对算法和实现的清洁度感兴趣。因此,空格不计算在内,N的上限为42。

1
图中的最短路径
编写程序以绘制图形(从标准输入或文件中选择),并在图形中找到最短路径。 图形使用以下格式指定: A---S F--T | / \ | | / 5 0 |/ \| D----3--E A-Z: nodes in the graph -|/\: edges in the graph 0-9: weights on the edges <space>: all the holes 所有边缘都是无方向的,并沿8个基本方向之一(即无弯曲)放置。边缘可以选择包含0到9的权重。该权重不会在将边缘连接到节点的最后一个符号上(即,边缘必须至少具有3个符号才能包含权重)。未加权边缘的默认权重为1。 您的代码应计算节点之间的最短路径S,T并打印长度和路径,如下所示: 5:SDEFT 最短的正确程序获胜。

6
计算面积。
给出曲线p(x)= a 0 + a 1 * x + a 2 * x 2 + ...,y = 0线,x = 0线和x = C线之间的面积的最小代码 (即: ) 对于x <C,您可以假设p(x)> = 0(如果代码适用于p(x)的负值,则为积分)。 输入值 C,a 0,a 1,... 输出量 实数-面积 范例1: input: 2, 0, 1 output: 2.0 示例2: input: 3.0, 0, 0.0, 2 output: 18 更新: …
12 code-golf 

8
二叉树编码
假设您有一棵完整的二叉树(即每个内部节点恰好有两个非空后代)。每个节点包含一个非零整数。您将获得将树编码为整数列表或从整数列表中解码树的任务。 该树在内部存储如下: struct node { int data; struct node *left, *right; }; 您必须实现两个功能: int *encode(struct node *root); struct node *decode(int *array); 由您决定如何编码和解码。 要点: 最小编码长度 复杂度(理想情况下,节点数量呈线性关系) 独创性 源代码长度没有意义,您不限于C。 树示例: 5 / \ 3 2 / \ 2 1 / \ 9 9

6
修正口吃的话
口吃是我们许多人可能已经经历或至少看到的问题。尽管大多数著名的语音识别软件都存在口吃的严重问题,但让我们想象一下一种软件,该软件可以理解口吃但无法修复口吃,只能照原样编写。 用这样的软件编写的示例文字可能是这样的:“请小心”。在此示例中,“小心”是原始单词,“ ca ca”是断断续续的单词。 挑战 编写一个程序或函数,通过保留输入中的原始单词,通过从输入中删除它们来修正出现的单词。例如,“请小心”的固定版本将是“请小心”。 这是代码高尔夫,每种语言的最短答案胜出! 什么是口吃的单词? 口吃有许多不同的变化。但是为了简化此挑战,我们将其限制为以下规则: 口吃的单词可能是原始单词的未完成部分或全部。所谓“未完成的部分”,是指原始单词应完全以口吃单词开头。例如“OPE”和“开放”既可以是一个结巴字的“开放”,但“笔”不能因为一个“开放”不是以“笔”。 口吃的单词必须至少包含一个“ aeiou”元音。例如,“ star”可以是“ start”的口吃词,因为它包含“ a”,但是“ st”不能是口吃的词,因为它不包含任何上述元音。 口吃的单词只能出现在原始单词之前,应重复至少两次才能有效(原始单词不计入重复中)。例如,“ oo open”具有口吃的单词,但没有“ o open o”,因为原始单词之后的“ o”不计算在内,原始单词之前的“ o”没有重复至少两次。“ go go go go go go go”在原始单词之前有五个重复的口吃单词,并且有效。 一组重复的口吃单词不能包含混合形式,并且单词应该彼此完全相同。例如,“ op o op open”不算作口吃的单词。另一方面,“ o op op open”具有口吃单词,因为在这里第一个“ o”被视为一个完全不同的单词,而两个“ op”被视为“ open”的口吃单词。 如果有多个有效的重复设置的紧接单词,则仅保留最后一个原始单词。例如,在“ ooo op op op open”中,“ oo …
12 code-golf  string 

9
邮递员送达
我刚刚获得了邮递员的工作,我需要您的帮助才能保留它。我必须先订购大量邮件,然后再出去递送。 街道严格按顺序编号,从街道开始处的1开始,然后继续以不跳过任何数字的方式一直到结尾,左侧为奇数,右侧为偶数。加上房屋是在以后添加的,因此我们可能还会在公民编号后附加字母。 箱子中包含城市的所有邮件,因此我只能选择街道上的邮件。 我需要您的帮助才能更快地订购邮件。我要你写的是编写函数或完整程序: -街道名称。 -按照我的路线订购的公民编号列表。 -地址列表(代表邮件箱)。 并输出仅包含我街道地址的地址列表,并按照公民编号列表进行排序。 地址的格式为: Person Name/n CivicN Street Name 其中CivicN是“/”可以遵循由一个数字和一个大写字母(10 / B)。如果愿意,可以使用小写字母。 如果街道名称重叠,则将其视为不同的街道: Church Road != Saint Lorenz Church Road 为了简单起见,我们忽略了其余地址(假设每个邮件都相同) 信件必须快速送达,以便赢得最短的答案。 例: 版面: 1 1/B 3 5 7 9 11 13 ============================== 2 4 4/B 6 输入: "Tea Avenue" ["1","1/B","2","4","3","5","7","4/B","6","9","11","13"] ["Mrs. Pie O. Pinky\n6 …
12 code-golf  string 

2
用四色的三聚氰胺平铺棋盘
任务: 考虑一下问题:“给一个棋盘一个正方形不见了的棋子,切成21个L-三聚氰胺”。有一个众所周知的建设性证明,即可以对任何大小为2的幂的方形棋盘进行此操作。它的工作原理是将棋盘分割成一个较小的棋盘,棋盘上有一个孔和一个大的Triomino,然后观察该Triomino可以递归地切成四个Triomino。 在此任务中,您需要将8x8棋盘切成L形的三角骨,然后用四种颜色着色,以使两个相邻的三角骨都不具有相同的颜色。 规格: 您输入的是孔的位置,以一对整数形式给出。您可以选择哪一个是列索引,哪个是行索引。您可以选择是从0还是从1开始,然后从哪个角开始增加。您可能需要A..H作为第一个坐标,而不是0..7或1..8。您也可以接受按字典顺序打包成单个整数0..63或1..64(行主要或列主要,从左到右或从右到左,从上到下或从上到下)的两个坐标。您可以编写完整的程序或函数。 您可以将图块输出为ASCII,彩色ASCII或图形图元。如果选择ASCII输出,则可以选择任何四个可打印的ASCII字符来表示四种颜色。如果选择彩色ASCII,则可以选择任何四个可打印ASCII字符,或者仅选择一个空格以外的字符。孔必须用空格字符表示。如果您的角色之一是空格字符,则靠近该孔或棋chess边缘的三聚氰胺可能不是这种颜色。 如果选择彩色ASCII或图形输出,则可以从环境中可用的#000,#00F,#0F0,#0FF,#F00,#F0F,#FF0,#FFF中选择任意四种颜色。如果选择图形输出,则您的图形基元必须以至少32x32像素的正方形填充,并以不超过两个其他颜色的像素分隔。如果以上超出您的环境的屏幕分辨率,则将最小尺寸要求放宽到仍然适合屏幕的最大正方形尺寸。 您可以选择给定棋盘的任何有效平铺。您可以选择任意四种平铺颜色。您在所有输出中选择的四种颜色必须相同,但是并不需要在每个输出中使用每种颜色。 例子: 输入的可能输出= [0,0](左上角) #??##?? ##.?#..? ?..#??.# ??##.?## ##?..#?? #.??##.? ?..#?..# ??##??## 同一程序的另一个可能的输出(输入= [0,7]): ??#??#? ?##?##?? ..xx..xx .?x#.?x# ??##??## ..xx..xx .?x#.?x# ??##??## 对于输入“ D1”(注意非标准但允许的棋盘方向),也可能会产生不同的程序, AABBCCAA ACBACBAC CCAABBCC ABBAADD AABDABDC BBDDBBCC BABBACAA AABAACCA

20
咨询回答者
原文:https://james-iry.blogspot.co.at/2009/05/brief-incomplete-and-mostly-wrong.html Alain Colmerauer设计了逻辑编程语言Prolog。他的目标是创建一种与两岁的孩子一样聪明的编程语言。为了证明自己已经成功实现了目标,他提出了一个Prolog程序,该程序可以为所有查询提供足够的答案“否”。 问我任何事! ?- (他当然没有。)您的任务是创建一个比Alain Colmerauer的程序更智能的程序。不必在Prolog中。 细节 如果输入以结尾?并且至少有一个,,则从最后一个返回文本,,直到最后一个?。 否则,如果输入以?return 结尾No。 否则,返回Yes。 规则 没有标准漏洞。 输入/输出将通过我们的标准输入/输出方法进行。 您的程序必须至少查询1次。 您应该输出已处理的查询。 在示例中,Yes和No区分大小写。 您可以确保,如果输入包含a ?,则输入将只有一个?,并且它将始终是最后一个字符。 输入将始终是短语/句子。这句话/句话绝不会只包含字符,和?,如,,?和,?无效投入。(尽管提交仍然可以实现,因为在这种情况下,短语/句子是一个空字符串。) 此外,输入将永远不会以结尾,?。 如果紧接在末尾,或之前有空格?,则应将其包含在输出中。 例子 Hmm. -> Yes Alright, -> Yes Ask me anything! -> Yes Ask me a question, please! -> Yes Are you okay? -> No No? -> No …
12 code-golf  string 

5
这个金字塔拼图是否有独特的解决方案?
给定加法金字塔PPP,确定是否可以求解。加法金字塔由层组成,每层的个数比其下层的少。层iii表示为PiPiP_i。P1P1P_1是基础层,和Pi+1Pi+1P_{i+1}是顶上层PiPiP_i。P i的第jjj个数表示为P i ,j。P 我,1是最左边的数P 我,和P 我PiPiP_iPi,jPi,jP_{i,j}Pi,1Pi,1P_{i,1}PiPiP_iPi,j+1Pi,j+1P_{i,j+1}是Pi,jPi,jP_{i,j}右边的数字。你可能想象Pi+1,jPi+1,jP_{i+1,j}驻留在顶部Pi,jPi,jP_{i,j}和Pi,j+1Pi,j+1P_{i,j+1}在中间,故名“除了金字塔”。 ∀Pi,j,Pi,j∈N∗∀Pi,j,Pi,j∈N∗\forall P_{i,j},P_{i,j}\in\mathbb N^*,即,在金字塔的每个数字是非零正整数。 ∀i>1,Pi,j=Pi−1,j+Pi−1,j+1∀i>1,Pi,j=Pi−1,j+Pi−1,j+1\forall i>1,P_{i,j}=P_{i-1,j}+P_{i-1,j+1},即,不金字塔的基层上的每个数字是在它下面的两个数的总和。 如果P1P1P_1具有nnn个数,则PiPiP_i具有n−i+1n−i+1n-i+1个数,因此Pi,n−i+1Pi,n−i+1P_{i,n-i+1}是PiPiP_i的最右边的数。用更简单的术语来说,每一层都比其下一层少一个数字。 一个除了金字塔拼图 QQQ是加法金字塔去掉一些数字(替换为???)。它的解决方案是一个金字塔除了PPP,其中∀Qi,j≠?,Pi,j=Qi,j∀Qi,j≠?,Pi,j=Qi,j\forall Q_{i,j}\ne{?},P_{i,j}=Q_{i,j},也就是说,拼图中原来存在的数字保持不变。这种难题可能有多个解决方案。 给定您一个额外的金字塔难题,您的工作将确定它是否只有一个解决方案。 输入值 您可以采用以下任何形式获取输入,但要保持一致: 层数组。 层状数组,形状像金字塔,使用一致的非正整数值作为元素之间的分隔符(每次仅使用一次)以及左右填充。分隔符和填充必须相同。 具有一致的有效左右填充的图层阵列(您必须保持一致,并且在这种情况下不要混合左右填充)。 请注意,必须使用不是严格正整数的一致值来表示缺失的数字;此值不能用作填充。另外,您可以将已连接的图层(仍然可以将它们分开),并且排序可以从底部到顶部,也可以从顶部到底部。 输出量 两个一致的不同值之一,其中一个表示唯一溶液的存在,另一个表示不存在溶液或不止一种溶液的存在。 规则 Qi+1,j=Qi,j+Qi,j+1Qi+1,j=Qi,j+Qi,j+1Q_{i+1,j}=Q_{i,j}+Q_{i,j+1}总是为真,如果Qi,j,Qi,j+1,Qi+1,j∈N∗Qi,j,Qi,j+1,Qi+1,j∈N∗Q_{i,j},Q_{i,j+1},Q_{i+1,j}\in\mathbb N^*,即,输入如果知道所有三个数字,则保证不会在其他两个数字之上不包含一个数字,这些数字不是它们的总和。 ∃Qi,j,Qi,j≠?∃Qi,j,Qi,j≠?\exists Q_{i,j},Q_{i,j}\ne{?},即金字塔将包含至少一个已知数。 不要做这些事情。 这是代码高尔夫球,所以最短的答案会成功!但是,不要因为您的语言“太冗长”而阻止您发布解决方案。 测试用例 这些测试用例使用从上到下各层的数组,0表示???。 [[10], [0, 0], [0, 2, 0], [0, 0, 0, 1]] -> True [[32], [0, 0], [0, …

13
归一化Malbolge到Malbolge转换器
在此任务中,您将编写一个程序/函数,该程序/函数采用Normalized Malbolge程序并输出生成的Malbolge程序。(这是所有Malbolge程序员都在使用的秘密工具!) 输入值 (以某种方式)表示Normalized Malbolge程序的数据结构。 输出量 表示所得的Malbolge程序的数据结构。 例子 jpoo*pjoooop*ojoopoo*ojoooooppjoivvvo/i<ivivi<vvvvvvvvvvvvvoji (=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/.~P<<:(8&66#"!~}|{zyxwvugJ% jjjj*<jjjj*<v ('&%#^"!~}{XE jjjjjjjjjjjjjjjjjjjjjjj*<jjjjjjjjjjjjjjjjjjjjjjjj*<v ('&%$#"!~}|{zyxwvutsrqpnKmlkjihgfedcba`_^]\[ZYXWVT1| 如何转换 遍历标准化的Malbolge程序,对每个字符执行以下步骤: *jpovi</用中的相应字符替换字符串中的字符'(>DQbcu。(即,映射*到',j到(,等等。) 然后从字符的ASCII码中减去程序计数器的当前位置(即当前字符之前的字符数)。 如果生成的ASCII码小于33,则将其增加94,然后重复直到至少为33。 将结果字符追加到输出。 规则 这是一场代码高尔夫球比赛;最短的答案将获胜。 请没有标准漏洞。 允许使用默认的I / O方法。 输入将仅包含字符*jpovi</。
12 code-golf  string 

1
用ASCII绘制Recamán的序列
Recamán的序列(A005132)是一个数学序列,定义如下: A (n )= ⎧⎩⎨0A (n − 1 )− nA (n − 1 )+ n如果 n=0如果 甲(ñ-1)-ñ 为正,并且尚未在序列中除此以外一种(ñ)={0如果 ñ=0一种(ñ-1个)-ñ如果 一种(ñ-1个)-ñ 是正数,尚未在序列中一种(ñ-1个)+ñ除此以外A(n) = \begin{cases}0 & \textrm{if } n = 0 \\ A(n-1) - n & \textrm{if } A(n-1) - n \textrm{ is positive and not already in the sequence} \\ % …

6
病毒与解毒剂代码高尔夫[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 9个月前关闭。 有一个矩形2D阵列,其中包含以“ v”表示的病毒,以“ a”表示的antidote1和以“ b”表示的antidote2(除了“ v”,“ a”和“ b”以外没有其他值)。 Antidote1只能杀死水平和垂直方向上的相邻病毒,但是antidote2可以杀死水平,垂直和对角线上的相邻(如果有)病毒。 解毒剂激活后,到底会剩下多少种病毒? 例子: 输入: vv vv 输出4 输入: av vv 输出1 输入: vvv vbv vvv 输出:0 输入: bvb bav vab vvv vvb vvv vvv bva vav 输出3
12 code-golf 

5
反转您的代码,反转OEIS
这里的任务是编写一个程序,该程序采用自然数ññn并产生OEIS序列的第个项。该序列应具有后跟6位数字的形式的标识符。现在,当您获取源代码并反转其字节顺序以生成新程序时,该程序还应实现OEIS序列。新序列应由后跟与上次相同的6位数字标识,但顺序相反(包括前导零)。ññnAA 现在,为了避免琐碎事情,OEIS标识符号或程序都不能成为回文。也就是说顺序和程序应该不同。您不能选择一个反向序列不存在或为空的序列。 对于每个序列,您可以选择使用0或1索引。他们不必使用相同的索引。由于某些OEIS序列的域有限,因此您只需要为序列的域输出正确的数字即可。您需要的行为在域外是不确定的(您可以输出0,崩溃,订购比萨饼等)。 这是代码高尔夫球,因此答案将以字节计分,而字节越少越好。

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.