编程拼图和代码高尔夫

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


3
Tiny Lisp,微小的口译员
Lisp程序员吹嘘Lisp是一种功能强大的语言,可以通过很少的原始操作集来构建。让我们通过打高尔夫一种叫做方言的口译员来付诸实践tinylisp。 语言规格 在本规范中,任何结果被描述为“未定义”的条件都可能在您的解释器中做任何事情:崩溃,静默失败,产生随机的gobbldegook或按预期工作。此处提供了Python 3中的参考实现。 句法 tinylisp中的标记是(,)或一个或多个可打印ASCII字符的任何字符串,括号或空格除外。(即以下正则表达式:[()]|[^() ]+。)任何完全由数字组成的令牌都是整数文字。(前导零都还好。),其中包含非数字字符的任何标记是一个符号,甚至是数字好看的例子一样123abc,3.14和-10。所有空格(至少包括ASCII字符32和10)都将被忽略,除非它们分隔标记。 tinylisp程序由一系列表达式组成。每个表达式可以是整数,符号或s表达式(列表)。列表由括在括号中的零个或多个表达式组成。项目之间不使用分隔符。以下是表达式示例: 4 tinylisp!! () (c b a) (q ((1 2)(3 4))) 格式不正确的表达式(特别是括号不匹配的表达式)会产生不确定的行为。(参考实现自动关闭打开的parens,并停止对不匹配的关闭parens进行解析。) 资料类型 tinylisp的数据类型是整数,符号和列表。尽管内置函数和宏的输出格式未定义,但它们也可以视为一种类型。列表可以包含任意数量的任何类型的值,并且可以任意嵌套。必须至少从-2 ^ 31到2 ^ 31-1支持整数。 空列表(()也称为nil)和整数0是唯一在逻辑上被视为false的值。所有其他整数,非空列表,内建函数和所有符号在逻辑上均为真。 评价 程序中的表达式将按顺序求值,并将每个表达式的结果发送到stdout(稍后会详细介绍输出格式)。 整数文字求值。 空列表()将自动求值。 一个或多个项目的列表将评估其第一项并将其视为函数或宏,并以其余项作为参数来调用它。如果该项目不是函数/宏,则行为未定义。 符号将作为名称求值,并在当前函数中给出绑定到该名称的值。如果该名称未在当前函数中定义,它将在全局范围内求值为其绑定的值。如果未在当前或全局范围内定义名称,则结果是未定义的(参考实现给出错误消息并返回nil)。 内置函数和宏 tinylisp中有七个内置函数。函数先对每个参数求值,然后对它们应用一些运算并返回结果。 c-缺点[命令列表]。接受两个参数,一个值和一个列表,并返回通过将值添加到列表的前面而获得的新列表。 h-头(用Lisp术语表示为car)。取得一个列表并返回其中的第一项;如果给出nil,则返回nil。 t-tail(cdr,用Lisp术语)。获取列表并返回一个新列表,其中包含除第一项外的所有列表;如果为nil,则返回nil。 s- 减去。取两个整数并返回第一个减第二个。 l- 少于。取两个整数;如果第一个小于第二个,则返回1,否则返回0。 e-相等 接受两个相同类型的值(两个整数,两个列表或两个符号);如果两者相等(或每个元素相同),则返回1,否则返回0。未定义测试内置函数是否相等(参考实现按预期工作)。 v-评估。取得一个表示表达式的列表,整数或符号,然后对其求值。例如做(v (q (c a b)))与做是一样的(c a b); …

30
帮我打开盒子
我有一个ASCII艺术框,需要一个程序来打开它。 例子 输入: ------- | | |_____| 输出: / / / / / / / | | |_____| 规格 第一行仅包含-,其中至少3个 中间的行将以|空格开头,以| 所有中间行将相同 最后一行将以|have 开头,_以a结束| 所有行的长度将相同 打开盒子: 每一个-都应由/升序和位置替换。

4
拆分ASCII
给定ASCII加换行符的95个可打印字符,将其分成两个相等的48个字符组(以下称为A组和B组)。在两组之间创建您选择的一对一映射(您可以自行决定)。换句话说,如果这是程序所需要的,则A可能映射到a,反之亦然,但A也可能映射到>,反之亦然。 将ASCII分成两组后,分别使用每个组中的字符编写两个程序和/或函数。换句话说,编写一个仅使用组A中字符的程序/函数,编写另一个仅使用组B中字符的程序/函数。 这些程序必须能够接收一个字符作为输入。如果输入是A组字符,则用A组中的字符编写的程序应输出/返回相同的字符;如果输入是B组字符,则映射的A组字符应输出/返回相同的字符。组A程序应始终输出组A字符。同样,如果B组程序是B组字符,则应输出相同的字符;如果输入是A组字符,则应映射所映射的B组字符。 可能还不清楚,所以这里有个例子。如果假设所有大写字母都在A组中,所有小写字母都在B组中,并且已选择这些字母的一对一映射是从一个到另一个,则:那么这里有一些样本输入/输出: 程序A: Input Output A A D D a A q Q 程式B: Input Output A a D d a a q q 其他规则: 这两个程序不需要使用相同的语言。 它们不必同时是程序或函数。一个可以是程序,另一个可以是功能,没关系。 他们不需要以相同的方式工作,具有相似的长度,诸如此类。他们必须完全符合上述其他规则。 是的,您的程序中只有一个可以使用换行符,并且只有一个可以使用空格(可以是相同的程序,也可以是不同的程序)。 您不需要在每个程序中全部使用48个字符。 正常情况下,禁止出现标准漏洞。所有程序都必须是自包含的,没有文件包含您选择的映射。 评分标准:高尔夫代码。具体来说,两个程序的文本字节总和。 请像这样发布您的答案: 语言-#字节+语言-#字节=#字节 对您的映射的明确描述。如果很复杂,请使用如下图表: ABCDEFGHIJKLMNOPQRSTUVWXYZ (etc.) zyxwvutsrpqonmlkjihgfedcba (etc.) 或者,您也可以解释一下(前48个映射到后48个顺序),然​​后按常规回答。

22
特朗普需要您的帮助来阻止Starman!
一个来自星空的人来到了地球!幸运的是,美国总统唐纳德·特朗普(Donald Trump)死于无边。使用此模具,他可以想出您作为Podunk市长必须使用的数字,以确定应该派遣谁来制止入侵者!但是请注意,您只能在青蛙背面发送有限数量的字节! 给定用户输入(将为正整数),您必须根据数字所在的类别返回字符串。 如果该数字是斐波那契数字,则必须输出Ness。 如果该数字是Lucas数字,则必须输出Lucas。 如果数字是双方一个Lucas数和Fibonacci数,你必须输出特拉维斯。 如果数字是既不 AA Lucas数也不是斐波那契数,你必须输出皮皮。 例子 这是一堆测试用例: 1 =>特拉维斯 2 =>特拉维斯 3 =>特拉维斯 4 =>卢卡斯 5 =>尼斯 6 =>皮皮 7 =>卢卡斯 8 =>尼斯 610 =>尼斯 722 =>皮皮 843 =>卢卡斯 规则 这是代码高尔夫球,最短的答案以字节为单位。 您的程序可以是完整程序,也可以是(n匿名)函数。 奖金 您可以使用一些奖金来帮助您的青蛙更快地将数据提供给特朗普总统: 对于-15字节:如果输入数字为2016,则必须输出Trump,因为他处于总统任期的顶峰。

11
这个问题有起有落
输入将包含以下字符: ^:上一个 v:下去一个 ▲或k:上两个 ▼或j:下两个 例如,以下输入: ^^▲^v▼▲^^v 将产生以下输出: ^ ^ ^ v ▲ v ▲ ^ ▼ ^ \e[B不允许使用诸如游标之类的转义序列。您必须使用空格和换行符生成输出。 这里还有一些测试用例。 ▲v^v^v^v^v^v^v^v▲ ▲ ▲ ^ ^ ^ ^ ^ ^ ^ v v v v v v v v ^^^^^^^▲▲▲▼▼▼vvvvvv ▲ ▲ ▼ ▲ ▼ ^ ▼ ^ v ^ v …

15
平衡词
这项挑战已发布在DailyProgrammer subreddit上,我认为这将是进行代码高尔夫挑战的最佳人选。确定字母是否平衡是基于其到平衡点的距离以及字母的值。字母的值可以通过采用字母的一个索引位置或从ASCII值中减去64来确定。此外,字母的值乘以它与平衡点的距离。让我们看一个例子STEAD: STEAD -> 19, 20, 5, 1, 4 ASCII values This balances at T, and I'll show you why! S T EAD -> 1*19 = 1*5 + 2*1 + 3*4 Each set of letters on either side sums to the same value, so T is the anchor. 但是,应注意,并非所有单词都是平衡的。例如,该词WRONG在任何配置中都不平衡。同样,单词必须在一个字母上保持平衡,而不是两个字母之间。例如,SAAS如果两个字母中间有一个字母,则将保持平衡A,但是由于没有字母,它将不平衡。 任务 …
33 code-golf 

11
自我修改相乘
...至少对于“自我修改”的某种定义 任务 在此挑战中,您的任务是编写三个字符串A,B并且C满足以下属性。 字符串的B长度至少为1。 对于每种n ≥ 0,字符串都是您选择的编程语言中的有效程序(表示完整的可运行程序或函数定义)。上标表示的重复,因此,这意味着字符串,,,等。每一个程序需要一个字符串作为输入,并返回一个串作为输出。ABnCACABCABBCABBBC 对于任何m, n ≥ 0程序,如果程序使用输入运行,它将返回。对于非这种形式的输入,程序可能会执行任何操作,包括崩溃。ABmCABnCABm*n+1C 格式program(input) -> output如下: AC(AC) -> ABC ABC(AC) -> ABC ABBBBBC(AC) -> ABC AC(ABC) -> ABC AC(ABBBBC) -> ABC ABC(ABC) -> ABBC ABBC(ABC) -> ABBBC ABBBBC(ABBBC) -> ABBBBBBBBBBBBBC ABBBC(ABBBBBBC) -> ABBBBBBBBBBBBBBBBBBBC 规则和计分 你的分数是总长度A和C较低的分数更好。请注意,虽然B不计入分数,但它必须由A和生成,C如第一个示例中所示。 不允许出现标准漏洞。不允许程序直接或间接访问其自己的源代码(除非将它们作为输入提供)。您需要识别字符串A,B并C以某种方式在您的答案中,并鼓励您解释您的解决方案。

3
编程Tetris块(从字面上看)
在游戏方块,有7种类型的砖或的TETR 我 minoes,其在数学上被称为的TetR ö minoes,因为它们都与4个平方段制成: 具有名称I,J,L,O,S,T和Z,它们对应于它们的近似形状。计算90°旋转时,总共有19种独特的形状: I I I I IIII J J JJ JJJ J JJ J J J JJJ L L LL L LLL LL L L LLL L OO OO SS SS S SS S TTT T T TT T T TTT T TT T ZZ ZZ …

14
{卷数};
在深奥的编程语言Curly中,程序仅由花括号{}和分号组成;。尽管使用了不起眼的工具集,但是Curly的文字可以表示任何非负整数。但是,对于初学者来说,格式有点难读,所以让我们写一些代码为我们做转换。 数字格式 卷曲数是根据以下规则构造的: 添加分号会将数字加1。 用大括号括起来的数字乘以4。 花括号组可以嵌套但不能串联。大括号必须正确匹配。 一组花括号外的分号必须在之后,而不是之前。 为避免在分析时产生歧义,数字必须始终以大括号开头。 一些例子: {;;} 2*4 = 8 {{;};}; (1*4+1)*4+1 = 21 {};;; 0*4+3 = 3 (请注意,规则5表示数字0到3必须以一对空的花括号开头。) 还有一些无效的例子: {{;}{;;}} Curly brace groups side-by-side, not nested {;}} Unmatched brace {;{;}} Semicolon before curly-brace group ;;; Number does not start with curly brace 这是卷曲数字的BNF语法: <number> ::= "{" …

10
验证扫雷板
您的目标是检查完整的扫雷板是否有效。这意味着每个数字都是与其相邻单元格(包括对角线)中地雷的正确计数。董事会不环绕。 与往常一样,您应该提供一个函数或程序,以字节为单位的最短代码将获胜。 另请参阅生成,解决和全面实施 Minesweeper的过去挑战。 输入: 像这样的单个字符串:02X2 13X2 X211。 扫雷器板的行以空格分隔。因此,以上代表3x4板: 02X2 13X2 X211 每个小区是一个字符:X用于矿场,或一个数字0通8。 所有行具有相同的长度。 至少有3行和3列。 输入的内容不能以空格开头或结尾,但是如果需要,可以在结尾添加换行符。 输出: 一致的Truthy上正确板和一致的Falsey不正确的板值。一致意味着所有Truthy输出相同,而所有Falsey输出相同。 测试用例 每行是一个单独的测试用例。 True: 02X2 13X2 X211 XXXX XXXX XXXX XXXX XX4X2 5X6X4 XX6XX 4XX54 2X4XX False: 02X2 13X2 X212 XXXX XXXX X7XX XXXX XX5X2 5X6X4 XX6XX 4XX54 2X5XX

23
双工:重要的无用运算符
输入项 由1到255个正整数(包括)组成的列表,每个整数的范围为1到2 32-1(包括)。 您的输入格式不必与测试用例相同。 必须接受不带前导零的输入。 不需要接受前导零的输入。 您可以在整数之间使用所需的任何定界符。 整数可以用字符串表示,但是特定整数的各个数字必须是连续的。 您可以选择对输入使用任何基准(包括二进制和一进制),前提是输出也在该基准中。 输出量 一个整数。 输出必须没有前导零。 输出必须与输入具有相同的基数。 可以用任何方式计算输出,但必须与以下计算结果匹配: 计算双工 二进制表示形式的位从零开始从右开始编号,因此位i在表示2 i的列中。 在我 个 BITSUM是的总和我 个每个输入数字的二进制表示的比特。 该BITSUM最大的是由bitsums采取的最高值。 所述BITSUM最小是最低非零由bitsums采取值。 在我 个输出的二进制表示的数字是: 如果第i 个比特和等于最大比特和最小比特,则为1。 否则为0。 工作的例子 本示例使用二进制作为输入和输出。 Input: 100110 1101110 1100101 _______ Bitsums: 2301321 Output: 101101 最大位数为3,最小位数为1,因此,在每个位数为3或1的地方输出均为1,在其他地方均为0。 测试用例 测试用例的形式为: Input => Output 二进制测试用例: [1] => 1 [10] …

6
基于网格的数字逻辑(Duodyadic Tiles)
Duodyadic磁贴是正方形功能块的一种,具有两个输入,一个从顶部输入,一个从左侧输入,并具有两个输出,一个在右侧,一个在底部。它们的每个输出都是其两个输入的单独功能。 例如,如果#表示一个通用的瓦片,右输出R是函数f的输入T和L,底部输出B是另一个函数g的T和L: T L#R R = f(T, L) B B = g(T, L) (由于有两个函数,所以这些图块被称为“ duo”,而由于两个函数都有两个参数,它们被称为“ dyadic” 。) 然后,可以在网格上将图块组合在一起,一个图块的输出直接进入与其相邻的图块的输入。例如,在这里,左侧的右侧输出#进入右侧的左侧输入#: AB D = f(f(A, C), B) C##D E = g(A, C) EF F = g(f(A, C), B) 您可以想象,如果给定一组Duodyadic磁贴,每个磁贴都具有特定的功能,则可以制作复杂(且可能有用)的合成。 在这个挑战中,我们将只关注传统的十组基于逻辑的双性平铺,其中所有输入和输出都是单位二进制数(零或一)。我们将使用单独的ASCII字符来表示每种类型的图块。 是瓷砖字符和它们的输入-输出关系,如下所示: (T为顶部输入,L为左输入,R用于右输出,B为底部输出。) 零:0或(空格)→ R = 0,B = 0 一:1→ R = 1,B = …

22
XOR乘法
您的目标是以尽可能少的字节实现下面定义的XOR(无载)乘法运算。 如果我们^将按位XOR()视为二进制加法而不携带 101 5 ^ 1001 9 ---- 1100 12 5^9=12 我们可以@通过执行二进制长乘法来执行XOR乘法,但是执行加法步骤而不进行按位XOR ^。 1110 14 @ 1101 13 ----- 1110 0 1110 ^ 1110 ------ 1000110 70 14@13=70 (对于数学家,这是多项式环中的乘法,通过将Z F_2[x]评估x=2为多项式来标识具有自然数的多项式。) XOR乘法通过按位XOR 交换a@b=b@a,关联(a@b)@c=a@(b@c)和分布a@(b^c)=(a@b)^(a@c)。实际上,a@b=a*b每当匹配乘法a并且b是2like的幂时,就是这样独特的运算1,2,4,8...。 要求 以两个非负整数作为输入和输出或打印其XOR乘积。这应该是数字或其十进制字符串表示形式,而不是二进制扩展名。最少的字节数获胜。 不用担心整数溢出。 这是一些格式为的测试用例a b a@b。 0 1 0 1 2 2 9 0 0 6 1 6 …

14
莫尔斯新年
这是每周挑战#1。主题:音频处理 你的任务是写一个程序,这将写入音频文件光盘(在您所选择的格式),其中包含了摩尔斯电码的2015,即 ..--- ----- .---- ..... 您可以自由选择片段的任何声音,例如单频正弦波,和弦,杂音和某些乐器(例如,使用MIDI文件),只要可以听到即可。但是,在时间安排上有一些限制: 短片段的长度至少应为0.2秒。 长片段的长度至少应为短片段的3倍。 一个数字段之间的中断应与短段的长度相同。 数字之间的间隔应与长段的长度相同。 每个细分市场和细分可能会偏离该细分市场/细分类型的平均长度最多10%。 整个音频文件不得超过30秒。 休息时间不必完全保持沉默,但莫尔斯电音片段的声音应该比休息时间大。 请注意,您必须编写一个音频文件。您不能仅仅播放声音,例如使用系统提示音。您可以使用任何类型的库来处理文件格式和音频生成,但不得使用内置功能进行Morse编码。 这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。 请考虑链接到生成的音频文件的上载(在SoundCloud或类似设备上),以便人们可以检出结果而不必运行您的代码。如果您上传到SoundCloud,请确保在曲目的“权限”选项卡中启用下载。 如果您的输出使用的是不太常见的文件格式,请添加一些有关如何播放和/或将其转换为更常见的格式并上载的信息。 示例轨道 这是一个手动生成的示例音轨,符合规范,并使用了莫尔斯线段的噪声(准确地说是麦克风背景噪声)。如果嵌入式播放器不适合您,这是指向SoundCloud的链接。 赏金详情 我将奖励以音频编程语言(即一种旨在合成声音的语言)中提交时间最短的方法。该列表不完整,因此,如果您知道的话,请随时使用另一种音频编程语言。如果您不确定您要使用的某种语言是否分类为音频编程语言,请在评论中或在聊天中告知我,我们可以进行讨论。 请注意,您提交的内容仍必须遵守所有规则-特别是必须写入文件,这可能并非在所有音频编程语言中都可行。例如,据我所知,gibber只能播放声音,而不能将其保存到文件中。

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.