编程拼图和代码高尔夫

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

20
莎士比亚编程语言中的高尔夫技巧
您对莎士比亚编程语言的高尔夫有什么一般提示?我正在寻找可以应用于代码高尔夫球问题的想法,并且这些想法至少也特定于SPL(例如,“删除注释”不是答案)。 请为每个答案发布一个提示。
43 code-golf  tips 

16
正则表达式高尔夫的提示
类似于我们针对特定语言的高尔夫技巧的主题:缩短正则表达式的一般技巧是什么? 在打高尔夫球时,我可以看到正则表达式的三种用法:经典的正则表达式高尔夫(“这里是一个应该匹配的列表,这里应该是一个失败的列表”),使用正则表达式来解决计算问题并将正则表达式用作其中的一部分较大的高尔夫球代码。随时发布解决任何或所有这些问题的技巧。如果您的小费仅限于一种或多种口味,请在顶部注明这些口味。 像往常一样,请为每个答案坚持一个提示(或一系列密切相关的提示),以便最有用的提示可以通过投票升至最高位置。

30
CJam高尔夫技巧
CJam是一种受GolfScript启发的基于堆栈的高尔夫语言,由PPCG用户aidtsu创建。 因此,就其他特定于语言的提示问题而言: 您在CJam打高尔夫球有哪些一般秘诀?请为每个答案发布一个提示。
43 code-golf  tips  cjam 

15
这台Foo机器会停止吗?
众所周知,确定Turing机器是否停止运行还不确定,但是对于较简单的机器而言并不一定如此。 甲富机是一台具有有限带,其中在磁带上的每个小区具有整数或halt符号h,例如 2 h 1 -1 指令指针从指向第一个单元格开始: 2 h 1 -1 ^ 在每一步中,指令指针都向前移动其指向的数字,然后取反该数字。因此,经过一步,它将向前移动2单元格,并将其2变为-2: -2 h 1 -1 ^ Foo机器会继续执行此操作,直到指令指针指向暂停符号(h)。因此,这是该程序的完整执行: 2 h 1 -1 ^ -2 h 1 -1 ^ -2 h -1 -1 ^ -2 h -1 1 ^ -2 h 1 1 ^ 磁带也是圆形的,因此,如果指令指针从磁带的一侧移开,它将移到另一侧,例如: 3 h 1 3 ^ …

23
解析Bookworm词典格式
我最近以Bookworm Deluxe的形式沉迷于某种怀旧: 如果您以前从未看过它,那么这是一个文字游戏,目标是将相邻的图块连接起来以形成单词。为了确定字符串是否为有效单词,它会根据内部字典检查它,该内部字典以如下所示的压缩格式存储: aa 2h 3ed ing s 2l 3iis s 2rdvark 8s 4wolf 7ves 解开字典的规则很简单: 阅读该行开头的数字,并从前一个单词的开头复制那么多字符。(如果没有数字,请复制与上次一样多的字符。) 在该词后附加以下字母。 因此,我们的第一个单词是aa,其后是2h,表示“复制的前两个字母aa并附加h”,形成aah。然后3ed变为aahed,并且由于下一行没有数字,因此我们再次复制3个字符以形成aahing。该过程将在字典的其余部分继续进行。小样本输入得到的结果是: aa aah aahed aahing aahs aal aaliis aals aardvark aardvarks aardwolf aardwolves 您面临的挑战是如何以尽可能少的字节执行此拆包。 输入的每一行将包含零个或多个数字,0-9 后跟一个或多个小写字母a-z。您可以接受输入并将输出作为字符串列表,或作为单个字符串,且单词之间用0-9/ 以外的任何字符分隔a-z。 这是另一个小测试用例,示例中未涉及一些边缘情况: abc cba 1de fg hi 0jkl mno abcdefghijk 10l => abc cba cde cfg …
42 code-golf  string 

4
f(g(x))减小而g(f(x))增大
为此,您需要在整数上实现两个函数f和g,使得f∘g是严格减少的函数,而g∘f是严格增加的函数。换句话说,如果取任意两个整数a <b,则f(g(a))> f(g(b))和g(f(a))<g(f(b))。f和g分别没有限制,只不过它们必须分别将一个整数映射到另一个整数。 请提供对f和g的简短描述,以及有关为什么它们具有必需属性的参数。 信用:这项挑战的灵感来自2011年罗马尼亚数学硕士竞赛中的一个问题(该问题提出了相同的问题,但用实数而不是整数)。如果您真的想要破坏者,那么现在您知道要搜索什么。 规则 应该从将一个整数映射到另一个整数的数学意义上来理解此挑战中的“函数”一词:您可以编写两个程序或两个函数,并像往常一样使用接收和提供输出的任何标准方法。您可以使用整数的字符串表示形式来代替实际的整数变量,但是输入和输出的类型应该相同,以便可以在不手动转换类型的情况下组成函数。请记住,从概念上讲,f和g仍需要是ℤ上的函数,因此您不能通过使用相同数字或类似形式的两个不同的字符串表示形式作弊。 请记住,函数可以是未命名的,只要它们本身或您定义的另一个函数不需要它们的名称即可。如果您确实命名了这两个功能中的一个或两个,则可以假定它们存在于同一程序中,因此它们在实现中可以相互引用(例如,def f(x): return -g(x)在Python中)。 通常的整数溢出规则适用:您的解决方案必须能够在语言的假设(或实际)版本中使用任意大整数,默认情况下,所有整数都是无界的,但是如果您的程序由于实现而在实践中失败不支持大整数,这不会使解决方案无效。 您可以使用任何编程语言,但是请注意,默认情况下,这些漏洞是禁止的。 这是代码高尔夫球,因此您的得分是两个函数的字节数之和与最短有效答案的总和。

6
让我们玩黑手党吧!
黑手党(也称为狼人)是一款派对游戏,大致玩法如下: 游戏从第0天开始。每一天之后都有n一个晚上n。每天晚上之后n是一天n+1。即D0, N0, D1, N1, D2, N2... 在第0天的黎明,主持人秘密地选择玩家担任某些角色: 一些玩家成为黑手党。每个夜晚,每个黑手党成员都会选择一名球员。在第二天的黎明,被最黑手党成员选择的玩家被杀死。它们已从游戏中永久删除,并且其角色已公开显示。黑手党对齐。 一些玩家成为警察。每天晚上,每个警察都会选一个球员。在第二天的黎明,警察开始意识到玩家的状态。村落对齐。 一些球员成为医生。每天晚上,每个医生都会选择一名球员。如果此玩家与黑手党选择杀死的玩家相同,则黑手党当晚的行动将被取消。村落对齐。 没有被选为其他角色的所有玩家都是村民。村民没有全镇无法分享的能力。村落对齐。 除第0天外,每天都有整个城镇(即所有在世玩家)为一名玩家投票。最终,该玩家将从游戏中删除,并显示他们的角色。(在第0天,每个人都直到晚上降临。) 如果在任何时候都没有剩余的黑手党成员,那么游戏将以所有与村庄结盟的玩家胜利(包括死亡)结束。 如果在任何时候,以村庄为中心的玩家数量都不超过以黑手党为基础的玩家,则游戏将以所有以黑手党为基础的玩家胜利(包括死亡)而结束。 对于这个挑战,您的目标是写一个机器人来击败黑手党的其他机器人! 如何制作一个可以工作的机器人 您需要为我提供的只是一个名为的文件run。在将发生挑战的目录结构中,您的机器人将住在这里: start controller/ tmp/ players/ # You are here! some_bot/ # Let's pretend you're some_bot. to_server from_server players run # This is what you give me mafia-game-bot/ skynet/ 该run文件在执行后将使您的机器人执行其任务。重要的是要注意,该文件一定不需要任何命令行参数或任何东西。它将完全按照来运行./run。如果需要以其他方式执行,则必须通过执行以下操作来解决: real_bot.py #!/bin/python2 # code …

27
告诉我最近的恶魔
恶魔数字是一个正整数,其十进制表示形式仅包含6。恶魔数字列表以6、66、666、6666开头。 给定正整数,输出最接近的恶魔数字。如果有两个,则输出较大的一个。 测试用例: n output 1 6 2 6 3 6 6 6 35 6 36 66 37 66 100 66 365 66 366 666 666 666 999 666 这是代码高尔夫球。以字节为单位的最短答案将获胜。

30
我是工程师吗?
最近,一名研究交通信号灯正时的电气工程师被俄勒冈州称为自己的工程师,被罚款500美元。 给定一个2个字母的字符串作为输入,代表美国的州,输出: I am not an engineer如果州是俄勒冈州(OR) I am an engineer 如果该州是美国的任何其他州 What is an engineer? 得到任何其他输入 输出可能不包含任何前导空格,但可以包含所需的尾随空格。 您可以假设输入将始终是2个大写字母。 以下是美国所有50个州缩写的列表: AL, AK, AZ, AR, CA, CO, CT, DE, FL, GA, HI, ID, IL, IN, IA, KS, KY, LA, ME, MD, MA, MI, MN, MS, MO, MT, NE, NV, NH, NJ, …

2
监狱建筑师,ASCII版本
这是使用ASCII字符的监狱图: +------------------------------+ | | | X X | | | | D D | | | | | | X X X | | | +------------------------------+ 墙是由管道字符|,破折号-和+用于拐角和相交的支柱组成的。还有两扇标有的门D(将始终在左右墙壁上)。监狱里充满了带有标记的恐怖人物X。 目标是建造满足以下条件的墙: 每个人都被单独监禁; 两扇门之间有一条走廊。 每个单元仅包含一个直接连接到主要走廊的门。 牢房和走廊占用了监狱中的所有空间。 每个单元格包含一个人(即,没有空单元格)。 走廊是一条路径,不会分支,并且始终是一个字符宽。这是上述监狱的解决方案: +---------+--------------------+ | | | | X | X | | | +--------+ +------D--+-----D-----+ D D +---D--+ …

28
惊喜连连看
该问题是旨在庆祝Brain-Flak的第一个生日的系列Brain-flak Birthday挑战的一部分。您可以在此处找到有关Brain-Flak诞辰的更多信息。 今天是Brain-Flak的第一个生日!所以我想我们会举办一个惊喜的生日聚会。因此,以您喜欢的语言打印 Surprise! Happy Birthday, Brain-Flak! (允许尾随空格) 与往常一样,程序应该打高尔夫球。但是,由于Brain-Flak程序由方括号组成,因此不会将源中的任何方括号都计入您。(字符()[]<>{}不计入您的字节总数),但必须保持平衡,以免使Brain-Flak感到不适。 规则 这是规则的细分 您来源中的方括号必须保持平衡。那就是您的程序的括号必须用以下语法来表示: S -> SS | (S) | [S] | <S> | {S} | E E空字符串在哪里。 也就是说,平衡字符串要么是两个平衡字符串的串联,要么是在平衡字符串周围大括号,要么是空字符串。 程序的分数是非括号字节的数量。 您的目标应该是使自己选择的任何语言的得分降至最低。 应用标准规则,因此您可以编写完整的程序或函数。 如果出现平局,原始字节数将成为平局 在某些语言(括号地狱, 括号,Glypho和Lenguage)中肯定会有零字节的解决方案。尝试找到在这不是一件小事的语言中打高尔夫的好方法。

14
没有任何附加条件!
介绍 墙上有3个钉子。您已经获得了一条固定在相框两端的绳子。要挂起图片,您需要用钉子将绳子缠住。但是在放开图片之前:您可以仅通过查看字符串如何缠绕在指甲上来预测图像是否会掉落吗? 在第一个示例中,图片不会掉落。在第二个示例中,图片将下降。 挑战 给定绳子绕N钉子的路径,确定图片是否会掉落。如果图像将要下降,则返回真实值,否则返回虚假值。 细节 您可以假定钉子和图片以N+1正三角形排列,图片在底部。 您可以假设绳索上没有打结,即可以从两端之一连续包裹绳索。 每个钉子都用字母顺时针枚举。您可以假设最多有26个钉子(AZ)。 用小写字母表示围绕钉子的顺时针包装,用大写字母表示逆时针包装。 上面的第一个示例将编码为BcA,第二个示例将编码为CAbBac。 对于倾斜的读者:这个问题等同于确定自由组的元素(由钉组生成)是否是标识。这意味着重复取消像aA或Aa直到达到固定点的子字符串就足够了。如果定点是空字符串,则这是中性元素,否则不是。 例子 Picture will fall: Aa CAbBac aBbA DAacAaCdCaAcBCBbcaAb ARrQqRrUuVHhvTtYyDdYyEKRrkeUWwua AKkQqEeVvBESWwseYQqyXBbxVvPpWwTtKkVHLlWwNBbAanYYyyhWwEJZUuNnzjYyBLQqQqlEGgebeEPLlTtZzpUuevZzSsbXSGgsUuLlHhUQquPpHUuFfhTZzIitGgFAaBRrBbbYXxOoDZTDdtzVvXxUudHhOVvoUuXKkxyBEeLlbFfKkHhfVAaQqHAaJjODdoVvhSsZzMZzmPpXNBbnxBbUuSSsUuDRrdNnUusJDIiUuIidCEGgeMmcLlDPOopdTEeQqCAETtNnYyeGUuPEFfSsWwHheAaBbpgCcOHUuhAaCcoEFBbfeaFHhfcCFFffNncGFfgtjMVUuKAakvKkXxLlTMmtmOFfoUuXSsYZzLXxlyxUuRPZzTtprSsWwRrPLlpGgMmKRrDHhdRCcUurYNnKCckykXJjxWwUSsJjKkLlKkuBbBbOoWwWwIiUuPDdBbCcWHBbCFfcDdYBbLlyVvSsWGgEewCchDdYywAaJjEepPpPpQXxZzFfLGXxglNnZzYDdyqCcKWXxwXxQqXTtxkFfBSSAasTFftZzsXGgxSsLlLlbZzAaCCccXVvYyxTIiOoBbFftCVQqDdBbGgAavQqKkDPpKTCctRrkdcvAaQWOowLOolqVMmvZAaHCBbcPphIiRKkrLlzFMOomDIiXJjIixMmdNnMHhmfNTtIiKkSDdTtsVvHhnAaNSVvTUutNnXxsGIiXxPpPHhUupgNnAaAAOoaaIiHJjhVvLlnYyXxQqSsTtKJjkBbNnVvEYCcFfMHGghBbmNnEeJTtjJjWYywyeNWwDIiZYyzOodnMQqmVvCcQqxVvGNnEeNBbngVvUGgYyBbDdVvIiAAaauPpQKDdEekNnVLlvHhGSDIidPZzpsPCcpgQqKkQqNOonLlIiLlJjqPAaPXxTtppYyCPpHhCIicARBbracXxWwXEVUuUuGgZHhzBSsbvGgFfeVvxLlNKknWwBLlIibWOowNnRSsrSEeKAakOosLZzZRrHhzTtTFfUuNnOKkotXxTtla Picture will not fall: A BcA ABCD aBaA bAaBcbBCBcAaCdCaAcaCAD ARrQqRrUatuVHhvTYyDdYyEKRrkeUAua AEEeQqNneHhLlAIiGgaECXxcJjZzeJFfVWwDdKkvYWwyTJjtCXxANIinaXWwxcTWwtUuWwMmTBbVWIiFLlWwZzfwPLlEepvWZzwKkEYEeWXxwySXTtEexRIiNBbnWAaTtQqNnBMSsWwOombwWwPVPpGPpgYyvDdpBbrQqHhUusKRrDAVvadLlWwOZzokGJCXSSssXxxJPpGIigZzjJjLlOoNRrnPpcMZzmjgJjNDEeQqWKkNTtnSswIidCcnYBGgbyJSsjPpIiMmMmMmSNnWVvwZzIQqLXHhxTPptlisOoeTtTtYMmVvPpyKNnMFfmkXxSVvsCGJjXxgXYJPpjWwQIiXxqyDdxFfDdAaRNnJjrctHBbZzhEQqMmeCcRBbrGgAaAaJNnRrYyWwSDdVvsJOojQGgWWwIBbiwRrqJjjWwOoFPMmDdRrQOoqNnRrDPJjpMmdPpGFfVvWUuwgpWCcNnPpwfUXCcZzJjUSsuXxxUuuRGgHhrSQqJjOosMMTtmHhmKkXxDdLlWwjSUuAaMmKYyksZzVvPZzVEeVvvHhZZOozBbzMmZCczYyGgISsiQqpXxMmXxEMmeRrAGgaGgMOGgomZFfDdzSSssBGPpgbTtBbOoRWWwGgLJjlEeGgLDdRrUulNnZzJjJjUKkuXxFfwATtaZzLVvlWwSsMmrBAaELleGBLFflbgHhbIFfiBbPpTWZzwKkKLASsaTJYyjtBbBbWwIiZCcWwzIiZLlUTtuBbYyBbIizTJjtLTtDOOoBbodBbllSsUGgLlAKkauYykUuUNnPpuDFfAaLNVvnVvlHhdMmBAaBbIiVRrGWOoPpwgWXwKkvJjOoTtYCUucVGgYyLlVvFfvRrMmySsDdbtICZzcNnINSOosDQAaXoxRGgKkrqdZznDdXxZzMGgmiJjNnACcMQqmaNnWZzUOuwTVvAJjSsaRrGgSsTtOMmRroVvRrtAVGgvMmaINniDGCcOogRrWwMVvYFfyTtmTtVvOoOIiodRrGgAxaSsGgiJja

11
更多牛铃……!
您提供技术支持的布鲁斯·迪肯森,他产生了蓝牡蛎崇拜记录会话。当他要更多牛铃时,您可以给他。 你的任务 编写一个程序或函数,该程序或函数将字符串(或您的语言中的等效字符串)作为输入,并输出一个包含一个以上牛铃的相关字符串。 一个琴弦包含多少个牛铃? 字符串包含的牛铃数量等于通过排列字符串的字符可获得的“牛铃”不同副本的最大数量。例如,"bbbccceeellllllooowwwwwwwww"包含3个牛铃,而"bbccceeellllllooowwwwwwwww"和"bbbccceeelllllooowwwwwwwww"分别包含2个牛铃和"cowbel"0个牛铃。 输出应如何与输入相关? 输出应按此顺序包括输入字符串的级联和增加牛铃数量所需的输入字符串的最短前缀。 例如,"bbbccceeelllllooowwwwwwwww"只需要一个"l"即可容纳3个牛铃而不是2个;包含的最短前缀"l"是"bbbccceeel"。因此,如果输入为"bbbccceeelllllooowwwwwwwww",则输出应为"bbbccceeelllllooowwwwwwwwwbbbccceeel"。 技术性 您可以假定输入仅包含可打印的ASCII字符。如果有一个或两个令您的语言的字符串处理令人讨厌的字符(例如换行符或\),则可以假定输入中不包含这些字符,只需提及此限制。 您可以进一步假设输入中的字母字符全部为小写或全部为大写。如果您不选择其中之一,则不区分大小写计算牛铃。 您可以进一步假设输入包含每个字符的至少一个拷贝b,c,e,l,o,和w。这等效于假定可以将字符串的某些前缀连接到该字符串以产生包含更多牛铃的字符串。(请注意,输入字符串本身不必包含牛铃。) 如果您的语言具有可解决此问题的内建函数...则认真地使用它,真是太棒了。 镀金尿布 由于录制工作室的时间很昂贵,因此您的代码必须尽可能短。字节最少的条目是赢家! 测试用例 (pastebin链接使复制/粘贴更加容易) 测试输入#1: "christopher walken begs for more cowbell!" 测试输出#1: "christopher walken begs for more cowbell!christopher wal" 测试输入2: "the quick brown fox jumps over the lazy dog" 测试输出2: "the quick brown fox jumps over the …
42 code-golf  string 

30
画一个ASCII棋盘!
这对您来说是一个简单的挑战:您必须产生棋盘的ASCII表示形式。白色用大写字母表示,黑色用小写字母表示。空图块用表示.。这是全膳: rnbqkbnr pppppppp ........ ........ ........ ........ PPPPPPPP RNBQKBNR 由于这是一个kolmogorov复杂性问题,因此您可能不接受任何输入,并且必须通过任何默认方法输出此评估板,例如,保存文件,打印到STDOUT或从函数返回。您可以选择产生一个尾随换行符。存在标准漏洞,并且以字节为单位的最短程序! 但是,请记住,这同样是同一种语言的提交之间的竞争。尽管Java之类的语言不可能击败perl之类的语言,或者pyth或cjam之类的高尔夫语言,但Java的最短答案仍然令人印象深刻!为了帮助您跟踪每种语言的最短答案,您可以使用此排行榜,它将按语言和总体显示最短的提交。 排行榜 为确保您的答案显示出来,请使用以下Markdown模板以标题开头。 # Language Name, N bytes N您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数来保持标题。例如: # Ruby, <s>104</s> <s>101</s> 96 bytes 如果要在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字: # Perl, 43 + 2 (-p flag) = 45 bytes 您还可以将语言名称设置为链接,然后该链接将显示在页首横幅代码段中: # [><>](http://esolangs.org/wiki/Fish), 121 bytes 显示代码段 var QUESTION_ID=95745,OVERRIDE_USER=31716;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return …

27
图灵全语言翻译员
我认为这将是一个很酷的挑战,那就是为您选择的图灵完备语言提供口译服务。 规则很简单: 您可以使用任何语言来创建此解释器,即使它比此挑战要新。 您可以使用任何图灵完备的语言,只要它与编写该语言的语言不同即可。 您可能不能简单地评估代码,例如使用eval函数。 关于您如何实现此目的的解释会很好,但不是必需的。 这将以字节计分。 每个提交都必须完全正常工作,这意味着必须显示您选择的语言所具有的每个功能。 简而言之: 您的任务是为您选择的任何一种图灵完备的语言创建一个有效的口译员。 祝好运!

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.