编程拼图和代码高尔夫

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

4
留在基督教青年会很有趣
“ YMCA”是乡村人民流行的迪斯科歌曲,有着著名的舞蹈。编写最短的程序,以输出与歌曲的合唱同步的大写字母“ Y”,“ M”,“ C”和“ A”。 通常,发送到标准输出的每一行都有一个字母。这主要是为了简化受C标准库的输出缓冲限制的程序(打印换行符会刷新输出缓冲区),因此,如果省略这些换行符会使您的程序更短,则可以省略其中的任何或所有换行符。 您的程序(与音乐同时启动)必须在启动后每隔0.125 s内输出字母“ Y”(以秒为单位;这是我从YouTube上发布的音乐视频中确定的)。 45.766 49.611 60.889 64.661 109.816 113.591 124.810 128.687 173.830 177.620 188.950 192.724 204.013 207.739 219.057 字母“ M”,“ C”和“ A”分别在每个“ Y”之后分别为0.930 s,1.395 s和1.628 s。出于测试目的,通过将这些相对时间加到前面的“ Y”时间中,可以将它们转换为绝对时间。 我已经用C语言编写了一个测试程序和相应的示例程序,假定每个字母后都有一个换行符(尽管这不是竞争规则)。它是为Linux编写的,如果不使用Cygwin,将无法在Windows上运行。如果您无法使用测试程序测试提交的内容,请至少根据YouTube视频来检查提交的内容。 如果您的提交要求使用特殊的命令行选项才能正常运行,则该命令行选项将在计算分数时计算在内。但是,任何解释器的启动时间都不会影响您,可以根据需要修改测试程序以适应该要求。 尽管我怀疑存在,但我必须说禁止使用专门为此任务设计的编程语言功能或库。
15 code-golf  music 

13
换位,素数,我的天哪!
任务很简单:您的程序读取一个整数作为输入,并输出它是否为质数。您可以打印“是/否”,“是/否”或明确标识结果的任何内容。 挑战在于,代码必须将其行和列进行转置。 为了排除明显的解决方案(最短的“简单”解决方案使用注释垂直逐个字符重复地进行注释),该度量与通常的代码高尔夫有点不同: 因为格式化在此挑战中非常重要,所以代码大小是在代码适合的最小矩形区域中度量的。换句话说,空格确实很重要,并且行的长度应相等(您不要为简单起见,在发布解决方案时必须实际执行此操作)。例如 int main() { return 0; } 的大小为4 * 13 = 52 (显然,它不符合以下两个条件之一:素数检测和可转位。) 最小尺寸获胜。 您可以使用任何语言和任何库函数,除非该函数的唯一目的是查找,生成或检测素数。 编辑: 虽然获胜者可能是Golfscript解决方案,但我将奖励50分以奖励最佳的C或C ++解决方案!

20
生成求和网格
生成一个7 x 7的网格,其中填充了随机数。但是,在具有奇数行和列编号(从0开始)的单元格中,必须使用周围单元格的总和。这是一个3 x 3网格的小示例(加粗平方和): 2 2 2 2 16 2 2 2 2 这是一个7 x 7网格的示例: 6 5 4 3 7 2 5 6 43 3 50 8 43 8 4 7 8 8 9 3 1 4 36 1 43 6 40 5 3 3 6 1 4 …

5
BrainF中最快的排序***
在已经实施的BrainF ***快速排序,我意识到这可能不是那么快。在BF中,普通语言中的O(1)操作(如数组索引)要长得多。当您在图灵tarpit中进行编码时,构成有效排序的大多数规则都可以扔掉。 因此,实现“有史以来最快的BrainF ***排序例程”是一项挑战。我将使用下面的解释器为所有条目计时。解释器使用带未签名字符的16K磁带。超出限制时,磁带和单元都将缠绕。读取EOF会将0放入当前单元格。测量的时间包括解析源文件的时间和处理所有输入文件的时间。最快的代码胜出。 测试向量将是一组用于测试排序边缘情况的Ascii文件,包括 已经排序的列表:“已排序” !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 反向排序列表:“反向” ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! 由多个唯一值的许多副本组成的文件:“ onlynine” ibbkninbkrauickabcufrfckbfikfbbakninfaafafbikuccbariauaibiraacbfkfnbbibknkbfankbbunfruarrnrrrbrniaanfbruiicbuiniakuuiubbknanncbuanbcbcfifuiffbcbckikkfcufkkbbakankffikkkbnfnbncbacbfnaauurfrncuckkrfnufkribnfbcfbkbcrkriukncfrcnuirccbbcuaaifiannarcrnfrbarbiuk 完全随机的ascii文件:“随机” 'fQ`0R0gssT)70O>tP[2{9' 0.HMyTjW7-!SyJQ3]gsccR'UDrnOEK~ca 'KnqrgA3i4dRR8g.'JbjR;D67sVOPllHe,&VG"HDY_'Wi"ra?n.5nWrQ6Mac;&}~T_AepeUk{:Fwl%0`FI8#h]J/Cty-;qluRwk|S U$^|mI|D0\^- csLp~`VM;cPgIT\m\(jOdRQu#a,aGI?TeyY^*"][E-/S"KdWEQ,P<)$:e[_.`V0:fpI zL"GMhao$C4?*x 1..255范围内的随机文件:“全范围” öè—@œ™S±ü¼ÓuǯŠf΀n‚ZÊ,ˆÖÄCítÚDý^öhfF†¬I÷xxÖ÷GààuÈ©ÈÑdàu.y×€ôã…ìcÑ–:*‰˜IP¥©9Ä¢¬]Š\3*\®ªZP!YFõ®ÊÖžáîÓ¹PŸ—wNì/S=Ìœ'g°Ì²¬½ÕQ¹ÀpbWÓ³ »y »ïløó„9k–ƒ~ÕfnšÂt|Srvì^%ÛÀâû¯WWDs‰sç2e£+PÆ@½ã”^$f˜¦Kí•òâ¨÷ žøÇÖ¼$NƒRMÉE‹G´QO¨©l¬k¦Ó 每个输入文件最多具有255个字节。 这是口译员。它是为控制台模式Windows编写的,但应该易于移植:只需替换read_time()并sysTime_to_ms()使用特定于平台的等效项即可。 用法: bftime program.bf infile1 [infile2 ...] #include <windows.h> #include <stdio.h> #define MS_PER_SEC 1000.0f #define MAXSIZE (0x4000) #define MAXMASK (MAXSIZE-1) typedef __int64 sysTime_t; typedef unsigned …

12
从二进制转换为负二进制
给定一个介于0和之间的二进制整数1111111111111111(即16位无符号整数)作为输入,请在negabinary中输出相同的整数。 输入可以采用最适合您的语言的格式;例如,如果程序更容易处理16位数字(例如0000000000000101而不是)的输入,而不是简单地101输入,则可以编写程序以仅接受这种方式的输入。 样品I / O > 1 1 > 10 110 > 1010 11110 > 110111001111000 11011001110001000 > 1001001 1011001 这是我编写的一个示例程序,该程序可以进行基数转换,包括负数和非整数基数。您可以使用它来检查您的工作。

8
实施Rijndael的S-box
Rijndael的S-box是AES加密和解密中经常使用的操作。它通常实现为256字节查找表。这很快,但是这意味着您需要在代码中枚举256字节的查找表。我敢打赌,鉴于基本的数学结构,这种人群中的某人可以用更少的代码来完成这项工作。 用您喜欢的语言编写一个实现Rijndael的S-box的函数。最短的代码获胜。

25
计算pi到5位小数
这来自http://programmers.blogoverflow.com/2012/08/20-controversial-programming-opinions/ “鉴于可以使用函数4 *(1 – 1/3 + 1/5 – 1/7 +…)来估计Pi,更多的项可以提供更高的精度,因此编写一个函数可以计算出Pi的精度为小数点后5位。 ” 注意,必须通过计算上面给出的顺序来完成估算。
15 code-golf  pi 

14
在CodeGolf.SE上计算用户的特权
挑战 您的目标是编写尽可能短的程序,该程序将获取事件列表(例如upvote,downvote等),并返回用户的声誉和所获得的特权。 什么样的事件? 这是事件的图表,按赢得信誉的顺序列出: -15 answer unaccepted -10 answer unupvoted -5 question unupvoted -2 answer downvoted -2 question downvoted -2 unaccept answer -1 downvote answer +1 join website +1 undownvote answer +2 accept answer +2 question undownvoted +2 answer undownvoted +5 question upvoted +10 answer upvoted +15 answer accepted +100 …

10
埃及金字塔
埃及最大的金字塔吉萨大金字塔,不仅是古代世界七大奇迹中最古老的金字塔,而且还是唯一保持完整的金字塔。埃及金字塔的建造可能需要长达20年的时间,而且规模如此之大,以至于萨拉丁的儿子阿齐兹·乌斯曼(Al-Aziz Uthman)粉碎了十字军,不得不放弃拆除吉萨大金字塔的原因,因为这被认为是一项艰巨的任务。埃及金字塔大多是在旧王国和中王国时期(公元前2686年至1690年)为该国的法老王及其配偶建造的墓而建,截至2008年,已发现138座埃及金字塔。 任务是创建一个程序,该程序输入由空格分隔的一系列距离,并生成由这些距离分隔的10×10文本金字塔。距离1等于两个字符。 文字金字塔如下所示: /\ /--\ /----\ /------\ /--------\ /----------\ /------------\ /--------------\ /----------------\ /------------------\ 如果输入仅包含一个换行符,则将生成一个金字塔,如上所述。对于每个金字塔,左侧的金字塔都显示在前面。 例一 输入: 4 3 1 输出: /\ /\ /\/\ /--\ /--\ /--\-\ /----\ /----\/----\-\ /------\/------\-----\-\ /--------\-------\-----\-\ /----------\-------\-----\-\ /------------\-------\-----\-\ /--------------\-------\-----\-\ /----------------\-------\-----\-\ /------------------\-------\-----\-\ 例二 输入: 0 9 输出: /\ /\ /--\ /--\ /----\ /----\ /------\ /------\ /--------\ …

12
间隔联盟
给定间隔列表,对其进行合并,并减少重叠。这意味着减少了重叠部分。([a, b] U [c, d] = [a, d]如果b > c)假定所有间隔中的所有a <b [a, b]。根据输入间隔列表->输出间隔列表来实现。最短的代码获胜。您不能使用任何现有的库。 说明: 打开和关闭间隔不区分。 实数的间隔,而不是整数。([2, 3], [4, 5] -> [2, 3], [4, 5]) 无需排序输出间隔 输入无关紧要的顺序 非法输入仅[a, b]在处b >= a,与输入间隔的顺序和输入间隔的数量无关。 您无需在未定义的行为上显示错误消息 示例(带数字线) [2, 4], [7, 9] --> [2, 4], [7, 9] 234 789 -> 234 789 [1, 5], [2, 10] …
15 code-golf 

7
接下来是什么?
给定一个用空格分隔的整数列表,您的任务是在序列中查找下一个整数。序列中的每个整数是应用单个数学运算(的结果+,-,*或/)到前一整数,并且每个序列由这样的操作的可变数目(但不超过10个)组成。没有序列会比整数序列的长度长一半,因此您将使每个操作序列至少出现两次以进行确认。 输入将通过stdin(或prompt对于JavaScript解决方案)。 以下是一些说明性示例。 输入: 1 3 5 7 9 11 输出: 13 相当容易,这个。所有值均为先前值+2。 输入: 1 3 2 4 3 5 4 6 5 7 6 输出: 8 +2然后按此顺序执行两个步骤-1。 输入: 2 6 7 3 9 10 6 18 19 15 45 46 输出: 42 三个步骤- ,*3,。+1-4 测试用例 这里还有一些测试用例: 输入: 1024 512 …

30
欢乐跳线序列
如果连续元素之间的差值的绝对值取从1到n-1的所有值,则n> 0整数的序列称为“欢乐跳线”。 因此序列[4,1,2,4]的绝对差[3,1,2]等于集合[1,2,3](1到n-1,其中n是原始序列的长度)因此,它是一个快乐的跳线。 序列的长度为n> 0。 假设n = 1是一个快乐的跳线。 简易模式:不用担心stdin / stdout。只是一个函数,它接受参数并返回一些表明是否快乐的信息 硬模式:在stdin上输入(以空格分隔),输出为“ Jolly” /“ Not jolly”。资本化问题。 这是代码高尔夫。 编辑:序列可以包含负整数,并且stdin上的输入以空格分隔。 $ jolly 2 -1 0 2 Jolly $ jolly 19 22 24 25 Jolly $ jolly 19 22 24 21 Not jolly

5
高尔夫代码:熄灯!
传递所有可能性的最短代码获胜 已经开发出许多基于网格的游戏,它们以打开的灯光网格开​​始。按下任何一个灯都会导致该灯和与其相邻的四个灯切换。切换灯光时,灯光是关闭还是打开,这取决于它是最初打开还是关闭。目标是按顺序击中灯光,导致所有灯光最后都关闭。 “ X”表示已打开的灯。“ O”表示关闭的灯。“ P”代表被按下的那个正方形。 XOO XOO XOX XOX XXX XOX XOP -> XXO -> OPO -> XOX OOX OOX POO XXO XOO Intial Grid Press 1 Press 2 Press 3 Ending Grid 输入可以直接从作为参数传递的文件或标准输入中获取。输入的第一行将包含x(1 <= x <= 20),即灯光网格的大小,即x乘x。第二行将包含y(0 <= y <=(x * 3)2),即最初点亮的灯数。接下来的y行包含网格上照亮的灯光的坐标,格式为“行列”。应该重新关闭已经打开的灯(之前已切换过)。下一行将包含z,即按下的灯光数量。最终z 行以“行列”的格式包含按其按下顺序的按下的灯光的坐标。 没有输入将是不正确的。所有数字都将在网格的给定边界内。 切换所有灯光后,输出将是最后一个网格。它应该是一个n × n的网格。对于每个点亮的区域,均应使用大写字母“ X”。对于每个灯光都熄灭的区域,应使用大写字母“ …

17
代码高尔夫:圆内的晶格点
下图显示了该问题: 编写一个函数,给定一个整数作为圆半径,该函数计算中心圆(包括边界)内的晶格点数。 该图显示: f[1] = 5 (blue points) f[2] = 13 (blue + red points) 用于检查/调试的其他值: f[3] = 29 f[10] = 317 f[1000] = 3,141,549 f[2000] = 12,566,345 应该有合理的表现。假设f [1000]不到一分钟。 最短的代码获胜。通常使用Code-Golf规则。 请以f [1001]的计算和时序为例。

6
将置换分解为周期
有一个众所周知的定理,任何置换都可以分解为一组循环。您的工作是编写最短的程序。 输入: 两行。第一个包含数字N,第二个包含以空格分隔N的范围内的不同整数[0,N-1]。这些整数表示N元素的排列。 输出: 排列中每个循环一行。每行应是按循环顺序用空格分隔的整数列表。 循环可以以任何顺序输出,并且每个循环可以从任意位置开始输出。 范例1: 8 2 3 4 5 6 7 0 1 此输入编码排列0-> 2、1-> 3、2-> 4、3-> 5、4-> 6、5-> 7、6-> 0、7-> 1。这分解成如下循环: 0 2 4 6 1 3 5 7 同样有效的输出将是 5 7 1 3 2 4 6 0 范例2: 8 0 1 3 4 5 6 …

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.