Questions tagged «code-golf»

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

3
数字种族
您应该编写一个程序或函数,给出不同的一位正整数的开始顺序,并以轨迹的长度作为输入输出,或者返回数字的结束顺序。 输入[5,1,2,6,7] and 14定义以下种族: -------------- 76215 -> -------------- 比赛规则 赛道回绕,数字可以走多圈。 步骤的顺序是循环的,并且基于起始位置。在我们的例子中5 1 2 6 7 5 1 2 ...。 同一位置不能有多个数字。 每个数字digit_value每步都有一个单元格速度。超过一个数字或一个连续的数字块需要多花一步。如果数字没有所需的速度,它将在(一个或多个)数字之前停止。例子: [41 ] => [ 1 4 ] 4 overtakes 1 [2 1 ] => [ 21 ] 2 can only move 1 as it can't move 3 to overtake …

3
您称它为居中,我称其为Code Golf
“让我们面对现实吧,对齐的图像就像来自天堂的小礼物。欢迎,但出乎意料。” -地球位 赢得挑战者可获得10000点声望。 规则: 1)您将生成一个程序。 2)输入将是图像,但是输入是作为文件传递还是由数字列表决定。 3)输出将是一个文件,该文件在用油漆(或类似物品)打开时将显示对齐的图像。 4)画布大小将始终在100 x 100和2000 x 2000像素之间。它将始终是矩形,但并不总是正方形。 5)没有图像的硬编码或时髦的URL魔术。 6)无需使用外部库。 集中化指南(Joshpbarron变体) 如果轴上的第一个白色(255,255,255,> 0 rgba)或透明(x,y,z,0 rgba)与画布边缘的距离相等(正负1个像素),则图像将被定义为居中。 这可以通过以下方法来实现(并将通过以下方法进行验证)。 1)想象一下对象周围的边界框。(添加黑线以寻求帮助) 2)移动对象,直到对象的边缘与画布的适当边缘相等的距离。 3)现在忘记黑线。 输入: 输出: 这里有更多输入。 以及各自的输出在这里。 +10000代表是谎言。

3
ASCII L系统渲染器
背景 一个L-系统(或系统Lindenmayer)是平行重写系统,除其他外,可以很容易地用于模型分形。这个问题涉及确定性,上下文无关的L系统。它们由符号字母,初始公理字符串和将每个字母符号映射到新字符串的一组重写规则组成。规则并行应用于公理,生成一个新字符串。然后重复此过程。 例如,具有公理“ A”和规则A = ABA; B = BBB的系统生成字符串“ ABA”,“ ABABBBABA”,“ ABABBBABABBBBBBBBBBBBBABABBBABA”等字符串的序列。为简洁起见,我们没有明确提及定义L系统时的字母。此外,假定没有显式重写规则的任何符号都是不变的(即,符号A的默认规则为A = A)。 L系统可以使用乌龟图形的形式进行可视化。按照惯例,乌龟开始朝右。然后,通过重复其符号来绘制字符串:F表示“向前拉一个单位”,G表示“向前拉一个单位”,+表示“向左旋转一个角度单位”,而-表示“向右旋转一个角度单位”。单元”。字符串中的所有其他符号将被忽略。出于这个问题的目的,假定角度单位始终为90°。 任务 给定任何L系统的规范和多次迭代后,您的程序应使用箱形绘图字符输出结果字符串的ASCII渲染(如上所述)。 参数以空格分隔的字符串形式传递,该字符串包括公理,重写规则(作为等式的列表)和重写迭代次数。例如,输入“ FF = FGF; G = GGG 2”生成字符串“ FGFGGGFGF”,因此以适当的间距绘制四行。 L系统使用的符号可以是除空格和分号之外的任何ASCII字符。每个符号最多指定一个显式规则(默认重写规则是如上所述的身份映射)。 您可以假定输出将始终包含至少一个F。 输出应使用以下UNICODE框形图字符表示可视化效果:─(U + 2500),│(U + 2502),┌(U + 250C),┐(U + 2510),└(U + 2514) ,┘(U + 2518),├(U + 251C),┤(U + 2524),┬(U + 252C),┴(U + 2534),┼(U …

6
重叠圆
应该写的程序或函数,它给出一个N由N等间隔的正方形网格和固体内切圆的输出或返回其由实心圆圈部分或完全重叠的方格的数目。 0大小的重叠(即当圆仅接触一条线时)不计算在内。(这些重叠出现在例如)N = 10。 例 N = 8 (64 squares), Slices = 60 输入值 一个整数N > 0。(网格将具有N * N正方形。) 输出量 整数,实心圆形切片的数量。 例子 (输入输出对) Inputs: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Outputs: 1 4 9 16 25 36 45 60 77 88 …

1
编写Kolmogorov复杂度求解器
该柯尔莫哥洛夫复杂的字符串的小号最短程序的长度P,写一些编程语言大号,其输出正好是小号。 (是的,真正的定义比较正式,但这足以应付挑战。) 你在这个挑战任务是写的最短的“柯尔莫哥洛夫复杂解算器”,就是写在程序大号,它接受一个字符串本身小号,并返回最短P写在大号输出小号。 天真的方法是遍历所有长度为1的程序,然后是所有长度为2的程序,然后是所有长度为3的程序,依次类推,依次运行每个程序并测量输出,直到找到输出S的程序。这种方法的问题在于其中某些程序可能永远不会停止运行,这意味着求解器本身可能永远也不会停止。而且由于停顿问题,没有确定方法可以避免程序无法停止。 一个简单但不完善的解决方案是对每个潜在P的执行时间设置时间限制。可能不会暂停的程序可能会被跳过,但是求解器肯定会停止(假设L中的程序确实可以输出在时限内 S)。 挑战 将您的求解器编写为包含三件事的程序或函数: 字符串 s ^。 正整数 T,它是时间限制(以秒为单位)或一些较小的时间跨度(例如毫秒)。 字符字母的字符串A用于潜在的P的。 并输出仅包含A中字符的最短P,以少于T个时间单位运行,并输出小号。 这是一般的伪代码: Function KolmogorovComplexitySolver(S, T, A): Assign N to 0 Loop until function returns: In any order, iterate over all strings of length N that only contain characters from *A*. Call the current string P: Execute …

5
不明智的位操作
我喜欢打高尔夫球dc,但有时由于dc没有按位操作而感到沮丧。 挑战 提供实现C位操作的相当于提高4层命名的功能&,|,~和^(按位AND,OR,NOT和XOR)。每个函数将使用两个操作数(~仅使用一个),这些操作数至少是32位无符号整数。每个函数将返回与操作数相同的位宽的无符号整数。 限制 您只能使用支持的操作dc。这些是: + - * / 算术加法,减法,乘法和除法 ~ 模(如果您的语言支持,则为divmod) ^ 求幂 | 模幂 v 平方根 > >= == != <= < 标准平等/不平等经营者 >> <<位移位运算符。 dc没有这些功能,但是由于它们是通过除以2的幂进行琐碎实现的,所以我将允许这些。 dc我使用(递归)宏和(不等式)操作笨拙地构建了控制结构。您可以使用您的语言具有的任何内置控制结构。 您也可以使用逻辑运算符 && || !,即使这些运算符不能直接在中使用dc。 你不能使用位运算符 &,|,~和^或平凡实现它们的任何功能。 另外,您不得使用内置的字符串转换基础运算符或函数。 还请考虑提供一个测试程序或在线编译器代码段(不包含在高尔夫球成绩中)以帮助您验证答案。

7
用打乱的钥匙打字
您的朋友不太擅长使用计算机,所以有人打扰他键盘上的字母(az)成为一个恶作剧。当他坐下来尝试在键盘上键入自己的名字时,他意识到字母被打乱了,要求您的帮助。 您很聪明,所以您知道,如果他键入他的名字,然后重复输入屏幕上出现的内容而不是他的名字,他最终将成功输入他的名字。您也很友善并重新排列了按键,但想知道要成功旋转几圈。 您的任务是编写给定字母改组的程序或函数,而朋友的名字将计算转数。 输入详细信息: 以方便您的语言的结构形式输入了两个字符串作为输入。 第一个字符串是按照旧字母的字母顺序列出的新小写字母的列表。(第一个字符位于的位置a,最后一个字符位于的位置z。)字符串中总是会发生一些变化。 第二个字符串是名称。它可以包含任何可打印的ascii字符,但是只有大写和小写字母字符会被打乱。这个名字本身可能不会被改组。 输出详细信息: 输出是单个整数,最小所需匝数。换行符是可选的。 例子: 输入:( 'abcfdeghijklmnopqrstuvwxyz' 'Mr. John Doe'更改了d,e,f个位置) 输出:( 3显示的名称是:Mr. John Fod=> Mr. John Eof=> Mr. John Doe) 输入: 'nopqrstuvwxyzabcdefghijklm' 'Mr. John Doe'(ROT13密码) 输出:( 2任何包含字母的输入名称都会2四舍五入以产生原始名称。) 输入: 'aebcdjfghiqklmnopzrstuvwxy' 'John Doe' 输出: 140 这是代码高尔夫球,因此最短的条目将获胜。

9
将人类可读的时间间隔转换为日期分量
挑战 编写将人类可读的时间间隔转换为以下形式的日期部分的最短程序: {±YEARS|±MONTHS|±DAYS|±HOURS|±MINUTES|±SECONDS} 样品盒 每个测试用例都是两行,输入后跟输出: 1 year 2 months 3 seconds {1|2|0|0|0|3} -2 day 5 year 8months {5|8|-2|0|0|0} 3day 9 years 4 seconds -5 minute 4 years 4 years -3seconds {17|0|3|0|-5|1} 规则 你不能使用 strtotime或任何内置函数来完成整个工作。 最短的代码获胜(字节) 您可以将输出打印到stdout或文件中,结果也可以由函数返回,这取决于您 令牌可以是单数或复数形式。 组件可能是随机的 数字和令牌之间可能没有空格 时间间隔为正时(输入和输出),符号是可选的 如果组件出现多次,则应添加值 每个组件都有自己的符号 组件应分开处理(例如80 minutes在输出中保留为80) 输入保证为小写 高尔夫快乐!
16 code-golf  string  date 

2
得分游戏《王国建设者》
我想在这里尝试一种新的代码高尔夫形式。与奖金类似,并非必须完成挑战的所有部分,但每个答案都必须实现一定规模的子集(并且每个答案都必须实现一个核心)。因此,除了打高尔夫球之外,这项挑战还涉及选择一套可以完美搭配的功能。 规则 Kingdom Builder是一种棋盘游戏,在(尖顶)十六进制网格上播放。该评估板由四个(随机的)象限组成,每个象限具有10x10的十六进制单元(因此完整的评估板将为20x20)。出于此挑战的目的,每个十六进制单元格包含水(W),山(M),城镇(T),城堡(C)或为空(.)。所以象限看起来像 . . W . . . . . . . . M W W . . . . . . . M . . W . . . T . M M . W . . . . . . . . M . W W …

5
完美玩Wythoff的Nim
您的目标是为Wythoff的Nim游戏编写一个完美的玩家。 威索夫的尼姆规则 Wythoff的Nim是确定性的两人游戏,有两堆相同的计数器。玩家轮流进行以下操作之一: 从第一堆中删除一个或多个计数器 从第二堆中删除一个或多个计数器 从第一堆和第二堆中删除相同数量的计数器(一个或多个)。 当然,筹码不能为负,但可以为0。无论哪个玩家移除最后一个计数器,整体都会获胜。 对于更注重几何的人,这里是您可以在此applet上玩的等效游戏。单个女王从四分之一无限棋盘的某个正方形开始,该正方形的角在左下角。玩家交替移动皇后,其移动方式类似于国际象棋皇后,但仅限于三个方向: 下 剩下 斜向左下 将女王移到角落的人都将获胜。 将女王的坐标(带有角(0,0))与各个桩的大小相关联,很容易看出两个游戏是相同的。 完美发挥 (如果您熟悉完美比赛和获胜手法的概念,则可以跳过此步骤。) 由于Wythoff的Nim是一种有限的确定性游戏,因此它具有完美玩法的概念。完美的玩家是一种始终会从理论上获胜的位置获胜的策略,这意味着存在一种能够确保获胜的策略的位置。 作为获胜策略,只要将刚移动的玩家始终移动到理论获胜位置即可,因此该玩家不会继续前进。这些获胜职位中的第一个(也称为冷职位)是(0,0), (1,2), (2,1), (3,5), (5,3)。有关为Wythoff的Nim寻找获胜策略的算法的解释以及生成获胜位置的公式,请参阅Wikipedia文章。 计划要求 编写程序或函数时,将一个位置作为输入,并以该位置之后的位置形式输出获胜的位置。最少的字节数获胜。 如果不存在获胜举动,即该头寸是理论上的亏损,则您的程序应表明是这样,否则将被没收。 您的程序必须在合理的时间内运行。因此,指数递归游戏树搜索将无法满足要求。如果您想对策略进行预计算和硬编码,那很好。 输入值 一对(i,j)非负数,代表堆大小,每个最多为99。它可以是两个数字,一个元组,一个列表或您喜欢的任何容器。 输出量 移动后打印或输出位置,再次以两个数字或一个容器的形式输出。这必须是合法转移到获胜职位。如果有多个这样的举动,那么任何一个都可以,但是只有一个。 如果没有获胜的举动,则必须在输出中指出。只要不是合法位置,并且对于每一个丢失的输入都是相同的,则任何输出False(None,,0或)(-1,-1)都可以。 运行示例 f(5,0) = (0,0) f(2,2) = (1,2) # Or (2,1) or (0,0) f(1,2) = False f(13,9) = (13,8) # Or …

17
查找序列中具有最大1的子字符串
介绍 我想找到最子串1的在序列0的和1的。 输入值 您的程序有两个输入,即序列和子字符串长度。 该序列是任意数量的0“和1”: 01001010101101111011101001010100010101101010101010101101101010010110110110 的子串长度是任意的正的非零整数: 5 输出量 您的程序应输出给定长度的第一个子串的起始索引,该子串包含最多1的。使用以上输入,输出为: 10 字符串中的第一个字符从索引处开始0。 计分 最短的代码胜出! 规则 您的程序必须始终为任何有效输入输出正确的索引。 您可以从默认选项为正的任何答案中选择输入/输出方法。请指定您在答案中选择的方法。

2
拒绝的好时机
设置 假设你给ñ保险丝,1≤ ñ ≤5,每一个都是一米长,其中每个保险丝具有的相关燃烧率ñ每米d小时。 保险丝可以在一端或两端点亮,然后在一端或两端熄灭,重新点亮,重新熄灭等,直到保险丝完全耗尽为止。您可以立即点亮和熄灭保险丝,并且可以观察到保险丝完全耗尽(烧毁)的确切时间。 保险丝不能切断,也不能在除其末端以外的任何地方点亮。 通过测量任意两个保险丝点亮/消耗事件之间的时间,这样的设置允许无限精确的计时系统。例如,给定两个保险丝,其每小时的燃烧速度为1米,则您可以精确地测量45分钟(3/4小时) 同时:在两端点亮第一个保险丝,在一端点亮第二个保险丝,并标记时间间隔的开始 消耗第一根保险丝的瞬间(30分钟后)点亮第二根保险丝的第二端 在消耗第二根保险丝的瞬间(15分钟后)标记时间间隔的结束 挑战 给定小时数t的分数,以及代表n个保险丝的确切烧毁率的n 个分数的集合,编写一个程序或函数,如果可以通过系统性地熔断保险丝来精确地测量t小时,则输出或返回真实值。否则为假值。 程序的输入可以是以下任意一项: 形式的命令行参数 TN/TD N1/D1 N2/D2 N3/D3 ... TN/TD N1/D1 N2/D2 N3/D3 ...读取stdin或等效形式的字符串 TN/TD N1/D1 N2/D2 N3/D3 ...作为函数参数传递的形式的字符串 ["TN/TD", "N1/D1", "N2/D2", "N3/D3", ...]作为函数参数传递的字符串数组 在所有情况下,t = TN/ TD,其中TN,TD∈[1,10000]。 同样地,在所有的情况下:燃烧速率为熔丝我 = Ñ 我 / d 我 = N<i>/ D<i>,其中N<i>,D<i>∈[1,10]∀ 我。 …

1
为老板编写英文
您的老板最近了解了这种有趣的编程语言,称为英语。他有这个“革命性”的想法,他想和您一起编码以使编码生产率提高一倍!由于他不是一个精通技术的人,他希望您为此编写一个编译器,以便他也可以编码! 现在,您是个懒惰的程序员,显然不会编写程序来编译这种可笑的复杂语言。相反,您将确保老板的代码中始终存在错误,以使他永远不会进入实际的编译过程,并且卡在修正语法错误而不是编码上。 挑战在于编写一个可以从终端运行的程序,并接受文件路径作为参数。该程序必须: 通过输入错字来修改文件输入。 由于遇到您输入的错字,假装编译失败。 在相同文件的副本上运行该程序不应连续两次引入相同的错字。 为了说明这一挑战,请在此文件上运行程序: Take an array as input. Sort the array. Output the array. 应该按照 Error on line 1: 'Take an arqay as input.' ^ arqay is not a valid identifier. 现在,您告诉程序进行编译的文件应如下所示: Take an arqay as input. Sort the array. Output the array. 以下是有关程序规格的更多详细信息: 您的程序可以假定将老板输入的程序中的任何字符换成其他随机字符都会导致语法错误。您的程序不应使用非字母字符在老板代码中创建错误。您的老板永远不会使用数字或符号,而他会发现有什么问题。您的程序只应在老板程序中的单词上引入错误。不要更改句子或标点符号中的空格。您的程序不应更改老板尝试编译的程序的大小写,这意味着诸如此类arQay的错误是无效的。这可以防止这样的错误take,而不是Take发生或Array代替array。您的程序应通过首先指出错误所在的行来输出错误: Error …
16 code-golf 

10
撤消平方根
您的工作是将小数转换回整数的平方根之和。结果必须具有至少6个有效十进制数字的精度。 输入: 一个数字表示平方根数,一个十进制表示近似数。 输入示例: 2 3.414213562373095 输出:整数分隔的空格,当平方根和加起来时,它们近似于原始十进制,至少精确到6个有效十进制数字。 解决方案中不允许零。 如果有多种解决方案,则只需打印一种。 输出示例(任意顺序): 4 2 这是因为Math.sqrt(4) + Math.sqrt(2) == 3.414213562373095。 这是代码高尔夫。最短的代码(带有可选的奖金)获胜! 总会有一个解决方案,但是如果在没有整数的解决方案的情况下您的程序输出“ No”,则表示-10。此外,如果您的程序打印所有解决方案(用换行符,分号或其他分隔符),而不是仅打印一个,则为-10。 测试用例: 3 7.923668178593959 --> 6 7 8 2 2.8284271247461903 --> 2 2 5 5.0 --> 1 1 1 1 1 5 13.0 --> 4 4 9 9 9 --> 81 …

14
外观:重新讨论Conway
到现在为止,您应该都熟悉Conway序列(又名“观望”序列): 1 11 21 1211 111221 312211 etc 您也可以以任意数字作为起点。让它f(s)成为序列的下一个元素。现在,对于每个给定的s我们都可以找到f(s)。相反的是不是微不足道的:它是不是每一个y可能找到的前身s这样f(s) = y。例如,因为y = 1我们找不到前任。但是,如果长度y是偶数,则可以将其划分为成对的数字,以描述前任的每个部分: 513211 divides in 51,32,11 so: 51 comes from 11111 32 comes from 222 11 comes from 1 put together: 111112221 因此,通过这种方式,我们可以为每个偶数长度定义一个唯一的前任y。 注意:用s这种方法定义的“前任” 通常不满足f(s) = y。 目标 编写一个接受数字串作为输入的函数/程序片段 如果输入字符串的长度为奇数,则计算Conway序列的下一个元素 如果输入字符串长度为偶数,则按上述定义计算输入字符串的前任。 以字节为单位的最短代码获胜。 基于外观序列的最新问题: 看并说顺序 无指向的说出顺序 快速查找外观序列的第n个术语的长度
16 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.