Questions tagged «code-golf»

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

8
涂每个薄煎饼
您的盘子上有一叠煎饼,上面有一团糖浆,厚得不能从侧面流下来。在每个薄煎饼的两面都至少接触到糖浆之前,您不会高兴地进食,但目前只有顶部薄煎饼的一面可以食用。 您知道糖浆甚至不会浸透一个煎饼,但可以通过两个煎饼之间的面对面接触来无限期地转移糖浆。薄煎饼的表面接触糖浆后,将被视为永远涂有糖浆,并且任何未接触糖浆的表面也将被制成糖浆涂层。也可以将糖浆转移到板的顶侧或从板的顶侧转移。 通过将锅铲插入一个或多个煎饼下面,然后将它们全部翻转,您可以像在煎饼分选过程中一样,用糖浆在煎饼的每个表面上涂抹糖浆。(不幸的是,这把锅铲是抗糖浆的,并且不能通过触摸煎饼表面来帮助分配糖浆。)可悲的是,您无法知道哪些煎饼表面已经接触了糖浆,但是您确实记得已经进行了翻转。 考虑到您过去的情况,您可以确定煎饼是否已经全部涂上糖浆了吗? 挑战 编写一个程序,该程序将薄煎饼的数量取为正整数N,并为迄今为止进行的翻转提供一个正整数列表(所有<= N)。列表中的每个数字代表被翻转的煎饼的数量。如果薄煎饼已经涂好,则输出真值,否则输出假值。(真实/虚假定义) 输入应来自stdin或命令行,输出应进入stdout(或最接近的替代品)。如果您的输入需要一些额外的格式,那就很好了:例如,[1, 1, 2, 2]而不是1 1 2 2列表。 例子 假设N = 2,那么我们在盘子上有一叠两个薄煎饼,从顶部的糖浆开始。 如果列表为1 1 2 2,则表示我们... 翻转顶部煎饼-覆盖底部煎饼的上表面 再次翻转顶部-在顶部煎饼的原始底面上涂上一层 同时翻转-涂板 再次翻转两者-在底部薄煎饼的原始底面上涂上一层 由于所有四个面都被覆盖,因此输出将类似于True或1。 如果列表为1 2 2 1,则表示我们... 翻转顶部煎饼-覆盖底部煎饼的上表面 翻转两个-不涂任何东西 再次翻转两者-无涂层 再次翻转顶部-在顶部煎饼的原始底面上涂上一层 由于接触板的表面仍然不含糖浆,因此输出将类似于False或0。 笔记 翻转列表可以任意大,可以为空,在这种情况下,输出是虚假的。 该板充当糖浆载体,但是是否被包被都无关紧要。(实际上,任何翻转溶液都会覆盖该盘子,因为必须覆盖它碰到的煎饼面,但无论如何。) 该板不能翻转。 您可以假设这些煎饼是单位圆盘,没有面可言,只有两个相对的面。 计分 这是代码高尔夫球。以字节为单位的最短解决方案获胜。
35 code-golf  stack 

29
画一个ASCII闪电
介绍 受此StackOverflow问题的部分启发,让我们绘制一个ASCII闪电螺栓。 编写一个程序,该程序n通过STDIN或命令行使用正整数,并在下面输出ASCII Lightning Bolt。 输入值 正整数,n表示要绘制的闪电曲折线层数。 示例输出 n = 1 __ \ \ \ \ \ \ \/ n = 2 __ \ \ \ \ __\ \ \ __\ \ \ \ \ \/ n = 3 __ \ \ \ \ __\ \ \ __\ \ \ …

30
每日随机高尔夫#1:随机排列
关于系列 我将围绕随机性主题运行一系列代码高尔夫球挑战。这基本上是一个9洞 高尔夫球场,但涉及多个问题。您可以单独参加任何挑战,就像是正常问题一样。 但是,我将在所有挑战中保持领先。该系列将运行9个挑战(目前),每隔几天发布一次。参加所有9个挑战的每个用户都有资格赢得整个系列赛。他们的总体分数是每个挑战中最短提交的总和(因此,如果您回答一次挑战两次,则只有得分更高的一个才计入分数)。如果有任何人在28天的时间里保持排行榜榜首,我将奖励他们500代表。 尽管我在本系列中有很多想法,但未来的挑战还没有定下来。如果您有任何建议,请在相关的沙箱帖子上让我知道。 漏洞1:随机排列数组 第一项任务非常简单:给定一个非空的整数数组,将其随机洗牌。但是有一些规则: 必须以相同的概率返回所有可能的排列(因此,混洗应具有均匀的分布)。您可以通过在Will It Shuffle上的JavaScript中实现算法来检查算法是否统一/无偏,这将生成偏差矩阵-结果看起来应与内置的Fisher-Yates或sort(随机顺序)一样均匀。 您不得使用任何内置方法或第三方方法来随机排列数组或生成随机排列(或枚举所有排列)。特别是,您可能使用的唯一内置随机函数是一次获取一个随机数。您可以假定任何内置随机数方法都在O(1)中运行并且在请求的间隔内完全统一(从数学意义上讲,您可以在此处忽略浮点表示的详细信息)。如果您的语言允许您一次获取m个随机数的列表,则可以使用此功能,前提是m个数彼此独立,并将其计为O(m)。 您的实现不得超过O(N)的时间复杂度,其中N是要改组的数组的大小。例如,您不能“按随机数排序”。 您可以在适当位置随机排列数组,也可以创建一个新数组(在这种情况下,可以根据需要修改旧数组)。 您可以编写完整的程序或函数,并通过STDIN,命令行参数,函数参数或提示接受输入,并通过返回值或通过打印到STDOUT(或最接近的替代方法)来产生输出。如果编写的函数可以在适当的位置随机排列数组,那么您当然不需要返回它(前提是您的语言允许您在函数返回后访问修改后的数组)。 输入和输出可以是任何方便的列表或字符串的格式,但必须支持任意的整数范围-2 31 ≤X <2 31。原则上,您的代码应适用于长度最大为2 31的数组,尽管这不一定必须适合您的内存或在合理的时间内完成。(我只是不想看到硬编码循环或其他内容的任意大小限制。) 这是代码高尔夫球,因此最短的提交(以字节为单位)获胜。 排行榜 以下代码片段将在该系列的所有挑战中产生一个排行榜。 为确保您的答案显示出来,请使用以下Markdown模板以标题开头每个答案: # Language Name, N bytes N您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数来保持标题。例如: # Ruby, <s>104</s> <s>101</s> 96 bytes (目前未显示该语言,但是该代码段确实需要并对其进行解析,并且将来我可能会添加一个语言排行榜。) 显示代码段 /* Configuration */ var QUESTION_IDs = [45302, 45447, 46991, 49394, 51222, 66319, …

17
GolfScript中打高尔夫球的技巧
什么,这个帖子还不存在? 当然,GolfScript是由打高尔夫球,所以你可能会认为真的不需要特定的技巧。但是要充分利用GolfScript的功能,您需要学习一些非显而易见的技巧。这篇文章是收集这样有用的提示和技巧。 首先,这里是GolfScript官方参考页。您应该首先真正了解以下内容: 讲解 句法 内建 快速参考 特别是,我非常建议按此顺序阅读这些页面-快速参考没什么用,除非您已经相当熟悉内置函数,并且该教程包含了一些重要的细节,其他页面没有对此进行解释。 。 附言 为了启发和个人兴趣,以下是一些我想看到的不错的答案: 如何在GolfScript中进行有限音译? {FROM?TO=}%作品如果你可以确保所有的输入中发现的FROM(或不介意他们都被映射到最后一个元素TO),但我已经看到了离开映射的值不变的方式已经更多或更少的klugey。 如何最好地将字符串转换为ASCII码数组并返回?这会产生副作用吗?将字符串中的字符转储到堆栈中的最佳方法是什么(就像~数组一样)?

30
按二进制1的计数对数字排序
目标 编写函数或程序,将整数数组按其二进制表示形式中存在的1的数量降序排列。不需要二级排序条件。 示例排序列表 (使用16位整数) Dec Bin 1's 16375 0011111111110111 13 15342 0011101111101110 11 32425 0111111010101001 10 11746 0010110111100010 8 28436 0000110111110100 8 19944 0100110111101000 8 28943 0000011100011111 8 3944 0000011111101000 7 15752 0011110110001000 7 825 0000000011111001 6 21826 0101010101000010 6 输入值 一个32位整数数组。 输出量 按描述排序的相同整数的数组。 计分 这是在一周内要选择的最少字节数的代码高尔夫球。

30
半对角字母
给定英文字母,您的任务是为输入构建半对角字母。 如何建立半对角字母? 简要说明:首先,您将字母放在字母表中的位置P(P此处为1索引)。然后,您将每个字母打印到一行上的输入(含)为止,在P-1该字母之前和重复该字母P时间,并与空格进行交织。 例子: 给定F,您的程序应输出: 一种 BB CCC DDDD 电子电气设备 FFFFFF 给定K,您的程序应输出: 一种 BB CCC DDDD 电子电气设备 FFFFFF GG HHHHHHHH IIIIIIIII JJJJJJJJJJ KKKKKKKKKKKK 给定A,您的程序应输出: A 规则 您可以选择小写或大写字符,但是应该保持一致。 您可能会有多余的空间,如下所示: 一个一致的引导空间(每行)。 尾随或前导换行符。 尾随空格。 输入和输出可以采用任何标准均值进行,并且存在默认漏洞。 只要您还提供ascii-art版本,就可以输出行列表。 这是代码高尔夫球,因此以字节为单位的最短代码胜出! 受此挑战启发。

30
阿克曼函数
Ackermann函数是非原始递归的全部可计算函数中最简单的例子之一。 我们将使用以下A(m,n)两个非负整数的定义: A(0,n) = n+1 A(m,0) = A(m-1,1) A(m,n) = A(m-1,A(m,n-1)) 您可以实施 一个以两个整数作为输入,返回一个整数的命名或匿名函数,或者 一个程序,在STDIN上使用两个以空格或换行符分隔的整数,并将结果打印到STDOUT。 如果存在库,则不能使用库中的Ackermann函数或超幂函数,但是可以使用任何其他库中的任何其他函数。允许定期取幂。 您的函数必须能够A(m,n)在不到一分钟的时间内找到m≤3和n≤10 的值。从理论上讲,它必须至少终止于任何其他输入:给定无限堆栈空间,本机Bigint类型以及任意长时间,它将返回答案。编辑:如果您的语言的默认递归深度过于严格,则可以重新配置它而无需花费任何字符。 字符数最少的提交将获胜。 以下是一些值,以检查您的答案: A | n=0 1 2 3 4 5 6 7 8 9 10 -----+----------------------------------------------------------------- m=0 | 1 2 3 4 5 6 7 8 9 10 11 1 | 2 3 …

30
196算法代码高尔夫
为196算法编写一个简短的程序。该算法从整数开始,然后向其加反数,直到达到回文。 例如 input = 5280 5280 + 0825 = 6105 6105 + 5016 = 11121 11121 + 12111 = 23232 output = 23232 输入项 一个不是lyrchrel数的整数(也就是说,在此算法下,它最终会产生回文,而不是无限地继续) 输出量 回文达到了。

30
生成帕斯卡三角形
Pascal的三角形是从第一行的1开始生成的。在随后的行上,该数字由在其左右上方正上方的两个数字之和确定。 为了演示,这是Pascal三角形的前5行: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 挑战 给定输入n(但是,使用您选择的语言提供的最方便),请生成Pascal三角形的前n行。您可以假设n是一个介于1和25之间的整数(包括1和25)。每行之间必须有一个换行符,并且每个数字之间必须有一个空格,但是除此之外,您可以随意设置其格式。 这是代码高尔夫球,因此最短的解决方案是成功的。 示例I / O > 1 1 > 9 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 …

15
解锁你的锁
您已使用3位数的密码锁锁定了自行车。现在您想去兜风,需要在以下程序的帮助下将其解锁。 输入项 第一个参数 处于锁定状态的锁的数字组合。它必须不同于第二个参数(= 解锁状态的组合)。(否则您的自行车可能会被盗!) 范围000..999。不能省略前导零。 第二个参数 处于解锁状态的锁的数字组合。此值是您的目标。 范围000..999。不能省略前导零。 输出量 每次“旋转”之后,组合锁的每个状态的列表,包括初始状态(始终为第一个参数)和最后一步(始终为第二个参数)。 算法 您开始逐个“旋转”第一个数字,直到在解锁状态下到达正确的数字为止。但是,由于您了解整个解锁代码,因此可以在需要最小旋转量的方向上旋转数字,以达到处于解锁状态的数字。如果是平局,您可以选择自己喜欢的方向。 当您到达正确的第一位数字时,请从第二位开始相同的过程,然后从第三位开始。 数字顺序应理解为圆: ... 9 0 1 2 3 4 5 6 7 8 9 0 1 2 ... 这意味着从1到9的最小旋转量不是 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 = …

11
我的数组中有回声…我的数组中有回声…我的数组
救命!我的某些数组中似乎有一个令人讨厌的回声,我想摆脱它。发生这种情况时,原始数组会在中间的某个位置重复自身,从而使这些值彼此相加。 例如,数组[ 422, 375, 527, 375, 859, 451, 754, 451 ]包含自身的回声,如下所示: [ 422, 375, 527, 375, 859, 451, 754, 451 ] <-- array with echo (input) [ 422, 375, 105, 0, 754, 451 ] <-- original array (output) [ 422, 375, 105, 0, 754, 451 ] <-- echo of original …

15
靠近原点的三角格点
背景 甲三角形网格是由边长为1的等边三角形定期平铺的平面形成一个网格下面的图片是一个三角形的网格的例子。 甲三角晶格点是一个三角形形成三角格子的一个顶点。 的原点是在平面上,这是三角晶格点中的一个固定点。 挑战 给定一个非负整数n,请找出其与原点的欧几里得距离小于或等于的三角形格点的数量n。 例 下图是一个示例n = 7(为方便起见,仅显示60度区域,以A点为原点): 测试用例 Input | Output --------------- 0 | 1 1 | 7 2 | 19 3 | 37 4 | 61 5 | 91 6 | 127 7 | 187 8 | 241 9 | 301 10 | 367 11 | …

18
计算电话号码(包括字母)中的旋转拨号脉冲
在您的祖父母节那天,使用旋转式拨号拨打电话号码是这样的: 要拨出每个数字,将手指放在相应的孔中,将其拉到手指挡块上,然后松开。一种机制将使转盘旋转回到其静止位置,并且电话将断开并重新连接电路指定的次数,从而发出喀哒声。 拨数字N需要N个这样的“脉冲”,但N = 0(十个脉冲)除外。 旋转电话的特性是大数字(8、9、0)的拨号时间比小数字(1、2、3)长。这是绘制早期区号地图时的重要考虑因素,也是为什么人口稠密的纽约市(和电话线)的密度为212(仅5个脉冲),而稀疏的阿拉斯加却有907(26个脉冲)。当然,当按键式拨号变得流行时,所有这些都变得无关紧要。 挑战 用尽可能少的字节写一个程序或函数,该程序或函数将包含电话号码的字符串(或字符序列)作为输入,并输出其旋转拨号脉冲数。这些计数如下: 位数 数字1-9计为该脉冲数。 数字0计为10个脉冲。 字母 请注意,表盘上的数字2-9具有与之关联的拉丁字母。这些最初是用于命名交换的,但后来被重新分配给电话词和文本消息输入系统。 您必须使用E.161将字母分配给数字来支持电话号码中包含字母: A,B,C = 2 D,E,F = 3 G,H,我= 4 J,K,L = 5 M,N,O = 6 P,Q,R,S = 7 T,U,V = 8 W,X,Y,Z = 9 您可以假定输入已经被大写或小写了。 其他字符 您必须允许任意使用字符()+-./和空格作为格式分隔符。您可以选择允许任何非字母数字字符用于此目的,如果是更容易实现。 这些字符不会增加脉冲计数。 范例程式码 Python中的非查询表和函数: PULSES = { '1': 1, '2': 2, …
34 code-golf  number 

30
P Pr Pref Pref Prefi Prefixe Prefixes
给定一些有限列表,以其长度的升序返回所有前缀的列表,包括一个空列表。 (基本实现Haskell函数inits。) 细节 输入列表包含数字(如果方便的话,还可以输入其他类型)。 输出必须是一个列表列表。 提交可以但不必一定是函数,可以使用任何默认的I / O。 有一个CW答案为所有平凡的解决方案。 例 [] -> [[]] [42] -> [[],[42]] [1,2,3,4] -> [[], [1], [1,2], [1,2,3], [1,2,3,4]] [4,3,2,1] -> [[], [4], [4,3], [4,3,2], [4,3,2,1]]

11
我撕了多少页?
上个月,我从图书馆借了很多书。他们都是好书,充满了情感和情节扭曲。不幸的是,有时我会非常生气/悲伤/失望,所以我撕了一些纸。 现在图书馆想知道我为每本书撕了多少页。 您的目标是编写一个程序,该程序以逗号分隔的数字列表作为输入,并打印我可能撕裂的最小和最大页数。每行代表一本书,每个数字代表该书中缺少的一页。 输入示例: 7,8,100,101,222,223 2,3,88,89,90,103,177 2,3,6,7,10,11 1 1,2 输出示例: 4/5 5/6 3/6 1/1 1/2 4/5表示我可能已经撕掉4页或5页,具体取决于这本书的页码从哪一侧开始。一个人可能已经撕掉了6/7页,8/9页,100/101页和222/223页(4页)。或者,可以撕下第7/8页,第99/100页,第101/102页,第221/222页和第223/224页(5页)。 请记住,书页总是有正面和反面。本书的页码也不同。有些书的左页有偶数页码。一些在正确的页面上。从左到右阅读所有书籍。 以字节为单位的最短代码获胜。在严格的I / O格式不是必需的。您的程序必须能够将一本或多本书籍作为输入。玩得开心。
34 code-golf 

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.