编程拼图和代码高尔夫

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

7
让我们加密吧!
挑战 挑战在于使用以下指定的规则对给定的字符串进行加密。该字符串将仅包含小写字母,数字和/或空格。 等效字符 现在,首先,您将需要知道如何查找每个字符的“等效”字符。 如果字符是辅音,则可以通过以下方法找到它的等价物: 1) List all the consonants in alphabetical order b c d f g h j k l m n p q r s t v w x y z 2) Get the position of the consonant you are finding the equivalent of. 3) The equivalent …

4
用适当的总和计算矩阵数
在Steenrod代数的Milnor基中乘以单项式时,该算法的一部分涉及枚举某些“可允许矩阵”。 给定两个非负整数r 1,...,r m和 s 1,...,s n的列表,一个非负整数X的矩阵 如果是允许的 第j列的总和小于或等于s j: 第i行乘以2的幂进行加权的总和小于或等于r i: 任务 编写一个程序,该程序采用一对列表r 1,...,r m和s 1,s 1,...,s n并计算这些列表的允许矩阵数。如果需要,您的程序可以选择将m和n作为附加参数。 这些数字可以按喜欢的任何格式输入,例如分组到列表中或以一元编码或其他形式输入。 输出应为正整数 有标准漏洞。 计分 这就是代码高尔夫:以字节为单位的最短解决方案获胜。 例子: 对于[2]和[1],有两个允许的矩阵: 对于[4],[1,1]存在三个允许的矩阵: 对于[2,4],[1,1]有五个允许的矩阵: 测试用例: Input: [1], [2] Output: 1 Input: [2], [1] Output: 2 Input: [4], [1,1] Output: 3 Input: [2,4], [1,1] Output: 5 Input: …

5
一举两得
正如我们在这个问题中看到的那样,可以用广义Minesweeper的简单连接词来表示复杂的逻辑语句。但是,广义扫雷器仍有冗余。 为了避免这些冗余,我们定义了一个名为“ Generalized-1 Minesweeper”的新游戏。 Generalized-1 Minesweeper是在任意图形上播放的Minesweeper版本。该图具有两种类型的顶点,即“指示器”或“值”。值可以是开或关(地雷或哑巴),但玩家不知道其状态。指示器会告诉您,一个相邻的电池正好在(地雷)上。指标本身不算地雷。 例如,下面的通用扫雷板告诉我们,单元格A和B要么都是地雷,要么都不是地雷。 (在图中,指示器以灰色标记,而值则为白色) 与普通的扫雷器不同,在常规的扫雷器中,单击关闭的值即可显示指标,而在通用扫雷器中则没有这种机制。玩家只需确定图表的哪些状态可以满足其指标。 您的目标是制作一辆2Generalized-1扫雷车。您将在Generalized-1 Minesweeper中构建一个结构,以便有8个特定的像元,其所有可能的值配置都恰好有两个像元。这意味着它的行为与2传统扫雷器的行为完全相同。在编写解决方案时,您不应该在意价值单元格的具体价值。(在回答H.PWiz的问题时,允许某些值单元可以从状态中推论得出) 计分 您的答案将由最终图形中的顶点数减去8(对于8个输入)得到评分,得分越低越好。如果此标准中有两个答案,则平局决胜局将为边数。

10
创建N维单形(四面体)
一个可以为任何尺寸创建的最简单的N维形状是Simplex,这是一组N + 1个点,它们彼此之间的距离相等。 对于2维,这是等边三角形,对于3维,这是正则四面体,在4维上是5单元,依此类推。 挑战 给定整数维N作为输入,输出代表该维单纯形的数组/列表/堆栈/ N个维点中的任意一个。即,N + 1个顶点彼此相等且距离不为零。 Lua中的参考实施 例子 1 -> [[0], [1]] 2 -> [[0, 0], [1, 0], [0.5, 0.866...]] 4 -> [[0, 0, 0, 0], [1, 0, 0, 0], [0.5, 0.866..., 0, 0], [0.5, 0.288..., 0.816..., 0], [0.5, 0.288..., 0.204..., 0.790...]] 笔记 输入是任何标准格式的数字,并且始终是大于1且小于10的整数 硬编码允许输入1,但不能更高。 输出中允许出现合理的错误。浮点算术或Trig问题可能会被忽略。 N维单纯形的任何变换都是允许的,只要它保持正则和非零即可。 …

14
通过插入减少主要因素的数量
给定两个正整数甲和乙,返回的位置p的是最小化的所得到的整数的素因子(计数多重)的数量,当乙被插入在一个在p。 例如,给定A = 1234和B = 32,这些是可能的插入(p为0索引)以及有关其主要因子的相应信息: p | 结果 主要因素| Ω(N)/计数 0 | 321234 | [2,3,37,1447] | 4 1 | 132234 | [2,3,22039] | 3 2 | 123234 | [2,3,19,23,47] | 5 3 | 123324 | [2,2,3,43,239] | 5 4 | 123432 | [2,2,2,3,37,139] | 6 您可以看到,当p为1 时,结果具有最小数量的质因子3。因此,在这种情况下,应输出1。 眼镜 如果有多个位置p使结果最小化,则可以选择输出所有位置p或其中的任何一个。 …

3
贷款“大量”的钱
介绍 您有一个不断向您要贷款的朋友,您对此感到厌倦。今天,他再次来借钱。您不会拒绝他的提议,而是有了一个好主意:通过给他的朋友尽可能多的硬币/票据来拖曳他的朋友。 挑战 您将输入:您的朋友想要贷款的金额以及您拥有的硬币/票据的金额。对于此挑战,可能的面额为$ 20.00,$ 10.00,$ 5.00,$ 2.00,$ 1.00,$ 0.25,$ 0.10,$ 0.05和$ 0.01。输入的一个示例是,5.67, [5, 3, 4, 5, 5, 9, 8, 1, 2]如果您的朋友想要5.67美元,并且您有5张20美元的钞票,3张10美元的钞票等。您的输出将是能给您的朋友尽可能多的金属/纸张/塑料的硬币/钞票的数量。 如果不可能给您的朋友确切的金额,请给他您可以支付的最接近的金额,该金额要大于他想要的金额。例如,如果您的朋友想要$ 0.07但您只有$ 0.07 [0, 0, 0, 0, 0, 2, 4, 2, 0],则给他2个$ 0.05硬币(而不是1个$ 0.10,因为那样会给他尽可能多的硬币!)。 如果您的朋友想要的钱比您多,请把所有的钱都给他(并祈祷您不需要购买任何东西)。 测试用例 Input: 6.54, [9, 8, 7, 6, 5, 4, 3, 2, 4] Output: …
12 code-golf  math 

18
加密数字!
问题: 两个敌对的秘密特工设计了一种极好的(对您来说)通信方式! 加密过程的工作原理如下: 1)取每个字母的ascii等效项。(不发送空格,数字或标点符号) 2)对于消息中的每个字母,将它和它后面的字母(如果存在,如果不存在,则应视为0)的等效字母乘以(此乘积存储在数组/列表中)并求和(此数字也存储在其他列表中)。 3)将两个列表(总和和乘积)连接在一起(总和列表,然后是倍数列表,进入同一数组)并传输。 您需要编写最小的程序来反转此过程并解密以这种格式发送的消息! 输入和输出对示例: [173, 209, 216, 219, 198, 198, 225, 222, 208, 100, 7272, 10908, 11664, 11988, 9657, 9657, 12654, 12312, 10800, 0] -> “HelloWorld” [131, 133, 164, 195, 197, 99, 4290, 4422, 6499, 9506, 9702, 0] -> “ABCabc” 这是代码高尔夫球,因此以字节为单位的最小解决方案获胜。 错误消息是允许的。 如果在提交中指定,则可以为程序提供列表1维数组或逗号分隔的字符串。默认值为数组/列表。

10
解开双链接数据
双向链接列表是一种数据结构,其中每个节点都具有value指向列表中的previous和的“链接” nodes。例如,考虑以下具有值12、99和37的节点: 在此,值为12和99的节点指向其各自的next值为99和37的节点。值为37的节点没有next指针,因为它是列表中的最后一个节点。同样,值分别为99和37的节点指向它们各自的previous节点12和99,但是12没有previous指针,因为它是列表中的第一个节点。 设置 实际上,节点的“链接”被实现为指向内存中上一个和下一个节点位置的指针。对于我们的目的,“内存”将是节点的数组,而节点的位置将是其在数组中的索引。节点可以认为是形式的3元组( prev value next )。那么,上面的示例可能如下所示: 但它看起来可能像这样: 从任何节点开始,您可以跟随previous链接(显示为红色箭头的起点)到达其之前的节点,并跟随链接(next绿色箭头)以查找后续节点,以便按顺序获取所有节点的值:[12, 99, 37]。 上面的第一个图可以用数组表示[[null, 12, 1], [0, 99, 2], [1, 37, null]]。那么第二个是[[2, 99, 1], [0, 37, null], [null, 12, 0]]。 挑战 编写一个程序,该程序将节点数组和节点索引作为输入,并以列表顺序返回同一双链表中节点的值。 并发症 “内存”并不总是只包含一个列表的节点。它可能包含几个列表: 上面的数组包含三个双向链接列表,为方便起见用颜色编码: 在索引节点7,10,1,4,3,12(只显示next链接,以减少混乱;点击放大): 给定此数组和所有这些索引,您的程序应按顺序返回values [0, 1, 1, 2, 3, 5, 8]。 索引处的节点9: 给定索引9,您的程序应返回[99]。 在索引节点11,8,0,6,2: 给定这些索引之一,它应该返回[2, 3, 5, …

2
圣诞老人送礼物要花多长时间?
不久前,我发布了这个挑战,它涉及圣诞老人需要送多少礼物的精灵。 由于人口增加,圣诞老人在今年的时间上压力更大。尽管过去我们非常异步地运行,但是我们开始尝试越来越同步。因此,圣诞老人需要知道他要花多长时间才能将给定数量的精灵送给每个地区的礼物。 煤炭的重量在过去两年中没有变化-它仍然比礼物重,因此圣诞老人在屋子里每个顽皮的人需要三个精灵,在屋子里每个好人需要两个精灵。 精灵们整年都在圣诞节训练,因此分娩之间不需要任何休息。他们一次只能将礼物送到一所房子,并且必须回去圣诞老人的雪橇并收集下一份礼物,然后再去下一所房子。由于我没有自由分享的理由,精灵们不会花时间在圣诞老人的雪橇和房屋之间旅行(但只能在圣诞老人的雪橇在屋顶上时旅行),他的雪橇也不花时间在房屋之间移动。(圣诞老人的雪橇确实需要在每个房子之间移动以收集燃料,但我已经说了太多了。) 运送礼物的精灵需要花费4秒*每个运送礼物,运送煤炭的精灵需要花费5秒*每个运送礼物(根据圣诞老人航空管理局的规定,戴有煤尘的手套必须在焚化后立即焚化。登上雪橇,这需要一些时间)。此外,必须按照从左到右在地图上的顺序来访问房屋,并且在所有礼物都已交付到他们当前所在的房屋之前,精灵无法开始将礼物交付到其他房屋。 如果我们假设圣诞老人在该地区拥有足够多的精灵,那么只需要花费很长时间就可以向顽皮名单上的某人送礼物,每只房子5秒,如果每个人都很好,则每只房子4秒。 但是,与前几个季节相比,这个即将到来的圣诞节圣诞老人的每个区域可能没有足够的精灵,因此4秒是将礼物运送到任何给定房屋所需的最短时间*,除非有0好人和​​0个顽皮的人,在这种情况下,将需要0秒。 另外,即使其中一所房子的顽皮名单上也有人,圣诞老人也将需要至少三个精灵。如果至少其中一所房子的某个人在好名单上,而没有一个人在顽皮的名单上,那么圣诞老人将需要至少两个精灵。如果没有一所房子符合圣诞节的气氛,那么任何数量的精灵(包括0个)将花费0秒。 在圣诞老人的地图上,一栋房子用表示*,每栋房子用分割+。圣诞老人仍然使用与其他挑战相同的地图,但是我将在此处包括有关它们的文档。 房子的两边都会有一个数字-左边的数字代表房子里顽皮的人数,右边的数字代表房子里好人的人数。如果一侧没有数字,则将其解释为0。 我知道这听起来很疯狂,但是有些人“不喜欢圣诞节”,所以有时候,房子的两边可能没有数字。 圣诞老人的一张地图可能看起来像这样。 1*3+2*+*5+*+4*7 假设圣诞老人的雪橇上有九只精灵。 (0s)第一所房子有1个顽皮的人和3个好人。其中三只精灵需要五秒钟来运送煤炭,六只礼物需要四秒钟来运送礼物。五秒钟后,圣诞老人的雪橇移到下一所房子 (5s)第二宫有2个顽皮和0个好人。六个精灵运送煤炭,耗时五秒钟。五秒钟后,圣诞老人的雪橇移到下一所房子 (10s)第三宫有0个顽皮和5个好人。其中有八只精灵送来了四个礼物(被遗忘的那一个无法送出礼物)。四秒钟后,所有的小精灵都回来了,其中两个去运送另一个礼物(雪橇必须等到小精灵回来之后才能去下一所房子),再花四秒钟 (18s)第四宫不属于圣诞节气氛,所以有0个顽皮和0个好人,因此被跳过 (18岁)第五宫有4个顽皮的人和7个好人。这有点复杂... I.所有九个精灵都去交付三份煤礼物(离开t + 0,返回t + 5s)II。5s之后,他们又回到了雪橇上,其中三个去送了最后一个煤炭礼物(离开t + 5s,返回t + 10s),而其他六个去了三个礼物(离开t + 5s,返回t + 9s)。 三,四秒钟后,六个小精灵又回来了,又去送了三个精美的礼物(离开t + 9s,返回t + 13s)。 IV。他们离开后一秒钟,三个送煤的精灵回来了,其中两个离开了,送了最后一个漂亮的礼物(离开+ 10s,返回t + 14s) (18 + 14 = 32秒)圣诞老人完成了向该地区运送礼物的工作。 如我们所见,圣诞老人总共需要32秒钟才能将礼物运送到该地区。不过,那是圣诞老人的一张地图的过于简化的版本。通常,圣诞老人的地图有多条线,并且呈正方形,以便更好地适合他的列表。法线贴图可能看起来像这样(\n每行的结尾处是a ) 1*2+*+*4+1* 2*4+3*+1*6+* …
12 code-golf  string 

2
玩骰子板球游戏
骰子板球是我从小就被介绍的一款游戏,并且自那以后一直用作打发时间的一种方式。我找不到维基百科页面,所以我将在下面解释规则。 骰子板球规则 前提 骰子板球是类似于得分的游戏的游戏板球,你看它,但不是观看和录制的结果,你掷骰子,并记录结果。 结果记录在底部显示的表格中。 显示 骰子板球使用特定的显示屏来显示所有发生的信息。 该表有11行。每行代表一个击球手。该行的布局说明如下。 +------+------------------------------+---------+-----+ | Name | Runs | How Out |Score| +------+------------------------------+---------+-----+ 名称:名称必须是完全由大写或小写字母组成的字符串 运行:击球手可以面对30个球。每个球可以是之一1 2 4 6 . /。这将在下面更详细地说明 表现:击球手的出场方式。可以是任何Bowled, LBW (Leg Before Wicket), Caught, Retired or Not Out 分数:中的所有数字之和 Runs 游戏如何运作 在游戏中,球场上总是有2个击球手。默认情况下,第一个玩家是当前击球手,第二个是“关闭”击球手。 游戏是由“球”组成的:板球比赛中的每个球都由掷骰子表示。每个滚动执行不同的命令: 1,2,4和6使击球手得分高很多。如果将1滚动,则当前面糊将变为“关闭”面糊,而“ off”面糊将变为当前面糊 3是“圆点球”,表示什么也没有发生。它在本Runs节中以a表示.,得分为0。A 0不能用来表示它。 5是检票口。如果掷出5,则当前击球手为“出局”,这意味着a /被添加到奔跑中,此后,击球手将不再得分。然后将面糊与下一个未击打的面糊交换。本How Out节是随机选择的逃生方式:Bowled, LBW, Caught 检票口的示例(为清楚起见,这不是输出方式) …

3
挑战四:现在的组装线!
<<上一页 下一页>> 圣诞老人能够重新制造精灵过夜偷走的所有礼物!现在,他必须将它们发送到装配线进行包装。他通常有一个摄像头来监督装配线,既要确保精灵们做得很好,又要确保装配线的图片在广告海报上看起来不错[需要引用] 不幸的是,他的相机坏了,所以他希望您对装配线的外观进行模拟! 为了使装配线保持最高效率,并减少发生错误或故障的风险,所有现有的包装盒均具有相同的宽度,以使其完美地适合于输送带。 挑战 给定一个由其尺寸表示的礼物清单,输出带有所有礼物的传送带。 礼物是这样绘制的: +----+ / /| +----+ | | | + | |/ +----+ 该礼物的宽度为1,高度为2,长度为4。请注意,加号不计入边长,因此长度为4的礼物实际上横跨6个位置。 所有礼物都紧挨着绘制,最接近的两个字符之间有一个空格。也就是说,礼物的左下角之间的间距应使如果礼物盒具有长l和宽w,则下一个礼物盒的左下角将恰好l + w + 4位于前一个箱子的左下角的右侧。 绘制完所有存在的盒子之后,通过用width + 2下划线替换最后一行中每条盒子之间的空间来绘制传送带。 与礼品盒的最终输出(l, w, h)的[(4, 1, 2), (8, 1, 3), (1, 1, 1)]是: +--------+ +----+ / /| / /| +--------+ | +-+ +----+ | …

16
素数范围的第一个和最后一个质数
挑战 对于给定的正整数范围,找到完全由质数数字组成的第一个和最后一个质数,特殊情况下包括0(对于数字,0-2的范围应输出2-2)。范围包括在内。如果找不到数字,则预期输出为0。如果只有一个这样的数字,则预期输出为该数字的两倍。 例子 对于范围1–100,第一个质数是2,最后一个质数是73(7和3是质数)。 对于70-80的范围,第一个质数是73,最后一个质数也是73(由于给定范围中只有一个正确的数字,因此将其返回两次)。 对于190-200范围,没有正确的答案,因此您返回0。 对于2000-2100范围,第一个质数是2003,最后一个质数是2053(我们省略了数字0,但其他所有数字都是质数) 这是代码高尔夫球,所以最短的代码以字节为单位! 所有标准漏洞均适用。 输入值 您可以自由接受两个整数作为输入,但是您可能会看到fit,stack,函数参数,CLI参数,stdin。 你必须只收到两个整数。 输出量 您必须返回结果(一个元组,一个数组,如果您的语言支持它,则应多次返回),将其保留在堆栈中或打印出来(在这种情况下,必须以某种方式将它们分开)。 输出的顺序无关紧要。 您可以使用前导/后括号和换行符。 即使有答案,您也必须返回两个数字,即使它们相同。 如果没有答案,则必须返回0。

22
交替涂抹
介绍 此挑战要求您将整数二进制表示形式的尾随零设置为010101…,这最好用一个示例进行说明: 给定整数400,第一步是将其转换为二进制: 110010000 如我们所见,第五位是最低有效1位,因此从此处开始,我们将低位零替换为0101: 110010101 最后,我们将其转换回十进制: 405 挑战 给定正整数返回/输出,上述定义过程的相应结果值。 规则 此序列仅针对具有至少一位的整数定义1,因此输入将始终≥1 您可以将输入作为字符串,而不是数字列表(十进制) 您不必处理无效的输入 测试用例 以下是一些带有中间步骤的测试用例(您不必打印/返回这些用例): In -> … -> … -> Out 1 -> 1 -> 1 -> 1 2 -> 10 -> 10 -> 2 3 -> 11 -> 11 -> 3 4 -> 100 -> 101 -> …

5
不太值得信赖的朋友的银行
介绍 您已经在后院的虚假国家担任财政部长的工作。您已决定在您的国家/地区为自己和不那么可信赖的朋友建立自己的银行。由于您不信任朋友,因此您决定编写一个程序来验证所有交易,以防止朋友过度消费您的虚构货币并破坏您的经济。 任务 给定初始余额和所有交易,请过滤掉某人试图超支的所有交易,并阻止所有试图超支的人(包括试图超支至已关闭账户的人)再次使用您的银行,方法是过滤掉往来于他的银行的交易。 /她的银行帐户。 输入输出 两个列表A和B作为输入和一个列表C作为输出。A是格式为的每个帐户的期初余额[["Alice", 5], ["Bob", 8], ["Charlie", 2], ...]。B是具有以下格式的交易列表,[["Bob", "Alice", 3], ["Charlie", "Bob", 5], ...]其中["Bob", "Alice", 3]表示Bob想要支付Alice 3货币单位。C格式应与相同B。A,B并且C可以采用任何合理的格式。 测试用例 A: [["Alice", 5], ["Bob", 2]] B: [["Alice", "Bob", 5], ["Bob", "Alice" 7]] C: [["Alice", "Bob", 5], ["Bob", "Alice" 7]] A: [["A", 2], ["B", 3], ["C", 5]] B: …
12 code-golf 

4
找回密码
普通的N位数字密码锁由N个旋转盘组成。每个光盘上都有按顺序刻印的数字0-9,您需要将它们转换为正确的密码才能打开它。显然,如果您不知道密码,则在解锁之前最多需要尝试10 N次。那没意思。 因此,让我们考虑一下组合锁的一种变体,将其命名为距离公开锁。 在每次尝试不打开距离显示锁的尝试中,它都会响应最小数量的动作以解锁。 一个运动是通过一个位置定义为一个旋转,例如,它需要从1个运动890到899,并且从9个运动137到952。 挑战 给定具有密码未知的距离揭示锁,请尝试以最少的尝试次数(而不是移动)打开锁,同时防止程序过长。 规则和计分 您应该编写一个完整的程序,该程序将从stdin输入并将其输出到stdout。该程序应执行以下输入/输出: Start Input an integer N (number of digits) from stdin Do Output a line containing decimal string of length N (your attempt) to stdout Input an integer K (response of the lock) from stdin While K not equal 0 End 您的程序最多可以处理N …

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.