编程拼图和代码高尔夫

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

7
创建自己的健身运动并遵循irl
让我们一起做运动吧?只需跟随火柴人的动作。你问什么火柴人?我们将要创建的那个! 制作一个程序,只允许输入一个包含整数的字符串,并输出以下九个数字,它们之间的间隔为: @ \@/ |@_ _@| @/ \@ |@| \@\ /@/ /|\ | | | | | | | | / \ / \ / \ / \ /|\ /|\ / \ / \ / \ 1 2 3 4 5 6 7 8 9 这将产生一个动画,然后我们可以跟随irl。 这是输入为“ 123245762” 时创建的输出的示例: 一些规则: …

11
他要完成N个工作单元最少需要多少天?
一个人必须完成N工作单元;工作的性质是相同的。 为了控制工作,第一天他只完成一个工作单元。 他希望庆祝工作的完成,因此他决定在最后一天完成一个工作单元。 他只被允许完成x,x+1或x-1在一天的工作单位,在那里x是工作完成前一天的单位。 您的任务是创建一个程序或函数,以计算完成工作单元所需的最少天数N。 样本输入和输出: input -> output (corresponding work_per_day table) -1 -> 0 [] 0 -> 0 [] 2 -> 2 [1,1] 3 -> 3 [1,1,1] 5 -> 4 [1,1,2,1] or [1,2,1,1] 9 -> 5 [1,2,3,2,1] 13 -> 7 [1,2,2,2,3,2,1] 输入可以通过STDIN或作为函数参数,或以任何适当的方式进行。 输出可以被打印或作为功能的结果,或以任何适当的方式打印。 这是代码高尔夫球。最短的解决方案获胜。

3
420 <s> Blaze </ s> Golf It
这是一个非常简单的挑战,但是(我希望)是一个有趣的挑战。 任务 如果现在现在是月4,日是20,小时(在12小时制上)是4,分钟是20,或者分钟是4,第二秒是20,则打印此ascii艺术: . .:. :|: .:|:. ::|:: :. ::|:: .: :|:. .::|::. .:|: ::|:. :::|::: .:|:; `::|:. :::|::: .:|::' ::|::. :::|::: .::|:; `::|::. :::|::: .::|::' :::|::. :::|::: .::|::; `:::|::. :::|::: .::|::;' `::. `:::|::. :::|::: .::|::;' .:;' `:::.. `;::|::. :::|::: .::|::: ::::; `:::::. ':|::. :::|::: .::|:' ,::::;' `:::::. ':|:::::|:::::|:' :::::;' …

4
寻找将计数器增加到特定数量的最短方法
我有一个柜台。这是一个小型设备,看起来像这样: 显示从0000到9999。它在顶部有一个小按钮,可将计数增加1,在右边有一个小旋钮,其目的是将计数器重置为0。 现在,关于小旋钮的事情是,如果您将其向后旋转,则可以使它再次增加任何所需的数字。因此,如果我按下计数器按钮10次以使计数器显示出来0010,则可以向后旋转旋钮,直到听到微小的喀哒声,然后再次将其向前旋转并直接转到0090。 但是,旋钮每次向前推动数字时,都会始终使同一数字的所有出现次数增加1。因此,如果计数器显示6060,则只能使其增加到7070,而不能增加到6070或7060。另外,旋钮将9s 滚动0而不携带,因此0990将前进到0000而不是1000或1100。 我想知道将计数器设置为特定数字的最有效方法。您的任务是编写一个程序或函数,该程序或函数将确定执行此操作所需的最短按钮按下和旋钮前进的顺序。 您的程序将输入从0000到的4位数字9999,并以以下格式返回一系列步骤: &gt; 0001 C &gt; 0093 C12345678C12345678CCC &gt; 1000 C12345678C12345678C12345678C12345678C12345678C12345678C12345678C &gt; 9999 012345678 其中C代表“按下计数器按钮”,而D0到9之间的任何数字代表“使用旋钮将所有出现的次数D增加1”。 您的程序必须针对所有可能的四位数组合生成有效的步骤顺序,并将对所有10,000个案例所需的步骤总数进行评分。在平局的情况下(最有可能在找到最佳算法时),较短的代码将获胜。

2
井字游戏,尽可能快地交叉
根据卢克的要求和彼得·泰勒(Peter Taylor)对此挑战的补充。 介绍 每个人都知道游戏井字游戏,但是在这个挑战中,我们将介绍一些小技巧。我们将只使用十字架。连续放置三个十字架的第一个人输了。一个有趣的事实是,有人输掉前最大的十字架数量等于6: X X - X - X - X X 这意味着对于3 x 3的面板,最大数量为6。因此,对于N = 3,我们需要输出6。 另一个示例,对于N = 4或4 x 4板: X X - X X X - X - - - - X X - X 这是一个最佳解决方案,您可以看到最大的十字架数量等于9。12 x 12板的最佳解决方案是: X - X - X - X X …

5
排序单词以适合给定的字符串
给定一个字母字符串和一组单词,输出单词的顺序,以便可以通过删除不需要的字母在字符串中找到它们。在单词集中单词可能出现多次。输入字符串和所有单词将分别包含1到1000个小写字母。要放置的字母可能出现在单词内部或单词之间。 您的程序或函数可以接受字母字符串和单词作为列表,字符串或来自STDIN,并且必须以正确的顺序输出所有单词作为列表或字符串输出。如果有多个正确的解决方案,请仅输出其中之一。如果没有正确的解决方案,请输出一个空列表或一个空字符串。 例子: dogcatfrog cat frog dog -&gt; dog cat frog xxcatfixsxhingonxgrapexxxfishingcxat cat grape catfish fishing -&gt; catfish grape fishing cat dababbabadbaccbcbaaacdacdbdd aa bb cc dd ba ba ba ab ac da db dc -&gt; da ab ba ba ba cc bb aa ac dc db dd flea antelope -&gt; …
10 code-golf  string 

2
分区列表!
在此挑战中,您需要对列表进行分区,其中分区具有最大大小,最小大小和首选大小。我将使用该符号(min,pref,max) 来表示此挑战中的大小。 对于不熟悉分区的人,以下列表已分为三部分: [0..9] -&gt; [[0,1,2],[3,4,5],[6,7,8]] 当列表不能被均等分割时,您需要使分区尽可能地接近首选大小:[0..10], (2,4,5) -&gt; [[0,1,2,3],[4,5,6],[7,8,9]]。[[0,1,2,3],[4,5,6,7],[8,9]]即使该分区具有更多的首选长度,该分区也比首选。正式地,我们需要最小化(partitionLength-preferredSize)^2每个分区的总和。 分区长度的顺序无关紧要:对于[0..5], (2,3,3),[[0,1,2],[3,4]]或者[[0,1],[2,3,4]]有效。如果没有分区,则返回一个空数组:[0..7], (4,4,5) -&gt; []。 您可以假定1&lt;=min&lt;=pref&lt;=max,并且传递给您的数组是一个非空的整数数组。数组将始终是第一个参数。您可以以任何顺序,以元组或单独的参数接受min,max和pref。 您的程序必须在几秒钟内运行。基本上,不允许在边界内遍历所有可能的分区大小。 测试用例: [1], (1,3,4) -&gt; [[1]] [100], (1,2,3) -&gt; [[100]] [1,2], (1,1,2) -&gt; [[1],[2]] [1,2], (1,2,2) -&gt; [[1,2]] [1,2], (1,3,3) -&gt; [[1,2]] [1,2,3], (1,2,3) -&gt; [[1,2],[3]] or [[1,2,3]] [1,2,3,4], (1,3,4) -&gt; [[1,2,3,4]] [1,2,3,4,5], (3,3,4) …

5
从中间打印阵列
这是一个代码问题。 给定整数s和n,任务是输出长度为n的所有数组,这些数组的值从-s到s。唯一的不足是必须按以下顺序输出它们。 长度为n的全零数组。 长度为n且元素从-1到1的所有数组,不包括您之前输出的任何数组。 长度为n的所有数组,元素从-2到2,不包括您之前输出的任何数组。 依此类推,直到获得长度为n的所有数组,并包含从-s到s的元素(不包括之前输出的任何数组)。 您应该每行输出一个数组。它们可以以空格或逗号分隔。 这是一些不兼容的python代码,它们以正确的顺序输出数组/列表/元组。 import itertools s = 3 n = 2 oldsofar = set() newsofar = set() for i in xrange(s): for k in itertools.product(range(-i,i+1), repeat = n): newsofar.add(k) print newsofar - oldsofar oldsofar = newsofar.copy() print "***" 对于没有设定减法或等效减法的答案,要有额外的荣耀(和我的支持)。

1
十字架,无空
每个人都认识到井字游戏是一款已解决的游戏。但是,仅X的Misère版本提供了一个有趣的选择。 在此版本的游戏中,两名玩家都在板上玩X,并尝试避免连续三局。如果您想了解更多有关此的信息,Numberphile提供了有关此概念的精彩视频。 给定MisèreCrosses董事会,发挥最佳行动。 木板是三行,每行三个字符,分别是X或。从而: X X X XX 是有效的董事会。您可以采用任何方便的格式,只要您的输入和输出使用相同的格式即可。格式包括(但不限于):多行字符串(带有可选的尾随换行符);二维其是字符数组X或; 一维扁平化的布尔值数组,表示是否已播放每个位置。 最佳举动是通过继续最佳发挥来保证您会获胜或尽可能长时间地延长亏损的举动,它由以下规则定义: 避免连续三个。 如果您先走,请在中间玩。 如果唯一的占用空间是中间位置,请在任何剩余的空间中播放。 如果中间的正方形没有被占用,而外部的正方形被占据,则与对手的最后一局相对。 如果中间方格被占领,而外部方格被占领,则在不招致您失败的情况下,与前一步打“骑士步”(对面,翻过来)。 如果没有剩余的方格,您就可以玩剩下的方格。 [注意:在一种情况下,这已被证明不是最佳选择,但无论如何都应使用此算法。] 您可能会认为之前的所有举动都是最佳的。因此,第一个示例板不是有效输入。对手的举动可能是最优的,也可能不是最优的。 如果游戏结束(即连续三场比赛),则行为不确定。 因为这是代码高尔夫球,所以最短答案(以字节为单位)将获胜! 仅使用最佳移动的一种可能路径是: [ ] [ ] [X ] [X ] [X ] [X ] [XX ] [ ]-&gt;[ X ]-&gt;[ X ]-&gt;[ XX]-&gt;[ XX]-&gt;[ XX]-&gt;[ XX] [ ] [ ] …
10 code-golf  game 

1
连接字母
受到这款小游戏的启发。 挑战 给定网格的初始位置(始终为5x5)作为输入,如下所示: -ABCD -A--- ---C- ---BD --E-E 您需要连接字母(相同的字母在一起),删除所有空白-区域。字母将永远是A,B,C,D and E。 每对字母必须由一条可以成直角弯曲的非分支线连接(使用相同的字母表示该线)。 确保输入的每个起始字母正好2次,并且始终具有所有起始字母AE。 可以从stdin读取输入,也可以从某个函数的arg字符串中读取输入,甚至可以从数组/ matriz / chars列表中读取字符,这是最方便的编码语言方式。 因为这是代码高尔夫球,所以最短的代码以字节为单位获胜! 例 不仅每个问题都有一个解决方案,而且规则适用于所有问题(没有空格,没有分隔的字母)。并且保证输入至少具有一个正确的输出。 让我们开始连接字母A: AABCD AA--- AA-C- AA-BD AAE-E 现在,连接字母B: AABCD AAB-- AABC- AABBD AAE-E 现在,连接字母C: AABCD AABC- AABC- AABBD AAE-E 现在,连接字母D: AABCD AABCD AABCD AABBD AAE-E 最后,字母E: AABCD AABCD AABCD AABBD AAEEE …
10 code-golf 

7
罗马数字线段
编写一个程序或函数,接受一个范围为1..3999的整数作为输入,并返回用标准罗马数字表示该整数所需的线段数(因此,您将使用XL,但不使用VM)。例子: 1 -&gt; 1 4 -&gt; 3 5 -&gt; 2 9 -&gt; 3 10 -&gt; 2 40 -&gt; 4 50 -&gt; 2 90 -&gt; 3 100 -&gt; 1 400 -&gt; 3 500 -&gt; 2 900 -&gt; 5 1000 -&gt; 4 罗马数字转换建宏被允许的,但你可以通过反复从上面的列表中减去剩余数量最多的解决问题没有他们。例如:1234 = 4 +1 +1 +1 2 2 2 + …
10 code-golf 

14
反转N维数组
细节 编写一个函数或程序,给定一个仅包含整数的数组(或列表),该函数或程序将返回或输出一个反转了所有子元素的数组。也就是说,颠倒最深数组的所有元素,然后颠倒第二个最深的数组,依此类推。不必指定维度,但是函数或程序必须适用于编程语言本机格式的锯齿状数组。 例子 这个: [[1,2], [3,4]] 会变成这样: [[4,3], [2,1]] 这个: [[[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9]], [[10,11,12], [13,14,15], [16,17,18]], [[19,20,21], [22,23,24], [25,26,27]], [[28,29,30], [31,32,33], [34,35,36]], [[37,38,39], [40,41,42], [43,44,45]], [[46,47,48], [49,50,51], [52,53,54]]] 会变成这样: [[[54,53,52], [51,50,49], [48,47,46]], [[45,44,43], [42,41,40], [39,38,37]], [[36,35,34], [33,32,31], [30,29,28]], [[27,26,25], [24,23,22], [21,20,19]], …
10 code-golf 

1
人性化的文件名检测
介绍 文件名可能千差万别,范围从简单blah.txt到303549020150514101638190-MSP0.txt。前者通常是人为产生的,而后者通常是机器产生的。拥有一个简单的功能对文件是否可以被认为是“人类友好的”做出有根据的猜测,这会很好吗? 受Eduard Florinescu的帖子启发,此帖子已被删除。他的想法很好,但只需要一点充实。 挑战 用您选择的语言编写可以接受字符串的程序或函数,并确定是否将该挑战定义为“对人类友好”。 一些进一步的细节和规则如下: 输入将是由95个可打印的ASCII字符组成的字符串。 “人类友好”应据此定义: 在考虑中不包括扩展名。扩展名定义为最后一个句号,后跟一系列字母数字字符(少至1个,最多6个)。 长度不超过一半的字符串(不包括扩展名)可以由以下定义的字符分组(组合)组成: 连续超过8个十进制字符。 连续至少16个十六进制字符(大写或小写)(必须由字母和数字组成,并且其中至少三分之一的字符是数字)。 %+=连续至少12个Base64字符(用作特殊字符)(必须由字母和数字组成,大小写混合,并且其中至少三分之一是大写字母)。 如果以上任何分组在定义上重叠(例如,符合条件的分组为base64,但连续有8位数字),请选择要排除的最长分组。 输出应该是真实值还是虚假值,具体取决于字符串是否被认为是“人类友好的”。 假设将仅使用有效输入。不用担心错误处理。 优胜者将由最短的程序/功能决定。他们将至少在7天内被选中,或者如果/足够的话,将被选中。如果出现平局,则较早的答案为准。 例子 这是您的代码应能够处理的一些输入和输出示例: "results_for__michael_greer.txt.zip" =&gt; true "Georg Feuerstein - Connecting the Dots.pdf" =&gt; true "M People - Search for the Hero-ntuqTuc6HxM.mp4" =&gt; true "index.html?v=QTR4WGVTUzFsV3d8NHxvcmlnaW5hbHx8MTExMTAxBHxodHRwOi8vLCwsLHRyLDcsMA%3D%3D.html" =&gt; false "ol2DCE0SIyQC(173).pdf" =&gt; false "d41d8cd98f00b204e9800998ecf8427e.md5" =&gt; false "12792331_807918856008495_7076645197310150318_o.jpg" …

7
污染的最后阶段
5x5的收件人内部存在病毒。我们知道它如何传播污染物,您的任务是输出污染物的最后阶段。 收件人 它将被表示为5x5的二维数组: 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 凡1指其中病毒已经被污染的位置,并且0位置不被污染。 病毒如何传播 受污染的位置不能清洁。 仅当其相邻位置中的至少两个(北,东,南和西牢房)受到污染时,清洁位置才会在下一阶段受到污染。 污染的最后阶段发生在没有更多的干净细胞受到污染的情况下。 样品 将上述接收者用作污染的第一阶段,第二阶段将是: 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 …

9
D2高尔夫技巧
您在D打高尔夫球有哪些一般秘诀?我正在寻找可以应用于编码高尔夫球问题的想法,这些想法至少在某种程度上特定于D(例如,“删除评论”不是答案)。请为每个答案发布一个提示。
10 code-golf  tips 

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.