编程拼图和代码高尔夫

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

5
正则表达式高尔夫:意大利对美国的地区
受xkcd漫画启发,我们已经遇到了meta-regex-golf问题 但是,这个正则表达式高尔夫看起来也很有趣!我想区分美国各州和意大利各地区。为什么?我是这两个国家的公民,我总是有这样的烦恼*。 意大利的地区是 Abruzzo, Valle d'Aosta, Puglia, Basilicata, Calabria, Campania, Emilia-Romagna, Friuli-Venezia Giulia, Lazio, Liguria, Lombardia, Marche, Molise, Piemonte, Sardegna, Sicilia, Trentino-Alto Adige/Südtirol, Toscana, Umbria, Veneto 美国的州是 Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware, Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, …

6
检测代码段是什么编程语言
您面临的挑战是将一些源代码作为输入,并输出用哪种编程语言编写。 例如,您可以输入 class A{public static void main(String[]a){System.out.println("Hello, World!");}} 并输出 Java 您的两个主要目标是多样性(可以检测多少种编程语言)和准确性(在检测这些语言方面有多强)。 对于多语种(程序以一种以上的语言有效),您可以决定要做什么。您可以只输出程序认为更可能的语言,也可以输出错误,或者输出一系列可能的选择(可能会得到更多的支持,而不仅仅是错误!)。 这是一场人气竞赛,因为很难指定其他客观的获胜标准。选民,请投票选出它可以检测到多少种语言以及它有多准确。

27
Sierpinski地毯
谁不喜欢一个好的分形?该谢尔宾斯基地毯是分形的典型例子。 要完成此任务,您将需要生成一个地毯类型,并将生成的图像打印到代表水平地毯的stdout(请参见下面的格式示例)。可在此Wikipedia文章上找到步骤。 该值将取自stdin或等效。 例如,输入4将产生4级地毯: ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ …

5
打高尔夫球的技巧
您有什么关于打高尔夫球的一般提示?我正在寻找可以应用于编码高尔夫问题的想法,这些想法至少在某些方面是专门针对脑力劳动的(例如,“删除评论”不是答案)。请为每个答案发布一个提示。

6
热土豆推销员
给定点列表,找到访问所有点并返回起点的最短路径。 该旅行商问题是在计算机科学领域的知名,因为有很多方法来计算/近似它。它已经解决了非常多的问题,但是其中一些最大的问题需要很多CPU年才能完成。 不要被土豆烧死。 Hot Potato游戏是2位以上的玩家在播放音乐的同时绕过一个“土豆”的游戏。目的是将其快速传递给下一个玩家。如果在音乐停止播放时握住马铃薯,那就出门了。 Hot Potato Salesman的对象是: 给定一组100个唯一点,请以更好的顺序返回这些点(较短的总距离(进一步定义)。这会将问题“传递”给下一个玩家。他们必须对其进行改进,然后再传递给下一个,依此类推。如果一个玩家无法对其进行改进,则他们将退出比赛并继续比赛,直到剩下一名玩家为止。 为了避免这种竞争成为“暴力之路”竞赛,有以下规定: 您传递马铃薯的时间不能超过一分钟。如果一分钟后还没有找到并通过一个较短的解决方案,那么您就出局了。 您不能更改超过25点的位置。确切地说,>= 75分数必须与收到分数的位置相同。决定更改哪些内容与您更改的金额无关紧要。 当只剩下一名球员时,他就是那场比赛的获胜者,并获得一分。锦标赛由5*n游戏组成n,玩家人数在哪里。每场比赛,起始玩家将被轮换,其余的玩家顺序将被洗牌。最后得分最高的玩家是比赛的获胜者。如果比赛以并列第一名结束,则只有那些参赛者才能参加新的比赛。这将一直持续到没有平局为止。 每个游戏的起始玩家将收到一组伪随机选择的点,顺序不特定。 点定义为x,y笛卡尔网格上的一对整数坐标。距离使用测量曼哈顿距离,|x1-x2| + |y1-y2|。所有坐标都将在[0..199]范围内。 输入项 输入带有单个字符串参数。它将由201个逗号分隔的整数组成,这些整数代表当前玩家(m)的数量和100分: m,x0,y0,x1,y1,x2,y2,...,x99,y99 这些点的顺序是当前路径。总距离是通过将每个点到下一个(dist(0,1) + dist(1,2) + ... + dist(99,0))的距离相加得出的。计算总距离时,不要忘记返回开始! 请注意,m是不是的球员在比赛开始的数字,它是仍处于数量。 输出量 输出与输入减负的方式相同m;单个字符串,其中包含用逗号分隔的整数,这些整数表示其新顺序的点。 x0,y0,x1,y1,x2,y2,...,x99,y99 控制程序将仅等待一分钟的输出。收到输出后,它将验证: 输出格式正确 输出包括仅与所有的100个点中的输入呈现 >=75 点位于其原始位置 路径长度小于上一个路径 如果这些检查中的任何一项失败(或没有输出),则说明您退出比赛了,游戏将继续进行到下一位玩家。 控制程序 您可以在此链接中找到控制程序。控制程序本身是确定性的,并带有一个虚拟种子1。计分过程中使用的种子会有所不同,因此不要费心尝试分析它吐出的转弯顺序/点列表。 主要的课程是Tourney。运行该程序将进行完整的锦标赛,并以参赛者作为参数。它吐出每场比赛的获胜者,并在末尾统计。具有两个SwapBots的示例Tourney看起来像: Starting tournament with seed 1 (0) SwapBot wins …

6
圆划分平面
任务 您将在平面中得到一组圆,其圆心在y = 0上。保证没有一对圆具有多个公共点。 您的任务是确定圆将平面划分为多少个区域。区域是不包含任何圆的最大包含点连续点集。 给定圆的描述后,您应该编写一个程序来计算此答案。 这是一个例子: 在左侧,您会看到在平面上绘制的圆。但是,在图片的右半部分,圆圈所产生的区域会明显地着色(每个区域一种颜色)。此示例中有六个区域。 输入项 输入的第一行包含一个数字,N后跟的圆圈描述数。这行是可选的,如果您的解决方案在没有它的情况下也可以,那么就可以了。 以下N各行分别包含两个整数x i和r i > 0,代表一个以中心(x i,0)和半径r i为中心的圆。 保证没有一对圆具有多个公共点。进一步保证x i和r i的10^9绝对值不超过(因此,它们可以舒适地装入32位整数)。 输入可以是: 从STDIN读取 从I当前目录中命名的文件中读取 或者,输入可以是: 在全局变量中作为字符串(包括换行符)可用 在堆栈上 输出量 这应该是一个整数,即要生成的区域数。应该将其写入STDOUT或O当前目录中命名的文件。 规则 以字节为单位的最短代码获胜 如果您的代码没有运行时,则+200字节罚款+中的空间复杂度多项式 n -100字节奖励,用于最坏情况下的预期运行时+空间复杂度 O(n log n) -50字节奖励,用于最坏情况下的预期运行时+空间复杂度 O(n) 确定性运行时+100字节加空间复杂度 O(n) 在评估运行时: 假定哈希表具有O(1)预期的插入,删除和查找运行时间,而与操作顺序和输入数据无关。这可能是正确的,也可能不是正确的,具体取决于实现是否使用随机化。 假设您的编程语言的内置类型花费确定性的O(n log n)时间,其中n输入序列的大小为。 假设对输入数字的算术运算仅O(1)花费时间。 尽管出于实际原因,不要假定输入数字受常数限制。这意味着诸如基数排序或计数排序之类的算法不是线性时间。通常,应避免很大的常数因子。 例子 输入: 2 …

4
使用停止的Oracle解决三个未解决的问题
您将获得以下函数:h1(f,* args)和h2(f,* args) 两者都是已经为您定义的方法(此处的星号表示可变数量的参数) f是一个函数,* args是要传递给该函数的参数列表 h1返回一个布尔值:如果在* args上调用f时函数停止,则返回true;否则返回False(假定正在运行的计算机具有无限的时间和内存,并且您正在编写的语言的解释器/编译器)知道如何处理无限的时间和记忆)。 如果f(* args)曾经调用过h1或h2,则h1会引发异常 h2的行为与h1完全相同,只是如果f调用了h1,则h2不会引发异常 用尽可能少的字符编写一个无需输入且应输出的程序: The Collatz Conjecture is {True/False} Goldbach's Conjecture is {True/False} The Twin Primes Conjecture is {True/False} 基于每个猜想的有效性。 以下是解释每个猜想的维基百科链接: http://en.wikipedia.org/wiki/Collat​​z_conjecture http://en.wikipedia.org/wiki/Goldbach%27s_conjecture http://en.wikipedia.org/wiki/Twin_prime 您可以假设任何以您选择使用的语言编写的大整数库都将成功表示任意大整数。换句话说,我们假设任何能够表达的语言/库3**(3**10)也能够3**(3**(3**10))在足够强大的机器上表达。 显然,由于无法运行您的程序,请与代码一起说明其工作方式
23 code-golf  math 

6
乐高齿轮比
我正在构建一个大型的乐高机器人,我需要使用一组齿轮来生成一些特定的齿轮比。我有很多常见的乐高齿轮规格的齿轮:8齿,16齿,24齿或40齿。编写一个可以在输入齿轮比的地方使用的程序,该程序会告诉我应该使用哪种齿轮组合来获得所需的齿轮比。 输入比例将在标准输入(或您的语言的等效输入)上指定,并且两个整数之间用冒号分隔。比率a:b表示输出轴的旋转a/b时间应与输入轴的旋转速度相同。 输出到标准输出应该是包含齿轮比的一个空格分隔列表中的单个线路,在的形式x:y,其中x是在输入轴上的齿轮的尺寸和y是在输出轴的齿轮的尺寸。对于给定的传动比,必须使用尽可能少的齿轮数。每个x和y必须的一个8,16,24,40。 例子: 1:5 -> 8:40 10:1 -> 40:8 16:8 9:4 -> 24:16 24:16 7:1 -> IMPOSSIBLE 7:7 -> 6:15 -> 16:40 如果不可能达到所需的传动比,则打印“不可行”。如果不需要齿轮,请打印空字符串。 这是代码高尔夫,最短答案胜出。
23 code-golf  math 

3
解决15难题(滑动瓷砖的难题)
15拼图是一个著名的拼图,涉及在4x4网格上滑动15个图块。从随机配置开始,目标是按照正确的顺序排列图块。这是一个已解决的15个难题的示例: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 拼图上的每个动作的形式均为上/下/左/右。“向下”移动包括向下滑动空白点上方的图块。“向右”移动包括向右滑动瓷砖到空白处。这是板在上下移动后的外观。 01 02 03 04 05 06 07 08 09 10 11 13 14 15 12 这项挑战的目标是编写一个程序,该程序可以输出解决15难题所需的一系列动作。获胜者是能够以最少的总动作解决五个测试案例(如下)的程序。生成的解决方案并不一定是完美的解决方案,它只必须比竞争对手更好。对于每个单独的测试用例,在合理的机器上,程序的时间不应超过十秒钟。 您的程序必须能够解决所有可解决的难题,我只是将这五个测试用例用作评分。 您的程序将以2D数组的形式接收未解决的15拼图作为输入。可以根据使用的语言来格式化2D数组,如果该语言没有2D数组,则可以对其进行更改。第一个子数组的第一个元素将是左上角的数字,第一个子数组的最后一个元素将是右上角的数字。一种0将是空白区域。 作为输出,程序应按需要执行的顺序打印动作列表。每个步骤都应编号,以增加结果的可用性。 编辑:基于注释,我将允许输出为Down / Up / etc形式或要移动的工件坐标形式。由于这不是代码高尔夫球,所以最重要的部分是解决难题。 其他一些通用规则不涉及使用外部资源等。 测试用例1 ([5,1,7,3],[9,2,11,4],[13,6,15,8],[0,10,14,12]) 示例输出: 1: Down 2: Down 3: …

21
将重复的小数转换为分数
这个问题不必仅适用于终止小数-重复的小数也可以通过算法转换为分数。 您的任务是制作一个程序,该程序将重复的小数作为输入,并输出产生该小数扩展的相应分子和分母(以最低的条款)。大于1的分数应表示为不正确的分数,例如9/5。您可以假设输入为正。 重复的小数将以以下格式给出: 5.3.87 重复第二个点之后的所有内容,如下所示: 5.3878787878787... 您的程序将输出两个代表分子和分母的整数,并用斜杠分隔(如果不输出纯文本,则为您语言的等效形式): 889/165 请注意,终止小数点在第二个点之后将没有任何内容,而没有非重复小数部分的小数点将在两个点之间没有任何内容。 测试用例 这些测试用例涵盖了所有必需的极端情况: 0..3 = 1/3 0.0.3 = 1/30 0.00.3 = 1/300 0.6875. = 11/16 1.8. = 9/5 2.. = 2/1 5..09 = 56/11 0.1.6 = 1/6 2..142857 = 15/7 0.01041.6 = 1/96 0.2.283950617 = 37/162 0.000000.1 = 1/9000000 0..9 = 1/1 …

5
得分围棋
进行围棋比赛得分并非易事。过去,关于如何设计规则以涵盖可能发生的所有奇特拐角案例的争论一直存在。幸运的是,在此任务中,您不必做复杂的工作,如生死攸关或检测出关。在此任务中,您必须实现一个根据Tromp-Taylor规则在没有Komi的情况下为游戏评分的程序。 计分程序非常简单: 如果P色的相邻点(从P到C点)之间存在(垂直或水平)相邻点的路径,则称为P点(未着色的C点)到达C 点。 ,再加上仅达到她的颜色的空白点数。 例如,考虑以下电路板。X,O并-表示黑色,白色和无色交叉点: - - - X - O - - - - - - X - O - - - - - - X - O - - - - - - X O - - O - X X X O - O O - …

8
Piet Mondrian组合的娱乐
下午好, 您的目标是在最少的源代码字节中重新创建Piet Mondrian的任何“ Composition”绘画(例如,Composition#10)。 重新创建可以使用实际的颜色,也可以使用Windows默认16调色板中的适当颜色替换它。 您的娱乐活动可以PNG,BMP或NetPBM格式输出到文件或STDOUT,或直接输出到屏幕。 您的休闲娱乐必须是512x512或更高的分辨率。 您的娱乐活动不得访问互联网。如果您的程序需要数据文件,则它们的大小将添加到源文件的大小中。 分数将是源文件的大小(以字节为单位)。 请在您的输入中注明您要重新创作的绘画,并提供原始图片和休闲图片的链接。 祝好运。

30
电话号码中的字母
问题: 您正在制作一个新电话,人们可以在其中输入专用电话号码,例如,1-800-program它们会自动转换为可用的电话号码,例如1-800-7764726(对于上一个示例)。 您的程序将接收包含数字,字母和破折号的任意长度的字符串,并将所有字母转换为相应的数字。 这是一个键盘,供参考: 规则: 您的程序将收到一个字符串 它将处理并返回/打印另一个字符串 接受任何语言 由于它是代码高尔夫球,所以最短的代码获胜
23 code-golf  number 

7
将中缀表达式转换为后缀表示法
当我看到这个封闭问题的标题时,我认为它看起来像是一个有趣的高尔夫挑战代码。因此,让我这样介绍一下: 挑战: 编写一个程序,表达式或子例程,给定一个用infix表示的算术表达式,例如1 + 2,以后缀表示即输出相同的表达式1 2 +。 (注意:类似的挑战在1月初发布。 但是,我确实觉得这两个任务在细节上有很大不同,足以证明这个单独的挑战是正确的。而且,我只在键入下面的所有内容后才注意到另一个线程,我宁愿不只是把它扔掉。) 输入: 输入包括由以下组成的有效缀算术表达式的数目(非负整数表示为一个或多个十进制数字序列),平衡括号来指示分组的子表达式,和四个缀二进制运算符 +,-,*和/。这些中的任何一个都可以由任意数量的空格字符分隔(并且整个表达式都被包围),应将其忽略。1个 对于那些喜欢形式语法的人,这里有一个简单的类似于BNF的语法,定义了有效的输入。为了简洁起见,语法不包含可选空格,该空格可能出现在任意两个标记之间(数字中的数字除外): expression := number | subexpression | expression operator expression subexpression := "(" expression ")" operator := "+" | "-" | "*" | "/" number := digit | digit number digit := "0" | "1" | "2" | …
23 code-golf  math 

12
抖动灰度图像
使用您自己的算法将灰度图像抖动为纯黑白图像。 准则:您必须提出自己的新算法。您不能使用预先存在的算法(例如Floyd-Steinburg),但可以使用常规技术。您的程序必须能够读取图像并产生相同大小的图像。这是一场人气竞赛,因此谁能产生最好的(最接近原始的)和最具创造力的(由投票决定)的胜利。如果代码简短,则可以加分,尽管这不是必需的。 您可以使用任何想要的灰度图像作为输入,它应该大于300x300。任何文件格式都可以。 输入示例: 输出示例: 这是一项很好的工作,但是仍然有可见的线条和图案。

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.