编程拼图和代码高尔夫

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

30
Pi计算代码高尔夫[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 2年前关闭。 挑战 您必须以最短的长度计算pi。欢迎加入任何语言,您可以使用任何公式来计算pi。它必须能够计算pi到至少5个小数位。最短,将以字符为单位。比赛持续48小时。开始。 注意:这个类似的问题指出,必须使用4 *(1 – 1/3 + 1/5 – 1/7 +…)级数来计算PI。这个问题并没有这个限制,而事实上很多答案在这里(包括最有可能胜出)将是无效的,其他的问题。因此,这不是重复的。

3
Unicode UTF转换器
目的是在UTF FAQ中给出的官方Unicode编码之间创建完全兼容的转换器。鉴于这是以Unicode为中心的,我将使用所涉及的最佳编码来接受最低字节数的答案(除非您使用APL进行编程,否则它可能是UTF-8)。我为冗长的帖子表示歉意,但其中很多内容都在解释编码,这些编码也可以在官方规范(pdf,第3.9 D90-D92节)或Wikipedia中进行访问。。 技术指标 如果您选择的语言在任何时候都不能完全满足要求,请使用符合给定规则精神的内容代替它。例如。并非每种语言都有内置的数组,函数等。 不使用字符串库/函数或编码库/函数。此代码的重点是使用位/字节操作实现转换器。但是,允许将字符串本身以字符或字节数组的形式使用。哦,也没有执行转换的OS调用。 转换器是一个具有三个参数的函数:代表已编码输入字符串的字节数组,以及以数字表示的“输入”和“输出”编码。我们将按此UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, and UTF32LE顺序任意分配从0到6的数字。无需检查数字是否为< 0或> 6,我们将假定这些参数正确。转换器将以所需的输出编码返回有效的字节数组。 我们将使用空字符(U+0000)作为字符串终止符。此后的任何内容都无关紧要。我们将假设输入数组在某处具有空字符,因此您无需进行边界检查。 根据FAQ,如果输入字节数组对其声明的编码无效,则必须发出错误信号。我们将通过以下方式之一执行此操作:使程序崩溃,引发异常,返回null或返回其前四个字节全为0的数组(以便可以U+0000在每种编码中将其识别)。 编码 必须遵循官方规范,但是Wikipedia对编码提供了很好的解释(据我认为是正确的),在这里我将对其进行总结以确保完整性。请注意,UTF-16和UTF-32具有字节序变体。 UTF-32,UTF-32LE,UTF-32BE 最简单的编码,每个代码点仅以等于其数值的4个字节进行编码。LE / BE表示字节序(小字节序/大字节序)。 UTF-16,UTF-16LE,UTF-16BE 来自的代码点U+0000 - U+FFFF以等于其数值的2个字节编码。较大的值使用一对代理进行编码,这些代理是的保留值U+D800 - U+DFFF。因此,要编码大于的点U+FFFF,可以使用以下算法(从Wikipedia中无耻地复制): 从代码点减去0x010000,剩下20位数字,范围为0..0x0FFFFF。 最高的十个位(0..0x03FF范围内的数字)被添加到0xD800,以给出第一个代码单元或前导代理,其范围为0xD800..0xDBFF [...]。 低十位(也位于0..0x03FF范围内)添加到0xDC00,以提供第二个代码单元或尾迹替代,其范围为0xDC00..0xDFFF [...]。 UTF-8 来自的代码点U+0000 - U+007F被编码为等于其数值的1个字节。从U+0080 - U+07FF他们被编码为110xxxxx 10xxxxxx,U+0800 - U+FFFF是1110xxxx 10xxxxxx 10xxxxxx,值越大11110xxx 10xxxxxx 10xxxxxx 10xxxxxx。所述x的是从代码点的数值的位。 物料清单 …

19
验证Brainfuck程序
Brainfuck的另一个解析问题,但是这次……有所不同。 您正在开发Brainfuck程序的公司Infinite Monkeys Incorporated中工作,以解决各种有趣的问题(偶然地,至少是偶然,毕竟该公司创建了随机程序)。但是,看来仅执行Brainfuck的快速图灵机存在语法错误的小而昂贵的问题-生成一个,计算机便爆炸了。这可能是设计缺陷,但没有人费心去寻找它为什么会发生。 由于Turing机器(尤其是快速的机器)非常昂贵(毕竟它们具有无限的RAM成本),因此最好在执行代码之前确保程序没有任何语法错误。您的公司将要运行大量代码,因此手动验证将不起作用。编写一个程序,该程序读取用于Brainfuck的STDIN代码,如果程序有任何语法错误(例如],由于没有匹配,则是语法错误),则退出状态将退出状态设置为0(错误)以外的任何值[。如果程序完全正常,则以退出状态设置为0退出。 确保您的程序正确注意到涉及的错误[]。您不希望其他计算机爆炸,对吗?哦,请确保它尽可能的短-您的老板为简短的程序付费(因为他认为这些程序很快,还是有些东西)。哦,您不必在Brainfuck中编码(实际上,您不能,因为Brainfuck不支持退出代码),您的代码将在普通计算机上运行。 因此,正如您所看到的,您的工作是检查Brainfuck程序是否“有效”(具有成对的[]符号)。请注意,Brainfuck程序可以使用以外的其他字符[],因此请勿仅因为它具有其他命令而拒绝该程序。最小的代码获胜,但无论如何,您可能会更在乎投票。

3
我给你安排时间,但是我周末不工作
我的老板需要知道将两个整数相加需要多长时间。但是,我不喜欢在周末工作,而且我认为我的代码也不也很公平。问题是,老板是一个要求很高的人,我认为我应该随着时间的流逝,以确保所需的时间保持不变,而且我知道他将检查代码是否正常工作。 你能给我写一个简短的程序吗? 接受两个整数,并返回正确的加法结果以及执行加法所需时间的时间-此时间应合理,并基于代码的运行时。但是,如果您需要在定时代码之间进行一些操作,使它的运行时间比允许的时间稍长。但是,您不能仅输出假时间。 不适用于本地时间的周末代码(它不能只是返回错误的结果,代码需要中断,错误或以其他方式无法执行) 不立即为明显的,为什么它没有在周末工作 我知道第一个条件有点怪异,但是我想确保人们可以在需要时导入日期/时间库,而不必怀疑标准3。但是,我敢肯定有些聪明的人会使用-10个字符无需使用标准日期库中的日历功能即可执行此操作的任何人 关于“标准日期/时间库” 标准日期时间库的示例包括python datetime,javascript date对象库java.util.Date等。用于计算执行时间增量的函数(例如pythons timeit模块)不会违反此准则,因为老板希望对代码进行计时。在某些情况下,将需要导入这些库以访问任何时间函数,因此允许其调用以整数形式返回自当前纪元开始以来的时间的函数,但日历函数返回结构化的datetime对象,这些对象可以给出单独的不允许使用小时,天等。 编辑:关于Dan04的问题,代码必须满足有关何时工作或不工作的这4个条件。您还应该解释代码如何检查时间,因为星期一上午/星期五晚上的闲暇应该为一些缩短代码的创造性方法提供一些机会。 从周六上午00:00:00到周日晚上23:59:59不得工作。 必须始终从星期一早上06:00:00到星期五晚上19:59:59工作 可以在星期一早上00:00:00到星期一早上5:59:59工作,也可以不工作 从星期五晚上20:00:00到星期五晚上早上23:59:59可以工作或不工作 edit2:显而易见,它必须满足以下3个条件: 切勿在DayOfWeek未使用该函数来计算函数时间的情况下调用已调用(或类似函数)的函数。 切勿使用英语的星期六或星期日或其缩写。 没有相同的命名变量(不能用于确定星期几或确定是否应运行代码)时,切勿使用Sat或Sun(或在备用字母的情况下)。

3
多边形前缀
多边形是根据多边形的边数命名的。五边形具有5个边,八边形具有8个边。但是,它们如何命名?248面多边形的名称是什么? 所有多边形后缀为-gon。每个多边形都有特定的前缀,具体取决于边数。以下是较低数字的前缀: 3 - tri 4 - tetra 5 - penta 6 - hexa 7 - hepta 8 - octa 9 - nona 10 - deca 11 - undeca 12 - dodeca 13 - triskaideca 14 - tetradeca 15 - pentadeca 16 - hexadeca 17 - heptadeca 18 - octadeca …

3
找到下一个素数的最快代码
问题如下。 输入:整数n 输出:大于的最小素数n。 挑战在于提供最快的代码来做到这一点。我将测试上的大小的初始值的代码 大致10^8 10^200直到它超过的规模扩大一倍1分钟我的电脑上10秒钟。 获胜的代码将找到输入量最大的下一个素数。 通过比较,用python编写的简单筛子能够找到比10^8大约20几秒钟大的下一个素数。 我可以在4GB RAM ubuntu计算机上对其进行测试的要求很严格。所有代码都必须是免费的(两种意义上),并且如果使用库,它们也必须是免费的并且易于安装。报告的任何虚假素数都会立即取消提交的资格。 如果代码是完全用该语言编写的,而无需使用外部库,那么我还将对每种编程语言的获奖者分别给予表彰。随着比赛的进行,我还将保持最快时间的运转表,以便人们可以看到他们的表现。 到目前为止的表 蟒蛇。使用由提供的代码,一个惊人的357数字质数343239883006530485749095039954069660863471765007165270469723172959277159169882802606127982033072727748864815569574042901856099399985832190628701414555752857600000000000000000000000000000000000000002872284792758930912601189043411951050852357613658978971208596097634095500808832510259693761982135208603287199546795000697807728609476163156438356035166156820611是10秒内的最终数字primo。有人会打败这个第一名吗?

26
三角形区域侧面侧面侧面
给定一个三角形的三个边,请打印此三角形的区域。 测试用例: 在: 2,3,4 出: 2.90473750965556 在: 3,4,5 出: 6 假设三个边a,b,c总是a> 0,b> 0,c> 0,a + b> c,b + c> a,c + a> b。
17 code-golf  math 

2
压缩Befunge程序
Befunge是一种二维深奥的编程语言。基本思想是将(一个字符)命令放置在二维网格上。控制流遍历网格,执行传递过来的命令,并在命中箭头(>^<v)时更改方向。命令是基于堆栈的;看到这个清单。另请参见http://esolangs.org/wiki/Befunge。 提供Befunge-98的规格。 问题 编写一个程序,将Befunge程序转换为更紧凑的表示形式。例如,以下程序打印0: > 0 v > @ . ^ < 在这种情况下,可以通过删除空格行来压缩它而无需更改程序的行为,从而得到 >0v >@. ^ < 更复杂的转换可以旋转或镜像命令序列,并消除不必要的控制流命令以压缩程序。例如,使用此程序: >12345v 6 v....7< . . . @ 您可能会将程序的结尾塞进洞里: >12345v >...@ 6 ^....7< 对于第一个示例,最紧凑的程序是 >0.@ 您可以使用任何转换,只要输出程序给出的结果相同即可。 输入程序 输入程序是有效的Befunge-98程序。 您可以假设输入程序是确定性的。也就是说,它不使用读取外部状态的命令:用户输入命令&和~,随机化器?以及自修改代码命令p和g。 您可以假设输入程序终止。 计分 这不是代码高尔夫,而是编写执行代码高尔夫的程序的问题。 输入是一组测试用例(满足上述输入限制的Befunge程序)。总分是测试案例的总分。 每个测试用例的得分 分数是输出程序中非空单元格的凸包的面积,其中每个单元格都视为一个正方形,其四个角为笛卡尔平面中的晶格点。例如, > v @ < 获得9.5分。 如果您的程序在特定输入上没有在合理的时间和内存中终止,则得分为输入程序的得分。(这是因为您可以简单地添加一个限时包装程序,如果您的程序没有及时终止,则该包装程序将不变地输出输入程序。) 如果用您的程序处理后,测试用例程序具有不同的结果(或无法终止),则分数为输入程序的分数加100分的罚款。

22
给出具有N个除数的最小数
您的函数采用自然数,并返回具有除数在内的最小除数的最小自然数,包括它本身。 例子: f(1) = 1 [1] f(2) = 2 [1, 2] f(3) = 4 [1, 2, 4] f(4) = 6 [1, 2, 3, 6] f(5) = 16 [1, 2, 4, 8, 16] f(6) = 12 [1, 2, 3, 4, 6, 12] ... 该函数不必返回除数列表,仅在此处提供示例。

30
打印此乘法表
编写最短的代码以打印以下乘法表: 1×1=1 1×2=2 2×2=4 1×3=3 2×3=6 3×3=9 1×4=4 2×4=8 3×4=12 4×4=16 1×5=5 2×5=10 3×5=15 4×5=20 5×5=25 1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36 1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49 1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64 1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81

3
编写Java代码以检测JVM版本
目的是编写Java代码来检测JVM版本,该代码依赖于兼容性更改,副作用,错误和/或未定义行为,这些行为在一个版本中以某种方式起作用,而在另一版本中以另一种方式起作用。此外,该代码应至少具有一点可读性,而不会牺牲空格和清晰的变量名。 为了确保这一目标,确切的正式规则是: 该代码必须用Java编写,并输出运行它的JRE版本。 该代码不得使用任何专门用于检测Java版本或免费提供JDK或JRE版本的JDK或JRE API。 该代码不得使用反射。 该代码仅在Hotspot Java SE 5、6和7中才需要,但在其他JVM中也可以。 该代码不得在类路径中使用任何第三方库。 该代码不得启动任何其他进程,无论是否是Java。 该代码不得使用环境变量。 该代码不得搜索文件系统以查找预先存在的文件或文件夹。 该代码必须包含在一个文件中,并通过public static void main(String[] args)或调用public static void main(String... args)。 该代码不得使用JRE中存在的任何非公共API。 该代码在执行期间不得生成任何NoClassDefFoundError,NoSuchMethodError,ClassNotFoundException或NoSuchMethodException。 该代码应在与Internet或任何本地网络断开连接的系统中运行。 您应该提供一个解释,说明为什么它在一个版本中会以一种方式运行,而在另一个版本中会以另一种方式运行。 计分 衡量最佳解决方案的方法是max(n / s),其中n是在不违反任何这些规则的情况下检测到的不同Java版本的数量(至少是版本5、6和7),而s是词汇标记的数量在解决方案中。

10
升序矩阵
“升序矩阵”是整数(包括0)的无限矩阵,其中任何元素是最小的可用元素,之前尚未在相应的行和列上使用: | 1 2 3 4 5 6 ... --+---------------- 1 | 0 1 2 3 4 5 ... 2 | 1 0 3 2 5 4 ... 3 | 2 3 0 1 6 7 ... 4 | 3 2 1 0 7 6 ... 5 | 4 5 …
17 code-golf  math  matrix  programming-puzzle  code-golf  music  code-challenge  programming-puzzle  code-golf  fastest-code  code-golf  number  game  code-golf  combinatorics  code-golf  math  sequence  restricted-complexity  code-golf  number  random  code-golf  array-manipulation  code-golf  math  matrix  code-golf  number  sequence  counting  code-golf  math  number  sequence  popularity-contest  number  sequence  code-golf  music  code-golf  number  code-golf  ascii-art  arithmetic  code-golf  code-golf  number  code-golf  code-challenge  array-manipulation  code-golf  grammars  code-challenge  polyglot  code-golf  game  math  python  programming-puzzle  code-challenge  king-of-the-hill  code-challenge  fastest-code  primes  number-theory  number-theory  primes  fastest-code  factoring  popularity-contest  compile-time  code-golf  math 

2
编译正则表达式
在此任务中,您必须编写一个程序来读取正则表达式,并生成另一个程序,该程序输出该正则表达式是否接受输入字符串。输出必须是使用与提交相同的语言编写的程序。 输入值 输入是与以下ABNF匹配的正则表达式r(初始生产规则为REGEX): REGEX = *( STAR / GROUP / LITERAL / ALTERNATIVE ) STAR = REGEX '*' GROUP = '(' REGEX ')' LITERAL = ALPHA / DIGIT ALTERNATIVE = REGEX '|' REGEX 如果输入与此语法不匹配,则程序的行为未定义。 解释 将输入解释为正则表达式,其中*的Kleene-star(表示重复左参数零次或多次)|是替代方法,(并且)组且根本没有运算符串联在一起。分组优先于星形,星形优先于串联,串联优先于替代。 如果正则表达式匹配整个字符串,则认为该字符串可以接受。 输出量 该程序的输出是另一个与您的提交使用相同语言编写的程序,该程序在运行时以实现定义的方式读取字符串s,输出r是否接受s然后终止。输出可以以用户定义的方式完成,尽管对于接受和拒绝的程序必须只有两个不同的输出。 您可以假定输出程序的输入从不超过2 16 -1字节。 限制条件 您的提交或提交的任何程序均不得使用内置功能或 匹配正则表达式 转换正则表达式 编译正则表达式 从语法生成解析器 简化问题,使您的提交变得微不足道 计分 …

7
C:用固定时间代码替换AES FIPS-197 SubBytes表
在FIPS-197(高级加密标准,称为AES)中,大量使用SubBytes,可以将其实现为 unsigned char SubBytes(unsigned char x) { static const unsigned char t[256] = { 0x63,0x7C,0x77,0x7B,0xF2,0x6B,0x6F,0xC5,0x30,0x01,0x67,0x2B,0xFE,0xD7,0xAB,0x76, 0xCA,0x82,0xC9,0x7D,0xFA,0x59,0x47,0xF0,0xAD,0xD4,0xA2,0xAF,0x9C,0xA4,0x72,0xC0, 0xB7,0xFD,0x93,0x26,0x36,0x3F,0xF7,0xCC,0x34,0xA5,0xE5,0xF1,0x71,0xD8,0x31,0x15, 0x04,0xC7,0x23,0xC3,0x18,0x96,0x05,0x9A,0x07,0x12,0x80,0xE2,0xEB,0x27,0xB2,0x75, 0x09,0x83,0x2C,0x1A,0x1B,0x6E,0x5A,0xA0,0x52,0x3B,0xD6,0xB3,0x29,0xE3,0x2F,0x84, 0x53,0xD1,0x00,0xED,0x20,0xFC,0xB1,0x5B,0x6A,0xCB,0xBE,0x39,0x4A,0x4C,0x58,0xCF, 0xD0,0xEF,0xAA,0xFB,0x43,0x4D,0x33,0x85,0x45,0xF9,0x02,0x7F,0x50,0x3C,0x9F,0xA8, 0x51,0xA3,0x40,0x8F,0x92,0x9D,0x38,0xF5,0xBC,0xB6,0xDA,0x21,0x10,0xFF,0xF3,0xD2, 0xCD,0x0C,0x13,0xEC,0x5F,0x97,0x44,0x17,0xC4,0xA7,0x7E,0x3D,0x64,0x5D,0x19,0x73, 0x60,0x81,0x4F,0xDC,0x22,0x2A,0x90,0x88,0x46,0xEE,0xB8,0x14,0xDE,0x5E,0x0B,0xDB, 0xE0,0x32,0x3A,0x0A,0x49,0x06,0x24,0x5C,0xC2,0xD3,0xAC,0x62,0x91,0x95,0xE4,0x79, 0xE7,0xC8,0x37,0x6D,0x8D,0xD5,0x4E,0xA9,0x6C,0x56,0xF4,0xEA,0x65,0x7A,0xAE,0x08, 0xBA,0x78,0x25,0x2E,0x1C,0xA6,0xB4,0xC6,0xE8,0xDD,0x74,0x1F,0x4B,0xBD,0x8B,0x8A, 0x70,0x3E,0xB5,0x66,0x48,0x03,0xF6,0x0E,0x61,0x35,0x57,0xB9,0x86,0xC1,0x1D,0x9E, 0xE1,0xF8,0x98,0x11,0x69,0xD9,0x8E,0x94,0x9B,0x1E,0x87,0xE9,0xCE,0x55,0x28,0xDF, 0x8C,0xA1,0x89,0x0D,0xBF,0xE6,0x42,0x68,0x41,0x99,0x2D,0x0F,0xB0,0x54,0xBB,0x16}; return t[x];} 此函数不是任意的;它是可逆的映射,包括在Galois场中进行反演然后进行仿射变换。所有详细信息均在FIPS-197第5.1.1节或此处的第4.2.1节(名称略有不同)中。 以表的形式实现的一个问题是它容易受到所谓的缓存定时攻击。 因此,您的任务是为显示上述SubBytes()功能的确切功能设计一个精确的替代品;我们假设情况是这样的:不使用任何依赖于输入x的SubBytes内容: 作为数组索引, 作为控制的操作数if,while,for,case,或操作者?:; 由于运营商的任何操作数&&,||,!,==,!=,<,>,<=,>=,*,/,%; 作为运营商的右操作数>>,<<,*=,/=,%=,<<=,>>=。 中奖条目将是具有最低成本,从输入相关的数据路径执行操作符的数量而获得,具有重量的5为一元运算符-和~以及为<<1,>>1,+1,-1; 所有其他运算符的权重为7,与其他计数一起移位或其他常数的加/减(类型转换和提升是免费的)。原则上,通过展开循环(如果有),该成本不会改变,并且与输入无关x。作为决胜局,删除空格和注释后具有最短代码的答案将获胜。 我计划最早在2013年UTC时指定一个条目作为答案。我将考虑用我所了解的语言来回答,将其作为对C的直接翻译(未针对大小进行优化)进行排名。 对于最初被遗漏+1并受其-1青睐的运营商,免费演员和晋升以及规模排名的歉意。请注意,*一元和乘法时都禁止这样做。

21
编写一个使用所有可打印的非字母数字ASCII符号的程序
特别是,在源代码中至少应至少使用一次这些符号: ! " # $ % & ' () * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ 注释,字符串文字,正则表达式(或任何其他种类的文字等)中的符号不​​计算在内(但它们的定界符例如/**/或""做计数)。 该程序不应执行任何操作。它只需要编译,运行时不执行任何操作。 如果由于某些原因某些符号不能用您选择的语言使用,请进行严格说明(必须排除哪些内容和原因)。 更新:一些答案使用了带有正则表达式的符号。我认为这有点问题,就像将它们放入字符串文字或注释中一样(这就是为什么我在该要求中放入等)的原因。请尝试使用此功能。我还更新了上面的要求。 更新:最短的代码获胜(标记为code-golf)。如建议的那样,我们很可能需要打破常规的条件。我建议,如果有平局,则获胜者是ASCII符号尽可能按顺序出现的一种。形式上:从程序中筛选出每个列出的符号的第一次出现。这将导致列出符号的排列。排列次数少的程序将胜出。 更新:我很高兴看到一些常规/主流语言的解决方案,例如C(++),Java,Scala,Haskell等。

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.