编程拼图和代码高尔夫

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

5
Pyth练习2
是时候进行另一次Pyth实践了。我在这里展示8个问题陈述,每个陈述都有一个Pyth解决方案。这些解决方案由Pyth初学者编写。他对这些解决方案感到非常满意,因为它们比他的Python回答要短得多。但是,您的任务是向他展示更好。创建等效但较短的程序。 这是在Pyth打高尔夫球时可以使用的技巧和优化的挑战。Pyth高尔夫球手可能会意识到其中涉及的许多技巧,因此可以缩短解决方案的时间。但是,某些问题将需要一些很少使用的异常方法。我实际上从未在野外见过的一些技巧。但是,没有解决方案需要任何错误或奇怪的行为,而这并不是Pyth的设计人员故意设计的。自该问题发布以来,所有答案都必须对最近的Pyth提交(2b1562b)有效。您可以使用Pyth解释器供测试用。目前,它是最新的,我不希望Pyth发生任何大变化,否则将使最佳解决方案失效或使更短的解决方案成为可能。在线解释器还具有新的角色参考。由于它是非常新的,因此您(也应该)也可以使用旧的docs,以防某些错误或遗漏。 目标:参考解决方案总计81个字节。您的目标是尽可能地击败它。用最小的总字节数解决所有8个问题的提交将获胜。决胜局是提交日期。 当然,只有提交的内容有效,其中包含所有8个问题的解决方案。如果您不能提高一个(或多个)特定问题的分数,则可以使用参考实现。 您的解决方案必须输出与参考解决方案完全相同的输出。除了可选的尾随换行符。 由于这是一种Pyth做法,因此仅允许使用Pyth语言编写的程序。 回答:请搅局整个答案,除了你的总得分。您打算在提交自己的答案之前不要看别人的答案。您可以通过>来创建剧透。在每一行的前面,例如: >! Problem 1: V9m?>dNd0S9 (11 bytes) >! Problem 2: VTN)VGN (7 bytes) >! ... 我希望我没有选择太困难或太琐碎的问题。希望有很多参与者,也希望每个人都能对Pyth有所了解。打高尔夫球快乐! 问题一: 创建以下9x9矩阵并进行打印: [1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 2, 3, 4, 5, 6, 7, 8, 9] [0, 0, 3, 4, 5, 6, 7, 8, …
21 code-golf  pyth 

11
此注释的频率是多少?
快速的音乐复习: 钢琴键盘包含88个音符。在每个八度音阶上,有12个音符,C, C♯/D♭, D, D♯/E♭, E, F, F♯/G♭, G, G♯/A♭, A, A♯/B♭和B。每次您按下“ C”时,花样都会重复八度。 音符通过以下方式唯一标识:1)字母(包括尖锐或平整),以及2)八度,即从0到8的数字。键盘的前三个音符为A0, A♯/B♭和B0。之后是八度1 C1, C♯1/D♭1, D1, D♯1/E♭1, E1, F1, F♯1/G♭1, G1, G♯1/A♭1, A1, A♯1/B♭1和八度的全色标B1。在这之后是八度音阶2、3、4、5、6和7的全色阶。然后,最后一个音符为C8。 每个音符对应于20-4100 Hz范围内的频率。用A0起始于恰好27.500赫兹,每个对应音符是两个,或大致1.059463第十二根先前音符倍。一个更通用的公式是: 其中,n是音符的编号,A0为1。(更多信息在此处) 挑战 编写一个程序或函数,该程序或函数接受代表音符的字符串,并打印或返回该音符的频率。我们将#在尖锐的符号(或为您的youngins的标签)上使用磅符号b,在扁平的符号上使用小写字母。所有输入看起来都(uppercase letter) + (optional sharp or flat) + (number)没有空格。如果输入超出键盘范围(小于A0或大于C8),或者有无效,缺失或多余的字符,则这是无效的输入,您无需进行处理。您还可以放心地假设您不会得到任何奇怪的输入,例如E#或Cb。 精确 由于不可能真正实现无限精度,因此我们可以说在真实值的1%以内的任何值都是可以接受的。在不赘述的情况下,一分是两个的1200的根,即1.0005777895。让我们用一个具体的例子来使它更清楚。假设您输入的是A4。此注释的确切值为440 Hz。一旦平分440 / 1.0005777895 = 439.7459。440 * 1.0005777895 = 440.2542因此,只要有一次锐利,任何大于439.7459但小于440.2542的数字都足以精确计数。 …
21 code-golf  music 

6
三角形乌兰螺旋
我们已经有几个的挑战有关乌拉螺旋。但这还不够。 在此挑战中,我们将绘制一个三角形的Ulam螺旋线(与通常的方形Ulam螺旋线相反)。这是螺旋形的草图。 众所周知,乌拉姆螺旋将所有自然数排列在一个向外的螺旋中,并且仅标记那些质数。因此,在上面的草图中,只会显示以黑色(质数)显示的数字。 挑战 接受数字N作为输入,并显示直至该数字的三角形Ulam螺旋。 输入可以是stdin或函数参数。 螺旋线应沿正方向(即逆时针)旋转,如上图所示。 上图的120度转弯中的任何一个都是有效的,并且转弯对于不同的输入可能是不同的。但是隐含三角形的最低边应为水平,因为唯一允许的转弯为120度(的倍数)。 理论上,代码应针对任何N运行(给定的时间和内存),直到使用默认数据类型进行的任何中间计算所允许的N。double足够; 不需要大整数类型。 允许所有内置功能。 我不会接受我自己的答案(不是我认为这将是最短的答案...)。 输出格式 选择以下任意一项。 显示带有质数的标记(点,圆,叉,任意)的图形,非质数不显示任何图形。两个轴的比例不必相同。也就是说,隐含三角形不必是等边的。轴,网格线和轴标签是可选的。仅需要质数上的标记。 N = 12 的示例输出如下(与上面的草图比较)。第二个图是一个更有趣的示例,对应于N = 10000。 使用任何众所周知的图像格式(例如png,tiff,bmp),用上述文件生成图像文件。 将螺旋显示为ASCII艺术,使用您选择的单个字符表示质数,使用空白表示非质数,并用空格分隔同一行中的数字位置。允许前导或尾随空格或换行符。例如,如果N = 12的情况下使用o字符 o · · · o · o · · · o · o 当然,只有o素数标记才会实际显示。将·在非质数如下所示,仅供参考。 获奖标准 实际的回报是亲眼看到那些惊人的模式 Code Golf,最短的代码获胜。

2
多项式的符号积分
将不确定的积分应用于给定的字符串。您将使用的唯一规则是这样定义的: ∫cx^(n)dx =(c /(n + 1))x ^(n + 1)+ C,n≠-1 c,C和n都是常数。 规格: 您必须能够将多项式与任何可能的特征集成: 系数,格式可能是分数(numerator/denominator)。 认识到e和π是常数,并且在其使用中,能够形成的级分或包含它们的表达式(可以像一小部分被保持(e/denominator)或(numerator/e),或者,如果在指数,x^(e+1)) 除了这两个特殊常数,所有系数都是有理数,实数。 指数,可能是分数 x^(exponent) 除了它们之外,与它们在一起e或π在其中的表达将不会出现指数。(您不必集成,例如x^(e+1),但可以集成x^(e)) 可以使用非x 1个字符的变量(即f) 这仅适用于ASCII范围65-90和97-122。 您不必使用链式规则或集成x^(-1)。 输出必须有填充(两个词之间的分隔符,即x^2 + x + C。 如果不知道如何与上述功能集成,则应打印出该程序"Cannot integrate "+input。 它必须是完整程序。 奖金: 如果您打印出用于降价格式的“漂亮”指数(而不是)x^2,则为-10%x<sup>2</sup>。 如果您打印出等式(即∫xdx = (1/2)x^2 + C),则为-10% 例子: 输入: x 输出: (1/2)x^(2) + C 输入: -f^(-2) 输出: f^(-1) …

3
我的障碍路线有多变化?
背景 我通过将盒子放在矩形房间中来构造一个简单的障碍物路线。现在,我想计算解决问题的本质上不同的方法。我需要你为此写一个程序。 输入项 您的输入是字符的非空矩形数组.#。点.是空白,#是障碍。 一个路径通过障碍课程开始在AT右下角的左上角和结束,并进入只向右或向下。同样,有效路径不能穿过障碍物。以下是一些使用+-characters 绘制的示例: Valid path Invalid path Invalid path Invalid path ++........ ++........ +++++..... ..+....... .++++++#.. .+.....#.. ....+++#++ ..++...#.. ......+#.. .+.++++#.. .......#.+ ...+++.#.. ....#.++++ .+++#.++++ ....#....+ ....#+.... 两条路径是基本相似的1,如果可以通过移动一个被转化成其它+在时间。中间路径也必须有效,因此您不能在障碍物上弯曲路径。例如,这里的前两个路径本质上是相似的,但是第三个路径与它们本质上是不同的,因为它不能绕过两个障碍: ++........ +......... +++++++++. .+++++.#.. ++.....#.. .......#+. .....+.#.. .++++++#.. .......#++ ....#+++++ ....#.++++ ....#....+ 输出量 您的输出是穿过障碍物路线的基本不同路径的数量。换句话说,如果将所有有效路径划分为本质上相似的路径类别,则输出为类别数。请注意,如果没有有效的路径,则此数字可能为0。 规则和计分 您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。没有时间限制,只是您应该在提交每个测试用例之前对程序进行评估。 测试用例 .... .... …

1
包装圈
看一下这张图片。具体而言,如何布置两端的孔。 (图片来源) 请注意,此图像中的管道是如何以六边形图案包装的。众所周知,在2D中,六边形格子是最密集的圆堆积。在这一挑战中,我们将专注于最大程度地减少圆包装的周长。可视化周界的一种有用方法是,想象将橡皮筋套在圆圈集合上。 任务 给定一个正整数n作为输入,请显示n尽可能紧密排列的一组圆圈。 规则和说明 假设圆的直径为1个单位。 要被最小化的变量是周长,其被定义为长度凸包的的中心组中的圆圈。看一下这张图片: 直线上的三个圆的周长为4(凸包是2x0矩形,对2计数两次),以120度角排列的圆的周长约为3.85,三角形的周长为只有3个单位。请注意,我忽略了实际周长的其他pi单位,因为我仅查看圆的中心,而不是圆的边缘。 对于任何给定,可能(几乎肯定会有)多种解决方案n。您可以自行决定输出其中的任何一个。方向无关紧要。 圆必须在六边形格子上。 圆圈的直径必须至少为10像素,并且可以填充或不填充。 您可以编写程序或函数。 输入可以通过STDIN作为函数参数或最接近的等效参数进行。 输出可以显示或输出到文件。 例子 下面我有n从1到10的有效和无效输出示例(仅对前五个有效示例)。有效的例子在左边;右侧的每个示例都比相应的有效示例大。 非常感谢steveverrill编写此挑战的帮助。包装愉快!

15
输出下一个假名
日语假名字符对应于日语中的单个声音。除ん(n)外,其他所有假名都由辅音部分和元音部分组成。日语假名有一种自然的排序,一种“字母顺序”,通常按10 x 5的表排列: | a i u e o ----------------------------- * | a i u e o k | ka ki ku ke ko s | sa si su se so t | ta ti tu te to n | na ni nu ne no h | ha hi hu …

2
火焰状的门把手键盘!
好吧,事实证明,Doorknob 在GitHub,Reddit和其他站点上的用户名是 KeyboardFire。那给了我一个主意... 任务 您在KeyboardFire Inc.(一家生产特殊键盘的公司)工作。而且,“特殊”的意思是每当您按下一个键时,房屋中的某些东西就会着火!在新的KeyboardFire门把手系列中,着火的物体是门把手。 但是,由于政府的愚蠢规定,您的用户需要知道房屋中的哪些门把手会着火。 考虑一下QWERTY键盘一部分的ASCII艺术: 1|2|3|4|5|6|7|8|9|0 q|w|e|r|t|y|u|i|o|p a|s|d|f|g|h|j|k|l z|x|c|v|b|n|m (|的代表键之间的边界。) 我们可以将此精确的ASCII绘图视为某种“图形”,其中范围内的每个字符[a-z0-9] 都有一个x(水平)和y(垂直)索引,其中(0,0)为1。例如,字母d具有坐标(2,6)(坐标计算中包括管道和空格)。 现在让我们考虑每个用户的房屋。可以按20x4 ASCII字体从上到下的角度绘制每所房子的图(在这个合法的销毁键盘销售的世界中,每座房子的大小都是一样的)。我们可以使用D来标记房屋中每个门把手的位置。这是一个例子: D D D D D D D 我们将其称为“房屋地图”。(是的,这是很多门把手!) 按任意键将点燃最近的门把手。例如,如果我们采用字母的先前坐标d,则最近的门把手(按曼哈顿距离)位于该坐标处(1,4)。这d是敲击字母时将着火的门把手。如果我们用标记火红的门把手F,结果将是: D D D D F D D 规格 您的程序将接受两个输入: 与模式匹配的字符串[a-z0-9]+。 房屋地图。这可以是一个字符串,字符串列表或等效的字符串。 您需要遍历字符串的每个字母并着火点燃相应的门把手(将其字母更改为F)。如果最近的门把手已经着火,请保持原状。如果使用此方法着火的门把手多于1个,则可以点亮任意一个。 以这种方式处理了整个字符串之后,您需要打印生成的房屋地图。 代码高尔夫球,所以最短的程序将获胜。照常禁止标准漏洞。 例 串: helloworld123 房屋图: D D D D D D …

2
格式化首付资金
介绍 编写为段落添加首字母大写的程序或函数。该程序将输入要设置格式的文本,列宽以及要删除大写字母的行数。首字母大写如下: Lines: 2 3 4 Drop capital: A| A.| A..| ~' ..| ...| etc. ~~' ...| ~~~' 这是与排版有关的挑战。 输入项 输入一串可打印的ASCII字符(没有制表符或换行符),以及两个大于1的整数。 一个整数是输出应具有的列数。 另一个是下降资本跨越的行数。 文本字符串包含用单个空格分隔的单词。 假设所有单词都不超过列宽。 那是,column width > longest word + drop capital height 所有行将至少包含一个单词。 对于此挑战,单词由空格以外的任何其他字符组成。 输入可以按照上述规则以任何方便的格式进行。 输出量 左对齐的文本块,包含带有指定行数的首字母大写。 一行应包含尽可能多的单词,且长度不超过列宽。 在首字母大写和每一行的其余部分之间都有一个空格。 允许一个尾随空格或换行符。 例子 Lines: 2 Columns: 10 Text: The quick …

2
这些树是同构的吗?
介绍 在这个挑战中,您的任务是编写一个程序,该程序确定两个给定的树是否同构。树表示有向无环图,其中除根节点之外,每个节点都只有一个输出边缘。如果可以通过重命名节点将一棵树转换为另一棵树,则两棵树是同构的。例如,两棵树(每个边缘朝上) 0 0 /|\ /|\ 1 3 4 1 2 5 |\ /| 2 5 3 4 很容易看出来是同构的。 我们L通过以下方式将树编码为非负整数列表。树的根具有标签0,并且还具有节点1,2,...,length(L)。每个节点i > 0都有一个传出边缘L[i](使用基于1的索引)。例如,列表(在元素下给出索引) [0,0,1,3,2,2,5,0] 1 2 3 4 5 6 7 8 编码树 0 /|\ 1 2 8 | |\ 3 5 6 | | 4 7 输入项 您的输入是两个非负整数列表,以本机格式或您的语言给出。它们以上面指定的方式编码两棵树。您可以假设以下条件: 他们不是空的。 它们具有相同的长度。 …

2
编译正则表达式(通过替换)
您的任务是通过为正则表达式中的每个字符指定替换来编译正则表达式。 正则表达式 正则表达式支持这些 REGEX = (LITERAL REGEX / GROUP REGEX / STAR REGEX / ALTERNATIVE) LITERAL = 1 / 0 GROUP = '(' REGEX ')' STAR = (LITERAL / GROUP) '*' ALTERNATIVE = '('REGEX ('|' REGEX)*')' 为什么只有1或0?这是为了简化。因此,正则表达式仅具有以下字符: *()|10 其解释如下: * 是Kleene星号(重复左组或字面量0次或多次)。 | 是交替(如果左侧的正则表达式或右侧的正则表达式匹配,则匹配)。 () 正在分组。 1 匹配字符1。 0 匹配字符0。 怎么编译? …

17
钻石拼图!
说明: 去年在数学课上,我们有时会在作业上获得这些极为简单的问题,尽管这些问题同样令人讨厌,它们被称为“钻石拼图”。这些基本上是问题,我们将在其中得到一个总和,然后要求乘积找到两个数字,当相乘时得出两个数字,相加时得出和。这些使我发疯,因为我知道如何解决它们的唯一方法(在代数I中)是只列出乘积的因子,然后查看添加哪些因子来求和。(由于当时我不知道如何使用二次方)更不用说,它们并不是对数学的完全挑战。但是,我刚想到我应该写一个程序。这就是您今天的挑战!编写一个可以解决钻石难题的程序。 示例 为模糊的图像致歉,这是我能找到的最好的。另外,也不要理会气泡中的数字。菱形的顶部是乘积,底部是和,底部和右侧是两个数字。答案如下:(这些也是您的测试用例) 9,-7 -2,-1 5、8 -9,-9 规则: 您不得使用任何预定义的函数或类来帮助您完成此任务。 您的代码必须是完整的程序或函数,一旦找到它们,它们将返回或打印答案 输入是总和和乘积,它们是作为功能参数或用户输入输入的 规格: 假定两个数字,总和和乘积将始终是整数。 这两个答案都将在-127至127之间。 您的输入将是两个整数(总和和乘积)。 请记住,这是代码高尔夫球,因此最短的字节数为准。请用标准的##语言名称,字节数为答案命名 编辑:此外,Doorknob指出,这实际上是“分解形式为x ^ 2 + bx + c的二次项”。这是思考和应对这一挑战的另一种方式。:D
21 code-golf  math 

2
那细菌去哪儿了?
介绍 您是一位研究细菌运动模式的生物学家。您的研究团队在培养皿中有一堆,您正在记录它们的活动。不幸的是,您的资金严重不足,而且买不起摄像机,因此您只需要定期为盘子拍照。您的任务是创建一个程序,以跟踪这些图片中细菌的运动。 输入项 您的输入是两个2D字符数组,它们以任何合理的格式表示皮氏培养皿的连续图片。在这两个数组中,字符.代表空白空间,并O代表细菌(可以根据需要选择任意两个不同的字符)。同样,通过在四个基本方向之一上将某些细菌移动一步,从“之前”阵列中获得“之后”阵列。特别地,阵列具有相同的形状。细菌会同时移动,因此如果其中一个细菌移开了,它们中的一个可能会移动到已经包含另一种细菌的空间中。确保“ before”数组的边界仅包含空白空间,并且至少有一个病菌。因此,以下是一对有效的输入: Before After ...... ...... .O..O. ....O. .OO.O. .OO.O. ...... ..O... 输出量 您的输出是单个2D字符数组,其格式与输入相同。它是从“之前”阵列中获得的>^<v,方法是根据移动的方向(使用移动的4个不同的字符)替换其中一个已移动的细菌。可能会有几种输出,但是您只能给出其中一种。在上面的示例中,一种可能的正确输出是 ...... .v..O. .>v.O. ...... 输出中允许不必要的移动,并且细菌可以交换位置,因此以下内容也有效: ...... .v..v. .>v.^. ...... 规则和计分 您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。 我对相对高效的算法感兴趣,但我不想完全禁止蛮力。因此,在现代CPU上在10分钟内解决最后一个测试用例时,可获得-75%的奖励(我无法测试大多数解决方案,因此在这里我会信任您)。免责声明:我知道存在一种快速算法(搜索“不相交路径问题”),但是我自己没有实现它。 其他测试用例 Before ...... .O..O. ..OO.. ...... After ...... ..O... ...OO. ..O... Possible output ...... .>..v. ..vO.. ...... Before ....... .OOOOO. .O..OO. …

4
写一个时间机器奎因
编写一个程序,将一个字符串和一个整数作为输入n,并输出: n之前传递给程序的字符串; 一个新程序,将用于下一次调用。 您不能在程序外部存储任何数据,并且程序不能调用链中的先前程序。如果该字符串不存在,则输出一个空字符串(但仍输出下一个程序)。 运行示例,在该示例中,我program_n对每个后续程序都使用了这种表示法(当然,[This text is the nth program]它将被实际的代码替换。) $ program_1 "One" 1 [This text is the second program] $ program_2 "Two" 1 One [This text is the third program] $ program_3 "Three" 2 One [This text is the fourth program] $ program_4 "Four" 2 Two [This text is …
21 code-golf  quine 

3
进行冥王星飞越
恭喜你!您刚刚被NASA聘请从事新的Horizo​​ns 2项目。 可悲的是,最近削减了巨额预算,因此高层管理人员决定伪造整个计划的冥王星飞越(就像他们在70年代登月那样)。 您的任务是编写一个程序,该程序以格式接受日期作为输入yyyymmdd,并提供该日期的伪造Pluto照片。您可以假设输入的日期为2015年或2016年。 照片是15x15的ASCII字符网格。网格上的字符的x和y坐标在范围内[-7, 7]-左上角的字符位于,(-7, -7)而右下角的字符位于(7, 7)。 该照片将按照以下规则计算: 该探测器将最接近冥王星于25/12/2015 d到冥王星的距离由以下公式给出:square root of ((difference in days to christmas) ^ 2 + 10) r照片上冥王星图像的半径为:22 / d (x, y)在网格上具有坐标的字符必须设置为#if x^2 + y^2 <= r^2; 否则必须将其设置为空格。 有星星的位置(-3, -5),(6, 2),(-5, 6),(2, 1),(7, -2)。星星由点表示.,而它们当然被冥王星隐藏。 还有一件事:美国宇航局董事会得出结论,在冥王星上发现生命可能会导致预算大幅增加。然后,您的程序应为冥王星增加生活线索: 当到冥王星的距离<= 4时,在坐标处添加一个冥王星(-3,-1):(^_^) 输入的示例照片20151215:(您的代码应与此代码一样包含所有换行符) . # . ### ##### ###. # …

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.