编程拼图和代码高尔夫

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

30
生成雷卡曼的序列
Recamán的序列(A005132)是一个数学序列,定义如下: A(0) = 0 A(n) = A(n-1) - n if A(n-1) - n > 0 and is new, else A(n) = A(n-1) + n 上面漂亮的LaTex版本(可能更易读): A(n)=⎧⎩⎨0A(n−1)−nA(n−1)+nif n=0if A(n−1)−n is positive and not already in the sequenceotherwiseA(n)={0if n=0A(n−1)−nif A(n−1)−n is positive and not already in the sequenceA(n−1)+notherwiseA(n) = \begin{cases}0 & \textrm{if …

13
滚龙与地下城骰子
我想玩龙与地下城,但我没有任何骰子!您的挑战是掷出一些D&D骰子。 Backus-Naur格式的输入格式规范为: <valid-input> ::= <opt-integer> "d" <integer> <opt-modifier> <opt-integer> ::= | <integer> <opt-modifier> ::= | "+" <integer> <integer> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | <integer> <integer> 之前的可选整数 d是掷骰子的数量;它必须至少为1,1如果未提供,则默认为。 紧随其后的必需整数 d是每个芯片的边数;至少应该是1。每个骰子的边都是从开始的不同的连续正整数1。 可选修饰符可以是 +0,+0如果未指定,则默认为。 例如,对于input 2d10+5,您生成两个从1到10(含1和10)之间的随机数,将它们加在一起,然后加5。然后将输出结果。 如果您收到无效的输入,如2d,d20+,0d4,2d5+1+2,2+2,或其他任何东西,不适合这种格式,你必须输出“ …
20 code-golf  random 

1
评估正则表达式可以匹配的字符串数
在一个有几个人的聊天室中,我和他们之间出现了一个有关正则表达式可以匹配多少个字符串的话题。 您的任务是构建一个可以回答该问题的程序。 您的程序将接受本文档中定义为“扩展正则表达式”的任何正则表达式作为输入,例如: ^[A-Za-z0-9]{8}$ 并输出与该表达式匹配的可能字符串的总数,infinity如果有无限多个,则输出: 218340105584896 too many如果与正则表达式匹配的字符串超过2 63 -1,则您的程序也可能输出;但是,它不能输出infinity除非实际上有无限多的字符串,否则。 做上述事情的最短程序胜出。
20 code-golf 

7
朱莉娅打高尔夫球的秘诀
您在朱莉娅打高尔夫球有哪些一般提示?我正在寻找可以应用于编码高尔夫球问题的想法,这些想法至少在某种程度上是特定于Julia的(例如,“删除评论”不是答案)。
20 code-golf  tips 

2
画犹他茶壶
最初由Martin Newell创建的犹他州茶壶是测试3D图形程序的便捷对象。 任务是在透视投影中创建茶壶的线框图像。为了鼓励使用源代码应用程序,可以将查看和摄像机控制隔离开来,并从计数中排除。这样一来,可以修改参数和输入文件,并重新使用代码以生成各种图像,但是不必创建能够接受复杂命令行参数等的完整实用程序。寻求“黑客”的平衡。 参考 StackOverflow:Bezier修补程序如何在犹他州茶壶中工作? 因此,这里有三个子任务: 以原始格式读取茶壶数据。 使用deCasteljau拆分或其他方法细分补丁数据。其他方法是使用Bezier基础矩阵并评估多项式(标准参考,例如Foley和van Dam,Newmann和Sproull)或Bernstein基础方法(这仍然超出我的范围)。 将这些点投影到2D(如果该语言本身不支持3D),并绘制一个小补丁的轮廓,如从Eye点看到的那样,该点的视图以LookAt点为中心,并且其垂直轴与茶壶的垂直轴对齐(即,从有利的位置将其“垂直”绘制)。 假设从文件读取面向行的文本数据没什么大不了,那么这个挑战实际上就是动手使用Bi-Cubic Bezier补丁数据。 由于对背面剔除进行简单的常规测试是不够的(贴片并非都朝外),因此无需去除任何隐藏线或表面。作为线框,背面看起来应该很好。可以通过根据与眼睛的距离调整线宽来改善外观,但这并不是绝对必要的(我自己的程序不会这样做)。 这既是代码高尔夫,又是罗塞塔石碑。参加高尔夫比赛的答案应包括正常计数。但是,即使不是特别简短,也极力鼓励以非常规语言提交。 对于Kolmogorov复杂性爱好者,这里有一个更简洁的数据集,可以通过增加旋转次数和修补程序的镜像来重建整套数据集。在吉姆·布林(Jim Blinn)的“图形流水线之旅”中,利用各个补丁具有旋转或其他对称性这一事实,提供了一种更为简洁的生成方法。整个身体(或盖子)可以通过绕y轴旋转的单个Bezier曲线来描述。喷口和手柄可通过其轮廓的两条曲线来描述,然后选择中间控制点以近似于圆形挤压。

6
在模式中找出奇数字符
输入值 第一行将是重复一定次数的某个字符串。例如,它可以是abcabcabcabc,[];[];[];等。例如:1231231231。总是找到最短的字符串;例如,如果该行是22222,则该字符串是2,不是22或22222或其他任何字符串。该字符串将始终重复至少2次。 所有后续行将是该模式偏移任何数字。例如,可能是: abcabcabc cabcabcab bcabcabca (偏移1),或者可能是: abcdefabcdefabcdefabc cdefabcdefabcdefabcde efabcdefabcdefabcdefa (偏移量为4)。 输入中的字符之一将是错误的。(保证不在第一行。)例如,在此输入中: a=1a=1a=1 =1a=1a=1a 1a=11=1a= a=1a=1a=1 =1a=1a=1a 在1第3行是奇数一个出来。 输出量 您必须输出奇数之一的(从左上角开始,从零开始)。例如,在上述输入中,对应的输出为4,2。您也可以输出4 2,或"4""2"什至[[4],[2]]或任何其他格式,只要您可以知道输出应该是什么即可。 测试用例 输入: codegolfcodegolfco egolfcodegolfcodeg lfcodegolfcodegoff odegolfcodegolfcod golfcodegolfcodego fcodegolfcodegolfc 输出: 16,2 输入: ][[][][[][][[][][[][][[ [][][[][][[][][[][][[][ [][[][][[][][[][][[][][ [[][][[]]][[][][[][][[] 输出: 8,3 输入: ... . . ... 输出: 1,1 输入: ababa babab ababb babab …
20 code-golf 

17
让三角学开始吧!
介绍: 所述正弦的x由下式给出: sin(x) = x - x^3/3! + x^5/5! - x^7/7! + x^9/9! - x^11/11! // and more follows... 的余弦的x由下式给出: cos(x) = 1 - x^2/2! + x^4/4! - x^6/6! + x^8/8! - x^10/10! // and more follows... 任务: 给定的值x和n,写程序(无功能等)来输出的值sin(x)和cos(x)正确高达n上述公式的条件。假设x以弧度为单位。 输入: x n 甲十进制数x(具有高达3个小数位)和一个整数n。输入必须在标准输入或提示对话框上(如果您的语言不支持标准输入) 输出: [sin(x)] [cos(x)] 两者的价值sin(x)和cos(x)应四舍五入至小数点后6位。如果sin(x)是0.5588558855(10个十进制数字),则应四舍五入为0.558856(6个十进制数字)。舍入必须最接近此Wiki文章表的第五列“舍入到最接近”中所述。 限制条件: 1 <= …
20 code-golf  math 

3
JSFuck高尔夫-Hello World
JSFuck是一种深奥的语言,在该语言中,任何Javascript语句都可以准确地复制到另一个仅使用6个字符的有效Javascript程序中[]()!+。 当给JSFuck转换器输入时alert("Hello World!"),它会生成一个代码块,该代码块长22,948个字符。因为该程序使用了大量的自动转换来创建该块,所以我相信使用手动优化可以使代码更短。 您的任务是构建alert("Hello World!")仅使用字符执行任务的Javascript程序[]()!+。这样做的最短代码将获胜。

4
查找一组2D点的凸包
当您将一组钉子钉在木板上并用橡皮筋包住时,您会得到一个凸包。 您的任务(如果您决定接受)是找到给定2D点集的凸包。 一些规则: 作为函数编写,该点的列表坐标(任意格式)是参数 输出必须是顺时针或逆时针列出的凸包中的点列表,从任何一个开始 输出列表可以采用任何合理的格式,其中每个点的坐标都可以清楚地区分。(例如,不是一个模糊列表{0.1、1.3、4,...}) 如果凸包的一段中的三个或更多点对齐,则输出中仅应保留两个极端 样本数据: 样品0 输入: {{1, 1}, {2, 2}, {3, 3}, {1, 3}} 输出: {{3, 3}, {1, 3}, {1, 1}} (这些数字只是说明性的) 样品1 输入: {{4.4, 14}, {6.7, 15.25}, {6.9, 12.8}, {2.1, 11.1}, {9.5, 14.9}, {13.2, 11.9}, {10.3, 12.3}, {6.8, 9.5}, {3.3, 7.7}, {0.6, 5.1}, {5.3, 2.4}, …

18
只使用有效的代码写一个简短的故事
我想看到的是您尝试编写一种“故事”,该故事具有相当容易理解的含义,而且还创建了一个有效的代码片段。例如,此(BBC)基本代码: LET customer = "sober" REPEAT INPUT "more beer" UNTIL customer = "drunk" (基于http://img.rakuten.com/PIC/12184048/0/1/300/12184048.jpg的想法) 规则/准则: 该代码必须以您指定的语言有效-任何人都必须能够运行它而无需创建任何花哨的东西 可以使用字符串,注释或允许将任意文本添加到代码中的任何内容,但每个字符串最多可包含3个单词(并且您不能同时放置多个字符串或注释) 您的代码在执行时不必产生任何有意义的输出。只要代码有效并且用英语阅读时,它就代表了明智的*,它甚至可以是无限循环。 您的代码中的任何插入都会在故事中被忽略。 不需要定义变量。您在此处编写的代码只是一个代码片段。调用未定义的变量/关键字/标签/等会损失5分。虽然。 对于您使用的每个内置关键字/语句/函数/等,您将获得15分。这些功能包括for和if,以及内置功能,例如replace()。库不算作内置函数,但您可以自由使用它们。 代码中的每个字母,数字或下划线都会得到1分。 对于与故事无关()的每行代码行,或使用英文中没有意义()的关键字/陈述/等,您将损失20分,并且涉及的字符将不会计入每个字母1分/数。为了使其与需要数据类型的语言(例如int在定义变量时)公平,数据类型将被完全忽略。这意味着他们作为关键字不会获得10分,他们不会为所涉及的角色获得分数,但是也不会造成分数损失。 不允许通过插入注释以“填空”来制作一些有效的英语。 由于这是一场人气竞赛,每投票一次,您将获得25分。 确保指定您的代码使用哪种语言,以及用于计算答案获得的分数的公式。 如果使用上述系统,则得分最高的答案将获胜。 使用此系统,上面的示例代码将获得4*15 + 53*1 = 113起点。 (*)过analysation /客体部分:保持这一尽可能客观,“明智的”或“不相关”意味着:如果一段代码使用的话是不是英语,这不是有效的(例如,const或者int是不是英语单词,但foreach还是typeof有2个英语单词合并,因此是好的)。此外,即使您使用有效的英语单词(例如print或)echo,这些单词也必须符合故事的原始含义(因此,“在纸上放墨水”和“反射声音”,而不是“在屏幕上显示”)。“适合”是指故事的主题必须与之相关。 我希望最后的“免责声明”符合定义客观标准的要求。

9
寻找皮萨诺时期
的斐波那契序列是众所周知的序列,其中每个条目的前两个与前两项的总和是1。如果我们把每学期的模一个恒定的顺序将成为周期性的。例如,如果我们决定计算序列mod 7,我们将得到以下结果: 1 1 2 3 5 1 6 0 6 6 5 4 2 6 1 0 1 1 ... 它的周期为16。定义了一个相关序列,称为Pisano序列,使得该序列是a(n)模数为n时斐波纳契序列的周期。 任务 您应该编写一个程序或函数,给定的程序或函数n将计算并输出Fibonacci序列mod的周期n。那是Pisano序列中的第n项。 您只能在范围内支持整数 0 < n < 2^30 这是一场代码高尔夫竞赛,因此您应努力使按字节计分的源代码的大小最小化。 测试用例 1 -> 1 2 -> 3 3 -> 8 4 -> 6 5 -> 20 6 -> 24 …

10
利用“自由空白”
假设一个代码高尔夫挑战在程序长度中不计空格。通过将您的脚本编码为空白来欺骗该系统,并查找可解码并执行嵌入式空白的脚本。 例 我对JBernardo的Meta Golf Challenge的解决方案是将Sage(或Python)代码编码为空白,然后将解码器作为高尔夫球。 s = ' ' for c in '<lots of whitespace>'.split(s): s+=chr(len(c)) exec s 编码是采用脚本,在换行符前添加前缀,对于c脚本中的每个字符,均使用输出ord(c)选项卡,后跟空格。由于我使用的是Python,并且必须以空格开头,因此必须在换行符前加一个换行符s。 计分 完整的解决方案包含对您使用的编码的描述(如果比较复杂,请提供脚本),以及“解码并执行”脚本。您的分数是“解码并执行”脚本中非空格字符的数量。 禁止使用空格(语言) 而且,任何具有完整运算符集且仅使用空格字符的语言都是不允许的:我将接受最低的非零分数。

14
编写一个Playfair加密程序
编写一个程序,该程序需要两行输入,并根据Playfair加密技术将第一行用作关键字来加密第二行。 Wikipedia详细描述了Playfair加密,但是为了避免歧义,这里有一个简短的摘要: 1.生成密钥表: 用替换J关键字中出现的所有I,然后去除所有非字母字符和重复字符。插入5×5加密表中,用其余的字母填充剩余的单元格(除非J;我们不喜欢J)。 例: S T A C K O V E R F Stack Overflow --> STACKOVERFLW --> L W B D G H I M N P Q U X Y Z 2.准备要加密的消息 将每个替换J为I,剥离所有非字母字符并分成对,使用可以X将包含相同字母的任何对断开两次。如果结尾的字母数为奇数,请X在末尾添加。(请注意:数字必须完整拼写-ONETWO,THREE,等等-但是你可以认为这已经为你做了。) 例: In: The cat crept into the crypt, crapped, and crept out again. …

6
平行投影体素地形生成器
您的工作是生成一个高度图,并将其显示为平行投影的体素景观。规则如下: 景观的(高度图)必须随机生成 您还必须描述所使用算法的工作原理,以便每个人都可以在这里学到新知识 您还必须生成图像或在屏幕上显示生成的风景 生成的图像必须进行平行投影(因此不能透视),并且只能包含体素(因此必须由小盒子组成) 这是一场人气竞赛,因此您可能需要在程序中添加一些其他功能以获得更多支持。 获胜者是上次提交有效作品后7天获得最高评价的有效答案。所有有效的提交都必须遵守规则,包括所用算法的描述。您可以添加不遵循某些规则的其他功能(例如添加透视模式),但是在这种情况下,它们必须是可选功能(例如,将其关闭时,结果应遵循所有规则) 我提交的内容无效。 结果图像示例如下: 从这里拍摄的图像 如果您需要一些算法,请点击此处

3
1P5:换词器
这是首次定期Premier Programming难题推送的一部分。 游戏 提供了相同长度的开始和结束词。游戏的目的是使用最少的步骤,将起始单词中的一个字母更改为另一个有效单词,重复此步骤直到到达终止单词。例如,给定单词TREE和FLED,输出将是: TREE FREE FLEE FLED 2 技术指标 有关OWL或SOWPODS的维基百科文章就单词列表而言可能是有用的起点。 该程序应支持两种选择开始和结束词的方式: 用户通过命令行,stdin或任何适合您选择的语言的方式指定(只需提及您在做什么)。 从文件中随机选择2个单词。 起始词和结束词以及所有临时词的长度均应相同。 每个步骤都应在其行上打印出来。 输出的最后一行应该是开始和结束单词之间所需的临时步骤数。 如果在起始词和结束词之间找不到匹配项,则输出应由3行组成:起始词,结束词和OY词。 在答案中包括大O符号 请包括10个唯一的开始和结束词对(当然还有它们的输出)以显示程序产生的步骤。(为节省空间,虽然程序应在单独的行上输出这些行,但是您可以将它们合并为一行以进行发布,用空格和每次运行之间的逗号替换新行。 进球/获胜标准 最快/最好的Big O解决方案将在一周后产生最短的过渡步骤。 如果由大O标准导致平局,则最短的代码将获胜。 如果仍然有平局,则第一个达到最快和最短修订版本的解决方案将获胜。 测试/样品输出 DIVE DIME DAME NAME 2 PEACE PLACE PLATE SLATE 2 HOUSE HORSE GORSE GORGE 2 POLE POSE POST PAST FAST 3 验证方式 我正在研究可用于验证输出的脚本。 它会: …

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.