编程拼图和代码高尔夫

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

13
是最大堆吗?
甲堆,也被称为优先级的队列,是一个抽象的数据类型。从概念上讲,它是一个二叉树,其中每个节点的子代小于或等于节点本身。(假定它是一个最大堆。)当元素被推入或弹出时,堆会重新排列自身,因此最大的元素是下一个要弹出的元素。它可以很容易地实现为树或数组。 您应该选择接受的挑战是,确定数组是否为有效堆。如果每个元素的子元素小于或等于元素本身,则该数组为堆形式。以以下数组为例: [90, 15, 10, 7, 12, 2] 实际上,这是一个以数组形式排列的二叉树。这是因为每个元素都有孩子。90岁有两个孩子15和10。 15, 10, [(90), 7, 12, 2] 15岁还有7岁和12岁的孩子: 7, 12, [90, (15), 10, 2] 10个有孩子: 2 [90, 15, (10), 7, 12, ] 而下一个元素也将是10的孩子,除了没有空间。如果数组足够长,则7、12和2也都将有子级。这是堆的另一个示例: [16, 14, 10, 8, 7, 9, 3, 2, 4, 1] 这是先前数组制作的树的可视化效果: 以防万一这还不够清楚,这是获取第i个元素的子元素的显式公式 //0-indexing: child1 = (i * 2) + …

2
棋盘迷宫
棋子(国王,皇后,新人,主教和骑士)和棋子在板上,但不在a1或h8广场上。您的任务是从空的a1到空的h8正方形,仅通过空正方形。行动规则如下: 您可以从任何空白方块继续到其旁边的空白方块(相同等级,下一个或上一个文件;或相同文件,下一个或上一个文件)。 您可以从任何一个空方块到对角线旁边的任何一个空方块(下一个或上一个等级,下一个或上一个文件),条件是每斤角方块包含(a)两个棋子或(b)相反的棋子/棋子颜色。(两个颜色相同的非典当棋子,或一个非典当棋子与典当棋子的强度足以阻止您过弯,但两个典当棋子都不行;相反颜色的棋子/棋子在例如,如果您在c4上并且d5为空,则可以继续进行下去,前提是c5和d4包含典当或包含相反颜色的棋子/棋子。有关图片,请参见下面的“对角线示例”部分。 输入值 FEN的板说明。即:输入将是一个字符串,其中包含等级8的描述,斜杠(/),等级7的描述,斜杠…和等级1的描述。每个等级的描述都包含数字和字母,从文件a到文件h,其中字母表示棋子和棋子(黑色的棋子是p= pawn,n= knight,b= bishop,r= rook,q= queen,k= king和白色1是相同的大写形式),数字表示连续的空方块数。例如,rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBN移动一层后的木板(国王的棋子到e4)在国际象棋游戏中。 输入中a1和h8为空;即,第一个斜杠前面有一个数字,最后一个斜杠后面有一个数字。 输出量 真假,表明是否有可能成功传递到h8。 如果输入不是有效的FEN板描述(即与我上面的解释相符的描述),或者如果a1或h8被占用,则输出可以是任何东西或什么都不是。(换句话说:您可以假设输入满足以上要求。) 计分 这就是代码高尔夫:最少的字节数获胜。 输入和输出示例 请注意,您的代码必须适用于所有有效输入,而不仅仅是示例。 w在每个FEN之后添加一个空格和一个以使其可视化http://www.dhtmlgoodies.com/scripts/chess-fen/chess-fen-3.html。(请注意,其他一些在线FEN可视化工具不允许使用棋类中非法的棋盘,例如,棋子的等级为1或8,因此不能用于我们的目的。) 真实的例子 8/8/8/8/8/8/8/8 —空板 1p1Q4/2p1Q3/2p1Q3/2p1Q3/2p1Q3/2p1Q3/Q1p1Q3/1q3q2—有一条路径a1,b2,b3,b4,b5,b6,b7,c8,d7,(不是 e8,但被遮挡了)d6,d5,d4, d3,d2,d1,e1,f2,f3,f4,f5,f6,f7,f8,g8,h8 8/8/KKKKK3/K3K3/K1K1p3/Kp1K4/K1KK4/2KK4 —一个示例,其中稍后必须通过在某个点被遮挡的正方形(以确保您不会将正方形设置为不可通过) K1k1K1K1/1K1k1K1k/K1K1k1K1/1k1K1K1k/K1k1K1k1/1K1k1k1K/K1K1k1K1/1k1k1K1k—只有一条路可以走(只要顺着鼻子走:每一步只有一个正方形,除非向后走一步);这也是一个正方形在某个点被阻塞但稍后需要的示例 虚假的例子 6Q1/5N2/4Q3/3N4/2Q5/1N6/2Q5/1N6 —任何尝试在路径上的操作都必须穿过两个对角线放置的相同颜色的片段 N1q1K1P1/1R1b1p1n/r1B1B1Q1/1p1Q1p1b/B1P1R1N1/1B1P1Q1R/k1k1K1q1/1K1R1P1r-穿过a8-h1对角线的唯一方法是在f2-g3处,但这将需要穿过e1-d2或f2-e3,这都是不可能的。 4Q3/4q3/4Q3/5Q2/6Q1/3QqP2/2Q5/1Q6 4q3/4Q3/4q3/5q2/6q1/3qQp2/2q5/1q6 对角线示例 如果上面的散文不清楚,这里有一些图片。 可通过对角线 不可逾越的对角线
14 code-golf  chess  maze 

11
我只用美元付款
作为标题-尽管是离散的-暗示,我只用美元支付。 挑战 编写一个将字符串作为输入的函数/程序,该字符串是货币值,后跟一个符号。ex) £4.99。然后,将相同的金额返回转换为美元。 输入值 您将获得一个字符串作为输入。它将带有货币符号,后跟一个带两位小数的数字(可能是.00)。用小数点.和/或逗号,分隔数字。以下货币符号将出现在输入中: 欧元:€ 英镑:£ 人民币:¥ 另外,根据货币的不同,会用逗号或小数点将“美元”与“美分”分开: 欧元:#。###,## 英镑:#,###。## 人民币:#,###。## 输出量 您将输入内容从符号确定的货币转换为USD,四舍五入到小数点后两位。输出将采用format格式$#,###.##,如果需要的话,输出的左边当然会有更多数字(编辑:这意味着输出中有任意数量的逗号,就像输入中一样)。我们将使用的货币汇率如下。 您可以假定输入中包含的符号仅是上述(€ £ ¥ . ,)之一-始终有效。 汇率 €1 : $1.10 £1 : $1.37 ¥1 : $0.15 例子 Input: €1,37 £4.00 ¥2,782,122.78 Respective output: $1.51 $5.48 $417,318.42 最后的话 如果您使用上述符号之一(€,£,¥),则可以将它们计为1个字节 这是代码高尔夫,所以最短的代码以字节为单位!
14 code-golf  math  string 

19
截断连续字符到n个长度
挑战 给定输入字符串和整数n-将连续字符的所有游程截断为最大n个长度。字符可以是任何字符,包括特殊字符。该函数应区分大小写,并且n的范围可以从0到无穷大。 输入/输出示例: f("aaaaaaabbbccCCCcc", 2) //"aabbccCCcc" f("aaabbbc", 1) //"abc" f("abcdefg", 0) //"" f("aaaaaaabccccccccCCCCCC@", 4) //"aaaabccccCCCC@" 计分 评分基于使用的字节数。从而 function f(s,n){return s.replace(new RegExp("(.)\\1{"+n+",}","g"),function(x){return x.substr(0, n);});} 将是104分。 打高尔夫球快乐! 编辑:删除语言限制,但我还是很想看看javascript答案
14 code-golf  string 

21
高尔夫球位编织
注意:此挑战的前半部分来自Martin Ender的先前挑战, Visualize Bit Weaving。 深奥的编程语言 Evil对字节值进行了有趣的操作,称之为“编织”。 本质上是字节的八位的排列(因为模式是对称的,所以我们从哪一端开始计数并不重要): 位0移至位2 位1移至位0 位2移到位4 位3移至位1 位4移至位6 位5移至位3 位6移至位7 位7移至位5 为方便起见,这是置换的其他三种表示形式。作为一个周期: (02467531) 作为映射: 57361402 -> 76543210 -> 64725031 并作为映射对的列表: [[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]] 后 8织品,字节基本复位。 例如,编织数字10011101(157以10 为底)将产生01110110(118以10底)。 输入值 只有256有效输入,即0和之间的所有整数255。可以采用任何基数,但是必须保持一致,并且如果选择的基数不是十进制,则必须指定它。 你可能不会对输入进行零填充。 输出量 您应该以任何基数输出位编织的结果,该结果还必须一致,并且如果不是十进制,则必须指定。 您可以将输出零填充。 相关:可视化位编织

9
最接近7个主要产品的产品
(通过聊天) OEIS条目A123321列出了由七个不同素数组成的数字序列。为简便起见,我们将其称为7DP号。前几个数字及其对应的除数如下: 510510 = 2 * 3 * 5 * 7 * 11 * 13 * 17 570570 = 2 * 3 * 5 * 7 * 11 * 13 * 19 690690 = 2 * 3 * 5 * 7 * 11 * 13 * 23 746130 = 2 …

11
颜色计数,按出现次数排序
这是一个简单的描述,我简直不敢相信这是以前没有打过的: 对于给定的图像(您的语言支持的任何格式),找到唯一的颜色并输出颜色列表。 打印十六进制RGB的颜色代码,即一个哈希符号,#后跟R的2位数字,G的2位数字和B的2位数字(#xxxxxx其中x可以是0-9,AF和/或af)。 十六进制代码后跟一个空格和十进制像素数,然后是换行符(\n或\r\n)。 该列表应按计数降序排序(最常见的颜色在顶部)。 如果有领带(两种颜色的颜色相同),顺序并不重要。 该图像将不包含透明度,因此任何alpha值都不重要。Alpha值可能不是输出的一部分。 必须支持4000x3000的图片尺寸(这可能与类型定义有关) 示例图像“ 10red 20blue 30black 40white”: 预期产量: #FFFFFF 40 #000000 30 #0000FF 20 #FF0000 10 样本图片“蓝色渐变”: 预期的输出之一(因为相同颜色的顺序可能有所不同): #718DFF 19 #5571FF 15 #3855FF 11 #8DAAFF 11 #1C38FF 7 #AAAAFF 7 #8D8DFF 6 #AAC6FF 6 #C6C6FF 5 #C6E2FF 4 #001CFF 3 #E2E2FF 3 #FFFFFF 3 …

11
什么是二进制时间?
什么是二进制时间? 每个人都知道正常时间。它位于屏幕的右上角(或放置在任何位置)。但是人们似乎很少会问自己一个问题:这是二进制时间? 二进制时间 二进制时间(True Binary Time)通过首先读取数字的最高有效位(MSB)来工作。如果该数字为0,则表示的时间是中午之前。如果该数字为1,则表示的时间是中午之后。下一位将第一位表示的半天分成两个相等的一半,这次是6小时。接下来的部分分为3小时,接下来的90分钟,依此类推。12:00:00似乎不应该发生的时代变得如此1。 我只能理解这种奇怪的计时系统,因此我需要一个程序来转换为我的程序。但是由于二进制数是Base-2,而2是小数,因此您的程序必须尽可能短。 要求 您的程序应以一个时间(24小时制)作为输入,并输出相应的二进制时间数字。 输出数字应具有16位精度(该数字应为16位长)。 您不能使用为您完成所有转换的内置函数。 如果需要四舍五入,则应设下限。 规则 标准漏洞禁止出现。 您的程序不应向写入任何内容STDERR。 测试用例 00:00:00==> 0000000000000000 12:00:00==> 1000000000000000 01:30:00==> 0001000000000000 10:33:06==> 0111000010001101 09:57:30==> 0110101000111000 06:00:00==>0100000000000000 18:00:00 ==>1100000000000000 计分 如前所述,要赢,您必须拥有最少的字节数。 意见书 为了确保您的答案显示出来,请使用以下Markdown模板以标题开头。 # Language Name, N bytes N您提交的文件大小在哪里。如果您提高了分数,可以将旧分数保留在标题中,方法是将它们打掉。例如: # Ruby, <s>104</s> <s>101</s> 96 bytes 如果您想在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字: # Perl, 43 + …

9
计算CRC32哈希
学分 这个挑战源自@miles。 创建一个计算输入字符串的CRC32哈希的函数。输入将是任意长度的ASCII字符串。输出将是该输入字符串的CRC32哈希。 说明 CRC32和其他CRC的算法本质上是相同的,因此这里仅展示CRC3。 首先,您需要生成多项式,它实际上是4位[n + 1]整数(在CRC32中为33位)。 在此示例中,生成多项式为1101。 然后,您将具有要哈希的字符串,在此示例中为00010010111100101011001101。 00010010111100101011001101|000 (1) append three [n] "0"s 1101 (2) align with highest bit 00001000111100101011001101|000 (3) XOR (1) and (2) 1101 (4) align with highest bit 00000101111100101011001101|000 (5) XOR (3) and (4) 1101 (6) align with highest bit 00000011011100101011001101|000 (7) XOR (5) …

16
阵列中最小的组
介绍 让我们观察以下数组: [1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1] 甲组由相同的位数彼此相邻。在上面的数组中,有5个不同的组: [1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1] 1, 1, 1 2, 2 1, 1, 1, 1 2, 2, 2 1, 1, 1 这些是最小的一组[2, 2],因此我们输出[2, …

16
最短的唯一子串
给定(在STDIN上,作为命令行参数或作为函数参数)两个截然不同的非空字符串,查找并返回第一个字符串的最短子字符串,而不是第二个字符串的子字符串。如果不存在这样的子字符串,则可以返回空字符串,返回不是原始字符串的子字符串的任何字符串,或者引发异常。如果要从函数返回,则在这种情况下也可能返回null(或未定义,None等)。如果将多个这样的子字符串捆绑在一起,则您可以返回其中的任何一个。 字符串可以包含任何可打印的ASCII字符。 在STDIN上给出的输入将在每一行上给出一个字符串。根据您的要求,可以在输入末尾添加一个空行。 这是代码高尔夫球,因此最短的有效程序将获胜。 一些测试案例 输入: STRING ONE STRING TWO 输出: E 输入: A&&C A&$C 有效输出: && &C 输入: (两个随机生成的80个字母的字符串) QIJYXPYWIWESWBRFWUHEERVQFJROYIXNKPKVDDFFZBUNBRZVUEYKLURBJCZJYMINCZNQEYKRADRYSWMH HAXUDFLYFSLABUCXUWNHPSGQUXMQUIQYRWVIXGNKJGYUTWMLLPRIZDRLFXWKXOBOOEFESKNCUIFHNLFE 所有有效输出: AD BJ BR CZ DD EE ER EY EY FF FJ FW FZ HE IJ IN IW JC JR JY KL KP KR KV LU MH MI …
14 code-golf  string 

6
ASCII艺术玛雅数字
这个挑战很简单。给定一个数字,请使用Mayan Base-20数字系统输出该数字的科学表示形式。 什么是玛雅系统? 玛雅人以20为底来存储数字,因此第一个位置是1s位置,第二个位置是20s位置,然后是400s,依此类推。 因此,玛雅编号以10 1为1底,但10实际上20以10 207为807底,以10 为底,依此类推。 他们用象形文字表示数字,并用特殊符号表示0。 ------------------- | | | | | | | | | | |-------------------| | | | | ------------------- 那是他们的零。(至少一半的picascii一半我的艺术性ascii艺术版本) 那是玛雅零符号的真实图片。1个 这是他们的五个: -------------------------------- | | -------------------------------- 还有一个4: ---- ---- ---- ---- | | | | | | | | | | | | …

3
创建一个饼图
挑战很简单: 根据许多输入值创建一个饼图。 输入将是一个由正数,十进制或整数组成的列表,输出将是一个饼图,其中每个输入值都由单独的颜色表示,并且每个区域之外的百分比值。 规则: 颜色必须在视觉上可以区分(确切的颜色是可选的) 至少会有两个,最大为10个输入值 圆的半径必须在[100 300]像素 范围内 只要默认输出给出[100, 300]像素半径,矢量图形就可以 百分比值应为整数 没有严格的规则说明应将百分比值放在何处,但必须容易看出它属于哪个区域 最接近的字符和圆的外边缘之间的距离必须在[5, 40]像素范围内 字体是可选的 该图可能有也可能没有黑线分隔每个区域 不允许创建用于创建饼图的函数,例如MATLAB:pie,Python:matplotlib.pyplot.pie和Mathematica:PieChart 正常的舍入规则(如果为(1.00, 0.5],则为up,如果为,则为down (0.5, 0.00)) 如果切片的百分比值小于0.5%,则输出0%。切片必须仍包含在图中。 请提供检查用地(或指向口译员的链接)。仅显示带有10个输入值的图就足够了(避免很长的答案) 例子 请使用下面的示例值。您可以使用列表转换成合适的格式数字列表转换器,例如这27个字节一个由jimmy23013。 x = [0.3, 1.2] x = [3, 6, 2, 10] x = [0.4387, 0.3816, 0.7655, 0.7952, 0.1869, 0.4898, 0.4456, 0.6463, 0.7094, 0.7547]


4
切换重力
挑战 您可以通过任何合理的方法为您提供平面上字符的ASCII艺术表示形式。它仅包含: [a-z]表示可移动字符。每个字母最多会出现在板上一次。 # 代表不动的墙壁 . 代表空白 例如: abcdef.gh#.. .......ij.#. #..#.......# ...#.#...### .#.......#q# .........### 您还会得到一个表示重力变化的字符串。它仅包含: > 代表向右引力的变化 < 代表向左引力的变化 ^ 代表向上重力的变化 v 代表向下重力的变化 例如: v>^ 您的程序必须依次模拟重力的每个变化,直到所有角色停止移动(他们撞到墙壁或另一个角色)为止。“掉落在地图边缘”的字符将被永久删除,并且字符可以“堆叠”在彼此之上。 在这个例子中,在开始时有向下重力(v),因此c,e,g,h,i,和j脱落的地图的底部。所有其他字符都向下滑动,直到碰到墙,这样留下地图: .........#.. a..d......#. #..#.f.....# .b.#.#...### .#.......#q# .........### 然后,我们继续向右移动重力(>),这使我们有了:注意a旁边的堆栈如何d。 .........#.. ........ad#. #..#......f# ..b#.#...### .#.......#q# .........### 最后,我们模拟了向上的重力(^),在此期间a和b跌落了地图。 .........#.. .........d#. #..#......f# ...#.#...### .#.......#q# .........### 您的任务是在重力转移后输出其余字符。它们可以以任何顺序给出。对于此示例,您可以输出的任何排列dfq。 测试用例 对于以下地图: …
14 code-golf 

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.