编程拼图和代码高尔夫

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

24
带点和逗号时间标记的ASCII时钟
介绍 想象一下,字符行实际上是两行。上排小圆点-表示小时(24小时制),而下排逗号-表示分钟。只要有可能,一个字符就可以表示小时,分钟或同时表示两者。 起初,您可能必须将午夜以来的分钟数转换为小时数和分钟数。 结果是以“点格式”显示当前时间的字符串。点数(此处的单引号记为点,将称为so!)是自午夜以来的小时数,而逗号数是分钟数。我将展示一些示例以使其清楚。 (备注)hh:mm- result (仅营业时间)05:00- ''''' (仅分钟)00:08- ,,,,,,,, (小时<分钟)03:07- ;;;,,,, (小时>分钟)08:02- ;;'''''' (小时=分钟)07:07- ;;;;;;; (一天的开始)00:00- (空结果) 请注意,“两个”字符最多可使用23次-对于23:xx,其中xx为23或更大。 符号 如果必须用您的语言对字符进行转义(请参阅规则5),则可以将其更改为替代方法之一。如果上述替代方法还不够,则可以使用其他符号-但要使其合理。我只是不想逃避成为一个障碍。 ;(分号) -标记两个小时和分钟(ALT: :) '(撇号) -标记为小时(ALT: '``°) ,(逗号) -标记为分钟(ALT: .) 附加规则 字节数最少的代码胜出! 您必须尽可能使用两个符号。对于02:04的结果不能为'',,,,,也不能为;',,,。必须是;;,, 输入-可以是脚本/应用参数,用户输入(如readline)或代码 3.1中的变量。如果使用内部代码变量,则其长度必须尽可能长。这是1439(23:59),所以它看起来像t=1439 由“两个”字符表示的公共部分(12:05中的12,03:10中的3)必须放在字符串的开头 仅当必须在代码中将符号转义时,才能将符号替换为替代符号。 在00:00之后的分钟内输入。您可以假定这是一个非负整数。 测试用例 Input: 300 Output: ''''' Input: 8 Output: ,,,,,,,, Input: 187 Output: …
39 code-golf  string  clock  time 

30
找到打印此整数序列的程序(警察的线程)
这是警察的话题。强盗的线索在这里。 最后的警察和强盗线索已经在4个月前。 警察的任务 警察的任务是编写一个程序/函数,该程序/函数采用一个正(或非负)整数并输出/返回另一个整数。 如果程序不能容忍零,则警察必须声明它。 警察将提供至少2个样本输入/输出。 例如,如果我决定编写斐波那契数列,则可以在答案中写成: a(0)返回0 a(3)返回2 示例的数量取决于警察的判断。 但是,该序列实际上必须存在于IntegerSequences®的在线百科全书中,因此没有适合您的伪随机数生成器。:( 警察可以根据需要隐藏尽可能多的字符。 例如,如果我的程序是: function a(n) if n>2 then return n else return a(n-1) + a(n-2) end end 然后,我可以根据需要隐藏这些字符: function a(n) if ### then ######## else ###################### end end 强盗的任务 显然是在寻找原始源代码。 但是,只要在OEIS中也可以找到任何建议的产生相同输出集的源代码,那么这些源代码也将视为有效。 警察提示 OEIS中的搜索功能仅适用于连续项,因此,如果您想隐藏序列,则只需在任何地方留一个空洞即可。 显然没有办法隐藏序列。选择顺序时,请记住这一点。 您的分数是代码中的字节数。 获胜者将是7天内未破解的最低分数。 只有2016年4月发布的作品才有资格获奖。欢迎晚于此发布的投稿,但不能获胜。 为了获得胜利,您需要显示完整的代码和OEIS序列(7天后)。 您的帖子应采用以下格式(NN是字符数): Lua,98个字节 …

14
生成圣殿天际线序列
请考虑以下过程: 取一些非负整数N。 例如N = 571 以二进制形式表示,没有前导零。(零本身是唯一的例外,成为0。) 例如571= 1000111011二进制 在此二进制表示中,将连续的1和0分开。 例如1000111011→ 1,000,111,0,11 从最长到最短对运行进行排序。 例如1,000,111,0,11→ 000,111,11,1,0 用交替1的和替换每次运行中的所有数字0,始终以开头1。 例如000,111,11,1,0→ 111,000,11,0,1 连接结果以获得新的二进制数。 例如111,000,11,0,1→ 1110001101= 909十进制 当您绘制由此过程产生的值时,会得到一个漂亮的图形: 希望我将为什么将所得序列称为Temple Skyline序列是显而易见的: 挑战 编写一个使用非负整数N并打印或返回相应的Temple Skyline序列号的程序或函数。您的输入和输出都应为十进制。 例如,如果输入为571输出,则应为909。 以字节为单位的最短代码获胜。 作为参考,以下是从N = 0到20的顺序中的术语: 0 1 1 1 2 2 3 3 4 6 5 5 6 6 7 7 8 14 …

22
三角剖分文字
编写一个程序或函数,该程序或函数的字符串必须保证只能包含可打印的ASCII字符(空格除外),并且长度必须是正三角形(1、3、6、10、15,...)。 打印或返回相同的字符串,但使用空格将其成形为三角形。一些例子将最好地说明我的意思: 如果输入为,R则输出为 R 如果输入为,cat则输出为 c a t 如果输入为,monk3y则输出为 m o n k 3 y 如果输入为,meanIngfu1则输出为 m e a n I n g f u 1 如果输入为,^/\/|\/[]\则输出为 ^ / \ / | \ / [ ] \ 如果输入是 Thisrunofcharactersismeanttohavealengththatcanbeexpressedasatriangularnumber.Diditwork?Youtellme,Ican'tcountverywell,ok? 那么输出将是 T h i s r u n o f c …

3
防辐射奎因
正如您应该(希望)知道的那样,防辐射的奎因是一种奎因,您可以从其中删除任何一个字符,但仍打印其原始的,预先修改的源。事实是,使用其中大多数,您只能删除一个字符。否则一切都会崩溃。这就是它的来历;您的目标是构建一个可以进行尽可能多的字符去除的防辐射的奎因。符合规则的任何语言都可以。 规则 该程序必须至少一个字符长 使用的语言必须是完整的(因此HQ9 +等语言不符合条件) 适用于普通拉皮的所有其他规则也适用于此。 用最少的溶液program_length^(2/n),其中的任何一组的准确n的字符,同时仍打印原始源代码胜被移除。

29
接近挑战的代码:整数和
这是一个简单的挑战:给定整数序列,找到其中的所有整数之和。 但是有一个转折。您的分数是代码与以下短语(挑战)之间的Levenshtein距离: 给定一组整数,找到其中所有整数的总和。 您可以假设输入中没有换行符或尾随空格。 输入/输出示例: Input: 1 5 -6 2 4 5 Output: 11 Input: 1 -2 10 Output: 9 可在此处找到Levenshtein距离的在线计算器:http : //planetcalc.com/1721/

13
我想要蜂窝
编写最短的程序来打印此六角形平铺或蜂窝状的 ASCII艺术部分: __ __/ \__ __/ \__/ \__ / \__/ \__/ \ \__/ \__/ \__/ / \__/ \__/ \ \__/ \__/ \__/ / \__/ \__/ \ \__/ \__/ \__/ \__/ \__/ \__/ 请勿输入任何内容。 输出到标准输出或您的语言最接近的替代产品。 您可以编写一个不带任何参数的命名函数,而不是程序,而可以正常打印结果或将其返回为字符串。 输出可以具有任意数量的前导和/或尾随换行符,并且输出中的每一行可以具有任意数量的前导和/或尾随空格(只要模式正确对齐即可)。 以字节为单位的最短代码获胜。

24
计算数字的数字差总和
考虑采用一些非负整数(例如8675309)并计算所有相邻数字对之间的差的绝对值。 对于8675309我们得到|8-6| = 2,|6-7| = 1,|7-5| = 2,|5-3| = 2,|3-0| = 3,|0-9| = 9。将这些结果串在一起会产生另一个较小的非负整数:212239。重复该过程,得到11016,然后0115,按照惯例,未写入前导零简化为115,变为04或4,不能再进一步减少。总结所有这些价值,我们得到8675309 + 212239 + 11016 + 115 + 4 = 8898683。 让我们将数字差总和(或DDS)定义为以下操作:重复获取数字的数字差以形成新数字,然后将所有结果数字加到原始数字上。 以下是相应DDS序列中的前20个值: N DDS(N) 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 11 …

8
建造稳定的砖墙
砖墙是由水平的1乘n的砖砌成几排而成的矩形。这是一堵高4宽8的墙,右侧显示了砖块大小。 [______][______] 4 4 [__][____][__][] 2 3 2 1 [][______][____] 1 4 3 [____][______][] 3 4 1 这堵墙是不稳定的,因为它有断层,即砖之间的两个垂直裂缝排列的位置,如下图所示,周围的砖中有孔。 [______][______] [__][____)(__][] [][______)(____] [____][______][] 但是,与右边的1号砖块相邻的裂缝并不构成断层,因为它们被一行隔开。 编写代码,查找并显示由指定大小的砖块构成的稳定墙。最少的字节数获胜。 输入值 砖块大小(正数)和高度至少为2的非空列表。可以根据需要对该列表进行排序。您也可以选择各种大小的砖块。 输出量 使用所有给定砖块的所需高度的稳定矩形墙的图片。打印它或将其作为带换行符的字符串返回。 绘制大小为n的2n个字符的砖,下划线用方括号括起来。 1: [] 2: [__] 3: [____] 4: [______] ... 保证输入至少有一个解决方案。如果有多个,您仍然应该只画一堵墙。 没有时间限制;使用尽可能多的蛮力。理论上,您的算法应适用于任何大小的输入。 测试用例: 有多种解决方案,因此您的输出可能会有所不同。 >> [1, 1, 2, 2], 2 [][__] [__][] …

5
使用正则表达式添加数字
我想尝试一种新型的regex高尔夫挑战赛,它要求您用正则表达式替代只解决简单的计算任务。为了使这一切成为可能,减少琐事,您将被允许应用多个替换,一个接一个。 挑战 我们将从简单开始:给定一个包含两个正整数的字符串,用用a分隔的十进制数表示,,产生一个包含它们的总和的字符串,也用十进制数表示。所以,非常简单 47,987 应该变成 1034 您的答案应适用于任意正整数。 格式 每个答案应该是一系列替换步骤,每个步骤都由一个正则表达式和一个替换字符串组成。(可选)对于序列中的每个步骤,您可以选择重复替换,直到字符串停止更改。下面是一个例子提交(它不解决上述问题): Regex Modifiers Replacement Repeat? \b(\d) g |$1 No |\d <none> 1| Yes \D g <empty> No 给定输入123,456,此提交将按如下方式处理输入:第一次替换将被应用一次并产生: |123,|456 现在在循环中应用第二个替换,直到字符串停止更改为止: 1|23,|456 11|3,|456 111|,|456 111|,1|56 111|,11|6 111|,111| 最后,第三次替换被应用一次: 111111 请注意,循环的终止条件是字符串是否更改,而不是正则表达式是否找到匹配项。(也就是说,如果找到匹配项,但替换项与匹配项相同,它也可能会终止。) 计分 您的主要分数将是您提交的替代步骤数。每次重复替换将计为10个步骤。因此,上面的示例将得分1 + 10 + 1 = 12。 在平局(不太可能)的情况下,次要得分是所有步骤的总和。对于每个步骤,请添加正则表达式(不带分隔符),修饰符和替换字符串。对于上述示例,将为(6 + 1 + 3) …

1
为Stack Exchange聊天室创建聊天机器人
挑战 这项挑战的目标是创建一个可以在Stack Exchange聊天室中运行的聊天机器人。您的漫游器需要能够检测用户何时发布特定命令并对其进行响应。这是命令列表,以及您的机器人应该做什么: !!newest:输出在此站点(codegolf.SE)上发布的最新问题的标题(无链接,但标题)。 !!metanewest:输出发布在元网站(meta.codegolf.SE)上的最新问题的标题。 !!questioncount:输出当前的问题计数。 !!metaquestioncount:在meta网站上输出当前问题计数。 !!tag tagname:输出作为第一个参数给出的标签的标签摘录(简短描述)。 !!metatag tagname:与上述相同,但用于元网站。 !!featured:输出当前有赏金的问题计数。 !!metafeatured:输出在Meta上带有[featured]标签的问题计数。 规则 您应该编写完整的程序,而不是代码段或函数。 如果有必要,您可以请求用户名和密码作为输入(提示输入,STDIN,命令行参数)。如果使用(例如)Python或Ruby,这将是必需的,但是如果使用JavaScript并在聊天室页面本身上运行脚本,则不需要。 您可以使用外部库来做WebSockets之类的事情。这些库不必计入您的字符数。 您可以使用外部聊天包装器(但不必这样做,建议您自己编写),然后必须计算字符数。您也不允许更改包装程序的代码。如果使用它,则无需修改即可使用它,并且必须计算所有字符(这是不编写自己的包装器的一种惩罚)。 仅包装器本身的代码必须计数。如果还有其他文件(例如示例),则不必计数。 不使用URL缩短器或其他可以缩短URL的方式:挑战是打高尔夫,而不是打URL。 除了聊天和获取响应命令所必需的信息之外,没有任何Web请求。 不允许使用标准的“漏洞”。 如果有人发布命令,则您需要使用以下格式的聊天消息进行响应:@user response。因此,如果我编写命令!!featured并有5个有特色的问题,则您的机器人应该发布@ProgramFOX 5。 如果我测试了您的机器人,那么我将通过我的chatbot帐户运行它,并在此聊天室中运行它。我将始终在该房间中测试机器人,因此不必提供房间ID作为输入,它始终为14697。不会提供此ID作为输入,它应该是硬编码的。 如果未找到命令,则输出@user The command [command] does not exist。替换[command]为不存在的命令的名称。如果将参数提供给命令,则不输出参数,仅输出命令名称。 如果命令必须包含许多参数,请忽略不必要的参数。 如果命令的参数不足,则输出 @user You have not provided enough arguments 系统防止重复消息在短时间内发布。因此,在测试您的漫游器时,我永远不会运行两个连续提供相同输出的命令(这意味着您不必实现一个系统,该系统如果消息重复则通过添加一个点来使消息不同)。 系统会防止在短时间内发布太多消息,因此在测试时,我绝不会在短时间内发送太多命令,这意味着您的机器人不必为此担心(等待一段时间)例如,在发布之前)。 这是代码高尔夫,使用最少字节数的程序获胜。 入门 这是一些有关编写机器人的入门信息。您不必使用它,但是它可以作为指导。 要登录,请首先登录到OpenID提供程序。这将始终是Stack Exchange OpenID(https://openid.stackexchange.com)。登录表单位于https://openid.stackexchange.com/account/login,并在此处提供用户名和密码。 …
39 code-golf 

14
使用零星的Shift键编程
您的键盘有问题。该Shift键有自己的主见。每次键入一个字符时,您都不知道它是否会移位(尽管它是50-50)。除标准字符键外,键盘上的所有功能均不起作用。没有鼠标或其他输入方式。 您以某种方式知道解决问题的唯一方法是编写一个输出Dear Computer, please stop giving me shift!到stdout 的程序。幸运的是,您的IDE已打开,并且您能够运行程序,但是,当您键入它时,您当然不会知道将转换哪些字符。 您将使用什么顺序的按键来编写一个程序,使其有最大的机会进行首次尝试? 细节 您正在使用标准的QWERTY键盘,因此可以按50个字符键。 未转换版本(仅47个): `1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./ 转换版本(仅47个): ~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>? 最后3个键是Enter,,Tab和Space,它们是相同的。 如果您使用错误的键盘键入了一个N字符序列,则可能会输出2 N-(空格字符计数)方式。例如,键入A Space m可能会产生 a mor A m或a Mor A M。 编写一个程序,将这些字符并查看其所有2 N-(空格字符计数)可能的移位组合。输出Dear Computer, please stop giving me shift!的组合越多越好。您的分数是有效组合(有效程序)的数量除以组合总数。最高分获胜。 笔记 对于有效的程序,Dear Computer, please stop giving me shift!唯一的副作用是精确打印而不要进行其他任何输出。 有效的程序不应接受输入。 无效的程序可以做任何事情。 评论可以在任何地方使用。 空格答案无法获胜,因为获得100%的分数(相对)是微不足道的。您仍然可以提交Whitespace解决方案以获取乐趣。 您的程序最多不能超过1024个字符。 更新:更改Stop …

9
“便捷回文”检查器
如果您曾经尝试编写回文代码,那么您会知道会遇到多少括号。()()是不是回文,即使它还挺看起来像它应该的,而())(和()(都是回文和两个非常愚蠢的期待。如果不是这样的话,会不会很方便? 如果一个字符串等于其所有括号(),方括号()和花括号()颠倒时所得到的字符串,则该字符串很容易回文。没有其他特殊字符需要翻转。(有时会配对,但通常不会配对,因此被忽略了。)()[]{}<> 您的任务是用您的语言编写一个程序(接受STDIN的输入)或一个函数(接受单个字符串参数),该程序(a)当其参数为回文形式且给出不同的,一致的false时,给出一致的真值* (b)本身很方便回文。 例如,以下输入通常是回文的: racecar (a)(bb)(a) void main(int argc, *char[] argv) {} (vgra []rahc* ,cgra tni)niam diov 并且以下不是: non-palindrome A nut for a jar of tuna? (old [style] parens) )snerap ]elyts[ dlo( ingirumimusnocte)etconsumimurigni 除了解释器/编译器标志之外,您不得依赖任何外部状态(特定的文件名,目录结构,其他用户输入,Web访问等)。 另外,您不得使用“注释技巧”来注释掉或通过利用语言的注释功能来渲染未使用的某些代码。例如,不允许以下所有操作,因为它们包含可以安全地移除或销毁的非功能性部件(以失去回文性为代价): {some code} // {edoc emos} {some code} NB.BN {edoc emos} "n\" ;{edoc emos} ;"; …

6
要Vectory!–矢量赛车大奖赛
CarpetPython用户发布了对此问题的新观点,由于搜索空间的增加,该问题更加关注启发式解决方案。我个人认为挑战比我的挑战要好得多,因此请考虑尝试一下! 矢量赛车是一种令人上瘾的游戏,可以用钢笔和一张正方形的纸来玩。您可以在纸上绘制任意的赛道,定义起点和终点,然后以转弯为基础操纵点型汽车。尽可能快地到达终点,但请注意不要陷入困境! 轨道 该地图是一个二维网格,其中每个单元格都有整数坐标。 您在网格单元上移动。 每个网格单元要么是轨道的一部分,要么是一堵墙。 恰好一个跟踪单元是起始坐标。 至少一个跟踪单元被指定为目标。登陆其中任何一个都可以完成比赛。多个目标单元不一定连接。 驾驶汽车 您的汽车以给定的坐标和速度矢量开始(0, 0)。在每个转弯中,您都可以调整速度的每个分量,也可以保持不变±1。然后,将得到的速度矢量添加到您的汽车位置。 图片可能会有所帮助!红色圆圈是您上一转弯的位置。蓝色圆圈是您当前的位置。您的速度是从红色到蓝色圆圈的向量。在这回合中,取决于您如何调整速度,您可以移动到任何绿色圆圈。 如果您降落在墙壁上,则会立即损失。 你的任务 您猜对了:编写一个程序,在输入跑道的情况下,将汽车尽可能少地转向到一个目标单元。您的解决方案应该能够很好地处理任意轨道,并且不会针对所提供的测试案例进行专门优化。 输入值 调用程序时,请从stdin中读取: target n m [ASCII representation of an n x m racetrack] time target是您可能会完成此轨道的最大匝数,并且time是该轨道的总时间预算(以秒为单位)(不一定是整数)。有关计时的详细信息,请参见下文。 对于以换行符分隔的轨道,使用以下字符: # –墙 S- 在开始 *– 一个目标 . –所有其他跟踪单元(即道路) 所n x m提供的网格外部的所有单元格均隐含为墙。 坐标原点在左上角。 这是一个简单的示例: 8 4.0 9 6 ###...*** ###...*** …

8
懒惰战舰安置
想象以下情况:您正在与朋友一起玩战舰,但决定作弊。您决定不放置任何船只,而不是在他拍摄您的船只过去后移动它。您告诉他所有他的投篮都是未命中的,直到不可能以这种方式放置飞船。 您必须编写一个函数或一个完整的程序,该函数或函数以某种方式接受3个参数:字段大小,舰船数量列表和射击列表。 战场 给定参数之一是电路板尺寸。战场是一个单元格的正方形,给定的参数只是该正方形的一侧。 例如,以下是大小为5的电路板。 字段上的坐标指定为2组分字符串:字母后跟数字。在某些特殊情况下,您可以依靠字母。 字母指定列,数字指定单元格的行(1索引)。例如,在上图中,突出显示的单元格由表示"D2"。 由于只有26个字母,因此该字段不能大于26x26。 轮船 船只是1个或更多街区的直线。船舶数量在列表中指定,其中第一个元素是1单元船的数量,第二个是2单元船的数量,依此类推。 例如,该列表[4,1,2,0,1]将创建以下舰队: 当放置在战场上时,舰船不能相交,甚至不能相互接触。甚至没有角落。但是,它们可以接触到场的边缘。 您可以在下面看到有效的船位示例: 您可以假定,对于给定的舰船,在给定尺寸的空板上始终存在一个放置位置。 输出量 如果存在这样的船只布置,则必须输出其中的任何一个。 该程序必须输出以换行符分隔的3种类型的ascii字符矩阵-一种表示空白单元格,一种表示飞船,另一种表示标记为“ missed”的单元格。不应输出其他字符。 例如, ZZ@Z \@@Z @\\Z \Z\\ (在此示例中,我定义@为空白单元格,\为“缺失”单元格并Z为装运件) 如果不存在此类放置,则程序/功能应返回而不输出任何内容。 输入值 如果您决定制作一个成熟的程序,则需要指定您如何输入列表,有些可以通过参数输入,有些可以通过stdin输入。 这是代码高尔夫球,最少的字符获胜。 可以在此处找到一个非高尔夫球优化解决方案的示例,使用 编译-std=c99,第一个参数是木板的尺寸,其他参数是船的尺寸。在stdin上提供了换行符分隔的镜头列表。例: ./a 4 1 1 1 <<< $'A2\nA4\nB3\nC3\nC4\D4'

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.