编程拼图和代码高尔夫

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

25
莫比乌斯函数
莫比乌斯函数 莫比乌斯函数是重要的数论函数。 您的提交应接受一个正整数,n并返回在处评估的Möbius函数的值n。 定义 莫比乌斯函数μ(n)定义如下: | 1 if n is squarefree and has an even number of distinct prime factors μ(n) = | -1 if n is squarefree and has an odd number of distinct prime factors | 0 otherwise n如果n的质数分解的指数严格都小于2,则称为方自由。(或者:两个分割的幂都不是素数n)。 测试用例 在这里,您可以看到μ的前50个值: 来自维基百科的公共领域图像 默比乌斯函数是OEIS中的序列号A008683。 这些是前77个值: 1, -1, -1, 0, …

25
计算二进制Sierpinski三角序列
Binary Sierpinski Triangle序列是数字序列,其二进制表示形式表示Binary Sierpinski Triangle的行,该序列是通过在无限的零行中以1开头,然后用这些位的xor重复替换每一对位来给出的,就像这样: f(0)= 1 =1 f(1)= 1 1 =3 f(2)= 1 0 1 =5 f(3)= 1 1 1 1 =15 f(4)= 1 0 0 0 1 =17 OEIS上提供了更多数字:https://oeis.org/A001317 输入:您喜欢的任何格式的非负整数n。(必须为所有n个(最多30个)工作。) 输出:序列的第n个项(0索引),为十进制数。 这是代码问题,因此请尝试使用您的语言提供的最短答案(以字节为单位)。没有答案将被接受。存在标准漏洞(例如,不对序列进行硬编码),但您可以使用在发布此挑战后创建/修改的语言。(除非您的解决方案较短,否则请避免以已经使用的语言发布其他解决方案。) 排行榜 这篇文章底部的Stack Snippet会根据答案a)生成目录,a)作为每种语言最短解决方案的列表,b)作为整体排行榜。 为确保您的答案显示出来,请使用以下Markdown模板以标题开头。 ## Language Name, N bytes N您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数来保持标题。例如: ## Ruby, <s>104</s> <s>101</s> 96 bytes …

30
电源插座
这是NCPC 2005的问题。罗伊有一间只有一个电源插座的公寓,但他有一堆配电盘。使用他拥有的配电盘计算他可以拥有的最大插座数量。每个配电盘的插座数作为输入给出。 事实证明,如果条的出口数量分别是 p1,p2,…,pnp1,p2,…,pnp_1, p_2, \dots, p_n then the number of outlets is 1−n+∑ipi1−n+∑ipi1 - n + \sum_i p_i , or 1+p1−1+p2−1+⋯+pn−11+p1−1+p2−1+⋯+pn−11 + p_1-1 + p_2-1 + \dots + p_n-1. The input to the program or function is a non-empty series of positive integers. Examples 2 3 4 > 7 …

30
将数字转换为十六进制
挑战 这是一个简单的例子。 当以10为底的数字作为输入时,编写一个函数或程序,它将以十六进制返回或打印该数字的值。 例子 15 -> F 1000 -> 3E8 256 -> 100 规则 没有内置的十六进制功能 字母可以小写或大写 您只需要担心非负整数,无负数或讨厌的小数 它应该可以处理任意数量的数字,直到语言的默认类型限制。 换行不是必需的 像往常一样,这是代码高尔夫球,因此以字节为单位的最短代码胜出!

17
互素数和pi
介绍 数论以意想不到的联系的形式充满了奇迹。这是其中之一。 如果两个整数除1以外没有其他共同因数,则它们是互质的。给定数N,请考虑从1到N的所有整数。随机抽取两个这样的整数(所有整数在每次抽取时被选择的可能性相同;抽取是独立的且具有替换值)。令p表示两个选定整数互质的概率。然后p趋于6 / π 2 ≈0.6079 ...作为Ñ趋于无穷大。 挑战 这一挑战的目的是将p作为N的函数进行计算。 例如,考虑N =4。从整数1,2,3,4获得16对可能。这些对中的11个是互质的,即(1,1),(1,2),(1,3),(1,4),(2,1),(3,1),(4,1 ),(2,3),(3,2),(3,4),(4,3)。因此,对于N = 4,p为11/16 = 0.6875 。 p的确切值至少需要用四个小数点来计算。这意味着计算必须是确定性的(与蒙特卡洛相对)。但这不必是上面所有对的直接枚举;可以使用任何方法。 可以使用函数参数或stdin / stdout。如果显示输出,则可以省略尾随零。因此例如0.6300可以显示为0.63。它应显示为十进制数字,而不是分数(63/100不允许显示字符串)。 获胜标准是最少的字节。内置函数的使用没有限制。 测试用例 输入/输出(如上所述,只有四个小数是必需的): 1 / 1.000000000000000 2 / 0.750000000000000 4 / 0.687500000000000 10 / 0.630000000000000 100 / 0.608700000000000 1000 / 0.608383000000000

15
几何挑战
每个人都喜欢几何。那么,为什么我们不尝试编写高尔夫球代码呢?这项挑战涉及输入字母和数字并根据其形状。 输入 输入将采用的形式(shapeIdentifier)(size)(inverter)。 但是shapeIdentifier,大小和逆变器是什么? 形状标识符是您将使用*s 制作的形状类型的标识符。以下是形状标识符: s -正方形 t - 三角形 大小将介于之间1-20,它是图形的大小。 逆变器确定形状是否上下颠倒,用a +或a 表示-。请注意: s3-==(等于),s3+因为正方形是对称的。但是,t5-!=(不相等)t5+。 在输出中可以使用尾随空白,但不能使用前置空白。 输出实例 Input: s3+ Output: *** *** *** Input: t5+ Output: * *** ***** Input: t3- Output: *** * 特别说明 三角形输入将始终为奇数,因此三角形*的顶部始终以1结尾。 三角形的大小(如果是)是底部的大小,如果是 +,则是顶部的大小-。
23 code-golf  string  ascii-art  geometry  code-golf  ascii-art  subsequence  fewest-operations  test-battery  code-golf  array-manipulation  bitwise  code-golf  interactive  code-golf  music  code-golf  string  kolmogorov-complexity  code-golf  string  decision-problem  simulation  code-golf  string  classification  code-golf  sequence  base-conversion  palindrome  code-golf  kolmogorov-complexity  code-golf  date  astronomy  code-golf  sequence  base-conversion  code-golf  geometry  combinatorics  code-golf  string  code-golf  math  array-manipulation  code-challenge  math  code-golf  card-games  code-challenge  array-manipulation  sorting  code-golf  code-golf  math  abstract-algebra  polynomials  code-golf  palindrome  factoring 

9
基本拉丁字符名称到字符
让我们回到基础! 您的代码(一个完整的程序或函数)必须将可打印的基本拉丁字符的正式Unicode名称转换为相应的字符。例如,对于输入,LOW LINE您的代码必须输出_。 您只需要输入一个字符名称即可。 您不能使用任何内置或以其他方式存在的预先存在的函数或库,这些函数或库提供与Unicode字符名称(例如Python unicodedata,Java Character.getName等等)特别相关的任何逻辑。 对于这些名称之一以外的输入,任何行为都是可以接受的。 这就是代码高尔夫:以字节为单位的最短代码获胜。 为避免歧义,这是我们将使用的全套正式角色名称(从这个问题中借来的): SPACE ! EXCLAMATION MARK " QUOTATION MARK # NUMBER SIGN $ DOLLAR SIGN % PERCENT SIGN & AMPERSAND ' APOSTROPHE ( LEFT PARENTHESIS ) RIGHT PARENTHESIS * ASTERISK + PLUS SIGN , COMMA - HYPHEN-MINUS . FULL STOP / SOLIDUS …

1
三个相互的奎因
任务 在这个挑战中,您的任务是编写三个程序,这些程序形成一种相互类似quine的系统。让我们把这些程序A,B和C。如果其中一个程序被提供了另一个程序的源作为输入,则它应输出第三个程序的源。例如,如果A给出B作为输入,则输出C。如果给程序提供了它们自己的源作为输入,则它们应输出三个字符串"three","mutual"和"quines"(不带引号)。在所有情况下,它们都可能输出一个附加的尾随换行符。对于任何其他输入,程序可能会执行任何操作,包括崩溃。 例 例如,假设的源代码A,B和C是aSdf,ghJk和zxcV。然后,程序应表现如下。 Source Input Output -------------------- aSdf aSdf three aSdf ghJk zxcV aSdf zxcV ghJk ghJk aSdf zxcV ghJk ghJk mutual ghJk zxcV aSdf zxcV aSdf ghJk zxcV ghJk aSdf zxcV zxcV quines 规则和计分 该解决方案A,B并且C可以是功能或完整的程序,但他们必须是完全独立的:没有共享的代码是允许的。 由于存在标准漏洞和quine规则,因此程序无法以任何方式访问其自身的源代码。 你的分数是结合字节数A,B以及C较低的分数更好。
23 code-golf  quine 

2
水暖随机路径
编写一个包含三个整数,宽度w,高度h和步数的程序或函数s。您将在一个按像素图像上绘制很长的非自相交随机 s步长,其中每5 x 5像素单元为空(纯米色)或以下十二个简单“管道”之一:5*w5*h 上面的图像被放大以显示细节。这是实际尺寸的管道: (灰色线仅用于分隔管道类型。) 随机游走将是一条连续的管道路径,该路径从一个管道端点(底部四种管道类型之一)开始,到另一个管道端点结束。 从一个空w的h网格开始,并随机选择一个单元格作为起点。然后随机选择四个方向之一以开始并绘制相应的管道端点。这个开始的单元格标志着您步行的第一步,每当您绘制一个新的单元格或覆盖一个现有的单元格时,它便被视为采取的另一步骤。 现在,如果选择的方向有效,则反复地随机选择向右,向左或向右走,绘制适当的管单元。回溯并重新选择方向,直到s形成完整的步阶路径才有效。该路径应以管道端点结尾,该端点可以在网格上的任何位置,具体取决于路径所采用的路线。 重要的是要注意,只有两个直管单元可以被覆盖,并且只能被方向相反的直管单元覆盖,结果是相交单元。否则,必须将所有管道放置在空的单元格中。 绘制相交时,应将路径中距起始像元更远的部分绘制在顶部。 由您决定网格是否具有周期性边界条件(PBC),即,从网格一侧退出的管道是否会从另一侧伸出。如果没有PBC,则网格边界会像其他管道一样成为障碍。 特别案例 当s为0时,不应绘制任何管道,并且输出5*w的5*h图像应为空白(即所有米色)。 当s为1时,单个管道存根 (实际尺寸:) 应该在随机选择的起始单元格上绘制。 其他详情 您可能会认为这s是最多的,w*h因此一条路径永远是可能的。(尽管由于相交,可能会有更长的路径。) w并且h将始终是积极的。 所有随机选择都必须一致地随机。例如,即使这样会使问题变得更容易,您也不应避免在可能的情况下进行交叉。允许使用伪随机数生成器。 可以使用任何三种视觉上不同的颜色来代替黑色,蓝色和米色。 您的输出图像可能会被放大,以使它们实际上是5*w*k按5*h*k像素(其中k为正整数)表示的。(即使您k是1,也建议您放大发布的所有示例。) 可以使用任何常见的无损图像文件格式,并且可以将图像保存到文件,显示或原始输出到stdout。 以字节为单位的最短代码获胜。 例子 (全部放大了500%。) 如果输入为,w=2, h=1, s=0则输出将始终为: 如果输入是,w=2, h=1, s=1则输出将是这些图像之一,机会均等: 如果输入为,w=2, h=1, s=2则输出为 或可能 如果假定网格具有PBC。 (请注意,像这样开始路径将使第二步变得不可能。) 以下是w=3, h=2, s=6假设PBC的一些可能的输出: w=3, h=3, s=9假设PBC,这是的可能输出: 请注意,由于相交计算为两个步骤,因此路径不需要覆盖所有像元。同样,我们可以推断出拐角端点是起始像元,因为必须在之后绘制交叉点立交桥。因此,我们可以推断出做出的随机选择的顺序: start at top left, …

20
N平板斜切蛋糕
编写一个接受正整数N的程序或函数。 当N为1时,输出 /\ \/ 当N为2时,输出 /\/\ \/ / / / \/ 当N为3时,输出 /\/\/\ \/ / / / / / \/ / / / \/ 当N为4时,输出 /\/\/\/\ \/ / / / / / / / \/ / / / / / \/ / / / \/ 对于较大的N,图案会继续,每增加N就会添加一个新层。 “输出”表示打印斜线图案或将其作为字符串返回。 输出中允许使用单行尾换行符。 输出中允许尾随空格,但不允许前导空格。 以字节为单位的最短代码获胜。

10
*覆盖*标签
如果您曾经尝试过将标签添加到一个非常密集的图中,那么您将意识到有时标签会相互重叠,从而难以阅读。我们将执行类似的操作,但只是在一维中。 输入将是(label, x-coordinate)成对的序列,输出将是按给定顺序绘制每个点和标签的结果。*代表该点的星号应放在给定的x坐标处,并且标签应紧随其后。任何现有字符都将被覆盖。 例如,如果输入是 Hello 0 World 8 Fizz 3 Buzz 5 PPCG 16 X 9 然后将发生以下情况: *Hello *Hello *World *He*Fizz*World *He*F*Buzzorld *He*F*Buzzorld *PPCG *He*F*Buz*Xrld *PPCG 然后应输出最后一行。 I / O规则 输入可以包含任意数量的对。每个标签仅包含大写和小写字母,并且标签长度最多为127个字符。每个x坐标在0到127之间(含0和127)。 输入可以采用任何方便的列表或字符串格式,以使输入对明确无误,并且标签/ x坐标在输入中交替出现。例如,类似[("Hello", 0), ("World", 8) ...]或[0 "Hello" 8 "World" ...]很好的格式。但是,您可能不会假设标签和x坐标是两个单独的列表。 功能和完整程序都可以。 标签未覆盖的任何斑点均应以空格表示。但是,除单个可选的尾随换行符外,可能没有任何多余的前导或尾随空格。 例子 输入: OneLabel 10 输出: *OneLabel 输入: …
23 code-golf  string 

5
从正方形到六角形的无缝转换
对于在网格上进行的许多游戏来说,六边形是“明显优越的选择”。不幸的是,许多免费游戏美术网站仅具有用于正方形地图的无缝磁贴集。在过去的项目中,我使用了其中一些,并将其手动转换为六边形。 但是,我在晚年变得懒惰。用一个小的脚本来自动化该过程应该很容易。 但是,我在晚年变得懒惰。因此,我将其外包给您,并将其伪装成高尔夫挑战赛1。 输入项 输入是具有24位RGB颜色的任何常见图像格式的正方形图像。您也可以将文件名而不是图像数据本身作为输入。 您可以假设图像是正方形的,并且边长是四的倍数。 输出量 输出是输入图块,但转换为六边形(图像本身将是正方形,带有透明区域)。您可以将其保存到文件或显示在屏幕上。 同样,任何常见的图像格式都可以。如果您使用的格式支持透明,则背景区域必须是透明的。如果不是,您可以使用#FF00FF颜色(可怕的紫红色)作为替代。 方法 那么我们该怎么做呢?我使用2的方法在垂直方向上稍微挤压图像,但总体而言,对于大多数情况而言,它看起来都不错。我们将使用此输入图像做一个示例: 缩放:将图像缩放到3:2的比例。由于我们的图像将是正方形,这意味着您只需将它们缩放到75%的宽度和50%的高度即可。我们的示例输入为200x200,因此最终得到以下150x100的图片: 平铺:将缩放后的图像的副本放到2x2的网格中: 裁剪:从2x2网格中的任意位置抓取大小适当的六边形。现在,为了便于平铺,此六角形并非完全规则。在裁剪了原始大小的正方形(此处为200x200)后,您便裁剪了角落。裁剪线应从(大约)每个左侧/右侧的中心延伸到顶部/底部边缘的四分之一: 这就是您的输出! 这是平铺时的外观示例(此处放大): 这是代码高尔夫,因此以字节为单位的最短代码获胜。适用标准漏洞,依此类推。 1信不信由你。 2 此帮助站点中的方法一。

25
伯努利数字
所述伯努利数(具体地,第二伯努利数)由以下递归定义来定义: 其中表示组合。 给定一个非负整数m作为输入,请输出小数表示形式或m第二伯努利数的缩减分数。如果输出小数表示形式,则必须至少具有6个小数位(小数点后的数字),并且四舍五入到6个小数位时必须是准确的。例如,对于m = 2,0.166666523是可以接受的,因为它四舍五入到0.166667。0.166666389是不可接受的,因为它四舍五入为0.166666。尾随零可以省略。科学计数法可用于十进制表示。 以下是m多达60个(含)的输入和预期输出,以科学计数形式四舍五入到小数点后6位,并减少了分数: 0 -> 1.000000e+00 (1/1) 1 -> 5.000000e-01 (1/2) 2 -> 1.666667e-01 (1/6) 3 -> 0.000000e+00 (0/1) 4 -> -3.333333e-02 (-1/30) 5 -> 0.000000e+00 (0/1) 6 -> 2.380952e-02 (1/42) 7 -> 0.000000e+00 (0/1) 8 -> -3.333333e-02 (-1/30) 9 -> 0.000000e+00 (0/1) 10 -> 7.575758e-02 (5/66) …

30
制作棋盘
在PHP挑战中看到了这一点。目的是用最少的代码制作具有64个方格(8 * 8)的棋盘。很简单,我用356字节的PHP代码制作了我的代码(我知道这并不令人印象深刻),我希望看到其他一些方法。只要保持原样,就可以用您选择的语言来完成,因此不会导入。最小字节数获胜。 输出应如下所示: 而我的代码: <table><?php $c='black';function p($c,$n){echo'<td style="width:50px;height:50px;background:'.$c.'"></td>';if($n==1){echo"<tr>";}}for($i=1;$i<=64;$i++){if($i%8==0&&$c=="black"){$c="white";$n=1;}elseif($i%8==0&&$c=="white"){$c="black";$n=1;}elseif(isset($n)&&$n==1){$n=0;}elseif($c=="black"){$n=0;$c="white";}elseif($c=="white"){$n=0;$c="black";}p($c,$n);} 还是可读的: <table><tr> <?php $color = 'black'; function printcolor($color, $nl) { echo '<td style="width:50px; height:50px; background:' . $color . '"></td>'; if ($nl == true) { echo "</tr><tr>"; } } for ($i=1; $i<=64;$i++) { if ($i % 8 == 0 && $color == …

18
简单的打印箭头
为了打高尔夫球,我一直在女友的Python入门课程中做作业。我发现,对于这项任务,有多种策略在字符数方面非常接近,我敢肯定,这里的人们可以找到更好的方法。尽管我对使用Python进行此操作的方式最感兴趣,但是我想知道该程序可以得到的最多帮助,因此这是代码保护和最短答案的获胜。 规则: 任务概述如下。尽管提示不必说什么,并且可以以不同的顺序进行,但应要求用户输入两次。 有标准漏洞。 作业3:箭 编写一个程序,提示用户输入许多列,然后它们打印出如下所示的图案。您可以假设用户将提供正数。您的程序应同时处理左右箭头。以下是一些示例运行: How many columns? 3 Direction? (l)eft or (r)ight: r * * * * * How many columns? 5 Direction? (l)eft or (r)ight: l * * * * * * * * *

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.