编程拼图和代码高尔夫

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

10
最小排序列表到矩阵
给定唯一的正整数的未排序列表,请将其最小排序为2D矩阵。输入列表被保证是复合长度,这意味着在输出矩阵不一定是正方形的,但是大小n x m与n,m > 1。 “最小排序”在此表示以下含义: 按升序对列表进行排序。 尽可能压缩输出矩阵-最小化矩阵尺寸的总和(例如,对于20输入元素作为输入,需要a 5x4或4x5输出矩阵,而不是a 2x10)。 从排序列表中的第一个元素开始,将排序的数字尽量压缩到矩阵的左上角。 可以将其视为对列表进行排序,然后将其沿矩阵的对角线(从左上角开始)进行切片。 例子: 对于输入,1..20输出为5x4或4x5矩阵,如下所示: 1 2 4 7 11 3 5 8 12 15 6 9 13 16 18 10 14 17 19 20 1 2 4 7 3 5 8 11 6 9 12 15 10 13 16 18 …

7
俄罗斯嵌套奎因
一个俄罗斯嵌套娃娃,通常被称为一个俄罗斯套娃,是包含一个缩小版的自己,一个洋娃娃,然后包含自己的另一个较小的版本,其中包含一个较小的版本的本身,它包含自身的缩小版,其本身包含一个较小的版本...-直到最后一个,最后一个为空。一个例子: 今天,您的目标是通过编写一个程序或函数来模仿这种俄罗斯传统,当该程序或函数包含N次时,将打印包含N-1次自身的副本。 例如,玩偶程序abcd将具有N = 3程序abababcdcdcd,该程序将打印N = 2程序ababcdcd,该程序将打印原始的N = 1程序abcd,最后打印N = 0的程序,该程序为空。从理论上讲,这应该适用于任何合理的N值。 规则: 这是一个TIO程序,可帮助您根据程序生成玩偶程序 适用标准Quine规则 适用标准漏洞 “包含”是指直接在先前版本的中心,因此您的解决方案必须具有正偶数个字节。长度为10的程序将在第五个字节之后插入原始副本,然后在第十个字节之后插入另一个副本,依此类推。 输出中允许单个尾随空格 由于这是code-golf,因此您的目标是使N = 1程序尽可能短。 您的代码的解释将不胜感激

23
推断几何序列
Haskell具有此整洁(外观)功能,您可以为它提供三个数字,并且可以从中推断出一个算术序列。例如,[1, 3..27]等效于[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27]。 太酷了,除了算术序列外,其他所有都相当有限。加法,pfft。乘法的所在。如果它执行[1, 3..27]返回的几何序列,会不会更酷[1, 3, 9, 27]? 挑战 写一个程序/功能带有三个正整数一个,b,和c ^和输出,其中X是的最大整数≤ Ç其可以被表示为其中Ñ是一个正整数。[a, b, b × (b ÷ a), b × (b ÷ a)2, ..., x]b × (b ÷ a)n 也就是说,输出应为r,这样: r0 = a r1 = b rn = …

2
实现Boids算法
介绍 本类鸟群算法是自发行为一组在一个相对简单的演示。正如其创建者Craig Reynolds所述,它具有三个主要规则: 基本的植绒模型由三个简单的转向行为组成,这些行为描述了单个波德人如何根据其附近的植群的位置和速度进行操纵: 分隔:避免拥挤当地羊群。 对齐:对当地flockmates的平均航向转向。 凝聚力:转向向当地flockmates的平均位置移动。 每个辫子都可以直接访问整个场景的几何描述,但是植绒要求它仅对自身周围某个特定区域内的植绒动物做出反应。邻域的特征是距离(从主体的中心开始测量)和角度(从主体的飞行方向开始测量)。该本地社区之外的队友将被忽略。可以将邻域视为感知受限的模型(例如在浑浊的水中的鱼),但将其视为定义了一群人影响波伊德转向的区域可能更正确。 我在解释事物时并不完美,因此我强烈建议您查看原始资料。他的网站上还有一些超级有用的图片。 挑战 给定主体(模拟实体)的数量和帧的数量,输出模拟的动画。 Boid应该呈现为红色圆圈,并在圆圈内部显示一条线,指示其标题,这是Boid指向的方向: 每个波蒂的角度(如雷诺所描述的)应为整300度。(不是360) 每个boid的起始航向和位置以及位置均应是均匀随机的(但要播种,以便仍能确定输出)。 如果boid的半径为1,则邻居的半径应为3。 伯德的数量从2到20不等。 帧数为1-5000 动画的播放时间至少应为每帧10毫秒,最长应为boid数量的1秒。(2个波西德=每帧最大2秒,3个波西德=每帧最大3秒,等等) 输出动画应至少为5个boid半径乘以5个boid半径,乘以boid数量的一半。因此,两个boid的最小大小将是10 boid半径乘以10 boid半径,三个boid的最小大小将是15 boid半径乘以15 boid半径,等等。 每个投标的半径必须至少为5个像素,最大为50个像素。 需要限制每个Boid的速度,以使其在一帧中的移动幅度不超过其半径的1/5。 需要确定输出,以便如果多次运行相同的输入将产生相同的输出。 如果辫子到达边界,则应回绕到另一侧。同样,每个投标附近的区域也应环绕边界。 算法规则 在这种情况下,每个Boid周围都有一个跨度为300度的扇形,以Boid的航向为中心。这个“邻居”中的任何其他小伙子都被认为是“邻居”,或(用雷诺兹的术语称)“队友”。 每个BOID都应调整其航向以避免碰撞,并保持一个BOID半径与其邻居的舒适距离。(这是算法的“分离”方面。一个波德半径可能会被绕过,但应该像橡皮筋一样,重新卡入到位。) 每个boid都应另外调整其航向,使其更接近其附近其他boid的平均航向,只要它不干扰第一条规则即可。(这是算法的“对齐”方面) 只要不引起碰撞或不会显着干扰第二条规则,每个船长都应将自己转向其队友的平均位置。 在有关该主题的论文中,他解释如下: 为了建立模拟群,我们从支持几何飞行的布依德模型开始。我们添加了与避免碰撞的相反力量和加入羊群的冲动相对应的行为。简要地描述为规则,并按优先级从高到低的顺序,导致模拟植绒的行为为: 避免碰撞:避免与附近的队友发生碰撞 速度匹配:尝试将速度与附近的队友匹配 羊群居中:尝试靠近附近的羊群 运动的更详细描述: Boids算法的标准实现通常会对每个规则进行计算,然后将其合并在一起。 对于第一个规则,Boid会遍历其邻域内的相邻Boid列表,并且如果其自身与邻居之间的距离小于某个值,则将Boid推离其邻居的矢量应用于Boid的航向。 对于第二条规则,Boid计算其邻居的平均航向,并将当前航向与平均航向之间的差值的一小部分(在此挑战中,我们将使用1/10)添加到当前航向。 对于第三条规则(也是最后一条规则),该boid将其邻居的位置平均,然后计算指向该位置的向量。此向量乘以比规则2所用的数字还要小的数字(对于此挑战,将使用1/50)并将其应用于航向。 然后将标本朝其方向移动 这是Boids算法的有用伪代码实现。 输入和输出示例 输入: 5、190(5个辫子,190帧) 输出: 获奖标准 这是代码高尔夫球,因此以字节为单位的最小解决方案获胜。

2
多少洗牌
浅滩混洗是一种混洗,将甲板分为两个分区,然后将这些分区拼接在一起以创建新的混洗甲板。 卡以这样的方式拼接在一起:卡在它们所属的分区中保持其相对顺序。例如,如果卡片A在卡组中的卡片B之前,并且卡片A和B在同一分区中,则在最终结果中,卡片A必须在卡片B之前,即使它们之间的卡片数量增加了。如果A和B在不同的分区中,则它们在最终结果中可以采用任何顺序,而不管它们的开始顺序如何。 然后,可以将每个浅滩混洗视为原始纸牌的排列。例如排列 1,2,3 -> 1,3,2 是浅滩洗牌。如果你像这样分割甲板 1, 2 | 3 我们看到其中的每张卡1,3,2与其分区中的每张其他卡具有相同的相对顺序。 2仍在1。 另一方面,以下排列不是浅滩混洗。 1,2,3 -> 3,2,1 我们可以看到这一点,因为对于所有两个(非平凡的)分区 1, 2 | 3 1 | 2, 3 有一对卡不保持其相对顺序。在第一个分区1,并2改变他们的排序,而在第二个分区2,并3改变它们的顺序。 但是我们确实看到3, 2, 1可以通过组合两个浅滩混洗来实现, 1, 3, 2 + 2, 3, 1 = 3, 2, 1 实际上,要证明的一个非常简单的事实是,通过结合一定数量的浅滩混洗排列,可以进行任何排列。 任务 您的任务是制作一个程序或函数,将一个排列(大小为N)作为输入,并输出最少数量的浅滩混洗排列(大小为N),可以组合形成输入排列。您无需输出浅滩混音本身,就可以输出多少。 这是代码高尔夫球,因此答案将以字节计分,而字节越少越好。 您可以输出1或0进行身份置换。 测试用例 1,3,2 -> 1 …

12
奥运五环序列
挑战: 给定一个索引整数n,或者输出n此序列中的'th项,或者输出直到index并包括index的序列n: 25,25,7,28,29,20,21,22,23,14,35,26,7,28,29,20,16,29,12,15,28,21,14,17,30,13,16,29,12,15,28,21,10,6,12,18,15,11,7,13,19,17,13,9,15,21,18,14,10,16,22,19,15,11,17,23,20,16,12,18,24,21,17,13,19,25,23,19,15,21,27,24,20,16,22,28,25,21,17,23,29,16,13,9,15,21,18,14,10,16,22,20,16,12,18,24,21,17,13,19 这个序列如何运作? 注意:在此说明中,索引n是1索引的。 把数字1通过x上长度的两条线n*6 - 1,其中x依赖于当前迭代和所使用的号码的长度,然后求和的数字n“日/最右边的奥林匹克这两条线的环。 序列中的第一个数字计算如下: The length of the lines are 5 (because 1*6 - 1 = 5): 12345 67891(0) Then leave the digits in an Olympic Rings pattern: 1 3 5 7 9 And sum them: 1+3+5+7+9 = 25 因此n=1结果25。 序列中的第二个数字计算如下: The length of the …

2
输出古德斯坦序列
(这可能很经典,但这是我在这里的第一篇文章,所以我还没有准备好花哨的东西) 所述古德斯坦序列被用于将输入数定义如下: 选择一个起始数字n,令b = 2并重复: 写Ñ在heriditary基地b表示法 取代所有的(b)s至(b 1)S IN Ñ和1。减去 输出n的新十进制评估 增量b 遗传基础符号是数字的分解,其中基础是出现的较大数字。例子: 83 在HB3中: 3^(3+1)+2 226 在HB2中: 2^(2^(2+1))+2^(2+1)+2 Goodstein序列始终以0结尾,但是它们往往会很快变得很大,因此不要求输出完整序列。 任务: 给定任何合理格式的输入数字,您的工作是至少输出该数字的Goodstein序列,直到达到10 ^ 25或0 例子: Input: 3 Output: 3, 3, 3, 2, 1, 0 Input: 13 Output: 13, 108, 1279, 16092, 280711, 5765998, 134219479, 3486786855, 100000003325, 3138428381103, 106993205384715, 3937376385706415, 155568095557821073, …

13
是Pascal Prime吗?
众所周知,奇数质数会在Pascal三角形中出现两次。但是,并非所有在Pascal三角形中正好出现两次的数字都是质数。我们称这些数字为Pascal素数。 帕斯卡素数是在帕斯卡三角形中正好出现两次的复合数。前几个Pascal素数是 4, 8, 9, 12, 14, 16, 18, ... 您的挑战是取一个正整数n作为输入,并输出true或false,这取决于n是否为Pascal素数。这是代码高尔夫球,所以最短的程序胜出!

30
求和最大为n的不同整数
任务 给定输入正整数n(从1到您的语言限制,包括1),返回或输出相加为的最大不同正整数的最大数量n。 测试用例 让我们f根据任务定义一个有效的函数: 的序列f,从1开始: 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, ... 作为较大的测试用例: >>> f(1000000000) // Might not be feasible with brute-forcers 44720 测试代码 对于未明确给出的任何测试用例,代码的输出应与以下结果相匹配: public class Main { public static void …

7
希尔伯特二进制酒店
在此挑战中,系统将要求您实现具有两个属性的任何功能(或完整程序)。这些属性是: 您的函数必须是从具有非负整数系数的多项式到非负整数的内射(可逆)函数。这意味着没有两个不相等的输入可以映射到相等的输出。 您的函数必须保留从输入到输出的“按位”总数。这意味着,如果您计算多项式每个系数的1位,则它们的总和应与输出的二进制表示形式中1位的数目相同。例如,它9是1001二进制的,所以它有2 1位。 IO 非负整数多项式与非负整数的无限列表相同,因此在某个点之后所有整数均为零。因此,多项式可以由无限列表表示(尽管这可能是不希望的),也可以由列表末尾带有隐式零的有限列表表示。 多项式与有限列表之间的主要区别在于,在列表的末尾添加零将更改列表: 在多项式的末尾添加零不会更改其值: 因此,如果您的函数采用表示多项式的有限列表作为输入,则添加零不得更改其结果。 当将多项式表示为列表时,可以用代表常数项的第一个或最后一个条目来表示它们。例如,您可能具有以下两种可能性之一: 在第一种情况下,将零添加到列表的末尾不应更改结果。在第二种情况下,加零到前方列表的不应该改变的结果。 当然,如果您的语言支持多项式,则可以将其作为输入。 通过任何标准方法,输出应为非负整数输出。 这是代码高尔夫球,因此答案将以字节计分,而字节越少越好。

1
来临挑战1:帮助圣诞老人解开他现在的保险库!
下一个>> 描述性关键字(用于搜索):使两个矩阵等效,重叠,数组,查找 挑战 圣诞老人在过去曾有过精灵从他的保险库中偷走礼物的历史,因此,今年他设计了一把很难破解的锁,今年似乎将精灵拒之门外。不幸的是,他丢失了组合,也无法弄清楚如何打开它!幸运的是,他雇用了您编写一个程序来查找该组合。它不需要是最短的,但他需要尽快找到它! 他的日程安排非常严格,他等不起。您的分数将是程序的总运行时间乘以程序为得分输入所输出的步数。最低分获胜。 技术指标 锁是1和0的方阵。它设置为1和0的随机排列,并且需要设置为指定的代码。幸运的是,圣诞老人记住了所需的代码。 他可以执行几个步骤。每个步骤都可以在任何连续的子矩阵上执行(也就是说,您必须选择一个完全由左上角和右下角所包围的子矩阵)(可以是非正方形子矩阵): 向右旋转90度* 向左旋转90度* 旋转180度 左右循环各行n元素(环绕) 循环上移m或下移每个列元素(自动换行) 水平翻转 垂直翻转 翻转主对角线* 翻转主反对角线* *仅当子矩阵为正方形时 当然,他也可以在整个矩阵上执行这些步骤。由于1和0只能在矩阵上交换,而正方形的值不能直接更改,因此开始和结束配置的1和0的数目相同。 格式规范和规则 将以您想要的任何合理格式为您提供两个平方矩阵的输入(开始位置和结束位置)。输出应该是任何可读格式的这些步骤的序列。由于这不是代码来源,请使其成为易于验证的格式,但这不是严格的要求。如果需要,可以选择在输入中采用矩阵的边长。 您的程序将在我的计算机上运行(Linux Mint,如果需要的话,您可以根据要求提供确切的版本详细信息:P),并且我将根据我在命令行上按“ Enter”键之间的时间以及命令退出。 测试用例 1 0 0 1 0 0 0 0 0 1 1 0 -> 0 0 0 0 0 1 1 0 -> 1 1 1 …

2
盾墙
历史背景 盾墙是一种战术战争编队,其历史可以追溯到至少公元前2500年。它由战士与同伴的盾牌重叠构成“墙”组成。这种战术的吸引力来自这样一个事实,即即使是最不熟练的战士,只要拥有盾牌和武器,他们都可以在墙上战斗。由于墙的接近,几乎没有移动的空间,战斗通常变成用锋利的武器进行的激烈比赛。 挑战 您的任务是创建一个程序或函数,以两个战士的数组/列表/向量为输入,来决定战斗的结果。列表将代表单线的屏蔽墙,并且将遵循特定的符号: 维京人: 北欧勇士们发动了激烈的战斗。在8世纪后期到11世纪中叶,丹麦维京人入侵了不列颠王国,寻找财富和可耕地。出于挑战的目的,这些是维京人的战士: 该JARL:通常发现从壁的中心率众,jarls是海盗成群的领导人。受到15点伤害而死亡,每回合造成2点伤害。 该Berserker:虽然幻想,极大地扭曲了狂战士的形象,这些战士被称为精神恍惚般狂暴战斗没有任何一种比他们的盾等保护的。造成6点伤害死亡,每回合造成3点伤害。 该Chieftain:酋长是富人谁在他们的服务了自由人。他们通常会在战斗中赢得巨大的荣耀和财富。造成10点伤害死亡,每回合造成2点伤害。 Free Men:担任酋长的战士。他们发誓要为自己的主人而战直到死亡。遭受8点伤害,每回合造成1点伤害。 该Skald:Skalds,通常译为吟游诗人,是谁雇用了写诗,关于北欧勇士的事迹故事或歌曲的自由人。受到8点伤害死亡,并为每位相邻的战士造成1点额外伤害。骨不会造成伤害。以此方式,战士不能获得超过1点的额外伤害。 撒克逊人: 撒克逊人是在公元5世纪罗马帝国灭亡后从欧洲大陆来到英国定居的。出于此挑战的目的,有撒克逊人的战士: 该EARL:Ealdormen,通常被称为伯爵,是较高的贵族成员。他们通常占有很大的土地,并且有成百上千的宣誓就职者。遭受20点伤害,每回合造成1点伤害。 该K夜:由于缺乏一个更好的词中,骑士是谁拥有一些土地未成年贵族。在大多数情况下,骑士是伯爵的宣誓仆人。造成10点伤害死亡,每回合造成2点伤害。 该Warrior:常见的男人,通常是轻微的贵族没有土地或农民谁担任一个骑士。当与骑士或伯爵相邻时,战士获得+1伤害加成。受到8点伤害,每回合造成2点伤害。 在F长江三角洲地区:该Fyrd是民兵般的自由人,通常是贫困农民,谁愿意带任何武器(或武器状农具)他们在墙上打组。遭受5点伤害,每回合造成1点伤害。 最P古老:祭司在撒克逊人早期的文化中被高度重视,是上帝圣言的先驱。牧师死亡时受到15点伤害,并防止相邻的战士遭受1点伤害。牧师不会造成伤害。牧师对战士的伤害不能超过1。 墙 墙壁在其中心彼此相遇。每个回合中,每个战士都会直接对其前方的战士造成伤害,或者,如果前面没有活着的战士,则对角相邻的活着的战士会留下最少的生命值。如果有领带,请选择靠近墙壁边缘的战士。 例: Vikings [M,M,M,B,B,C,J,C,B,B,M,M,M] [F,F,F,W,W,K,E,K,W,W,F,F,F] Saxons To make matters easier, let's convert these walls into numbers: Round 0: M M M B B C J C B B M M …

2
正则表达式:匹配平均主义系列
介绍 我在这里看不到很多正则表达式挑战,因此我想提供这种看似简单的方法,可以使用多种正则表达式来以多种方式完成。我希望它为正则表达式爱好者提供一些有趣的打高尔夫球时间。 挑战 面临的挑战是匹配我非常宽松地称为“平等主义者”系列的内容:一系列相等数量的不同字符。最好用示例来描述。 比赛: aaabbbccc xyz iillppddff ggggggoooooollllllffffff abc banana 不匹配: aabc xxxyyzzz iilllpppddff ggggggoooooollllllfff aaaaaabbbccc aaabbbc abbaa aabbbc 一概而论,要匹配形式的主题(为任意字符的列表来,在所有c1)n(c2)n(c3)n...(ck)nc1ckci != ci+1i, k > 1, and n > 0. 说明: 输入将不为空。 字符可以稍后在字符串中重复(例如“ banana”) k > 1,因此字符串中将始终至少包含2个不同的字符。 您可以假定仅将ASCII字符作为输入传递,并且没有字符将成为行终止符。 规则 (感谢马丁·恩德(Martin Ender)出色阐述了这一规则) 您的答案应该由一个正则表达式组成,没有任何其他代码(可选地,使您的解决方案起作用所需的正则表达式修饰符列表除外)。您不得使用允许您以托管语言调用代码的语言正则表达式功能(例如Perl的e修饰符)。 您可以使用在挑战之前存在的任何正则表达式风味,但请指定风味。 不要假设正则表达式是隐式锚定的,例如,如果您使用的是Python,请假设您的正则表达式用于re.search,而不用于re.match。您的正则表达式必须与整个字符串匹配有效的均等字符串,而对于无效字符串则不匹配。您可以根据需要使用任意数量的捕获组。 您可以假设输入将始终是两个或多个不包含任何行终止符的ASCII字符的字符串。 这是正则表达式高尔夫,因此以字节为单位的最短正则表达式获胜。如果您的语言需要分隔符(通常是/.../)来表示正则表达式,请不要计算分隔符本身。如果您的解决方案需要修饰符,请为每个修饰符添加一个字节。 标准 这是一门不错的老式高尔夫球,所以请不要考虑效率问题,而要尽量减小正则表达式。 请说明您使用了哪种正则表达式,并在可能的情况下提供一个链接,该链接显示了您在操作中的表情在线演示。

20
园林建筑-ASCII风格
我们房子外面有一个10x10米的正方形花园。我们想种草,做一个露台。我们已经决定了如何划分花园,但是我们还没有确定草量与露台之间的比例。 我们需要可视化帮助,而ASCII艺术显然是实现此目的的最佳方法。 挑战: 取一个整数,范围为[0,100](或可选的十进制[0,1]),代表应该露台花园的百分比。 一平方米的露台用破折号-或条形表示|。一平方米的草用井号表示#。 如果露台的数量小于或等于50%,则应在花园的左下角开始用条形遮盖,然后垂直然后水平填充。 如果梯田的数量超过50%,则我们希望以另一种方式(用虚线代替条形)进行装饰,并从左下角开始,然后水平填充,然后垂直填充。 例子: N = 25% ||######## ||######## ||######## ||######## ||######## |||####### |||####### |||####### |||####### |||####### N = 75% ########## ########## -----##### ---------- ---------- ---------- ---------- ---------- ---------- ---------- N = 47% ||||###### ||||###### ||||###### |||||##### |||||##### |||||##### |||||##### |||||##### |||||##### |||||##### N = 50% …

8
输出源,一次一位
编写一个非空程序或函数,当被调用时输出单个值1或0,并且被多次调用时,输出数字将生成程序源代码的二进制表示形式(在编译代码的同一代码页中) /解释)。 例如,如果您的源代码是abc(ASCII),则输出将是: 1st call: 0 // ASCII letter 'a' 2nd call: 1 3rd call: 1 4th call: 0 5th call: 0 6th call: 0 7th call: 0 8th call: 1 9th call: 0 // ASCII letter 'b' 10th call: 1 11th call: 1 12th call: 0 13th call: 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.