编程拼图和代码高尔夫

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

3
最小矩形盖
矩形盖 假设您有一个位矩阵,例如以下。 1 1 0 0 0 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 我们想找到这个矩阵的矩形封面。它是矩阵的一组矩形子集,其中不包含任何0,但一起包含所有1。子集不需要是不相交的。这是上述矩阵的矩形封面示例。 +----+ +----+ |1 1| 0 0 0 …

20
方形三角形
一个正整数x是一个正方形三角形,如果存在两个不同的正整数y和z,则它们小于x,使得所有和 x + y x + z y + z 是完美的正方形。 例如30是一个正方形三角形数字,因为 30 + 6 = 6 2 30 + 19 = 7 2 6 + 19 = 5 2 您的任务是编写一些代码,该代码以正整数作为输入,并确定它是否为正三角形。您应该输出两个不同的值之一,如果输入的是正方形三角形,则输出一个,否则输入另一个。 这是代码高尔夫球,因此答案将以字节计分,而字节数越少越好。 测试用例 这是1000以下的所有正方形三角形数字 30,44,47,48,60,66,69,70,78,86,90,92,94,95,96,98,108,113,116,118,120,122,124,125,126,132,138,142,147,150,152,154,156,157,158,159,160,165,170,176,180,182,185,186,188,190,192,194,195,196,197,198,200,207,212,214,216,218,221,222,224,227,230,232,234,236,237,238,239,240,246,248,253,258,260,264,266,267,268,270,273,274,275,276,278,280,281,282,283,284,285,286,290,296,298,302,303,306,308,310,312,314,317,318,320,322,323,324,326,328,329,330,331,332,333,334,335,336,338,340,344,347,350,351,352,356,357,360,362,364,368,370,371,372,374,376,377,378,380,382,384,385,386,387,388,389,390,392,394,396,402,405,408,410,413,414,415,418,420,422,423,424,426,429,430,432,434,435,436,438,440,442,443,444,445,446,447,448,449,452,456,458,462,464,466,467,468,470,472,476,477,479,480,482,484,485,488,490,491,492,494,496,497,498,500,501,502,503,504,505,506,507,508,509,510,512,515,516,518,522,523,524,527,528,530,533,536,538,540,542,543,546,548,549,550,551,552,554,557,558,560,562,563,564,566,568,569,570,571,572,573,574,575,576,578,579,582,585,588,590,592,593,594,598,600,602,603,604,605,606,608,610,612,613,614,615,616,618,620,621,623,624,626,627,628,630,632,633,634,636,638,639,640,641,642,643,644,645,646,650,652,656,657,658,659,660,662,666,667,668,670,672,674,677,678,680,682,683,686,687,689,690,692,694,695,696,698,700,701,702,704,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,722,723,726,728,730,734,737,739,740,742,744,745,746,750,752,755,756,758,760,762,764,765,767,768,770,772,773,774,776,778,779,780,782,783,784,785,786,788,789,790,791,792,793,794,795,796,797,798,800,802,803,804,805,810,812,814,816,817,818,819,820,822,825,826,827,828,829,830,832,833,834,836,837,838,840,842,846,847,848,849,850,851,852,854,855,856,858,860,861,862,863,864,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,882,884,888,890,891,893,896,897,898,902,903,904,905,908,912,913,914,915,916,918,920,923,924,926,927,928,929,931,932,933,935,936,938,940,941,942,944,946,947,948,950,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,970,972,974,976,978,980,981,984,986,987,988,992,993,995,996,998 OEIS A242445

6
128年?假想的leap年改革
根据此视频,太阳年是365天,5小时,48分钟,45秒和138毫秒。在当前的公历中,leap年的规则如下: if year is divisible by 400, LEAP YEAR else if year is divisible by 100, COMMON YEAR else if year is divisible by 4, LEAP YEAR else, COMMON YEAR 不幸的是,这种方法每3216年关闭一天。 修改日历的一种可能方法是以下规则: if year is divisible by 128, COMMON YEAR else if year is divisible by 4, LEAP YEAR else, …

26
找出单词的等级
定义 单词的等级定义为当单词的所有可能排列(或排列)按字母顺序排列(例如在字典中)时的位置,无论单词是否有意义。 让我们考虑这两个词-“蓝色”和“可见”。首先,我们将按字母顺序写出这些单词的字母的所有可能排列: "blue": "belu","beul","bleu","blue","buel","bule","eblu","ebul","elub","elbu","eubl", "eulb","lbeu","lbue","lebu","leub","lube","lueb","ubel","uble","uebl","uelb", "ulbe","uleb" "seen": "eens","eesn","enes","ense","esen","esne","nees","nese","nsee","seen", "sene","snee" 现在让我们从左边看,找到所需单词的位置。我们看到单词“ blue”在第4位,“ seen”在第10位。因此,单词“ blue”的等级为4,“ seen”的等级为10。这是计算单词等级的一般方法。确保仅从1开始计数。 任务 您的任务是编写代码,以将任何单词作为输入并显示其排名。排名应该是输出。小心包含重复字母的单词。 例子 "prime" -> 94 "super" -> 93 "bless" -> 4 "speech" -> 354 "earth" -> 28 "a" -> 1 "abcd" -> 1 "baa" -> 3 您可以假定输入完全是小写,并且输入将仅包含字母字符。另外,如果输入空格或无效字符串,则可能返回任何内容。 计分 这是代码高尔夫球,因此最短的代码获胜!

5
确定有多少个轮子
非数学解释 不论您的背景如何,这都是可以理解的解释。不幸的是,它确实涉及一些数学,但是对于大多数具有中学水平的人来说应该是可以理解的。 指针序列是a(n + 1)= a(na(n))的任何序列。 让我们对这个公式进行一点理解,以了解其含义。这只是意味着要找出我们在上一个术语中看到的序列中的下一个术语,往后退许多步并复制找到的术语。例如,如果到目前为止我们有序列 ... 3 4 4 4 3 ? 我们将向后退3步 3 ... 3 4 4 4 3 ? ^ 使我们的结果4。 现在,通常我们可以在两个方向上都无限的磁带上玩游戏,但是我们也可以在轮子上玩游戏,在经过一定数量的步骤后,我们回到序列的开头。 例如,这是序列的可视化 [1,3,1,3,1,3] 现在我们可能会注意到,轮子中的任何数字x超过轮子中的单元数n,也可能是x mod n,因为围绕轮子的每个完整电路都等于无所事事。因此,我们将只考虑所有成员小于轮子尺寸的轮子。 数学解释 指针序列是a(n + 1)= a(na(n))的任何序列。通常,这些定义是从整数到整数,但是您可能会注意到,此定义中唯一需要的是后继函数和逆函数。由于所有循环组都具有这两者,因此我们实际上可以考虑任何循环组上的指针序列。 如果我们开始寻找这些类型的功能,我们会注意到每个功能都有几个相似的功能。例如,在Z 3上,以下3个都符合我们的要求。 f1 : [1,2,2] f2 : [2,1,2] f3 : [2,2,1] (这里的列表用于表示一个函数,该函数仅通过输入对列表进行索引就可以得到结果) 我们可能会注意到这些功能都是彼此“旋转”的。正式什么我通过旋转的意思是,一个函数b是一个旋转一个 IFF …

21
矩阵以“斜杠”顺序
给定两个正数,N >= 2并N <= 100创建一个遵循以下规则的矩阵: 第一个数字从位置开始 [0,0] 第二个数字从位置开始 [0,1] 第三个数字低于第一个数字(位置[1,0]) 以下数字朝“斜线”方向移动 使用的数字范围是[1, N1 * N2]。因此,数字从开始1到两个输入相乘的结果。 输入项 两个数字N >= 2和N <= 100。第一个数字是行数,第二个数字是列数。 输出量 矩阵。(可以输出为多维数组或带换行符的字符串) 例: 给定数字3 and 5输出: 1 2 4 7 10 3 5 8 11 13 6 9 12 14 15 给定数字 2 and 2 1 2 3 4 …
23 code-golf  matrix 

27
广义矩阵迹
灵感。 给出(通过任何方式): 两个参数(或包含两个元素的列表的单个参数)黑盒函数,(输入和输出为1、2、3,…)f: ℤ+ × ℤ+ → ℤ+ 具有至少两行两列的严格正整数矩阵 返回矩阵的函数trace。 什么是功能跟踪? 法线矩阵轨迹是矩阵的主要对角线(左上至右下)的总和: [[1,2,3],[4,5,6],[7,8,9]]→交通[1,5,9]→交通1+5+9→交通15 但是我们不求总和,而是f沿对角线应用: [[1,2,3],[4,5,6],[7,8,9]]→交通[1,5,9]→交通f(f(1,5),9)或f(1,f(5,9)) 请说明您使用的是从左到右还是从右到左。 给定的矩阵和所有中间值将严格为您语言的整数域内的正整数。矩阵可以是非正方形的。 例子 f(x,y) = xy,[[1,2,3],[4,5,6],[7,8,9]]→交通1×5×9→交通45 f(x,y) = xy,[[1,2,3],[4,5,6],[7,8,9]]→交通 →交通1591 f(x,y) = x-y,[[4,5,6],[1,2,3]]→交通4-2→交通2 f(x,y) = (x+y)⁄2,[[2,3,4],[5,6,7],[8,9,10]]→ 5或7 f(x,y) = x+2y,[[1,2,3],[4,5,6],[7,8,9]]→ 47或29 f(x,y) = max(x,y),[[1,2,3],[4,5,6],[7,8,9]]→交通max(1,5,9)→交通9 f(x,y) = 2x,[[1,2,3],[4,5,6],[7,8,9]]→ 2或4 f(x,y) = lcm(x,y),[[2,2,2],[2,2,3],[2,3,3],[4,4,4]]→交通lcm(2,2,3)→交通6 参考实施。

19
重建算术序列
给定一个正整数的有限算术序列,其中一些项从中间删除,请重构整个序列。 任务 考虑一个算术序列:一个正整数列表,其中两个连续元素之间的差是相同的。 2 5 8 11 14 17 现在,假设受以下约束,从序列中删除一个或多个整数: 删除的整数将是该序列的连续项。 序列中的第一个和最后一个整数将不会被删除。 序列中至少保留三个整数。 对于上述顺序,可能的删除包括: 2 5 8 14 17 (removed 11) 2 5 17 (removed 8 11 14) 2 14 17 (removed 5 8 11) 您的任务:给定这些部分序列之一,重建原始的完整序列。 细节 您可能会认为输入有效(有解决方案)并且至少缺少一个术语。序列中的所有数字均为正(> 0)整数。序列在项之间可以具有正或负差(即,可以增加或减少)。它不是一个恒定的序列(例如5 5 5)。 您的解决方案可能是完整程序或功能。任何默认的输入和输出方法都是可以接受的。 您的输入和输出可以是字符串(带有任何合理的定界符),字符串列表或数字列表。您可以使用方便的语言来代表数字。 请在您的提交中提及任何异常的I / O方法/格式,以便其他人能够更轻松地测试您的代码。 测试用例 In: 2 5 …

16
一对一
挑战 给定一个正整数列表,请查找是否存在一个置换,其中每个整数占一个位,1可以创建一个由所有s 组成的二进制数。 结果二进制数中的位数等于整数列表中的最高MSB。 输出量 您的代码必须输出或返回true / falsey值,以指示是否存在这种排列。 例子 真相: 使用list [4, 5, 2]及其二进制表示形式[100, 101, 10],我们可以分别使用第三,第一和第二位来创建111: 4 -> 100 -> 100 -> 1 5 -> 101 -> 101 -> 1 2 -> 010 -> 010 -> 1 Result 111 使用list [3, 3, 3],所有数字的第一位和第二位都设置为1,因此我们可以选择一个数字作为备用: 3 -> 11 -> 11 -> 1 …

11
双射函数ℤ→ℤⁿ
从(所有整数的集合)到(例如,恒等函数)创建双射函数是很简单的。žžž\mathbb{Z}žž\mathbb{Z} 也可以创建从到(所有2对整数的集合;和的笛卡尔积)的双射函数。例如,我们可以使用表示2D平面上整数点的晶格,从0向外绘制螺旋,然后将整数对编码为与该点相交时沿螺旋的距离。Z 2 Z Zžž\mathbb{Z}ž2ž2\mathbb{Z}^2žž\mathbb{Z}žž\mathbb{Z} (使用自然数执行此操作的功能称为配对功能。) 实际上,存在以下一系列双射函数: Fķ(x ):Z → ZķFķ(X):ž→žķf_k(x) : \mathbb{Z} \to \mathbb{Z}^k 挑战 使用双射将整数映射到个整数元组的属性,定义函数(其中是一个正整数)。k f k(x )kFķ(x )Fķ(X)f_k(x)ķķkFķ(x )Fķ(X)f_k(x)ķķk 给定输入和,您的提交应返回。x f k(x )ķķkXXxFķ(x )Fķ(X)f_k(x) 这是代码高尔夫球,因此最短的有效答案(以字节为单位)获胜。 技术指标 只要满足上述条件,就可以使用任何家族。Fķ(x )Fķ(X)f_k(x) 鼓励您添加有关函数系列工作方式的描述,以及用于计算函数反函数的代码段(这不包括在字节数中)。 如果反函数不可计算就可以,只要您可以证明它是双射的即可。 您可以对语言的带符号整数和带符号整数列表使用任何合适的表示形式,但是必须允许对函数的输入是无界的。 您只需要支持最大127 的值。ķķk
23 code-golf  math  number 

25
二进制序列
给定一个二进制数A作为d> 1位数字的输入,请根据以下规则找到具有d位数字的二进制数B,以找到B的第n个数字: 如果A的第一位和第二位相等,则B的第一位为零。否则,它是一个。 如果1 <n <d,则如果A的第(n-1),第n和第(n + 1)个数字相等,则B的第n个数字为零;否则,它是一个。 如果A的第(d-1)位和第d位相等,则B的第d位为零。否则,它是一个。 规则 字符串/列表输入/输出格式很好。另一种允许的输入/输出方式是整数,后跟前一个零(或后一个零)。 使您的代码越短越好。 测试用例 00 -> 00 01 -> 11 11 -> 00 010111100111 -> 111100111100 1000 -> 1100 11111111 -> 00000000 01010101 -> 11111111 1100 -> 0110
23 code-golf  binary 

22
多个骰子辊的频率分布
给定两个正整数a和b,输出滚动a侧b模a时间并累加结果的频率分布。 如果掷骰子的每个可能序列出现一次,则频率分布会列出每个可能总和的频率。因此,频率是其和等于的整数b**a。 规则 频率必须以与频率对应的总和的升序排列。 允许用相应的总和来标记频率,但不是必需的(因为可以从所需的顺序中推断出总和)。 您不必在输出超出您的语言可表示的整数范围的情况下处理输入。 不允许前导零或尾随零。输出中仅应出现正频率。 测试用例 格式: a b: output 1 6: [1, 1, 1, 1, 1, 1] 2 6: [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1] 3 6: [1, 3, 6, 10, 15, 21, 25, 27, 27, 25, 21, 15, 10, 6, 3, …

8
抄写员
介绍 仙人掌有各种不同的大小,形状和颜色。然而,最具标志性的仙人掌和必须在每一个西方必须是仙人掌。重要特征是它的大小和臂,它们定义了定型仙人掌的外观。 您的任务是将柱仙人掌引入ASCII世界。但是,就像在现实世界中一样,没有柱仙人掌像另一个,因此您的程序必须能够生成具有不同手臂配置的柱仙人掌。 仙人掌的例子 输入:[0b10, 0b11]([2, 3]十进制,输入长度2) _ / \ _ | | / \ | | | | | | \ \_| | \__ | \ | _ | | _ / \ | | / \ | | | | | | \ \_| |_/ / \__ __/ …

1
马里奥会落入萎缩卫星吗?(添加图)
超级马里奥银河(Super Mario Galaxy)拥有两个菱形八面体形状的*行星,它们的平台平铺,随着马里奥(Mario)的掠过而缩小。如果Mario掉入一个三角形的孔或先前触摸过的瓷砖留下的缝隙,他将被核心处的黑洞吞噬。(观看: Hurry-Scurry星系, Sea Slide星系) 图片:MarioWiki.com (您可以将行星视为一个2x2x2立方体,其面已通过2x3“桥”分离并彼此连接。) 不幸的是,由于我的控制器非常损坏,因此Mario无法跳跃,并且只能在四个基本方向上操作。此外,马里奥动作非常缓慢,即使不先离开身后的平台也无法退一步。 假设相机始终在马里奥的头顶上方,并且从2x2脸部的右下角开始: ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ M ■ ■ ■ ■ ■ ■ ■ ■ ■ 您的程序将采用一个列表或方向字符串U D L R(上,下,左,右),以一系列步骤代表Mario在地球上的行走。该程序可以输出两个截然不同的输出之一:一个代表马里奥还活着并在行走,另一个代表马里奥在行走中的某个地方掉入了收缩卫星。 RR: ■ ■ RRD: ■ ■ RRL: ■ …

30
可靠的分选
给定一个包含至少3个不同条目的正整数列表,请输出该列表的排列,该排列未按升序或降序排序。 例子 1,2,3 -> 2,1,3 or 3,1,2 or 1,3,2 or 2,3,1 1,2,3,3 -> 2,1,3,3 or 3,1,2,3 or 1,3,2,3 etc.. 感谢@Arnauld和@NoOneIsHere的标题!

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.