编程拼图和代码高尔夫

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

4
Golf String的format()反
反转Format方法。 大多数语言都提供FormatString类的方法(或等价的方法,例如sprintf)。它基本上采用“格式”字符串,其中可能包含具有某些额外格式的占位符,并且要插入零个或多个值来代替这些占位符。 您的任务是以您选择的语言实现逆函数。 API 方法名称应为format1或deformat。 输入:第一个参数将是“格式”字符串,就像在原始格式方法中一样。第二个参数将是解析的字符串(请参见下面的示例)。不需要也不允许其他参数。 输出:格式的占位符对应提取的值的数组(或您的选择语言的等价形式)。 该占位符{0},{1},{2},等。 如果格式不正确,则可能会引发错误,或者返回任何您喜欢的格式。 在输入无效的情况下,您可能会抛出错误或返回任何您喜欢的内容。无效的输入是String.Format无法使用相同格式的字符串生成的,例如:'{0}{0}', 'AAB'。 例子 deformat('{0} {1}', 'hello world') => ['hello', 'world'] deformat('http{0}://', 'https://') => ['s'] deformat('http{0}://', 'http://') => [''] // array of one item which is an empty string deformat('{0}{1}{0}', 'ABBA') => ['A', 'BB'] 歧义性 如有歧义,您可以返回任何合适的答案。例如: deformat('{0} {1}', 'Edsger W. Dijkstra') // …
13 code-golf  string 

10
四元数相乘
编写一个计算两个四元数的四元数乘积的命名函数或程序。使用尽可能少的字节。 四元数 四元数是实数的扩展,进一步扩展了复数。i四元数使用三个i,j,k满足关系的虚构单元,而不是单个虚构单元。 i*i = j*j = k*k = -1 i*j = k j*i = -k j*k = i k*j = -i k*i = j i*k = -j (在Wikipedia页面上也有这些表格。) 换句话说,每个假想单位与平方-1,两个不同的假想单位的乘积是剩余的第三个,+/-取决于是否(i,j,k)遵守循环顺序(即右手定则)。因此,乘法的顺序很重要。 一般的四元数是实部和三个虚部的线性组合。因此,用四个实数描述(a,b,c,d)。 x = a + b*i + c*j + d*k 因此,我们可以使用分布属性将两个四元数相乘,注意按正确的顺序将单位相乘,并在结果中分组类似的项。 (a + b*i + c*j + d*k) * (e …

1
快递信使
快递信使 程序必须接受任何字符串作为输入,并输出在Courier中显示输入字符串的像素图像。所有包含abdegopqABDPQR被黑色像素包围的“孔”(如等)的字母也必须用黑色填充。 输入值 本程序必须能够接受任何ASCII字符串作为输入。输入可以是您想要的任何方式,只要程序代码本身不必为了接受其他输入而进行更改即可。(例如,将要读取的文件的文件名除外。)没有标准漏洞。您可以假定每个输入至少包含一个可打印的字母。 输出量 输出必须是黑白(无灰度)像素图形,该图形必须显示用Courier编写的字符串(黑色,背景白色),并填充指定的“孔”。整个字符串的字体大小必须恒定(这意味着每个不同的字母没有不同的缩放比例),以便完整大小的字母(例如ABCDEFGHIJKLMNOPRSTUVWXYZ,j和Q更大)的高度必须至少为10px。(您不必将其写入文件,只要将其显示为像素图形即可,任何形式的显示都是可以的,例如JavaScript中的画布。)请将此图形与您的答案一起发布。 允许访问courier.ttf /字体库。 该程序还必须计算黑色像素的数量,并将其写入控制台或最终首选的输出方法。 得分了 分数的评估如下:完整的程序代码必须用作程序的输入字符串。黑色像素的数量将成为您的得分。不允许包含不可打印或非ASCII字母的程序代码。(以及标准漏洞。)分数越低越好。

1
融合烟花
总览 在给出烟花a-z和时间清单的情况下3-78,为它们安排保险丝,使它们在正确的时间点亮。 输入行以空格分隔的字母和数字给出: a 3 b 6 c 6 d 8 e 9 f 9 这个例子表明,烟花a需要光在时间3,b并c都在6,d在8,与e和f都在9。每条线对应一张地图。 输出是每行的保险丝/烟花图,使用符号|-显示保险丝,使用字母显示烟花。 甲-保险丝所连接到保险丝和焰火直接左/右它,而|具有低于上述那些/熔丝所连接。例如,熔丝||是不连接的,并且-| 是。 例如,以上两种可能的答案是: ---a ---------f | ||| || |-c ||| de --|--d a|| | b | |c f e b 所有保险丝图应从-左上角的一个开始。那就是您点亮保险丝的地方。保险丝的每个字符耗时一秒钟。如您所见,a在两个图表中,三秒内都达到了,b在六个图中等等。 现在,以上给出的两个映射对于给定的输入均有效,但显然更有效。左边的仅使用13个保险丝,而右边的仅使用20个保险丝。 保险丝不会通过烟花燃烧!因此,对于input a 3 b 5,这是无效的: ---a--b 挑战 您的目标是在所有测试用例中尽量减少使用的保险丝数量。计分非常简单,使用的保险丝总数为单位。 如果您无法为测试案例生成地图,则无论该案例是否是不可能的案例,该案例的得分都是所有时间的总和(上例中为41)。 如果是平局,则修改得分,以便赢得最紧凑的地图。抢七得分是每张地图边框的面积。即,最长线的长度乘以线数。对于“不可能”地图,这是数量最大的正方形(上例中为81)。 如果将提交与这两种评分方法联系在一起,则联系将进入较早的条目/编辑。 …

2
内省式编程:分析其源代码和输出的代码
编写一个程序,输出字符总数以及源和输出中每个字符的频率。您必须遵循示例中说明的格式。 例 如果您的代码是 abb1 它的输出必须是 My source has 4 characters. 1 is "a" 2 are "b" 1 is "1" Besides unquoted numbers, my output has 383 characters. 34 are " " 79 are " " 63 are """ 2 are "'" 2 are "," 4 are "." 2 are "1" …
13 code-golf  quine 

6
PI窗口加密
这是一种简单的加密方法,使用PI数字对消息进行编码,该方法很简单: 键只是一个正整数,它指示窗口从何处开始: 给定一个要加密的字符串,该字符串仅包含小写字母,没有空格,请计算其长度,然后找到PI的第N个数字,然后继续将每个字母向右移动该数字指示的数量。 例如,如果键是,2并且我想编码house,我从第二个开始选择5位数的窗口:14159然后它变成: h -> i o -> s u -> v s -> x e -> n a。-您的程序/函数/算法将接收两个参数,一个仅由无空格的小写字母组成的字符串,以及一个键,它只是1(1表示3)和1000之间的正整数,可能更多或更少,因为我不太确定以上述精度计算PI需要多长时间,因为: b.-您必须自己在代码中计算PI,这是一个与之比较的简洁网页:Pi Day。输入中绝不能让您计算超过1000位的PI,这意味着length(message)+ key <= 1000。 通过计算Pi,我的意思是不要在您的代码中对其进行编码(对于代码高尔夫而言是愚蠢的),也不要在您的代码中使用任何嵌入的常数,任何三角标识(2 * acos(0))或任何Web参考。 c.-输出将只是加密的字符串。 这是一个代码高尔夫球问题,较短的代码胜出! 我将在2014年7月14日接受获奖答案。
13 code-golf  pi 

9
我的窗户上有水
场景 我开车沿路行驶,开始下雨。雨滴随机落在我的窗户上,现在我问自己,最大的连通湿区在哪里? 任务 为了简化操作,将窗口划分为10 * 10正方形矩阵。您的工作是在窗口上找到最大的连接的水滴区域。 输入值 有两种可能的输入,您可以使用2维数组或1维数组。您可以在任何输入(例如stdin等)之间进行选择。 例如: // 2-dimensional: [[0,1,0,0,0,0,1,0,0,0], [0,1,1,0,0,0,0,1,1,0], [0,1,1,0,0,0,0,1,0,0], [0,1,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,0], [0,0,0,1,1,0,0,0,1,0], [0,0,0,1,1,0,0,0,1,0], [0,0,0,0,0,1,1,0,1,0], [0,0,0,0,0,1,1,0,1,0], [0,0,0,0,0,0,0,0,0,0]] // 1-dimensional [0,1,0,0,0,0,1,0,0,0, 0,1,1,0,0,0,0,1,1,0, 0,1,1,0,0,0,0,1,0,0, 0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0, 0,0,0,1,1,0,0,0,1,0, 0,0,0,1,1,0,0,0,1,0, 0,0,0,0,0,1,1,0,1,0, 0,0,0,0,0,1,1,0,1,0, 0,0,0,0,0,0,0,0,0,0] 输出量 您的代码必须以“大小:Z坐标:(X1,Y1)(X2,Y2)..” 的格式输出最大连接区域的大小以及属于该区域的水滴的x坐标和y坐标。 ”。 先前输入的示例: Size: 6 Coordinates: (1,0) (1,1) (2,1) (1,2) (2,2) (1,3) 坐标的顺序无关紧要。 规则 如果水滴相互垂直接触,则它们相互连接 …
13 code-golf 

4
排序以未知基数表示的数字
给定一个字符串列表,将该列表按数字排序,而无需知道使用了什么底数。数字的值也是未知的('1'> 可能是'2')。 由于数字的值未知,因此请使用本福德定律(或第一数字定律)来确定数字的相对值。对于遵循本福德定律的分布,较低值的数字比较高值的数字更频繁地显示为前导数字。 规则 这是代码高尔夫球 字符串列表可以来自您选择的来源(stdin,变量,文件,用户等)。 字符串限于ASCII字符。 未显示为前导字符的字符具有最高值。(假设没有零,并严格按照前导频率进行排序。) 出现在前导数字处的字符与其他字符相同的次数被平均加权。 例 未分类 ['c','ca','ac','cc','a','ccc','cx','cz','cy'] 已排序 ['c','a','cc','ca','cz','cy','cx','ac','ccc'] 注意:在示例中'cz','cy'和'cx'可以以任意顺序显示为第5,第6和第7个元素,因为'x','y'和'z'的权重相等。
13 code-golf 

5
将消息编码为自己的文本的程序
编写一个程序,将给定的文本编码为自己的文本(作为输入提供),而不会破坏其逻辑。该程序还必须充当解码器,从其文本中还原原始消息。转换后必须保留其编码/解码功能。 更正式地说,所需程序P必须使用给定的消息文本M执行以下转换: P(M,P)-> P * P *(P *)-> M 这里P *是转换后的程序,还必须满足上述规则,即: P *(M2,P *)-> P ** P **(P **)-> M2 ,依此类推...每个后续编码不会删除先前编码的文本,因此P **携带两条消息-M和M2。 程序区分编码/解码模式的最简单方法是使用额外的参数M,但要明确指出,最终的决定权取决于您。该程序可能会从文件中读取自己的文本。如果所选语言没有实现此目的的手段,则可以通过任何其他方式将源文本传递给程序。 当然,有一些简单的解决方案,所以这是一场人气竞赛。但是,我在程序文本中施加了禁止注释的限制。

9
测试键盘
我的问题 在我目前的工作地点,我一手维护(因为我没有四肢,所以两手就可以了)维护着大约700台笔记本电脑。由于使用它们的性质和频率,我经常发现它们的损坏还不大。对于此问题,我主要关心的是笔记本电脑退回时,键盘损坏或失效的情况。当硬件维修人员修复这些损坏的键盘时,有必要对其进行测试。该测试涉及使用每个键以及每个键。多么拖累吧?问题是,有时我会忘记是否键入了密钥。 一个办法? 编写一个程序/脚本来: 接受用户输入 提交后(以您认为合适的任何方式),确定是否按下了每个键。 输出yes或no或以任何方式指示我是否成功按了所有键。(如果答案不明显,请在答案中指出两个可能的输出)。 假设: 大写,小写都一样?您认为适合的任何一种方式。只要是[AZ],[az]或[A-Za-z]。数字和其他符号也一样。(因此,如果=键入,+没关系)。您是否要包含移位字符的选择。 您不必担心制表符或空格 不需要功能键,CTRL,ALT,Esc或任何其他在屏幕上不输出内容的键 假定使用EN-US键盘,且笔记本电脑不包含数字键盘。 与操作系统无关,无论您喜欢哪种语言 多次按下该键无关紧要(因为当测试仪变得懒惰并像Mortal Kombat一样开始粉碎按钮时) 这是一个可能返回true的潜在输入集(或者是,或者是“您做到了!”) `1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./ 获胜者取决于最少的字符数。

9
创建世界杯猜谜程序
如您所知,世界杯小组赛阶段已经结束,从明天开始,最好的16支球队将开始淘汰赛阶段: 巴西(BRA) 墨西哥(MEX) 荷兰(NED) 智利(CHI) 哥伦比亚(COL) 希腊(GRE) 哥斯达黎加(CRC) 乌拉圭(URU) 法国(FRA) 瑞士(SUI) 阿根廷(ARG) 尼日利亚(NGA) 德国(GER) 美国(美国) 比利时(BEL) 阿尔及利亚(ALG) 在淘汰赛阶段,每场比赛的获胜者进入下一轮,失败者回家(没有平局)。单击此处查看有关淘汰赛阶段的更多信息。 您已被新的博彩网站golfbet.com录用,因为您擅长编程和体育博彩。您的任务是编写一个可以猜出比赛获胜者的程序或函数。当然,每个人都会做出不同的猜测,只要您的猜测是一致的,都没关系。 如果您不想猜测,可以使用以下猜测: BRA BRA CHI BRA COL COL URU GER FRA FRA NGA GER GER GER ALG GER NED NED MEX NED CRC CRC GRE ARG ARG ARG SUI ARG BEL BEL …
13 code-golf 

8
仅使用++计算平方根
您的任务是计算正整数的平方根,而无需使用任何数学运算符来更改数字,例如: 设置变量(例如squareRoot = 5) 加法(A + B) 减法(AB) 乘法(A * B) 部门(A / B) 平方,立方,四等根 指数 就此问题而言,比较运算符(例如<,>,==等)不被视为“数学运算符”,并且允许它们,只要它们不更改变量的值即可。 您唯一可以使用的运算符是++。有以下例外情况: 如果需要,可以将其设置为0来初始化变量。 如果您的语言不包含++语法,则可以使用等效的语法,例如foo + = 1或foo = foo + 1 平方根应计算为小数点后的至少六位(十万位),并输出为小数点的整数(例如,如果我输入2,则根据四舍五入可以得出14142135624或1414213) 。向上或向下取整并不重要。 不允许使用用户定义的功能。另外,也不允许使用goto模拟功能。 我很想看看每个人都提交了什么!编码愉快! 澄清说明 说明该数字是一个正整数。欢迎您编写可以做任何数字的代码,但这不是必需的。 澄清#2 说明允许比较运算符。 澄清#3 加法,减法,乘法,除法和功能变化的数字都是不允许的所有,不管他们是否被保存到一个变量或没有。抱歉,这会使现有的几个答案无效,但是我想用“更改数字”定义这组运算符,以防止出现巨魔答案(例如,我只是使用sqrt()函数,您只禁止添加,乘法,除法和减法)。对困惑感到抱歉。 澄清#4 说明我们至少需要5位数字。10位数字导致代码长时间运行。

2
青蛙游戏
如何为优质的街机游戏Frogger带来Code高尔夫风格的复兴! 您的任务是使用尽可能少的代码字符来创建此经典游戏的版本。使用您选择的语言(允许使用库,例如jQuery等)。 要求 您有3条生命,并且由于以下原因失去1条生命: 移动到游戏场景之外。 被车辆撞到。 跳入水中。 跳到已经有人居住的家中。 时间不多了。 青蛙用箭头键移动。 在五个住所之间(在顶部的草之间的空间)有固定的间隔,存在一个“传送”错误。 向前移动时,您将获得10分;在发现虫子时,您将获得200点奖励积分;空旷的家中,您将获得500点积分。 计时器滴答作响,每个级别都更快(车辆,青蛙和原木的移动级别也应该更快)。 车辆应有5条车道,有3条带原木的车道和2条带海龟的车道。 每个车道应以随机选择的速度移动(在一定原因内)。 当可用房屋被占用时,青蛙会出现在起点,您可以从该点控制那只青蛙。 当所有五个房屋都被占用后,计时器将重新启动,房屋将变空。游戏结束时,将计算并显示各个级别的分数。 附加信息 不需要开始屏幕,音乐和高分表。您也不需要将设计模仿到像素。想要黑色和白色吗?想要真的很简约吗?还是用立方体代替青蛙或汽车?工作良好!只是保持代码紧密。最短的代码胜出!


3
猜单词(又名Lingo)
这项挑战的目标是编写一个能够以尽可能少的尝试次数猜出一个单词的程序。它基于Lingo电视节目(http://en.wikipedia.org/wiki/Lingo_(US_game_show))的概念。 规则 给定单词长度作为其命令行上的第一个参数传递,播放器程序通过在其标准输出上写一个猜测,然后跟一个字符来进行五次猜测该词的尝试\n。 进行猜测之后,程序会在其标准输入上接收一个字符串,并在其后跟随一个\n字符。 该字符串与要猜测的单词具有相同的长度,并且由以下字符序列组成: X:表示要猜测的单词中不存在给定字母 ?:表示给定字母出现在要猜测的单词中,但在另一个位置 O:表示此位置的字母已正确猜到 例如,如果要猜测的单词是dents,并且程序发送该单词dozes,它将接收到,OXX?O因为d和s是正确的,e放错了位置o并且z不存在。 请注意,如果在猜测尝试中出现的字母次数比在猜测单词中出现的次数多,它将不会被标记为?和O在猜测单词中出现字母的次数以及次数要多。例如,如果要猜测的单词是cozies且程序发送tosses,则它将接收,XOXXOO因为只有一个s要定位。 单词是从英语单词列表中选择的。如果程序发送的单词不是正确长度的有效单词,则该尝试将被视为自动失败,并且仅X返回。 播放器程序应假定wordlist.txt当前工作目录中存在一个名为且每行包含一个单词的文件,并且可以根据需要读取。 猜测只能由字母小写字母([a-z])组成。 该程序不允许其他网络或文件操作。 当O返回仅包含字符串的字符串时,或者在程序尝试5次且无法猜出单词后,游戏结束。 计分 游戏得分由以下公式给出: score = 100 * (6 - number_of_attempts) 因此,如果在第一次尝试中正确猜出了该单词,则会得到500分。最后一次尝试可获得100分。 猜不出这个单词会得到零分。 坑 将通过尝试让播放器程序猜测每个单词长度(包括4和13个字符)在内的100个随机单词来评估播放器程序。 随机单词选择将事先完成,因此所有条目都必须猜测相同的单词。 获胜的程序和被接受的答案将是得分最高的程序。 程序将使用https://github.com/noirotm/lingo上的代码在Ubuntu虚拟机中运行。只要提供了编译和/或运行它们的合理说明,就可以接受任何语言的实现。 我在git储存库中提供了一些使用ruby的测试实现,可以从中获得启发。 该问题将定期用已发布答案的排名更新,以便挑战者可以改善他们的条目。 官方最终评估将于7月1日进行。 更新资料 现在,条目可以假定存在wordlistN.txt文件,以加快读取N的当前单词长度(包括4和13)的单词列表的速度。 例如,有一个wordlist4.txt文件包含所有四个字母词,并wordlist10.txt包含所有十个字母词,依此类推。 第一轮结果 在2014年7月1日,已提交了三个条目,结果如下: 4 5 6 7 8 9 10 11 12 13 Total …

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.