编程拼图和代码高尔夫

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

14
毕达哥拉斯三重序列
甲毕达哥拉斯三重由三个正整数a,b和c,使得2 + B 2 = C 2。这样的三元组通常写为(a,b,c),众所周知的例子是(3,4,5)。如果(a,b,c)是毕达哥拉斯三元组,那么对于任何正整数k,(ka,kb,kc)也是。原始毕达哥拉斯三元组是a,b和c为互质的三元组。 利用这些知识,我们可以通过将最小长度的三元组链接在一起来创建一个序列,其中序列中的下一个元素是最小的勾股毕生哥三元组的斜边(最大数量),其中前一个元素是其长度中的最小元素。 从最小的原始毕达哥拉斯三元组(3、4、5)开始。序列以开头3,斜边(序列中的下一个元素)为5。然后找到最小的原始毕达哥拉斯三重5腿,然后得到(5,12,13)。因此序列继续13。 永远输出该序列,或采用整数输入n并输出n该序列的第一个元素(零或一个索引)。 您需要至少通过和包括支持输出28455997,但是如果您正在使用的数据类型的限制突然升高,则需要为该新限制工作。因此,您不能对数字列表进行硬编码。 3 5 13 85 157 12325 90733 2449525 28455997 295742792965 171480834409967437 656310093705697045 1616599508725767821225590944157 4461691012090851100342993272805 115366949386695884000892071602798585632943213 12002377162350258332845595301471273220420939451301220405 OEIS A239381 相似的序列(不输出这些!): A018928 A077034(奇数词)

1
垫片编织-画一个Sierpiński结
给定一个整数N> = 2,产生一个图像,该图像显示度数为N的Sierpiński结。 例如,以下是2、3、4和5级的结: 单击图像以查看完整尺寸(度数越高,图像越大)。 规格 使用N度的Sierpiński三角形的顶点作为引导点绘制N度的Sierpiński结。N度的Sierpiński三角形是排列成较大三角形的三个N-1度的Sierpiński三角形。0度的Sierpiński三角形是等边三角形。 最小的三角形组成部分的边长为64,这使Sierpiński三角形的结长以 外部三角形的中心位于图像的中心。这在顶部和底部没有相等的空格。 输出是边长为的正方形图像,其中是ceiling(x),大于或等于x的最小整数。当三角形的中心位于图像的中心时,此大小足够大,足以将基础Sierpiński三角形的顶部顶点包含在图像中。 单个曲线必须在其上方和下方通过,并严格交替。解决方案可以在上下限之间选择,也可以在上下限之间选择。 示例图像显示黑色前景和白色背景。您可以选择任何两种容易区分的颜色。允许抗锯齿,但不是必需的。 在两个圆弧相交处或曲线在其自身上方或下方通过的地方一定不能有间隙。 输出可以是任何光栅格式的图像文件,也可以是包含正确的默认显示尺寸的任何矢量格式的图像文件。如果直接在屏幕上显示,则必须采用一种允许滚动的形式,以便在大于屏幕时查看完整图像。 确定圆弧中心,半径和厚度 结由一系列圆弧构成,这些圆弧在切线平行的点相交,从而实现无缝连接。这些弧显示为环形扇形(具有厚度的弧)。 这些弧的中心是最小的倒置三角形的顶点。每个这样的顶点都是一个弧的中心。 每个弧的半径为 唯一的例外是,三个最外面的三角形(在大三角形的拐角处)的弧线的中心是两个相邻内部顶点的中点,因此半径为 每个圆弧的总厚度(内半径和外半径之差)为,并且其黑色边框的厚度均为。曲线必须具有这些边框,而不仅仅是实心条。 计量单位 所有距离均以像素为单位(1是2个相邻像素之间的水平或垂直距离)。 3的平方根必须精确到7个有效数字。也就是说,您的计算必须等同于使用ROOT3,这样1.7320505 <= ROOT3 < 1.7320515 计分 以字节为单位的最短代码获胜。 对于那些想知道的人,不包括N = 0和N = 1,因为它们对应于一个圆和一个三叶形,这与适用于N> = 2的模式不太匹配。我希望应对这种挑战的大多数方法都需要为0和1添加特殊情况代码,因此我决定省略它们。

30
让我们减少单调
...但是嘿,不必太严格。 给定严格正整数的非空数组,请确定其是否为: 单调严格减少。这意味着每个条目都严格小于上一个条目。 单调不增加,但不严格减少。这意味着每个条目都小于或等于前一个条目,并且该数组不属于上述类别。 以上都不是。 请注意以下特殊情况: 具有单个数字的数组是单调严格递减的(很明显如此)。 重复相同编号的数组是单调非递增的,但不是严格递减的。 规则 您可以提供程序或功能 输入可以采用任何合理的格式:数组,列表,数字用空格分隔的字符串,... 您可以分别为三个类别选择任何三个一致的输出。例如,输出可以是数字0,1,2; 或字符串1 1,1 0空字符串。 以字节为单位的最短代码获胜 测试用例 单调严格递减: 7 5 4 3 1 42 41 5 单调不增加,但不严格减少: 27 19 19 10 3 6 4 2 2 2 9 9 9 9 以上都不是: 1 2 3 2 10 9 8 7 …

18
查找pi的第n个小数
已经有30个专门针对pi的挑战,但是没有一个挑战要求您找到第n个小数,因此... 挑战 对于0 <= n <= 10000显示范围内的任何整数,pi的第n个小数。 规则 小数点后的每个数字 3. 您的程序可能是功能,也可能是完整程序 您必须以10为底输出结果 您可以n从任何合适的输入方法(stdin,input(),函数参数等)获得,但不进行硬编码 如果您选择的语言是本机语言,则可以使用基于1的索引 你不必处理无效的输入(n == -1,n == 'a'或n == 1.5) 允许内置,如果它们支持至少 10k小数 运行时无关紧要,因为这是最短的代码,而不是最快的代码 这是代码高尔夫球,以字节为单位的最短代码获胜 测试用例 f(0) == 1 f(1) == 4 // for 1-indexed languages f(1) == 1 f(2) == 1 // for 1-indexed languages f(2) == 4 f(3) …
33 code-golf  math  pi 

21
模拟按键
您的工作是模拟用户键入的几次击键。 输入项 您选择的分隔符(在32-126范围之外)的字符串数组或字符串,其中至少包含一个“击键”。 该数组仅包含两种类型的字符串:被动击键(单个字符)和命令(括号内的字符[ ])。 被动击键 ASCII字符代码 [32-126] 命令: [B] :退格键(如果有一个,删除最后一个添加的字符) [C] :复制所有已写的内容 [D] :删除所有已写的内容 [P] :粘贴已复制的内容 输出量 击键产生的字符串。 例子 ['H', 'e', 'l', 'l', 'o'] -> 'Hello' ['H', 'e', 'l', 'l', 'o', ' ', '[C]', '[P]'] -> 'Hello Hello ' ['[D]', 'D', '[B]'] -> '' ['H', '[C]', 'i', '[P]', '[C]', …
33 code-golf  string 

18
数字键的骑士数字
对于标准小键盘上的非零数字 789 456 123 考虑将一个国际象棋骑士放置在任何数字上,并以任意数量的正常L形跳动来移动它,找出正的十进制整数。用这种方式可以表示哪些正整数? 其中之一是38,因为骑士可以从3那里开始,然后向左和向上移动8。381并且383也是可能的。 3如果不进行跳转(允许),则它本身是可能的。5也是,但是从不能到达其他数字5,因此它是5出现该数字的唯一数字。 编写一个程序或函数,该程序或函数需要一个正的十进制整数(如果需要,可以将其作为字符串),并且如果该数字可以由骑士在数字小键盘上以上述方式表示,则打印或返回真实值,否则输出一个falsy值。 以字节为单位的最短代码获胜。抢七是较早的答案 例子 真相: 1, 2, 3, 4, 5, 6, 7, 8, 9, 16, 18, 38, 61, 81, 294, 349, 381, 383, 729, 767, 38183, 38383, 18349276, 183492761, 618349276 虚假: 10, 11, 50, 53, 55, 65, 95, 100, 180, 182, 184, 185, 186, …

24
这是Loeschian号码吗?
正整数k是Loeschian数,如果 k可以表示i*i + j*j + i*j为i,j整数。 例如,第一正Loeschian号码为:1(i=1,j=0); 3(i=j=1); 4(i=2,j=0); 7(i=2,j=1); 9(i=-3,j=3); ...注意i,j对于给定k的不是唯一的。例如,9也可以与产生的i=3,j=0。 这些数字的其他等效特征是: k可以表示i*i + j*j + i*j为i,j非负整数。(对于每对整数i,j都有一对给出相同值的非负整数k) 有一组k连续的六边形在六边形网格上形成网格化(请参见k = 4和的插图k = 7)。(由于这个属性,这些数字可在移动蜂窝通信网络中找到应用。) 在序列的OEIS页面中查看更多特征。 挑战 给定一个正整数,如果它是Loeschian数,则输出真实结果,否则,则输出虚假结果。 程序或函数应处理(例如不到一分钟)最多达1000或数据类型限制的输入。 代码高尔夫。最短的胜利。 测试用例 以下数字应输出真实结果: 1, 4, 7, 12, 13, 108, 109, 192, 516, 999 以下数字应输出虚假结果: 2, 5, 10, 42, 101, 102, 128, 150, 501, …
33 code-golf  math  number  number-theory  decision-problem  code-golf  kolmogorov-complexity  code-golf  sequence  code-golf  path-finding  chess  code-golf  string  ascii-art  kolmogorov-complexity  code-golf  math  arithmetic  code-golf  code-golf  number  code-golf  geometry  code-golf  math  code-golf  code-golf  kolmogorov-complexity  alphabet  code-golf  regular-expression  hexagonal-grid  king-of-the-hill  path-finding  java  code-golf  string  sorting  code-golf  string  grid  code-challenge  compression  code-golf  random  code-golf  sequence  arithmetic  code-golf  number  grid  tiling  code-golf  tips  code-golf  sequence  number-theory  recursion  code-golf  string  grid  code-golf  math  number  combinatorics  permutations  string  code-challenge  code-golf  sequence  number-theory  subsequence 

30
编写程序以使字符串弹性化
标题中的动词。 编写一个给定输入字符串的程序,该程序将“弹性化”该字符串并输出结果。弹性化字符串的步骤如下: 第一个字符显示一次。第二个字符显示两次。第三个字符显示三次,依此类推。 如您所见,某个字符的重复次数与该字符的索引有关,而不是该字符先前在字符串中出现的次数。 您可以期望只接收可打印的ASCII字符。根据以下链接,这些字符的十进制值为32-126。 例子: Why: Whhyyy SKype: SKKyyyppppeeeee LobbY: LoobbbbbbbYYYYY (请注意,由于第一个b显示了3次,第二个b显示了4次,所以总共有7个b),所以总共有7个b。) A and B: A aaannnnddddd BBBBBBB 最短的字节获胜:)
33 code-golf  string 

5
使方括号
每个程序员都知道方括号[]{}()<>真的很有趣。为了加剧这种乐趣,可以将一组交织在一起的括号转换成可爱而模糊的图表。 假设您有一个包含方括号的字符串,例如[{][<(]})>(())。第一步是将琴弦顺时针旋转45度。(在Mathematica中,几乎可以使用来完成Rotate[ur_string,-pi/4])。这是第一步的结果: [ { ] [ < ( ] } ) > ( ( ) ) 接下来,在每个字符之间添加一个对角线空间。 [ { ] [ < ( ] } ) > ( ( ) ) 接下来,从最左边的括号开始,并在其与犯罪伙伴之间画一个正方形。 +---+ | | | { | | | +---+ [ < ( ] } ) > ( ( …

15
找到对应词
给定一个完全由q代表四分音符的s和e代表八分音符的s 组成的字符串的输入,输出已切分的四分音符的索引。 概要法很复杂,但是出于此挑战的目的,我们对“同步化”的定义将非常简单:四分音符从“节拍”开始,即节拍在n / 4中计为“和”时间。 可替代地,这可以被定义为在奇数个八分音符之后的任何四分音符。例如,*下面标记为的音符被视为已切分,并且还显示了它们的索引: eqqeqqeqqe ** ** 12 78 Output: 1 2 7 8 输入将始终包含4/4次的所有小节(四分音符是小节的四分之一,八分音符是小节的八分之一)。(输入也永远不会为空。)输出可以是单个字符串,其元素由任何不包含数字的定界符分隔,也可以是数组/列表/等。如果需要,输出可以是基于1的(即第一个索引是1而不是0),并且它也可以使用任何数字基(一进制,十进制等)。 由于这是code-golf,因此以字节为单位的最短代码为准。 测试用例: In Out ----------------------------------------------- eqqqe 1 2 3 qeqeq 2 qqqeqqeeeeqeqeqeqqeqqeqq 4 5 10 14 19 20 eeeeeqeeqeeqqqqeqeqeeqe 5 8 11 12 13 14 18 21 qqqq <none> eeeeeeee <none>
33 code-golf  music 

11
正在播放什么歌曲?
受此xkcd启发 您为Shazam工作,他们为您提供了一个项目。一些客户抱怨他们的应用程序占用了手机太多的空间,因此他们希望您编写精简版的应用程序代码。不幸的是,您现有的代码只能理解单词“ na”,因此您必须尽快发货。没关系,我们将竭尽所能。 挑战 您必须编写一个完整的程序来接受用户输入,或者接受命令行参数,然后打印歌曲的标题和艺术家。由于我们正在努力解决抱怨程序大小的客户,因此您的代码必须尽可能短。输入将是一个完全由na组成的字符串,它们之间有一个空格。小写/大写是任意的。这被认为是有效的输入:Na Na nA na NA这是无效的输入:nah nah NA naNa banana您必须确定正在播放的歌曲,并以这种格式将其打印出来: Song: <trackname> Artist: <artist> 如果输入正好是 8 na,则匹配两首独立的歌曲,因此您必须同时打印两首: Song: Batman Theme Artist: Neal Hefti 和 Song: Na Na Hey Hey Kiss Him Goodbye Artist: Steam 如果输入正好是 10 na,则必须打印: Song: Katamari Damacy Artist: Yuu Miyake 如果输入正好是 11 na,则必须打印: Song: …

18
毕达哥拉斯的另一条腿
毕达哥拉斯的腿在战争中被炸断了。它必须被截肢,尽管他快要死了,他还是挺身而出,完全康复了。现在,用拐杖走路一年后,他有幸得到假肢!不过,有几种合适的方法,但是哪一种适合呢? 任务 给定一个正整数作为毕达哥拉斯三重奏的一条腿的长度的输入,输出另一条腿的所有可能性。例如,毕达哥拉斯最小的三元组是(3,4,5),它形成一个三角形,其两个腿的长度分别为3和4,长度为5的斜边。 例子 Leg:5 12 Leg:28 21 45 96 195 Leg:101 5100 Leg:1001 168 468 660 2880 3432 4080 5460 6468 10200 38532 45540 71568 501000 规则 输入将是单个正整数n。 输出可以是任何顺序,可以使用任何定界符,可以使用任何基数(尽管该基数​​必须一致),并且可以使用可选的左括号和右括号,以及可选的尾随空格。也就是说,1 2 3,[1,2,3],和1,11,111所有适合这种输出规格。 您可能会假设该值n永远不会大于语言限制的第四根的四分之一(不使用库)。实际上,您可以假定输入将小于此值或10,000,以较小者为准。 毕达哥拉斯正等着你,所以最好快而简短地编写代码!
33 code-golf 

30
合并阵列
任务很简单:整合一个整数数组。合并此数组包括以下内容: 所有0实例都需要移到数组的末尾。 非零整数之间不应有0。 所有非零索引都应保留其顺序。 挑战 以最少的字节数合并数组。 您正在合并一个随机长度的数组,该数组的大小最大为您的语言的最大值,并包含随机整数。输入可能是您语言的任何自然方式。 例子 输入项 0 5 8 8 3 5 1 6 8 4 0 3 7 5 6 4 4 7 5 6 7 4 4 9 1 0 5 7 9 3 0 2 2 4 3 0 4 8 7 3 1 …

29
它是前缀代码吗?
在信息论中,“前缀代码”是一个字典,其中所有键都不是另一个的前缀。换句话说,这意味着没有一个字符串以其他任何字符串开头。 例如,{"9", "55"}是前缀代码,但{"5", "9", "55"}不是。 这样做的最大优点是,可以将编码的文本记下来,并且它们之间没有分隔符,并且仍然可以唯一地解密。这在诸如Huffman编码之类的压缩算法中得到了体现,该算法始终会生成最佳的前缀代码。 您的任务很简单:给定一个字符串列表,确定它是否是有效的前缀代码。 您的输入: 将是任何合理格式的字符串列表。 仅包含可打印的ASCII字符串。 将不包含任何空字符串。 您的输出将是一个true / falsey值:如果是有效的前缀代码,则为True,否则为falsey。 这是一些真实的测试用例: ["Hello", "World"] ["Code", "Golf", "Is", "Cool"] ["1", "2", "3", "4", "5"] ["This", "test", "case", "is", "true"] ["111", "010", "000", "1101", "1010", "1000", "0111", "0010", "1011", "0110", "11001", "00110", "10011", "11000", "00111", "10010"] 以下是一些错误的测试案例: ["4", "42"] …

5
重力模拟器
声明 您会得到一系列落入2D网格的球的静止图像。这个网格被不可变和坚不可摧的墙壁包围着,因此所有动作都包含在其中。您的任务是确定重力完成所有工作后场景的状态是什么。 网格内的元素 - 落地,不会改变落球的方向。 \ 向右滑动,可将球向右(一)的位置更改。 / 左滑动,改变球向左一(1)位置的路径。 o 一个球。 规则 球掉了。 地板和滑梯都不会掉落。 如果球撞击滑梯,使其滑过墙壁(\#或#/),或穿过地板,则滑梯将充当地板。 当一个球击中另一个球时,它将变成一个球,但将其力量增加到两个球的总和。 新球(已加入)将继续照常运行。 当球不再移动时,将其替换为力量。 球的力量永远不会超过9。 输入项 网格将以字符串变量的形式给出,其名称以您选择的语言中最短的名称为准。默认情况下,我们将使用它a作为输入。输入样本,与收到的完全一样: ##########\n# \ #\n#o #\n# - -\o #\n#/- \ #\n# \oo-/\#\n#-/ \ /#\n# \ \ #\n# /#\n########## 对于生成的随机网格,请使用https://repl.it/B1j3/2。请改用我生成的页面(没有广告,没有废话,只有输入和输出) 注意换行符为\n。将输入打印到屏幕上(挑战不是必需的)将显示如下内容。尽管我在安全空间旁边放置了四个难题。 ########## ########## ########## ########## # \ # # o -/# # …

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.