编程拼图和代码高尔夫

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

4
计算月亮的大小
月球之谜的大小 我相信您已经听说月亮改变了它的大小。当您恋爱了并且很幸运时,月亮的大小几乎是正常情况下的两倍。有人说,原因是大气充当了镜头。其他人则认为,这仅仅是与附近树木等其他物体进行比较的问题。无论您阅读了什么说明,都是相当主观的。 月球科学的大小 好吧,我们是程序员,不是吗?我们依靠事实,对吗?所以这是实验: 拿一个不错的相机,它支持手动设置时间和光圈。 将相机设置为最大变焦等级。 外出时,为月亮拍摄一些照片,以检测最佳设置,以使月亮清晰且光线充足。 记住设置 每当您认为月球大小时,都使用这些设置为月球拍照。 计算月亮的大小(以像素为单位) 相机不会说谎,是吗?通过计算明亮的像素,我们可以有效地测量月亮的大小-至少以像素为单位。 如果所有照片的大小都相同,那么这就是我们大脑中的错误。如果大小不同,那么就有炒作的空间 月亮真的长了(但是它吃什么?) 有大气的镜头效果 月亮呈椭圆形,有时更近,有时更远离地球 ... 但是我将保持打开状态,直到您的任务完成。当然,您想事先知道您的软件是否可以准确计算月球尺寸。 任务 给定一些优化的月球图片,请计算月球的大小。优化是:像素为黑色或白色。两者之间什么都没有。没有抗锯齿。这很容易,不是吗? 注意事项:月亮并不总是充满,您知道...它可能是镰刀!但是即使是镰刀形状,月亮的大小也会更大。因此,请计算出完整尺寸。 stdin如果您编写的是函数而不是程序,则程序将PNG作为输入,例如作为文件名命令行参数,通过管道传输到(或作为标准框架库的)Bitmap对象。 您的程序可以使用任何合理的输入位图大小,而不必是正方形。保证最小宽度和高度为150像素。 满月至少覆盖了图片的25%。 您的程序将以像素为单位输出计算出的月亮大小,就好像它是满月一样。 我们假设月亮是一个完美的球体。 确切的大小始终是整数,但是如果计算返回该数字,则可以输出一个十进制数。 精度应在98%到102%之间。(这只是一个猜测,而不是我可以保证可以实现的目标。如果您认为很难实现,请发表评论。) 更新: 月亮的中心不一定在图片的中间。 最小可见区域为月球的5%或像素总数的1.25%。 以使整个月亮适合图像的方式拍摄照片,即,像素总数是月亮大小的上限。 月亮不会被裁剪/修剪。 样品 如果愿意,您可以使用混合文件生成自己的样本。我为您制作了以下图片。您可以使用WhitePixelCounter.exe(需要.NET)对PNG文件中的像素进行计数,以检查图像是否仅包含黑白像素以及它们包含多少个。 以下256x256像素图像的白色像素数量有所不同,但所有这些图像的计算出的月亮大小应为16416像素。 这些177x177像素的图像应返回10241像素。图像基本相同,但是这次使用的是焦距不同的相机。 结果为9988的非正方形和非中心样本: 哦,我目前没有参考实现,我什至不知道我是否能够实现某些功能。但是在我的大脑中,有一个强烈的信念告诉我它必须在数学上可以解决。 规则 这是Code Golf。2015-03-30上最短的代码被接受。

6
记住23940的助记符
该系统主要是记忆用于转换数字成单词,这样他们可以更容易地存储设备。 它基于单词的语音发音方式,但是为了使问题简单易懂,我们只关心单词的拼写方式。这意味着会有一些不正确的转换,但是没关系。 使用简化的主系统将数字转换成单词: 0用s或替换每个z。(有些可能是s,有些可能是z。下同。) 1用t或d或替换它们th。 替换每个2有n。 替换每个3有m。 替换每个4有r。 替换每个5有l。 6用j或sh或替换它们ch。 替换每个7用k或c或g或q。 8用f或替换每个v。 9用p或替换每个b。 如有可能aehiouwxy,在任意位置添加字母以构成一个真实的英语单词。唯一的例外是,不得在或之后插入。 hsc 该数字实际上可以是数字0-9的任何字符串(无小数,逗号或符号)。 该单词只能包含小写字母az。 例子 该数字32必须转换为?m?n?,其中?代表由字母组成的任何有限字符串aehiouwxy(如果愿意,则是来自免费monoid的字符串)。有许多方法,这可能做成一个真正的英文单词:mane,moon,yeoman等。 该数字05可以转换为?s?l?或?z?l?。一些可能的是easily,hassle和hazel。这个词shawl是不允许的,因为h可能不能放在之后s; 它会被错误地读取为65。 挑战 编写一个程序或函数,该程序或函数使用数字0-9的字符串,并找到所有可以使用简化的主系统助记符将其转换成的单词。 您的程序可以访问单词列表文本文件,该文件定义了所有“真实”英语单词是什么。此文件的每一行上都有一个小写的az字,您可以选择假定它有一个尾随的换行符。这是可用于测试的真实单词列表。您可以假设这个单词列表文件被称为f(或更长的名称)并且位于任何方便的目录中。 对于35字节的罚款(将您的分数加35),您可以假设单词列表已作为字符串列表加载到变量中。这主要用于无法读取文件的语言,但是任何提交都可以利用它。 您的程序必须输出所有单词列表中可以转换输入数字的单词。应该将它们打印到stdout(或类似格式),每行打印一次(带有可选的尾随换行符),或者如果您选择编写函数,则可以将它们作为字符串列表返回。单词列表不一定按字母顺序排列,输出也不需要。 如果没有可能的单词,则输出(或列表)将为空。如果输入空字符串,则输出也为空。 通过标准输入,命令行或函数的字符串参数获取输入。单词列表或其文件名不应是输入的一部分,而应是数字字符串。 您只匹配单词列表中的单个单词,而不匹配单词序列。该单词noon可能是的结果之一22,但单词序列no one不是。 测试用例 假设这是单词列表: stnmrljkfp zthnmrlshqfb asatanamaralajakafapa aizxydwwwnhimouooraleshhhcavabe zdnmrlshcvb zdnmrlshchvb sthnmrlchgvb shthnmrlchgvb bob pop bop bopy boppy 输入0123456789应给出除zdnmrlshchvb和以外的所有长词shthnmrlchgvb: stnmrljkfp zthnmrlshqfb asatanamaralajakafapa aizxydwwwnhimouooraleshhhcavabe …
19 code-golf  string 

1
翻译前奏曲
这是每周挑战2。主题:翻译 编写一个程序或函数,该程序或函数在Prelude中获取程序的源代码,并在Befunge-93中输出等效程序的代码。为了使程序等效,对于任何给定的输入,它都应产生与Prelude程序相同的输出,并且仅当Prelude程序停止时才停止。 输入语言:前奏 Python解释器: 显示代码段 #!/usr/bin/python import sys NUMERIC_OUTPUT = True NUMERIC_INPUT = True try: filename = sys.argv[1] except: print "Usage:", sys.argv[0], "<filename>" raise SystemExit try: inFile = file(filename) except: print "Error when opening", filename raise SystemExit # code is kept as a list of voices, each voice a string …

30
产生盒子!
您的任务是使用给定输入的任何一个ASCII字符生成框。 测试用例 1 1 --> ===== = = ===== 1 2 --> ========= = = = ========= 2 1 --> ===== = = ===== = = ===== 2 2 --> ========= = = = ========= = = = ========= 2 5 --> ===================== = = = = = = ===================== …

7
使用Hamming(7,4)纠正错误
Hamming(7,4)代码可以追溯到1950年。当时,Richard Hamming在贝尔实验室担任数学家。汉明每个星期五都设置计算机进行一系列计算,并在下周一收集结果。使用奇偶校验,这些机器能够在计算过程中检测到错误。沮丧,因为他经常收到错误消息,所以汉明决定改进错误检测并发现了著名的汉明代码。 海明力学(7,4) 汉明码的目的是创建一组重叠的奇偶校验位,以便可以检测和纠正数据位或奇偶校验位中的单个错误(翻转一位)。仅当发生多个错误时,汉明码才能恢复原始数据。它可能根本不会注意到错误,甚至可能会错误地纠正它。因此,在这一挑战中,我们将仅处理单位错误。 作为汉明代码的示例,我们将看一下汉明(7,4)代码。除4位数据外,d1, d2, d3, d4它还使用3个奇偶校验位p1, p2, p3,这些奇偶校验位使用以下公式计算: p1 = (d1 + d2 + d4) % 2 p2 = (d1 + d3 + d4) % 2 p3 = (d2 + d3 + d4) % 2 产生的代码字(数据+奇偶校验位)的格式为p1 p2 d1 p3 d2 d3 d4。 检测错误的方法如下。您重新计算奇偶校验位,并检查它们是否与接收的奇偶校验位匹配。在下表中,您可以看到,各种单一位错误都会产生奇偶校验位的不同匹配。因此,可以定位和纠正每个单位错误。 error in bit | p1 …

8
跳阵列!
让我们玩一个名为“ 跳数组”的单人游戏。要播放,您只需要一个整数数组,例如a。您从某个位置开始i,然后在每个转弯处都跳到一个新位置。反过来n, 如果n是偶数,则跳至绝对位置a[i] mod length(a), 如果n是奇数,则跳到相对位置(i + a[i]) mod length(a)。 数组索引从零开始。您可以将第一个跳跃算作turn 0或turn 1,这会带来不同的游戏。由于游戏的状态空间是有限的(您的举动取决于您的位置和回合数的奇偶性),因此您最终将进入一个长度均匀的循环。loop(a, i, b)当第一个跳转被计为turn时,由该循环的长度表示b。 输入项 一个非空a整数数组,用于玩游戏。 输出量 这样的最大数量p,当从某个位置开始i并将第一圈计算为0或时1,您最终会进入一个长度循环2 * p。换句话说,您的输出是数字 max { loop(a, i, b)/2 : i in [0 .. length(a)-1], b in [0,1] } 规则 您可以提供功能或完整程序。最小的字节数获胜,并且不允许出现标准漏洞。 测试用例 [0] -> 1 [-213] -> 1 [1,3,12,-1,7] -> 1 [2,3,5,7,9,11,13,17,19] -> …

11
在编号的多维数据集上输出面
您可以根据需要将数字0到7分配给多维数据集的8个顶点。必须为每个顶点分配一个确切的数字。 例如,您的顶点可能像这样分配: 3-----1 /| /| 4-----2 | | | | | | 5---|-0 |/ |/ 6-----7 编写一个使用0到5之间的整数的程序。这6个数字中的每个数字都以您喜欢的任何方式与立方体的一个面相关联。输入这些数字之一时,必须将相关面的4个顶点数字以2×2平方的数字打印到标准输出。该面应从立方体外部直接观看。所有4个面旋转都是有效的。 例如,如果0与上面的示例多维数据集的正面相关联,则这将是input的有效输出0: 42 67 可以在任何90°旋转角度下观看人脸,因此这些也是有效的: 27 46 76 24 64 72 此输出(及其旋转)无效,因为它们是从人脸的错误侧面看的: 24 76 同样的想法也适用于所有其他面孔。例如,如果1与背面相关联,则输入1可能会产生输出13[newline]05(并且31[newline]50将是无效的)。 因此,真正的挑战是选择顶点数和旋转度,以便将输入转换为其4个顶点数既简单又简短。 以字节为单位的最短代码获胜。Tiebreaker是较早的帖子。(方便的字节计数器。) 笔记 您可以编写函数而不是程序。它应该是0到5之间的整数,并打印或返回2×2位数的网格字符串。 从标准输入,命令行或函数arg中获取输入。您可以假设输入有效。 输出可以选择包含尾随换行符。 请务必告诉我们您选择的顶点和面数。

13
谢尔宾斯基层
首先,/\您可以通过在下面添加一条线来创建类似于Sierpinski三角形的图案,从而... 任何松散的分支/或\再次分裂为两个分支:/\。 分支的任何碰撞都将\/死,其下无任何东西(只有空格)。 重复这些规则将产生 /\ /\/\ /\ /\ /\/\/\/\ /\ /\ /\/\ /\/\ etc... (ViHart的启发) 编写一个程序或函数,该程序或函数接受一个正整数N,并将此模式的前N行打印到stdout,且前导或尾随空格不超过所需数量。 例如,如果输入是1输出,则必须为 /\ 如果输入是2输出,则必须为 /\ /\/\ 如果输入是8输出,则必须为 /\ /\/\ /\ /\ /\/\/\/\ /\ /\ /\/\ /\/\ /\ /\ /\ /\ /\/\/\/\/\/\/\/\ 等等。 字节最少的代码获胜。

11
每日随机高尔夫#3:整数分区
关于系列 首先,您可以像对待其他任何代码高尔夫挑战赛一样对待它,并回答它而不必担心系列赛。但是,在所有挑战中都有排行榜。您可以在第一篇文章中找到排行榜以及有关该系列的更多信息。 尽管我在本系列中有很多想法,但未来的挑战还没有定下来。如果您有任何建议,请在相关的沙箱帖子上让我知道。 漏洞3:整数分区 时间增加了一点难度。 甲分区正整数n被定义为正整数,其总和的多集n。例如,如果n = 5存在,则存在以下分区: {1,1,1,1,1} {2,1,1,1} {2,2,1} {3,1,1} {3,2} {4,1} {5} 请注意,这些是多集,因此它们没有顺序{3,1,1},{1,3,1}并且{1,1,3}都被认为是相同的。 给您的任务是n生成的随机分区n。以下是详细规则: 产生的隔板的分布必须均匀。也就是说,在上面的示例中,应该以1/7的概率返回每个分区。 当然,由于PRNG的技术局限性,不可能实现完美的均匀性。为了评估您提交的文件的均匀性,以下操作将被视为产生完全均匀的分布: 从PRNG(在任何范围内)获取一个数字,该数字被证明是(近似)统一的。 通过取模或乘法(或一些其他将值均匀分配的运算)将较大的一组数字的均匀分布映射到较小的一组。较大的集合必须包含至少为较小集合的1024倍的可能值。 由于分区是多集,因此您可以按任何顺序返回它们,并且此顺序不必一致。但是,出于随机分布的目的,顺序被忽略。也就是说,在上面的示例中{3,1,1},{1,3,1}和{1,1,3} 一起返回的概率必须为1/7。 您的算法必须具有确定性的运行时。特别是,您不能生成随机多集,如果它们的总和不等于,则拒绝它们n。 您算法的时间复杂度必须是中的多项式n。特别是,您不能简单地生成所有分区并选择一个随机分区(因为分区的数量与呈指数增长n)。您可能会假设您使用的PRNG可以返回每个值O(1)中的均匀分布值。 您不得使用任何内置函数来解决此任务。 您可以编写完整的程序或函数,并通过STDIN或最接近的替代方案,命令行参数或函数自变量接受输入,并通过返回值或打印到STDOUT(或最接近的替代方案)产生输出。 您可以假定n ≤ 65(这样分区的数目小于2 21)。输出可以采用任何方便,明确的列表或字符串格式。 如果您提交功能,请考虑还提供一些测试程序,该程序会多次调用该功能并打印结果。如果必须在代码中调整参数,则可以。这样做是为了使人们可以检查解决方案至少近似均匀。 这是代码高尔夫球,因此最短的提交(以字节为单位)获胜。当然,每位用户最短的提交时间也将进入该系列的整体排行榜。 排行榜 该系列的第一篇文章将产生一个排行榜。 为确保您的答案显示出来,请使用以下Markdown模板以标题开头每个答案: # Language Name, N bytes N您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数来保持标题。例如: # Ruby, <s>104</s> <s>101</s> 96 bytes (目前未显示该语言,但是该代码段确实需要并对其进行解析,并且将来我可能会添加一个语言排行榜。)

8
广义奎因发生器
挑战 在此挑战中,您将指定源语言 S和目标语言 T。您的任务是P用该语言编写以下程序S。如果输入了有效Q语言的程序T作为输入P,它将以有效R语言T输出没有输入和输出的有效程序Q(R),即Q应用于的源代码的程序R。此外,您应该在答案中提供一个简单的示例程序Q(越有趣,越好,尽管您对此没有得分),结果程序R以及的输出R。这是代码高尔夫球,因此是P获胜的最短代码。 换句话说,这对于编写一个可以创建任意类型的广义quines的“通用quine构造函数”是一个挑战。 澄清说明 您的源语言和目标语言可能相同。 程序P应采用一个字符串作为输入(来自STDIN或等效的字符串),并输出一个字符串(至STDOUT或等效字符串),每个输出程序也应如此R。 输入程序Q还应该将一个字符串转换为另一个字符串,但是它们的形式更加灵活:它们可以是字符串到字符串的函数,可以使用特定名称修改变量的代码段,可以使用目标语言来修改数据堆栈的代码段有一个,等等。您还可以Q通过声明例如可能不包含任何注释来进一步限制的形式。但是,您必须能够将任何可计算的字符串到字符串函数实现为输入程序Q,并且必须明确说明它们的功能以及对它们施加的进一步约束。 输出程序R实际上应该是一个(通用的)quine,所以除非Q这样做,否则它不得读取任何输入(用户输入,文件等)。 不允许出现标准漏洞。 一个例子 假设我选择Python作为源语言,选择Haskell作为目标语言,并且进一步要求输入程序应该是String -> String名为的函数的单行定义f。如果我提供反向字符串程序 f x = reverse x 作为我的Python程序的输入P,它将输出另一个Haskell程序的源代码R。该程序将的源代码打印到STDOUT R,但相反。如果P赋予身份功能 f x = x 作为输入,输出程序R是一个quine。

30
字符串到二进制
这是代码高尔夫挑战赛。就像标题所说的那样,编写一个程序来将一串ascii字符转换为二进制。 例如: "Hello World!" 应该变成 1001000 1100101 1101100 1101100 1101111 100000 1010111 1101111 1110010 1101100 1100100 100001。 注意:我对pyth实现特别感兴趣。

3
抽出ASCII纸牌
考虑以下15种ASCII 纸牌模式(从王牌到百搭,从背面),其中西服符号X的占位符是:(它们看起来更好,行间距更小) ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- ------------- |AX | |2X | |3X | |4X | |5X | |6X | |7X | |8X | |9X | |10X | |JX | |QX | |KX | |J | |* * * * * …

7
组织格里高利教堂的音乐
那是930年,而格里高利教堂遇到了问题。他们有数千页的诵经音乐,但是问题是所有乐谱都被简单地堆放了起来,而不是拥有任何实际的组织系统: 由制图者协会的用户gamerprinter提供。 教堂需要组织所有乐谱,因此他们聘请了一位中世纪软件工程师来编写程序来为他们组织音乐。您是已雇用的软件工程师。但是,中世纪的编译过程需要由一群缓慢的圣经抄写员将程序写在纸上。为了减少抄写员团队编译代码所花费的时间,您必须使程序尽可能小。 教会希望根据他们所写的音阶来组织圣歌。教会的所有圣歌都以多利安音阶来编写。给定特定音乐的音符,您的程序将输出它所在的Dorian音阶。在这里,我将确切解释Dorian音阶是什么。如果您已经知道,则可以跳过本节。 任何旋律中都有12种可能的音符。在这里,它们按顺序排列: C C# D D# E F F# G G# A A# B 一个半音(用表示S)正在向右增加一个步骤,环绕(所以从B向上的半音将回到C)。甲色调(使用表示T)是两个半音。例如,从F#开始的半音为G。从F#开始的半音为G#。 要创建多利安音阶,我们从列表中的任何音符开始,然后按照以下模式向上移动,列出遇到的音符: T, S, T, T, T, S 一个例子。我从A开始。Dorian音阶的音阶变成: A B (up a tone) C (up a semitone) D (up a tone) E (up a tone) F# (up a tone) G (up a …
19 code-golf  music 

6
运行第N个字符可获得N
编写尽可能短的程序,这样,当您将第一个字符和其后的每个第N个字符组合到一个新程序中时,输出为N。这必须适用于N = 1、2,...,16。 换句话说,如果从程序中删除除第一个字符外的所有字符,然后再去除第N个字符,则其余代码的输出应为N。 例 如果您的代码是 ABCDEFGHIJKLMNOP N = 1导致ABCDEFGHIJKLMNOP。运行该命令应输出 1。N = 2导致ACEGIKMO。运行此命令将输出 2。N = 3得出结果ADGJMP。运行此命令应输出 3。N = 4将得出AEIM。运行此命令将输出4。N = 5导致AFKP。运行此命令应输出5。N = 6得出结果AGM。运行此命令应输出6。N = 7得出结果AHO。运行该命令应输出7。N = 8导致AI。运行此命令应输出8。N = 9得出AJ。运行此命令应输出9。N = 10的结果为AK。运行此命令应输出10。N = 11得出结果AL。运行它应该输出11。N = 12结果AM。运行此命令应输出12。N = 13得出结果AN。运行此命令应输出13。N = 14得出结果AO。运行此命令应输出14。N = 15得出结果AP。运行此命令应输出15。N = 16的结果为A。运行它应该输出16。 细节 允许所有字符,包括ASCII和非ASCII。(还允许使用换行符和不可打印的ASCII。请注意,回车和换行符应作为不同的字符计数。) 分数是未更改程序的长度(以字符为单位)(例如15)。最低分获胜。 分数低于16显然是不可能的,因为那时至少有两个更改过的程序是相同的。 输出可能是文件或stdout或其他任何合理的结果。但是,这16个不同程序的输出必须全部转到相同的位置(例如,如果AO转到stdout而不是A转到文件,则不可以)。没有输入。 输出必须为十进制,而不是十六进制。实际输出应仅包含1或2个字符,这些字符构成从1到16的数字。(像Matlab这样的东西ans =都可以。) …

30
创建具有重复数字的数组
挑战 这个问题的任务是编写一个程序或一个命名函数,该程序或命名函数采用一个正整数n(大于0)作为通过STDIN,ARGV或函数参数的输入,并通过STDOUT或函数返回值输出一个数组。 听起来足够简单?现在这是规则 该数组将仅包含从1到的整数n 从1到的每个整数n应重复x一次,其中x是每个整数的值。 例如: 输入: 5 输出: [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5] 数组可以排序也可以不排序。 这是代码高尔夫球,因此获胜者是最短的代码(以字节为单位)。 奖金 0.5如果输出数组中没有两个相邻的整数相同,则将您的分数乘以。 例如n = 5,一种这样的配置是 [5, 4, 5, 4, 3, 4, 5, 2, 5, 3, 1, 2, 3, 4, 5]

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.