编程拼图和代码高尔夫

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

4
策展人的困境
介绍 您是一家美术馆策展人的朋友,他最近很高兴能从四位艺术家那里获得现代艺术(其中有些人会为策展人提供零艺术品,年轻的流氓)。由于这是现代艺术,因此任何给定艺术家的作品都看起来完全一样。您的朋友想使用计算机来帮助确定这些零件的放置顺序。 课程要求 您的程序必须使用五个整数(传递给函数或通过stdin输入(或以其他方式输入))。前四幅是四位艺术家各自提供的绘画数量。最后一个值是排列索引i(从1开始计数,而不是0)。策展人希望i按字典的顺序查看绘画的排列。 您的程序必须以任何合理的格式输出此排列:例如abbccd或[0 1 1 2 2 3]。总输入少于十幅画的运行时间必须少于一个小时(希望这不会有问题)。 不允许使用任何内置函数来计算排列 例子 输入:0 1 2 0 2 假设我们有艺术家B的一幅画和艺术家C的两幅画(它们看起来都一样),则按字典顺序排列是: ['bcc',' cbc ','ccb'] 高亮显示的排列将是正确的输出,因为它是按字典顺序排列的第二个。 输入:1 2 0 1 5 [“ abbd”,“ abdb”,“ adbb”,“ babd”,“ badb ”,“ bbad”,“ bbda”,“ bdab”,“ bdba”,“ dabb”,“ dbab”,“ dbba”] 测试中 这是一些应该正确的测试。 1 2 4 1 5 - ABBDCCCC …

3
“原子”代码高尔夫球-确定同位素中的中子数
您的任务是将包含元素同位素的字符串作为输入,如下面的示例所示,其编码为原子序号,后跟一个空格和该元素的IUPAC化学符号: 162 Dy 并返回该同位素原子中的中子数。 在以上示例中,162具有96个中子(162个总核子,由于是66而减去66个质子),因此输出应为96。 您可能会假定给定的元素将是IUPAC当前给定的114个永久性元素之一(包括fl药和肝mor),而不是通用名称,例如Uus“ un”。您还可以假定同位素的原子数不超过1000,或小于元素中的质子数。 您可能无法使用内置函数来检索有关质子或中子元素数量的数据,也不能使用代码中的任何函数将字符串或数字标记本身视为代码。 该程序使用最少的令牌以任何语言执行此操作均会获胜。但是,出于此挑战的目的,字符串中的每个字符或转换为字符串的变量名称都视为标记。 元素列表及其原子序号供参考: 显示代码段 { "H": 1, "He": 2, "Li": 3, "Be": 4, "B": 5, "C": 6, "N": 7, "O": 8, "F": 9, "Ne": 10, "Na": 11, "Mg": 12, "Al": 13, "Si": 14, "P": 15, "S": 16, "Cl": 17, "Ar": 18, "K": 19, …

11
查找具有特定LCM和GCD的数字对
我当时正在和我的一个朋友一起处理数学问题,我们决定编写一个找到答案的脚本。原始问题如下: 两个自然数的差是2010,而它们的最大公分母是其最小公倍数的2014倍。找到所有可能的解决方案。 我们开始彼此独立地编写程序,当它起作用时,我们决定对其进行优化,以使我们可以管理的字节数最少。我们最终以了惊人的89个字节完成了这段漂亮的代码。 from fractions import*;print[i for i in range(10**6)if i*(i+2010)/gcd(i,i+2010)**2==2014] 我们想看看是否有人能编写较短的代码,该代码枚举了前100万个i。如果您足够勇于竞争,则可以使用任何喜欢的语言,但是我们希望Python 2能够将您的代码与我们的代码进行比较。 通常规则适用,最短字节获胜。适用标准代码的高尔夫球漏洞。标准的“漏洞”不再有趣 玩得开心!
9 code-golf  math 

3
打印序列的交集
顺序 您将得到第四位序列号1通过4。 OEIS0当自然数以二进制列出时,的位置。这是有关如何计算序列的示例: 0,1,10,11,100,101,110,111 ^ ^ ^^ ^ ^ 0 3 78 10 14 序列的开始是这样的: 0, 3, 7, 8, 10, 14, 19, 20, 21, 23, 24, 27, 29, 31, 36, 37, 40, 45, 51, ... OEIS此序列包括第一个自然数,跳过后两个,然后包括后三个,然后跳过后四个,然后继续。 0, 3, 4, 5, 10, 11, 12, 13, 14, 21, 22, 23, 24, 25, …

14
哪一年
2014年12月,2015年几乎已经开始。但是,似乎并非每个人都意识到这一点。 但是PPCG的人们来救助! 输入项 您的程序将获得一个像墙一样的网格,其中12月一个月的日子与11月和1月的日子有所不同。每个星期从星期日开始,到星期六结束。 一个月内的天以表示#。月份以外的日子用(空格,ASCII码32)表示。每周都有单独的一行。行之间用换行符(\n)分隔。您的程序可能要求省略或在输入末尾添加换行符。 例如,这是2009年12月的输入: ##### ####### ####### ####### ##### 日历始终是十二月。 任务 有了输入,您必须找到与日历关联的年份。由于日历与多个年份匹配,因此您必须返回最接近2015年的年份(2015年之前)。(2015年本身除外)。 您的程序必须在<2015年的任何年份中产生正确的输出,但那些12月的日历布局等于接近2015年的另一年(2015年前)的日历输出除外。 如果年份<2014,则还必须计算与2014年的年份差值。例如,对于2012年,差值为2。 输出量 程序的输出必须为: 文本:(Your calendar is for <year>.注意:由于最初被拼写为“日历”,因此我也将接受该拼写。) 后跟换行符(\n或\r\n)。 后跟文字: It's almost 2015. 如果年份<2014,则必须在其后加上文本:You're <difference> years behind.必须在单独的一行上。 后跟换行符(\n或\r\n)。 后跟文字: Go buy a new calendar! (可选)后跟换行符(\n或\r\n)。 规则 您可以选择是要接收日历作为命令行参数(例如yourprogram.exe <calendar>)还是提示用户输入。 您可能会认为您的程序不会收到无效的输入。无效的输入包括没有年份的日历布局。 最短的代码(以任何语言表示的字节数)为准。 任何非标准的命令行参数(运行脚本通常不需要的参数)都计入总字符数。 您的程序不得执行的操作: 取决于任何外部资源。 取决于具有特定的文件名。 输出所需输出以外的任何内容。 …

4
将数字分解为数字位数
Repdigits的形式是数a * (10^n - 1)/9与 a in [-9,9]\{0}(换言之111,-3333,66,这是通过重复只有一个数字由数字) 目标:编写一个使用单个正整数N并打印的程序或函数N = s_1 + s_2 + ... + s_k。每行应该有一个数字,并且这些数字需要右对齐。没有两个求和数应具有相同的位数,并且不允许加零。输出应按升序或降序排序(按位数) 例子: in: 24192 out: 24192 = 22222 + 2222 - 222 - 33 + 3 in: 24192 out: -7 -22 +888 +1111 +22222 =24192 in: 113 out: 113= NOT 111+ no empty lines …

5
第2洞-Prime Quine
在此处找到孔1 。 创建一个运行时输出多次自己的源代码块的工具。实际上,它必须输出n次,其中n是下一个质数。 我认为一个例子最能说明问题。 [MY QUINE][MY QUINE] [MY QUINE][MY QUINE][MY QUINE] [MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE] [MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE] [MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE] 每个程序将在下一个质数输出其基本“块”(即[MY QUINE])。 不允许使用内置函数来计算数字是否为质数(如isPrime函数)或确定下一个质数(如nextPrime()函数)。 这意味着不允许列出除数的函数 同样禁止返回素数分解的函数 这应该是一个真实的信息(除了一些余地,请参阅下一点),因此您不应阅读自己的源代码。 由于Java和C#等语言已经处于不利地位,因此您无需输出完全有效的代码。如果可以将其放在一个函数中(即被调用)并输出下一个Quine,那么您就很好。 这是代码高尔夫球,所以最短的代码胜出!

1
注释
挑战 给定列表注释,您必须返回相应的目录。 笔记 音符必须在A到G的范围内,并且八度范围在2到6范围内。格式为音符八度,#代表锐利和b平坦。例如:A7或F#3。 标签 制表是一种通过图解表示乐器来编写音乐的方法。它通常表示为五行,上面有数字。 线上写的数字代表用来获得所需音高的品格。例如,谱号的第一行上的数字3表示演奏者应在高E(第一弦)的第三个琴格上按下。数字0表示螺母—即一个开放的字符串。 琴码不能大于22,吉他为六弦。 制表必须采用标准ASCII格式。您不得包括任何技术指标(锤击,滑动等)。每个音符用五个破折号隔开。如果是两位数,请将破折号减少到四个。 标签的开头应如下所示: e |----- B |----- G |----- D |----- A |----- E |----- 最后应该是这样的: -----| 对于所有行。 (来源:justinguitar.com) 例 Input: C3 C3 D3 E3 F3 Output: e |-----------------------------------| B |-----------------------------------| G |-----------------------------------| D |-----------------0-----2-----3-----| A |-----3-----3-----------------------| E |-----------------------------------| 获奖 最短的代码胜出

6
迈克尔·克里顿的捕鼠器
1984年,迈克尔·克里顿(Michael Crichton)用BASIC编写了一个安全程序,该程序已发布在《创意计算》杂志上。该程序将要求用户键入自己选择的短语,记录击键之间的间隔,然后要求她重新键入该短语。如果时间差异太大,则程序会将用户识别为冒名顶替者。 您的任务:以您选择的语言创建Crichton程序的版本。 规则: 与用户通信的短语(“请输入关键词”,“请再次输入关键词”等)无论实际长度如何,均计为一个字节。这仅用于用户通信,请勿尝试在字符串中隐藏程序代码。 通过/失败测试应基于与原始间隔的百分比差异的平均绝对值。如果字符串不匹配,请自行决定返回失败还是允许用户重试。 关键字短语不应包含空字符串。如果关键字对于您的字符串数据类型太长,则可以自行决定是截断还是不允许重新开始。 测试的灵敏度(通过/失败测试的阈值)应在源代码中进行调整。 如果您的源代码可以格式化为可识别的类似于恐龙,那么我最初会提供总字节数的20%的奖励。已经指出,这是高度主观的,也许更适合于流行竞赛,所以我删除了此奖金。但是,我仍然衷心鼓励恐龙格式化,如果将代码格式化为看起来像恐龙,则可以从字节总数中扣除任何纯修饰性的注释,换行符或空格字符。 最短的字节数获胜,具体取决于字符串长度和恐龙格式调整。 请注意,我上面的说明与Crichton代码的操作不完全匹配,可以在网上找到其副本。请遵循规范,不要尝试克隆原始文件。
9 code-golf 

1
绘制Google搜索结果图
当您在Google上搜索内容时,它会在页面顶部附近方便地显示一条消息,例如About 53,000,000 results (0.22 seconds)。(数字随搜索内容而变化。) 在此挑战中,您将编写一个程序,当搜索给定搜索词组的所有非空前缀时,绘制一个对数 ASCII图,显示Google提供的结果数。 甲搜索短语被定义为小写字母数字字符的一个或多个字符串,从彼此用一个空格分开。在Regex中,搜索词组是(?:[a-z0-9]+ )*[a-z0-9]+。 所以im ok,r和1a 2全搜索短语,但是I'm OK,R,1a 2,和,都没有。 (由于Google很少考虑大小写或特殊符号,因此存在字符限制。在URL中转义非字母数字字符也很麻烦。) 规格 您的程序必须从stdin或命令行中输入一个搜索短语和一个正浮点数H。(您可以假设它们是有效的,如果您在搜索词中需要引号或其他内容,也可以。) 作为一个工作示例,我们假设搜索短语为,a car并且H = 0.75。 第1步: 收集搜索短语的非空前缀,并将其放在双引号中。引号确保将搜索确切的短语,避免任何“您的意思是……”重定向。 排除所有以a[space]。结尾的前缀。 Prefixes "a" "a c" "a ca" "a car" 第2步: 使用https://www.google.com完全搜索每个术语,并记下返回的结果数。 Search Term Message Results "a" About 6,950,000,000 results (0.27 seconds) 6950000000 "a c" About 861,000,000 results …

3
生成有效的斐波那契平铺
背景 斐波那契平铺是(1D)线的平铺,使用两段:短段S和长段L(它们的长宽比是黄金比例,但这与这项挑战无关)。要将使用这两个原生动物的拼贴实际上是斐波那契拼贴,必须满足以下条件: 拼贴中不得包含子序列SS。 平铺中不得包含子序列LLL。 如果通过执行以下所有替换操作组成新的平铺,则结果仍必须是斐波那契平铺: LL → S S → L L → (空字符串) 让我们看一些例子: SLLSLLSLLSLS 这看起来像是一个有效的平铺,因为它不包含两个* S *或三个* L * s,但让我们执行合成: LSLSLSLL 看起来仍然不错,但是如果我们再次进行组合,我们会得到 LLLS 这不是有效的斐波那契平铺。因此,前两个序列也不是有效的平铺。 另一方面,如果我们从 LSLLSLSLLSLSLL 并反复将其组合成较短的序列 LSLLSLLS LSLSL LL S 所有结果都是有效的斐波那契平铺,因为我们从未在这些字符串内的任何位置获得SS或LLL。 为了进一步阅读,有一篇论文将这种平铺作为与Penrose平铺的简单一维类比。 挑战 编写一个程序或函数,给定一个非负整数N,该程序或函数以包含N个字符(be S或L)的字符串形式返回所有有效的斐波那契平铺。 您可以通过函数参数STDIN或ARGV接受输入,然后返回或打印结果。 这是代码高尔夫球,最短的答案(以字节为单位)获胜。 例子 N Output 0 (an empty string) 1 S, L …

4
摩尔迭代
信息 数字1到9分别代表摩尔定居区中的一个单元,其中5为中心单元。所以: 123 456 789 1={-1,-1} 2={-1, 0} 3={-1, 1} 4={ 0,-1} 5={ 0, 0} 6={ 0, 1} 7={ 1,-1} 8={ 1, 0} 9={ 1, 1} 挑战 您可以通过STDIN,ARGV或函数参数获取输入,然后返回结果或将其打印到STDOUT。输入是一个N x N网格(环形拓扑,意味着如果x或y <1则x或y = N,如果x或y> N则x或y = 1),并且您的程序必须输出一个通过将每个单元格替换为其摩尔邻域单元格中的值来建立网格。 输入网格示例(2 x 2): 13 79 输出: 97 31 说明: 从位置1,1开始,我们拥有值1,因为值1 = {-1,-1}我们必须获取1 +(-1),1 +(-1)= …
9 code-golf 

7
按自定义字母排序
面临的挑战是要创建一个对单词列表进行排序的程序,只需要使单词按随机给定的字母顺序排列即可。 您的程序将接受一串用逗号分隔的单词和一个新字母。 您的程序将以新的排序顺序以相同的方式输出每个单词。 例: 输入: home,oval,cat,egg,network,green bcdfghijklmnpqrstvwxzaeiouy 输出: cat,green,home,network,egg,oval 这是一个 代码高尔夫球,因此获胜者是程序最短的人。 这是我的第一个挑战,因此对问题/挑战的任何改进表示赞赏。

3
受限内存优化
两个字符串之间的编辑(或Levenshtein)距离是将一个字符串转换为另一个字符串所需的最小单字符插入,删除和替换次数。如果两个字符串的长度均为n,则众所周知可以通过动态编程在O(n ^ 2)时间内完成。以下Python代码针对两个字符串s1和进行此计算s2。 def edit_distance(s1, s2): l1 = len(s1) l2 = len(s2) matrix = [range(l1 + 1)] * (l2 + 1) for zz in range(l2 + 1): matrix[zz] = range(zz,zz + l1 + 1) for zz in range(0,l2): for sz in range(0,l1): if s1[sz] == s2[zz]: matrix[zz+1][sz+1] = min(matrix[zz+1][sz] + …

15
不转换的字符串总和
您必须接受2个字符串输入并输出这两个字符串的总和,而无需将它们转换为int或使用任何数字数据类型。 例如 string one = "123"; string two = "456"; string sum = "579"; 假设字符串不能超过10位数字。 这是代码高尔夫,最短的答案是角色获胜。对C#中答案的编辑会使我微笑:)。 编辑:转换为int可以定义为这种性质的任何东西 Int.TryParse,(int),Convert.ToInt等

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.