编程拼图和代码高尔夫

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

2
单数还是复数?
以下是30个单数和复数形式的英语名词的列表。您的工作只是写最短的正则表达式,以一种形式匹配所有名词,而以另一种形式都不匹配(容易,所有英语名词都s以复数形式结尾吗?)。 SINGULAR PLURAL --------- -------- car cars boat boats man men woman women omen omens bus buses cactus cacti spy spies pie pies louse lice mouse mice amice amices goose geese creese creeses person people child children siren sirens ox oxen foot feet tooth teeth formula formulae minx minxes sphinx …

3
手绘红色圆圈
在http://meta.stackoverflow.com上,我们有一些模因。其中之一是手绘红色圆圈。 看到这个帖子: 因此,挑战在于 可以用代码绘制手绘红色圆圈吗? 其他限制: 您将以图像作为输入,并且必须在输出的图像上添加手绘红色圆圈。 必须是可预测的,即相同的图像输入必须导致相同的输出。您可以使用随机性,但相同输入的结果必须一致。 输出必须与输入完全相同的图像,除了带圆圈(没有其他更改)。 徒手绘制的红色圆圈必须看起来徒手(没有完美的圆圈!),必须是红色的(显然),并且通常看起来像一个圆圈(没有随机的波浪线)。 这是一场人气竞赛,因此,在2014年3月开始投票最多的答案将获胜。除“手绘红色圆圈”外,没有其他具体目标,因此请尽可能发挥创意,以使您获得最多的投票!(为了尽可能保持公正,我将对遵循规则的所有答案进行投票。)

10
命运笔记-在职员上放笔记
僵尸启示录已经来临,世界即将终结。突然,某人发现了一个公式,该公式需要当前的小时,分​​钟和日期,然后吐出一个完美的音符以弹奏钢琴,这会立即杀死每一个听到它的僵尸。不幸的是,世界上只剩下一名钢琴演奏者,他已经忘记了如何阅读笔记,但是他仍然知道如何阅读乐谱。当然,这是非常时间敏感的事情,因此拥有一台计算机似乎很自然。1个 您的挑战是记下一个音符(例如)G,并输出放在五线谱上(高音谱号)的音符,如下所示: ----- ----- | ---|- | --O-- ----- 规格: 您必须输出由-----(5点划线)和空白行组成的交替行。总共有5 -----s。注释必须叠加在此职员的上方。 输入将指定注释的位置。输入将是: 可选的H或L,指定“高”或“低” 从Ato 的字母G,指定音高 可选的#或b,指定为锐利或平坦。 “注释”定义为: 一个O(大写O)与工作人员中间对齐,位于笔记的位置。(最上面的一行是HF(高F),最下面的一行是E(正常E)。) 三秒|(竖线),茎,将为: 如果音符在中线(B)或上方,则在音符左侧留一个空格,然后向下移动(从音符下方开始一个空格),或者 音符右边的一个空格,如果音符在中线以下,则向上移动(从音符上方开始一个空格)。 如果在输入中指定,则在音符左侧直接一个#或b一个空格。 如果音符太高或太低,则必须添加分类帐行。这些行将是---(宽度只有3个破折号,而不是5个破折号),并且仅在注释在总帐本行的上方或下方(分别针对顶部/底部总帐行)时才显示。 多余的空间可以放置在您想要的任何位置;例如,如果可以帮助保存任何字符,则可以使空白行具有空格或在分类帐行之后具有空格。 这是一个可视化视图,为了更容易地理解规格,所有注释名称都位于各行旁边: HB --- HA HG ----- HF HE ----- HD HC ----- B A ----- G F ----- E D --- C LB --- LA …

25
增量博彩
几个月前,我把这个问题当作一次面试的难题。最近,在考虑博客材料时,它突然成为一个很好的例子,可用于从功能上解决问题。写完博客文章后,我将立即发布解决方案。 注意:这个问题是一年前在StackOverflow上提出的,在回答了几个(不正确)答案后被否决。我认为这是一个显而易见的面试或作业问题,因此被否决了。我们在这里的答案应该是经过深思熟虑的代码,以便有人不要考虑使用它们! 在比赛中,您使用以下策略下注。每当您输掉一个赌注时,就将下一轮的赌注值翻倍。每当您获胜时,下一轮的赌注将为一美元。您通过下注一美元开始本轮比赛。 例如,如果您以20美元开始,并且在第一轮中赢得赌注,在接下来的两轮中输掉赌注,然后在第四轮中赢得赌注,您将得到20 + 1-1-2 +4 = 22美元。 您应该完成函数,该函数带有g两个参数: 第一个参数是一个整数a,它是我们开始下注时所拥有的初始资金。 第二个参数是一个字符串r。结果的第i个字符将是“ W”(胜利)或“ L”(失败),表示第i回合的结果。 您的函数应该返回所有回合之后您将拥有的金额。 如果在某个时候您的帐户中没有足够的资金来支付下注的价值,那么您必须停止并退还当时的金额。 样品运行 1st round - Loss: 15-1 = 14 2nd round - Loss: 14-2 = 12 (Bet doubles) 3rd round - Loss: 12-4 = 8 4th round - Win: 8 + 8 = 16 5th …

29
确定胜出力
让我们打一些代码高尔夫! 给定井字游戏板状态(示例:) |x|x|o| |x|o|x| |o|o|x| 确定游戏是wina lose还是cat。给定状态,您的代码应输出所有这些选项。上面的游戏应该输出lose 需要明确指出的是:获胜定义为x连续3 秒(对角线,水平线,垂直线)。失败是o连续3 秒,而cat游戏却是连续3 秒。 为了使事情变得有趣,您需要确定状态的输入结构,然后必须对其进行解释。例如,xxoxoxoox如上所示是一个有效状态,其中从左到右,从上到下读取每个字符。[['x','x','o'],['x','o','x'],['o','o','x']]是以类似方式读取多维数组中的游戏。虽然0x1a9这是十六进制为110101001可能的工作作为一个适当的压缩,其中1可以针对被操纵xS和0可以被操纵o。 但这只是一些想法,我相信您可能会有很多想法。 基本原则: 您的程序必须能够接受任何可行的状态。 输入形式必须能够表示任何状态。 “获胜状态必须从董事会中确定” 假设一个完整的董事会 Win之前,lose例如在的情况下“xxxoooxxx” 最低字符数获胜
19 code-golf  game 

9
ASCII ART边缘检测
就像标题所说的那样,我正在考虑要竞争一种必须检测ASCII艺术的边缘的问题。 该代码应接受黑白ASCII码作为输入。甲乙/ W ASCII技术被定义为(由我)的ASCII技术只有一种非白色空格字符的(在我们的情况下:一asteriks *)。并作为输出产生标准ASCII技术(所有ASCII字符被接受的)应该记住所述第一的contourn。 在输出中使用多个字符的目的是使某些边缘更平滑。例如,可以让这一输入 *** **** ****** ****** ****** ****** **** *** 可能变成: ___ _/ ) _/ / / | | / | \ \ | `\ | \___) 输入\n分隔的字符串作为输入。每行最多包含一个80字符。未指定行数。 这是我的示例Python3程序: import fileinput as f import re as r import copy as c a,s,p='*',' ','+' def read(n): s=[list(' …

6
意外外观但导致崩溃的错误[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 3年前关闭。 关于这个概念有很多问题,但是这些问题似乎都只是导致崩溃,导致产生了很多很显然是导致崩溃的答案。因此,我所面临的挑战是编写一些似乎合理的代码(尽管我认为代码应该由您自己承担)会导致整个目标操作系统崩溃,或者使自身崩溃,而这并不是立即显而易见的。(我认识到“立即显而易见”是主观的,但希望所面临的挑战仍然是合理的)。 获胜者是5天后获得最多票数的答案。

14
四个正方形在一起
拉格朗日的四平方定理告诉我们,任何自然数都可以表示为四平方数的和。您的任务是编写一个执行此操作的程序。 输入:自然数(10亿以下) 输出:四个数字的平方和等于该数字(顺序无关紧要) 注意:您不必进行暴力搜索!这里和这里的细节。如果有一个函数可以解决此问题(我将确定),则不允许这样做。允许自动素函数和平方根。如果存在多个表示,则任何一个都可以。如果选择进行暴力破解,则必须在合理的时间内(3分钟)运行 样本输入 123456789 样本输出(都可以) 10601 3328 2 0 10601 3328 2

10
创建编程语言解释器
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 3年前关闭。 任务: 您必须创建一个可以解析编程语言摘要的解释器。该语言不必很复杂,但必须包含以下语法元素: 分配和读取变量的能力(可以很简单a- z是预制变量) If语句(不需要elseif和else) 循环(计数为任意数字,不需要用户访问计数器) 带有变量(加,减,乘,除,大于/小于,等于)的简单数学 打印报表 规则: 您不得复制其他流行语言的语法。 您需要编写自己的解释器,而无需修改其他解释器。 您可以使用任何语言编写口译员。 用您的语言编写一个99瓶啤酒的示例程序(请参阅此处) 这是一场人气竞赛,因此最受好评的答案胜出。

12
确定土地是否被栅栏完全包围
想象一个二维的布尔值数组,其中0代表矩形土地上草的正方形,而1代表栅栏。 编写一个函数,该函数接受2D数组作为输入,并确定是否可以仅使用向北/向东/向西/向南移动来从任何一个草丛区域移动到任何其他草丛区域,而不会碰到篱笆。 如果阵列中的任何草地区域都被栅栏完全包围(这意味着您不能以N / E / W / S的方式到达阵列中的所有其他草地区域),则函数应返回false;否则,该函数将返回false。否则,它应该返回true。 下面是两个可以用作输入的示例数组,尽管函数不仅应该能够处理这些数组,而且还可以处理任何2D布尔值数组: 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 (should return true) 0 1 0 1 0 0 1 1 0 0 0 0 …
19 code-golf 

1
奎宁井字游戏
用您选择的语言编写一个程序,该程序可以在3 * 3板上与人类玩家玩井字游戏。但是,每一步都必须是从上一次迭代生成的不同程序。 评估人工输入的方式和方式由您决定,但是必须从标准输入中读取。同样,您可以自由选择一种方法来确定哪个玩家开始游戏(例如,您先问一个问题,或者您允许人类输入一个无效举动来表明计算机已经开始运转,或者其他想法)。 不需要验证动作,您可以假设一个公平的人类对手。 基本上,您具有与电路板状态相对应的程序。状态以任何可识别的方式打印,但是至少需要以下详细级别: X.. 00X x.. 在人类玩家输入动作之后,您的程序必须以相同的语言(标准输出或文件)将自身的下一个迭代生成为源文件并终止。不允许将信息存储在该源文件之外的任何其他位置。(您的程序不必构建和运行所生成的程序,它可以由用户完成-但是,这不是禁止的)。生成并运行生成的程序时,它的行为类似,显示状态,等待用户输入等。 在游戏结束时,您必须以任何明确的方式打印结果(无论您赢了还是平局)。 完美发挥,我的意思是程序一定不能输,如果有可能迫使获胜,那就应该赢。 最短代码获胜,第一个有效条目至少10天后选出获胜者。 如果您的程序可以处理下一个迭代的构建和启动,您的得分将减少10%。(我知道,这很可能不值得)当然,程序本身必须在下一次迭代接受用户的移动时终止。 如果您使用一些奇怪的不常见技巧,请在代码中附上简短的说明。
19 code-golf 

28
计算主要差距
寻找素数是程序设计的一种仪式,而且经常是某人创建的第一个严肃程序(通常是审判部门)。 但是,素数已经破旧了。接下来更有趣的事情是获得质数差距:连续质数之间的迄今为止最长的差距。这些是非常稀有和“珍贵的”。前几对及其区别是: 2 3 1 3 5 2 7 11 4 23 29 6 89 97 8 113 127 14 ... 我父亲过去常常手工计算出这些数据的趣味性,最高可达1万。让我们看看您能得到的代码有多短。 规则: 没有内置功能可用于主要测试,主要生成或主要差距 不能检索http://oeis.org/A002386或类似的东西(我可以闻到你很远的作弊者:)) 没有预先计算的数组 继续打印,直到内部整数类型对您失败 最少的字符数获胜。+10个字符(如果仅打印不带撇号的空格)。 如果有趣的话,您也可以展示带有内置函数的版本。要有创造力。 澄清:您经历了素数,并且每次看到的差距都比以往任何时候都要大时,您都要进行报告。例如,在3到5之间,有2个单位宽的间隙。5与7之间的差距也为2,但这已经是个老新闻了,我们不再关心。只有看到新的最大差距时,才进行报告。这反映出,随着差距越来越大,素数的频率越来越低。 编辑:大多数答案都是出色的,应该得到更多的认可。但是,到目前为止,具有48个字符的GolfScript条目是最短的。
19 code-golf  primes 

2
括号中可能的数值结果数量2 ^ 2 ^…^ 2
考虑2^2^...^2带有n运算符的表达式^。运算符^表示幂运算(“幂”)。假定它没有默认的关联性,因此需要对表达式进行完全括号括起来才能明确。用加泰罗尼亚语数字 给出括号内表达式的方式C_n=(2n)!/(n+1)!/n!。 例如(2^2)^(2^2)=((2^2)^2)^2,有时不同的括号给出相同的数字结果,因此给定的不同可能数字结果的数量n少于C_n所有数字n>1。1, 1, 2, 4, 8, ...与加泰罗尼亚语数字相反,该序列开始1, 2, 5, 14, 42, ... 问题是编写最快的程序(或函数),将其接受n为输入并2^2^...^2使用n运算符返回表达式的不同可能数字结果的数量^。性能不会随着n增长而显着降低,因此直接计算高功率塔可能不是一个好主意。

1
霍尔玛最短的2人游戏
在国际象棋中,游戏有可能在愚人伴侣的作用下进行4次移动(每次2次)后结束。 您的目标是找到傻瓜的哈尔玛伴侣:哈尔玛(Halma)的2人游戏,可将回合数减至最少。 有超过10个56个董事会状态,而且我已经看到分支系数超过1000,因此没有人会找到最佳解决方案。相反,您正在尝试找到最好的解决方案。 您应该提交一个动作列表,以及用于生成这些动作的任何代码。 游戏说明 哈尔玛类似于中国跳棋,但在16 * 16的正方形板上玩。 最初,董事会如下所示: 游戏的目标是将所有棋子移到对手棋子的开始位置。 在玩家回合中,他/她可以: 转弯 将他/她的一件作品移到相邻的空白处。相邻的空格包括对角线。 取他/她的一块,然后执行以下任意多次:将一块跳到相邻的一块上,将其降落在与跳过的一块相对的空间上。 这是说明第二种移动方式的示例。 规则 提交导致游戏结束的合法举动列表。 提交用于生成列表的任何代码。 如果您从其他人的代码中获得更好的结果,请将该结果发布在评论中,或使用新结果编辑他们的帖子。 每次移动必须要么None是通过转弯,要么(x1,y1,x2,y2)是移动一个棋子,其中要移动的棋子(x1,y1)的坐标是该棋子(x2,y2)的目的地,并且是棋子的目的地(对于跳跃移动,请忽略中间坐标)。坐标从(0,0)左上角开始。x坐标向右增加,y坐标向下增加。动作应以换行符分隔。 您可以使用此python脚本来验证您的举动。使用python halma_verify.py < file来验证移动file。 最短名单获胜。

15
编写一个函数,告诉您删除了哪两行
在上一个代码挑战中,我要求您编写一个函数来告诉您哪些行已被删除。 说明是: 编写一个包含五行的函数。 如果按原样运行该函数,则应返回0。 如果您删除了五行中的任何一行并运行该函数,它应该告诉您哪些行已被删除(例如,如果您删除最后一行,则应返回5)。 现在,让我们尝试一些更加困难的事情。 遵循与上述相同的规则,但是这次,函数应返回一个数组,告诉您已删除了两行。 因此,例如,如果我删除第1行和第5行,则返回值应为[1,5],如果我删除第3行和第4行,则返回值应为[3,4]。 同样,如果没有删除任何行,则该函数应返回0。如果您还可以处理删除了一行的情况,则奖励积分,但并非必须这样做。 可以使用辅助功能吗?是的,但前提是您必须这样做。理想的选择是一个独立的功能。 与上一个挑战一样,获得最高支持的解决方案将获胜。我会在一周内选出优胜者;如果24小时内未收到任何新的作品,我会尽快选出。

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.