Questions tagged «code-golf»

Code-golf是在最小的源代码字节中解决特定问题的竞赛。

8
按混排排序
块随机排序 在块混洗排序是排序的列表的(而人工的)方法。举例说明,其工作方式如下。 [6, 1, 0, 3, 2, 4, -2, -1] Break list into contiguous blocks [6][1, 0][3, 2, 4][-2, -1] Sort each block [6][0, 1][2, 3, 4][-2, -1] Sort blocks lexicographically [-2, -1][0, 1][2, 3, 4][6] Concatenate [-2, -1, 0, 1, 2, 3, 4, 6] 划分为连续块的分区可以任意选择。但是,并不是所有的块选择都会在最后产生一个排序列表: [6, 1, 0, 3, …

25
工厂工人
挑战 工厂工人通常非常努力。但是,他们的工作现在通常被机器取代。 您必须编写一个以数字作为输入的程序。它将打印出10名工人的工厂10次。每次,每个工人都有一个1/input被“解雇”并被机器取代的机会。 输入值 来自STDIN或函数调用的整数。 输出量 10例工厂,每例通常有更多工人被解雇。 输出格式-如何打印工厂 工厂看起来像这样: |0000000000| 要么 |0000011001| 管道代表墙壁,0代表工人,而1代表机器,因此工厂的第一张照片将始终为|0000000000|。 例 输入10 输出: |0000000000| //always start off with this |0000000010| //a 1/10 chance means that this worker lost his job |0000010010| |0010010010| |1010010010| |1010110010| |1010110011| |1010111011| |1010111111| |1110111111| 输入5 输出: |0000000000| //always start here |0000001001| //a 1/5 …

4
建立一个半基数循环奎
半基数环状喹是具有两种状态的环状喹,一种与另一种垂直。 规则 您可以决定要实现的旋转是顺时针还是逆时针。 旋转后,应将代码中的任何空格替换为空格以保留位置。 您的程序必须满足quine的社区定义。 这是代码高尔夫球,因此每种语言中最短的程序将获胜。您的第一个程序用于您的字节数。 禁止出现标准漏洞。 例子 如果您的程序是: $_='print';eval 然后,下一个迭代必须是: $ _ = ' p r i n t ' ; e v a l 要么 l a v e ; ' t n i r p ' = _ $ 必须输出原始程序: $_='print';eval 如果您的程序是: ;$_='; ;$_='; print 然后,下一个迭代必须是: ;; …

9
填写支架
普通括号((),[],<>和{})是很好的和明确的,但有人认为这将是使用非括号字符作为括号是一个好主意。这些字符|和和"是不明确的。例如做 """" 相当于 (()) 要么 ()() 这是不可能的。 例如,当您混合使用类型不明确的方括号时,事情开始变得有趣起来 "|""||""|" 可能是以下任何一个 ([(([]))]),([()[]()]),([()][()]) 任务 您的任务是获取由歧义字符组成的字符串,并输出作者可能想要的所有可能的平衡字符串。 更具体地讲,你的输出可以做出替换所有的字符串平衡|与任一[或]并"用两种(或)。您不应两次输出任何平衡的字符串。 IO 作为输入,您应该采用由|和组成的字符串"。如果您想选择比其他两个不同的角色|,并"担任你可以这样做替代品。您应该输出一个平衡字符串的容器。您可以选择更换[],并()在输出与任何其他两种支架对((),[],<>或{})你的愿望。您的输出格式应在每次运行中保持一致。 计分 这是代码高尔夫球,因此答案将以字节计分,而字节越少越好。 测试用例 "" -> ["()"] "|"| -> [] ||| -> [] """" -> ["(())","()()"] ""|| -> ["()[]"] "|"||"|" -> ["([([])])"] "|""||""|" -> ["([(([]))])","([()[]()])","([()][()])"]

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 非负整数多项式与非负整数的无限列表相同,因此在某个点之后所有整数均为零。因此,多项式可以由无限列表表示(尽管这可能是不希望的),也可以由列表末尾带有隐式零的有限列表表示。 多项式与有限列表之间的主要区别在于,在列表的末尾添加零将更改列表: 在多项式的末尾添加零不会更改其值: 因此,如果您的函数采用表示多项式的有限列表作为输入,则添加零不得更改其结果。 当将多项式表示为列表时,可以用代表常数项的第一个或最后一个条目来表示它们。例如,您可能具有以下两种可能性之一: 在第一种情况下,将零添加到列表的末尾不应更改结果。在第二种情况下,加零到前方列表的不应该改变的结果。 当然,如果您的语言支持多项式,则可以将其作为输入。 通过任何标准方法,输出应为非负整数输出。 这是代码高尔夫球,因此答案将以字节计分,而字节越少越好。

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 …

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.