编程拼图和代码高尔夫

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

4
计算碗桩高度
碗堆高度 这个难题的目的是计算一堆碗的高度。 碗被定义为没有厚度的径向对称装置。它的轮廓形状是一个偶数多项式。堆栈由半径的列表描述,每个半径与一个偶数多项式关联,作为输入作为系数列表给出(例如,该列表3.1 4.2代表多项式3.1 x2+ 4.2 x43.1X2+4.2X43.1x^2+4.2x^4)。 多项式可以具有任意次数。为了简单起见,将堆的高度定义为最顶部碗的中心的高度(有关示例,请参见示例3的图)。 测试用例采用以下格式radius:coeff1 coeff2 ...:每行以代表碗半径的浮点数开头,后跟冒号和空格分隔的列表,其中包含偶数幂的系数,以幂2开头(隐含零常数部分)。 。例如,该行2.3:3.1 4.2描述了一碗半径2.3和形状多项式3.1 * x^2 + 4.2 * x^4。 例子1 42:3.141 描述一个零高度的堆,因为单个碗没有高度。 例子2 1:1 2 1.2:5 1:3 描述了一堆高度2.0(请参见图)。 例子3 1:1.0 0.6:0.2 0.6:0.4 1.4:0.2 0.4:0 10 描述一堆高度为0.8的桩(请参见图中的绿色箭头)。 这是代码高尔夫,所以最短的代码获胜。 我有参考代码。 编辑: 参考实现依赖于一个库来计算多项式的根。您也可以这样做,但不必这样做。由于参考实现只是一个(非常好的)数值逼近,因此我将接受在普通浮点公差范围内能产生正确结果的任何代码。 &lt; ε&lt;ε<\varepsilon 这个难题的另一个变体是通过重新排序碗来最小化高度。我不确定是否有快速的解决方案(我想这很困难)。如果有人有更好的主意(或可以证明NP完整性),请告诉我!

10
根据重新排序的子集对主列表进行重新排序
我最近在工作时遇到一个问题,我有两个列表:一个主列表和一个较小的列表,其中包含主列表中项目的子集,可能以不同的顺序排列。我需要对主列表进行重新排序,以使子集中的项目以相同的顺序出现,而不更改列表中未找到的项目的顺序,并尽可能将项目保持在同一位置。好吧,这听起来可能令人困惑,所以我将其分解: 主清单定义了项目的默认顺序。 子集列表定义某些项目的相对顺序。 如果主列表中有两个元素按照子集列表的顺序排列不正确,则应将主列表中较早的项目移到最早的索引,该索引相对于子集列表中的其他项目位于正确的位置。(即紧接在后面的项目之后) 您的任务是实现此重新排序算法。 示例测试用例 Master: [1, 2, 3] Subset: [] Result: [1, 2, 3] Master: [9001, 42, 69, 1337, 420] Subset: [69] Result: [9001, 42, 69, 1337, 420] Master: [9001, 42, 69, 1337, 420, 99, 255] Subset: [69, 9001, 1337] Result: [42, 69, 9001, 1337, 420, 99, 255] …

8
双字母隐写术
隐秘术将给定的消息隐藏在给定的载体内,从而产生看上去并不可疑的包装。对于此挑战,您将编写一个程序,该程序将ASCII消息和ASCII载体作为输入,并返回或打印与该载体相同的程序包,但与该消息相对应的字符以与它们相同的顺序被加倍。消息。 规则: 如果载体已经多次包含相同字符的序列,并且不使用它们对消息的字符进行编码,则程序会将它们简化为单个字符。 如果载体未按正确的顺序包含消息字符,则程序可能不返回任何内容,载体本身或错误。 您可以假定消息和运营商是非空的ASCII字符串。 大写很重要:A不等于a。 当一个以上的软件包有效时,您的程序可能会输出其中的任何一个或全部。 空格是与其他任何字符一样的字符。 测试用例: 邮件载体包装 “嗨”“到了吗?” “它来了吗?” 或“它到达了吗?” “先生”“到了吗?” “有来吗?” “ foo”“到达了吗?” “”或“到达了吗?” 或错误。 “汽车”“猫很酷。” “ CCaats arre col。” “汽车”“猫很酷。” “”或“猫很酷。” 或错误。 “沙发”“沙发”“ CCoouucchh” “ oo”“ oooooooooo”“ oooo” “ o o”“ oooo oooa”“ oo ooa” 这是代码高尔夫,所以最少的字节获胜。

15
匹配罗马数字
挑战 给定一些输入字符串,如果它表示介于1(= I)和3999(= MMMCMXCIX)之间的正确罗马数字,则返回真实值,否则返回假值。 细节 输入是一个仅包含字符的非空字符串IVXLCDM。 罗马数字(我们在本次挑战中在此处使用)的定义如下: 我们仅使用以下符号: Symbol I V X L C D M Value 1 5 10 50 100 500 1000 要定义哪些字符串实际上是有效的罗马数字,可能最容易提供对话规则:写一个十进制数字a3 a2 a1 a0(每个ai数字代表一个数字。例如,表示792我们有a3=0, a2=7, a1=9, a0=2。)作为罗马数字,我们将其分解变成数十的力量。十的不同幂可以表示如下: 1-9: I, II, III, IV, V, VI, VII, VIII, IX 10-90: X, XX, XXX, XL, L, LX, LXX, LXXX, …

15
展开和收缩
以正整数作为输入。从开始,并反复将增加10的最大整数幂,以使和。kkkn:=1n:=1n := 1nnniiii≤ni≤ni \le ni+n≤ki+n≤ki + n \le k 重复直到并返回所有中间值的列表,包括初始和最终。n=kn=kn = knnn111kkk 在这一过程中,增长最初将受到前者的不平等的限制,然后才受到后者的限制。增长将采取初始“扩张”时期的形式,在此期间,会以更大的幂增加,随后是“契约”时期,在此期间,会以越来越小的幂增加以“放大”在正确的数字上。nnnnnn 测试用例 1 =&gt; [1] 10 =&gt; [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 321 =&gt; [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, …

5
俄罗斯方块!最终身高(第3天)
来自我的大学代码挑战赛的挑战 这实际上是第0天,但昨天的挑战太容易了,可能是这里另一个问题的重复。 俄罗斯方块是一款在80年代流行的视频游戏。它包括将一系列不同形状的零件放置在板上,以便它们以最紧凑的方式放置。 在这个问题中,我们将假设一系列落下的碎片,每个碎片在某个位置和某个方向都无法改变。棋子掉落时会堆积起来,并且不会消除整行(就像在原始游戏中一样)。目的是确定所有零件掉落后板的每一列的最终高度。 共有7个不同的片段,如图所示: 挑战 给定一个零件清单,在所有零件落下后输出木板上所有列的高度 一块包含三个数字:I,R和P。第一个数字I是块的标识符(1到7之间的数字,与图中的顺序相同)。第二个数字R是棋子的旋转。它可以取值0、90、180或270,并表示零件沿逆时针方向旋转的角度。第三个数字P表示棋子的位置。表示作品左侧的一列(可以是1或0索引。请指定)。 示例和测试用例(1个索引) 给定 [[1, 0, 1], [4, 0, 1], [5, 90, 4]] 输出量 [3, 3, 1, 3, 2] 给定 [[6, 270, 4], [1, 180, 5], [1, 90, 6], [7, 0, 4]] 输出量 [0, 0, 0, 9, 9, 8, 3, 3] 给定[[3,0,1],[3,180,3]]输出[1,1,4,4,4] 给定[[2,180,1],[2,0,3]]输出[2,2,4,3,3] 笔记 …
19 code-golf  tetris 

13
Dirichlet卷积
该狄利克雷卷积是一种特殊的卷积出现在数论中一个非常有用的工具。它对一组算术函数进行运算。 挑战 给定两个算术函数(即函数),计算Dirichlet卷积如下定义。F,g ^f,gf,gF,g ^:N → Rf,g:N→Rf,g: \mathbb N \to \mathbb R(f ∗ g ):N → R (f* 克):N → R(f∗g):N→R(f * g): \mathbb N \to \mathbb R 细节 我们使用约定。0 ∉ Ñ = { 1 ,2 ,3 ,... }0∉N={1,2,3,…} 0 \notin \mathbb N = \{1,2,3,\ldots \} 两个算术函数的Dirichlet卷积再次是算术函数,它的定义为(两个和都是等价的。表达式表示除以,因此求和在的自然除数上 。类似地,我们可以用F* 克f∗gf*gF,g ^f,gf,g(f* …

25
最高骰子
挑战: 这是序列的前100个项目: 6,5,4,3,2,1,66,65,64,63,62,61,56,55,54,53,52,51,46,45,44,43,42,41,36,35,34,33,32,31,26,25,24,23,22,21,16,15,14,13,12,11,666,665,664,663,662,661,656,655,654,653,652,651,646,645,644,643,642,641,636,635,634,633,632,631,626,625,624,623,622,621,616,615,614,613,612,611,566,565,564,563,562,561,556,555,554,553,552,551,546,545,544,543,542,541,536,535,534,533,... 这个序列是如何形成的?我们首先获得范围内的数字[6, 1](单个芯片从最高到最低的所有可能值)。然后,我们得到数字[66..61, 56..51, 46..41, 36..31, 26..21, 16..11](从最高到最低的两个骰子的所有可能的conconted值)。等等, 这与OEIS序列A057436有关:仅包含数字1到6,但是所有具有相等位数的数字在该序列中都向后排序。 面临的挑战是按照上述顺序为您的功能/程序选择以下三个选项之一: 输入并输出此序列的第个值,该值可以为0索引或1索引。nnnnnn 输入并输出此序列的前或值。ñnnñnnn + 1n+1n+1 无限期地输出序列中的值。 当然,可以使用任何合理的输出格式。可以是字符串/整数/小数/等。可以是(无限)列表/数组/流/等;可以用空格/逗号/换行符/其他定界符输出到STDOUT;等等。请在回答中说明您使用的I / O和选项! 通用规则: 这是代码高尔夫球,因此最短答案以字节为单位。 不要让代码高尔夫球语言阻止您发布使用非代码高尔夫球语言的答案。尝试针对“任何”编程语言提出尽可能短的答案。 标准规则适用于具有默认I / O规则的答案,因此允许您使用STDIN / STDOUT,具有适当参数的函数/方法以及返回类型的完整程序。你的来电。 默认漏洞是禁止的。 如果可能的话,请添加一个带有测试代码的链接(即TIO)。 另外,强烈建议为您的答案添加说明。 如果您选择选项1,这里是一些较大的测试用例: n 0-indexed output 1-indexed output 500 5624 5625 750 4526 4531 1000 3432 3433 9329 11111 11112 9330 …

3
计算周期性自我描述列表
循环自我描述列表 如果满足以下条件,则正整数列表LLL周期性地自我描述。 LLL是非空的。 LLL的第一个和最后一个元素不同。 如果将LLL分为相等元素的游程,则每个游程的元素等于下一个游程的长度,最后一个游程的元素等于第一游程的长度。 例如,考虑L=[1,1,1,2,3,3,1,1,1,3]L=[1,1,1,2,3,3,1,1,1,3]L = [1,1,1,2,3,3,1,1,1,3]。它是非空的,并且第一个和最后一个元素是不同的。当我们掰成运行,我们得到[[1,1,1],[2],[3,3],[1,1,1],[3]][[1,1,1],[2],[3,3],[1,1,1],[3]][[1,1,1],[2],[3,3],[1,1,1],[3]]。 第一次运行为111 s,下一次运行[2][2][2]的长度为111。 第二次运行是一个运行222 s,并且下一个游程的长度,[3,3][3,3][3,3],是222。 第三次运行是一个运行333 s,并且下一个游程的长度,[1,1,1][1,1,1][1,1,1],是333。 第四轮为111 s,下一轮[3][3][3]的长度为111。 最后,最后一次运行的是一个运行333秒,所述第一游程的长度,[1,1,1][1,1,1][1,1,1],是333。 这意味着LLL是循环自描述列表。 对于非例如,列表[3,2,2,2,1,4,1,1,1][3,2,2,2,1,4,1,1,1][3,2,2,2,1,4,1,1,1]不是周期性自描述的,由于运行222 s的后面长度的运行111。列表[2,2,4,4,3,3,3,3][2,2,4,4,3,3,3,3][2,2,4,4,3,3,3,3]也没有周期性自描述的,自上次运行的是一个运行333 S,但在第一次运行具有长度222。 任务 在这种挑战,你的输入是一个整数n≥1n≥1n \geq 1。您的输出应为总和等于nnn的循环自描述列表的数量。例如,n=8n=8n = 8应导致444中,由于周期性自描述列表,其总和为888是[1,1,1,1,4][1,1,1,1,4][1,1,1,1,4],[1,1,2,1,1,2][1,1,2,1,1,2][1,1,2,1,1,2],[2,1,1,2,1,1][2,1,1,2,1,1][2,1,1,2,1,1]和[4,1,1,1,1][4,1,1,1,1][4,1,1,1,1]。最低字节数获胜,并且适用其他标准代码高尔夫球规则。 这是输入111到505050的正确输出值: 1 -&gt; 0 2 -&gt; 0 3 -&gt; 0 4 -&gt; 2 5 -&gt; 0 6 -&gt; 2 7 -&gt; 0 8 …

13
Trifid Cipher(无关键字)
介绍: 我曾经在小时候编译过的文档中存储了许多不同的密码,我选择了一些我认为最适合挑战的密码(不太琐碎,也不太难),并将它们转变为挑战。它们中的大多数仍在沙箱中,我不确定是否要全部发布还是仅发布其中几个。这是第二个(计算机密码是我发布的第一个)。 对于Trifid Cipher(不使用关键字),字母(和附加的通配符)被分为三个3×3表: table 1: table 2: table 3: |1 2 3 |1 2 3 |1 2 3 -+----- -+----- -+----- 1|a b c 1|j k l 1|s t u 2|d e f 2|m n o 2|v w x 3|g h i 3|p q r 3|y z 我们要加密的文本是第一个字符,每个字符编码为表行-列号。例如,文本this is …

4
Pentomino 6x10解决方案标准化器
正如您现在最可能看到的那样,在6x10的网格中有2339种解决五味子拼图的方法。12种戊糖胺有不同的标记方案,下图显示了其中的两种: 图片来源:维基百科 出于当前任务的目的,我们将说归一化的戊糖胺溶液是使用第二种标记方案(康韦)的溶液。 例: O O O O O S S S Z Z P P R R S S W W Z V P P P R R W W Z Z V U U X R T W Y V V V U X X X T Y …

27
奇怪的加法
挑战 计算两个自然数的奇数和(也称为月球加法): 给定A=... a2 a1 a0和B=... b2 b1 b0两个以十进制为基础的自然数,根据最大运算将奇数和定义为: A+B=... max(a2,b2) max(a1,b1) max(a0,b0) ... a2 a1 a0 + ... b2 b1 b0 ---------------------------------------- ... max(a2,b2) max(a1,b1) max(a0,b0) 输入项 两个自然数 允许以下所有内容: 零填充字符串(相同长度) 左空格填充的字符串 右空格填充的字符串 两个填充字符串的数组 2D空格填充的char数组 输出量 自然数 例 1999+2018--&gt;2999 17210+701--&gt;17711 32+17--&gt;37 308+250--&gt;358 308+25--&gt;328 规则 输入和输出可以任何方便的格式给出(为您的语言/解决方案选择最合适的格式)。 无需处理负值或无效输入 完整的程序或功能都是可以接受的。如果是函数,则可以返回输出而不是打印输出。 如果可能,请提供一个在线测试环境的链接,以便其他人可以尝试您的代码! 禁止出现标准漏洞。 这是代码高尔夫球,因此所有常用的高尔夫规则都适用,并且最短的代码(以字节为单位)获胜。

7
白俄罗斯rushnyk
我们已经遇到了许多国旗挑战:AU CH FI FR GB GB IS KR NP US ...这是另一个更先进的挑战 : 返回或打印白俄罗斯国旗上的装饰图案,作为红色和白色两个不同值的矩阵。 如果您的语言不支持矩阵,请使用列表列表或最接近的列表。所有面都允许有多余的空格。矩阵可以转置。元素可以具有一致的分隔符,行也可以具有分隔符,例如输出可以是JSON。您必须使用2012版本的装饰图案,而不是1951或1995版本。这是代码高尔夫球,因此每种语言的答案最短。 样本输出: ....###....#....###.... #..#####...#...#####..# ..###.###.....###.###.. .###...###...###...###. ###..#..###.###..#..### .###...###...###...###. ..###.###.....###.###.. #..#####...#...#####..# ....###....#....###.... ..#..#..#.....#..#..#.. .###...###...###...###. ##.##.##.##.##.##.##.## .###...###...###...###. ..#..#..#.....#..#..#.. ....###....#....###.... #..#####...#...#####..# ..#######.....#######.. .#########...#########. ####################### ####...#########...#### .#####..#######..#####. ..###....#####....###.. #..#....#######....#..# .......####.####....... #.....####...####.....# ##...####..#..####...## ###.####.......####.### .######..#...#..######. ..####...##.##...####.. ...###....###....###... ....##.#...#...#.##.... ...###....###....###... ..####...##.##...####.. .######..#...#..######. ###.####.......####.### …

12
矩阵是正定的吗?
介绍 今天我们要照顾第一年线性代数学生的祸根:矩阵定性!显然这还没有挑战,所以我们开始: 输入项 任何方便格式的n×nn×nn\times n 对称矩阵AAA(当然,您也可以只取矩阵的上部或下部) 可选:矩阵的大小nnn 该怎么办? 挑战很简单:给定一个实值矩阵n×nn×nn\times n矩阵,如果输出真值,则输出真值,否则输出假值,从而确定其是否为正定值。 您可能会假定内置程序能够真正正确地工作,因此不必考虑数值问题,如果“可证明”的策略/代码产生正确的结果,则可能导致错误的行为。 谁赢? 这是代码高尔夫球,因此以字节(每个语言)为单位的最短代码为准! 反正矩阵是什么? 当对称矩阵为正定时,显然有6个等价公式。我将重现这三个简单的文章,并为更复杂的文章引用Wikipedia。 如果∀v∈Rn∖{0}:vTAv&gt;0∀v∈Rn∖{0}:vTAv&gt;0\forall v\in\mathbb R^n\setminus \{0\}: v^T Av>0则AAA是正定的。可以将其重新公式化为:如果对于每个非零向量vvv,vvv和AvAvAv的(标准)点积为正,则AAA为正定。 让λii∈{1,…,n}λii∈{1,…,n}\lambda_i\quad i\in\{1,\ldots,n\}是特征值的AAA,如果现在∀i∈{1,…,n}:λi&gt;0∀i∈{1,…,n}:λi&gt;0\forall i\in\{1,\ldots,n\}:\lambda_i>0(这是所有本征值是正的),然后AAA是正定的。如果您不知道特征值是什么,我建议您使用自己喜欢的搜索引擎进行查找,因为本文中的解释(以及所需的计算策略)太长了。 如果乔列斯基分解的AAA存在,即存在一个下三角矩阵LLL使得LLT=ALLT=ALL^T=A然后AAA是正定的。请注意,如果在任何时候由于负参数导致算法期间根的计算失败,则这等效于提早返回“ false”。 例子 为真实输出 ⎛⎝⎜100010001⎞⎠⎟(100010001)\begin{pmatrix}1&0&0\\0&1&0\\0&0&1\end{pmatrix} ⎛⎝⎜⎜⎜1000020000300004⎞⎠⎟⎟⎟(1000020000300004)\begin{pmatrix}1&0&0&0\\0&2&0&0\\0&0&3&0\\0&0&0&4\end{pmatrix} ⎛⎝⎜52− 121个− 1− 1− 13⎞⎠⎟(52−121−1−1−13)\begin{pmatrix}5&2&-1\\2&1&-1\\-1&-1&3\end{pmatrix} ⎛⎝⎜1个− 22− 2502030⎞⎠⎟(1−22−2502030)\begin{pmatrix}1&-2&2\\-2&5&0\\2&0&30\end{pmatrix} (7.152.452.459.37)(7.152.452.459.37)\begin{pmatrix}7.15&2.45\\2.45&9.37\end{pmatrix} 虚假输出 (至少一个特征值是0 /正半定) ⎛⎝⎜3− 22− 240202⎞⎠⎟(3−22−240202)\begin{pmatrix}3&-2&2\\-2&4&0\\2&0&2\end{pmatrix} (特征值具有不同的符号/不确定) ⎛⎝⎜1个000− 10001个⎞⎠⎟(1000−10001)\begin{pmatrix}1&0&0\\0&-1&0\\0&0&1\end{pmatrix} (所有特征值均小于0 /负定数) …

10
重复此GCD操作
问题A3来自 2008年Putnam竞赛的说: 开始一个有限序列a1,a2,…,ana1,a2,…,aña_1, a_2, \dots, a_n正整数。如果可能的话,选择两个指数j&lt;kj&lt;kj < k使得一种Ĵ一种Ĵa_j不划分akaka_k,并更换ajaja_j和akaka_k通过gcd(aj,ak)gcd(aj,ak)\gcd(a_j, a_k)和LCM (aĴ,aķ)lcm(一种Ĵ,一种ķ)\text{lcm}(a_j, a_k), 分别。证明如果重复此过程,则它最终必须停止并且最终顺序不取决于所做的选择。 您在此挑战中的目标是将有限整数的正整数作为输入,并输出重复此过程直到无法进一步进行的结果。(也就是说,直到结果序列中的每个数字都除以其后的所有数字。)您无需解决Putnam问题。 这是代码高尔夫:每种编程语言中最短的解决方案胜出。 测试用例 [1, 2, 4, 8, 16, 32] =&gt; [1, 2, 4, 8, 16, 32] [120, 24, 6, 2, 1, 1] =&gt; [1, 1, 2, 6, 24, 120] [97, 41, 48, 12, 98, 68] =&gt; [1, 1, …

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.