编程拼图和代码高尔夫

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

3
绘制ASCII密钥签名
给定音符输入,输出高音谱号上相应主键的ASCII绘图。 以下是所有主要键(不包括双尖音或双平键)及其对应的键签名: Wikipedia用户Justin Bill 的五分之三豪华4圈,版权CC BY-SA 3.0 如果输入是带有尖音的键,请使用适当数量的尖音绘制以下ASCII艺术作品: # -#------- # ----#---- # -------#- # --------- --------- 如果输入是带平键的键: --------- b ----b---- b -b------- b -----b--- b --------- 以下是可能输入的简要摘要,以及它们使用了多少尖锐或平坦的物体: 0 1 2 3 4 5 6 7 # C G D A E B F# C# b C F Bb Eb …

10
压缩原子电离能
这是另一种类型的压缩挑战。在正常的kolmogorov复杂性挑战中,您需要精确地重新创建列表。在这里,您可以按任何希望的方式舍入值。有什么收获?您的分数将根据输出的错误程度而受到处罚。 这个问题的底部是前108个元素的第一电离能的列表。您的程序在执行后应输出此列表的相当准确的副本。将没有输入或参数。出于评分目的,您的输出应该是确定性的(每次输出相同)。 输出格式 您的程序/函数必须输出108个数字的列表,并按原子序数递增的顺序排序。该列表可以采用任何适当的格式。下面的源数据以正确的顺序提供,从氢到has。 计分 您的分数将是您程序的长度(以字节为单位)加上一个四舍五入的罚款。 为每个元素计算一个舍入罚款,并将其相加得出总罚款。 举个例子,我们以数字为准11.81381。假设您的程序输出的值不正确11.81299999。 首先,两个数字都乘以相同的10的幂,以使真实值中不再有小数点:1181381, 1181299.999。真实值中的结尾零被认为是重要的。 然后,采用绝对差确定绝对误差:81.001。 最后,我们将该元素的惩罚计算为max(0, log10(err * 4 - 1)) -> 2.50921。选择该公式时,误差<0.5不会造成任何惩罚(因为四舍五入后的答案是正确的),同时还可以使该数字四舍五入到任何特定的小数位将带来净收益(渐近)的可能性为50%渐近其他压缩)。 这是罚款计算程序的在线试用实现。该程序的输入以数字列表的形式提供,每行一个。该程序的输出是总罚分和每个元素的得分明细。 数据 以下数字列表是目标数据,从原子序数1到108的正确顺序。 资源 13.598434005136 24.587387936 5.391714761 9.322699 8.2980190 11.260296 14.53413 13.618054 17.42282 21.564540 5.1390767 7.646235 5.985768 8.151683 10.486686 10.36001 12.96763 15.7596112 4.34066354 6.11315520 6.56149 6.82812 6.746187 6.76651 7.434018 7.9024678 7.88101 …

12
三元三角形
这个想法主要来自BIO 2017 q1。我从Binary Sequences挑战中提出了发布此挑战的想法,因为很多人似乎都喜欢它。 另外,这是我没有在沙箱上发布的第一个挑战。如果没人喜欢,我将其删除。 规则 取三进制数字序列(基数为3);这可以是字符串,数组或数值以及前面的零的数目。 对于三角形中的每一行,都会生成下面的一行,直到最后一行只有一位为止。要查找其他两个数字以下的数字,如果上面的其他两个数字相等,则该数字将与其上方的两个数字相同。否则,它将是不等于它们中任何一个的数字。这是一个例子: 0 0 1 2 0 1 2 2 0 2 0 1 2 0 2 1 1 2 0 1 1 1 0 1 2 1 2 2 0 0 2 1 0 0 2 1 您只需要返回最后一行。 使您的代码简短。 测试用例 0 -> 0 …

13
哈夫尼亚人Codegolf
挑战是为矩阵的Hafnian写codegolf 。对称矩阵的2nHafnian 定义为:2nA 下面就2N代表了一组整数的所有排列的,从1到2n,那就是[1, 2n]。 Wikipedia链接讨论了邻接矩阵,但是您的代码应适用于任何实值对称输入矩阵。 对于那些对Hafnian应用程序感兴趣的人,mathoverflow链接讨论了更多内容。 您的代码可以随意输入,并以任何合理的格式提供输出,但是请在答案中包括一个完整的示例,其中包括有关如何向代码提供输入的明确说明。 输入矩阵始终为正方形,最大为16 x16。无需处理空白矩阵或奇数维矩阵。 参考实施 这是Xcoder先生提供的一些示例python代码。 from itertools import permutations from math import factorial def hafnian(matrix): my_sum = 0 n = len(matrix) // 2 for sigma in permutations(range(n*2)): prod = 1 for j in range(n): prod *= matrix[sigma[2*j]][sigma[2*j+1]] my_sum += prod return my_sum / …

19
这是一个连续的质数/常数指数吗?
前一段时间,我看了27000的素因数分解: 27000 = 2 3 ×3 3 ×5 3 有两点特别的事情: 连续素数:素数是连续的:2是第一素数,3是第二素数,5是第三素数。 常数指数:每个素数的指数都是相同的(总是3) 用数学表示: 的整数X是一个连续的素数/恒定阶数,如果存在严格的正整数Ñ,ķ,中号,使得X = p Ñ 米 × p Ñ +1 米 ×...× p Ñ + ķ 米,其中p j是第j个素数 您的任务是测试正整数是否满足这些条件。 输入: 正整数> 1,采用任何合理形式。 输出: 两个值之一,其中至少一个必须为常数,指示输入是否为连续质数/恒定指数数。 边缘情况: 素数truthy,作为主要的分解p是p 1 其他可以写为p m(其中p是素数)的数字也是真实的。 规则: 有标准漏洞。 不用担心整数溢出,但是最大为255的数字必须有效。 以字节为单位的最短代码获胜。 测试用例: 真相: 2 3 4 …

30
用HTML生成am * n表
输入: 两个十进制整数m和n分别给出表的行数和列数。 m并且n大于或等于1。 输出: HTML中具有m行n列的表。 该表应可由您选择的现代浏览器显示。即使未关闭标签,大多数浏览器也会正确显示所有内容。适当的缩进和间距是可选的。 每个单元格中至少应有一个(非空白)可打印字符。 第一行中的单元格应使用<th>标签,而随后几行中的单元格应使用<td>标签。 获胜条件: 这是代码高尔夫球,因此每种语言的最短源代码胜出。 输入示例: 2 3 输出示例: <table> <tr> <th>A</th> <th>A</th> <th>A</th> </tr> <tr> <td>A</td> <td>A</td> <td>A</td> </tr> </table> 要么 : <table><tr><th>A<th>A<th>A<tr><td>A<td>A<td>A

3
失踪人数修订
背景: 我最初是在昨晚发布此问题,并因其模糊性而遭到强烈反对。从那以后,我不仅就问题的措辞,而且就其复杂性(不是O(1))咨询了许多人员。这个编程问题是对亚马逊面试问题的一个恶性循环。 题: 给定一个字符串,其中包含0至250个互斥的随机串联整数[0,250),序列中缺少一个数字。您的工作是编写一个程序,该程序将计算此丢失的数字。除了一个之外,序列中没有其他遗漏的数字,这就是使此问题如此困难,甚至可能使计算困难的原因。 手动在较小的String上完成此问题,例如下面的示例1和2显然很容易。相反,在涉及三位数或四位数数字的庞大数据集上计算缺失数将非常困难。该问题背后的想法是构造一个程序,它将为您执行此过程。 重要信息: 昨晚我发布此问题时,看起来很困惑的一件事是:确切的数字定义为。缺少的数字是上述指定范围内的数字;不一定是数字。在示例3中,您会看到丢失的数字为9,即使它出现在序列中。DIGIT 9将在三个[0,30)系列中出现3个位置:“ 9”,“ 19”和“ 29”。您的目标是对它们进行区分,并发现9是缺少的NUMBER(在示例3中)。换句话说,棘手的部分在于找出哪些数字序列是完整的,哪些序列属于其他数字。 输入: 输入是字符串S,包含从0到249(含)或0到250(不含)(即[0,250))的整数。如上所述,将这些整数加扰以创建随机序列。没有分隔符(“ 42、31、23、44”)或填充0(003076244029002);问题完全与示例中描述的相同。保证实际问题中只有一种解决方案。不允许使用多种解决方案。 获奖标准: 谁拥有最快和最低的内存使用率将是赢家。如果发生时间中断的奇迹,则将较低的内存用于时间限制器。如果可以,请列出Big O! 例子: 示例1和2的范围为[0,10) 示例3和4的范围为[0,30) (示例1-4仅用于演示。您的程序无需处理它们。) 示例5的范围为[0,250) 1. 420137659 - Missing number => 8 2. 843216075 - Missing number => 9 3. 2112282526022911192312416102017731561427221884513 - Missing number => 9 4. 229272120623131992528240518810426223161211471711 - Missing number => 15 …

15
自包含数字的序列
让我们将一个独立的数字定义为一个正整数,其数字出现的长度仅等于它们的长度。换句话说,任何十进制数字d(不包括0)仅在长度为d的游程中出现。 任务 您可以选择以下三种方法之一: 给定整数n,输出第n个(包含0或1索引的)自包含数字。 给定整数n,输出前n个自包含数字。 无限期打印序列。 例子 133322是一个自包含的数字,因为3出现在三个3的行中,1是单个,而2出现在两个2的行中。 另一方面,不是35553355,因为尽管5和3分别出现5次和3次,但它们不会形成相邻数字的行。 44422不是自包含的,因为4仅发生3次。 12222333也不是,因为2以四个2的顺序出现,并且不能将其视为两个2的两个单独的行程。 毫不奇怪,这是OEIS A140057,它的前几个术语是: 1, 22, 122, 221, 333, 1221, 1333, 3331, 4444, 13331, 14444, 22122, 22333, 33322, 44441, 55555, 122122, 122333, 133322, 144441, 155555 您可以输入和通过任何提供输出的标准方法,在任何编程语言,但同时指出,这些漏洞被默认禁止的。这是代码高尔夫,因此以字节为单位(每种语言)的最短代码获胜。

29
从数字输出二进制路径
对于n满足的整数,请n > 0根据其二进制表示形式将其值写为右降路径。 规则 第一个(最高有效)置位总是在左上角。 设置下一位(a 1)后,在与上一个绘制的字符相同的列中的下一行绘制一个字符(“填充”)。尝试使用空格(“空”)进行填充,但是只要字符始终相同,任何字符都可以。 当下一位未设置(a 0)时,在同一行上紧接着绘制的上一个字符的右侧绘制一个字符(“填充”)。 您的代码必须支持至少20个有效位的数字。 编写完整的程序,函数,lambda等,但不要编写任何代码段。 不允许前导空格(或“空”字符)/行 允许任意数量的尾随空格(或“空”字符)/行 可以接受任何类型的一维输入:数字,字符串,布尔数组等。不过,请保持位的顺序不变。 可以接受任何形式的可视2D输出:在stdout上,是一个字符串(任何两个不同的值分别表示“ filled”和“ empty”),如果需要,您甚至可以输出矩阵。数字列表似乎很难与“无标题空间”规则相协调,但是如果您找到使用它的方法,我将持开放态度。注意:如果选择打印或返回字符串,则使用的字符必须是代码点范围[32-126]中的ASCII字符。 禁止出现标准漏洞。 这是codegolf,所以最短的代码获胜。 例子 输入1 * 输入2 ** 输入3 * * 输入4 *** 输入5 ** * 输入6 * ** 输入7 * * * 输入:25 * *** * 输入:699050 ** ** ** ** ** ** …
22 code-golf  number 

15
推倒一些多米诺骨牌!
感谢这个问题的启发 在这个挑战,我们将代表一行多米诺骨牌作为串|,/和\。您将获得一串多米诺骨牌作为输入,并且必须确定它们安定后的样子。这是多米诺骨牌掉落的规则 |左下降的多米诺骨牌左侧的立式多米诺骨牌\也将变为左下降的多米诺骨牌。 |正确的多米诺骨牌的立式多米诺骨牌/也将变成正确的多米诺骨牌。 如果站立的多米诺骨牌介于左\下落的/多米诺骨牌和右下落的多米诺骨牌之间,它将保持站立状态。 重复应用这些规则,直到排列不再更改。 这是单个输入如何得出结论的示例 |||||||\/|||||||\||\|||/||||||\||||| ||||||\\//|||||\\|\\|||//||||\\||||| |||||\\\///|||\\\\\\|||///||\\\||||| ||||\\\\////|\\\\\\\|||////\\\\||||| |||\\\\\////|\\\\\\\|||////\\\\||||| ||\\\\\\////|\\\\\\\|||////\\\\||||| |\\\\\\\////|\\\\\\\|||////\\\\||||| \\\\\\\\////|\\\\\\\|||////\\\\||||| 您的任务是编写查找并输出输入最终结果的代码。您可以假定输入始终有效,并且至少包含2个字符。 这是代码高尔夫球,因此答案将以字节计分,而字节数越少越好。 测试用例 |||/|||| -> |||///// |||\|||| -> \\\\|||| |/||||\| -> |///\\\| ||/|||\| -> ||//|\\| ||\|||/| -> \\\|||//

22
验证水平ASCII宠物蛇
最近出现了一些ASCII宠物蛇挑战(例如,此处) 0 0 0 0 0 000 00 0 00 000 0 0 000 0 0 0 00 0 000 这个挑战是要随机产生一条水平宠物蛇(高度为5行,长度为30),并验证: 每列只有一个 0 每个0都“连接”到它的0前后(仅以0或1行垂直间隔) 最终的输出可以是true或1如果蛇是有效的,或者false或者0如果蛇是无效的 编辑-澄清 假设输入: 是一个字符串 仅包含“”,“ 0”和“ \ n” 每行恰好有30个字符 正好有5行 即验证蛇是否已连接,并且没有杂散字符。无需验证印有蛇的“画布”。

24
采样帕累托分布
该Pareto分布是出现了很多自然的概率分布。它具有许多特殊属性,例如无穷均值。在此挑战中,您将输出从此分布中采样的数字。 对于所有大于或等于1 的Pareto分布,均被定义为大于或等于x概率。1/xx 因此,从此分布采样的数字的概率为1,大于或等于1,概率为1/2的情况下,大于或等于2;概率为1/3,大于或等于的情况下,大于或等于3 11.4的概率恰好为1 / 11.4,依此类推。 由于将对这种分布进行采样,因此程序或函数将不输入任何内容,而是输出具有上述概率的随机数。但是,如果您的程序由于浮点数印象而不能完全匹配上述概率,那就可以了。有关更多详细信息,请参见挑战的底部。 (确切地说,这称为阿尔法为1且下界为1的帕累托分布) 这是从此分布中提取的10个示例: 1.1540029602790338 52.86156818209856 3.003306506971116 1.4875532217142287 1.3604286212876546 57.5263129600285 1.3139866916055676 20.25125817471419 2.8105749663695208 1.1528212409680156 请注意,其中有5个低于2,有5个高于2。由于这是平均结果,因此当然可以更高或更低。 您的答案仅需在浮点类型,实数类型或您使用的任何其他类型的限制范围内是正确的,但您必须能够表示至少3个十进制精度的数字,并且最多可表示1,000,000个数字。如果不确定是否可以,请随时询问。 这是代码高尔夫。 有关不精确度的详细信息: 对于每个范围[a, b],1 <= a < b样本落入该范围的理想概率为1/a - 1/b。您的程序产生该范围内的数字的概率必须0.001为1/a - 1/b。如果X是程序的输出,则要求|P(a <= X <= b) - (1/a - 1/b)| < 0.001。 请注意,通过使用a=1且b足够大的上述规则,可能是您的程序必须以至少0.999的概率输出大于或等于1的数字。其余时间它可能会崩溃,输出Infinity或执行其他任何操作。 我可以肯定地说,形式为1/1-x或的现有提交(1/x其中或或x随机浮动)都满足此要求。[0, 1)(0, 1)[0, 1]

26
这是令人愉快的数字吗?
一个令人愉悦的数字(根据此定义)是可以通过以下过程传递的数字(以我们的41802000示例为例): 分隔尾随相同的数字(41802000 => [41802, 000]) 排序数字的前半部分并取最大值([41802, 000] => [8, 000]) 取最后一个元素的长度。调用结果元素A和B([8, 000] => A=8, B=3) N B = A是否代表任何整数N?(True在此示例中; 2 3 = 8) 如果输入True来自以下过程,则认为是令人满意的。 您的任务是取一个整数x,并输出是否x为令人满意的数字。您可以输出真值和假值的任意两个不同的值,但请在回答中说明您使用的是什么。x保证至少有两个不同的数字(例如111,无效的输入)。与大多数挑战一样,您可以将其x视为字符串或数字列表。 这是一个代码高尔夫球,因此以字节为单位的最短代码获胜。 测试用例 Input Output 41802000 1 100 1 123456788 0 451111111 0 234543454545444 0 12 1 41902000 0 92599 1

7
输出简化的Goodstein序列
如果数字写为,则以b-b简化的Goodstein形式表示。 b + b + ... + b + c, 0 < c ≤ b 数字的简化Goodstein序列开始于以1为底的简化Goodstein形式写数字,然后将所有1替换为2并减去1。将结果以base-2简化的Goodstein形式重写,然后将所有2替换为3并减去1 ,直到达到0。 您的程序将采用正整数输入并输出/打印其Goodstein序列并终止。您的程序应处理小于100的数字,尽管它可能不会在合理的时间内终止。 例如,给定3作为输入,您的程序应该输出(右侧只是说明) 1 + 1 + 1 | 3 = 1 + 1 + 1 2 + 2 + 1 | Change 1's to 2's, then subtract 1. (2 + 2 + 2 …

6
创建一个通用整数序列
定义 如果一个(无限)整数序列包含每个有限整数序列作为连续的子序列,让我们称其为通用。 换句话说,整数序列(a 1,a 2,…)是通用的,当且仅当对于每个有限整数序列(b 1,…,b n)有一个偏移k使得(a k + 1,…,a k + n)=(b 1,…,b n)。 例如,正质数的序列不是通用的,原因如下。 它不包含任何负整数,1或复合数字。 尽管它包含3,但不包含连续的子序列( 3,3,3 )。 尽管它包含2和5,但不包含连续的子序列(2,5)。 尽管它包含连续的子序列(7、11、13),但不包含连续的子序列(13、11、7)。 任务 选择任何单个通用整数序列(a 1,a 2 …),并按照以下规则以您选择的编程语言实现它。 您可以提交完整的程序或功能。 您有三种I / O选项: 不输入任何内容并打印或返回整个序列。 以指数ñ作为输入并打印或返回一个ñ。 以索引n作为输入并打印或返回(a 1,…,a n)。 对于I / O选项2和3,可以根据需要使用基于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.