Questions tagged «code-golf»

Code-golf是在最小的源代码字节中解决特定问题的竞赛。

1
JavaScript加载和SHA-256
这是一个带有实际应用程序的代码难题。当前使用的某些浏览器(如果您输入的网址类似于 data:text/html,<script>alert("hi")</script> 将执行给定的JavaScript代码。现在假设您有一个看起来像(伪代码)的URL: data:text/html,<script> myPublicKey="12345678"; cryptoLib=download("http://example.com/somecryptolib.js"); if(sha256sum(cryptoLib) == "12345678") eval(cryptoLib) </script> 如果您将此代码作为QR代码打印在名片上,那么使用适当的浏览器访问该URL的任何人都将获得一个预加载了公钥的公钥加密客户端,而无需安装任何东西。由于进行了哈希验证,因此即使他们的ISP干扰了流量,您也可以确信他们拥有真正的加密软件。 不幸的是,此伪代码的实际版本对于QR码来说相当长。我的挑战是:您能做到多短?一个实现将: 成为数据:...从Chrome和Firefox的地址栏中正确执行的URL。(要生成有效的数据:URL,您必须将%编码为%25,并删除换行符) 嵌入URL和SHA-256哈希,最好在开头附近添加纯文本字符串文字 使用XMLHttpRequest(或类似的API)从URL下载文件。(请注意,服务器必须包含一个Access-Control-Allow-Origin:*标头,才能正常工作。) 如果该URL成功加载,并且结果是带有预期哈希值的文件,请使用eval()对其进行处理。否则,什么也不做,或显示错误消息。 Chrome和Firefox中都存在的所有内置JavaScript函数都是公平的游戏,但是无法加载库。 使用尽可能少的字节 我使用CryptoJS(缩小版)制作了一个简单的版本: data:text/html,<script> u = 'http://localhost:8000' h = '5e3f73c606a82d68ef40f9f9405200ce24adfd9a4189c2bc39015345f0ee46d4' // Insert CryptoJS here r = new XMLHttpRequest; r.open('GET', u, false); r.send(); if(CryptoJS.SHA256(r.response) == h) eval(r.response); </script> 从缩小器出来的是: data:text/html,<script>u="http://localhost:8000";h="5e3f73c606a82d68ef40f9f9405200ce24adfd9a4189c2bc39015345f0ee46d4";var CryptoJS=CryptoJS||function(k,w){var f={},x=f.lib={},g=function(){},l=x.Base={extend:function(a){g.prototype=this;var c=new g;a&&c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return …

9
批量打高尔夫球的技巧
Windows Batch(CMD)可能是最不适合代码打标的语言。 避免换行符。如果您要查找以字节为单位的最短代码(而不是字符),则将希望摆脱所有不必要的回车符(换行符= 2个字节)。您可以使用该&操作来执行此操作,为每个命令修剪一个字节。 echo Hello&echo World. 设置变量。使用开关设置变量时,set解析器将忽略空格。 set /a a+=1 set /p b="User Input: " :: Will be handled the same as.. set/aa+=1 set/pb="User Input: " 请注意,相同的解析器规则并不适用于所有命令-例如,循环需要空格。除了set, string, or command(即括号内的内容)和单词之间do。 for /f %%a in (file.txt)do ... 简单的数学表达式。另外,请注意我在set /a命令中用于递增的表达式。对于简单的数学表达式,请使用+= -= *= /=代替(例如)set /a a=%a%+1。 收集命令输出。要获取命令的输出,有时输出到文件或从文件中读取有时会很有用,否则您可能在其中使用了for循环来收集输出: for /f %%a in ('echo …
14 code-golf  tips 

2
点亮Roguelike
给定一块板,编写最短的程序或函数以显示或返回玩家看到的字符。如果有可能,可以在角色和玩家之间划一条线,而不会越过阻碍视线的角色,则该角色就在视线范围内。 输入: @代表玩家的位置。输入中将只有这些之一。 任何与正则表达式匹配的字符都会[#A-Z]阻碍视觉。 任何符合条件的字符都[ a-z]可以使人视觉。 不会有无效字符 您可以保证输入矩形 行定义如下: 将向量定义为大小和方向 方向是N,NE,E,SE,S,SW,W,NW之一 数量级是沿该方向要计数的字符数 令初始向量称为d 1;第二个向量称为d 2 d 1或d 2之一必须具有大小1; 另一个可能有任何大小 d 1的方向必须与d 2的方向相邻(例如:N和NE) 一条线被定义为沿路径通过应用d 1,然后d 2,d 1,d 2 ... 标记的所有字符。 采样线(由.s 给出): d 1 =(幅度:4,方向:E) d 2 =(幅度:1,NE方向) ..... ..... ..... @.... 输出: 每个可见字符都在正确的位置,.以空格代替。 每个不可见字符的空间。 输入样例: @ K J L o …
14 code-golf 

4
强调高尔夫的语法!
高尔夫球手。 我们共同努力,产生的代码简洁,功能漂亮且比原始小说中的《歌剧魅影》丑陋。 现在是时候让我们将美丽带回到编程世界了。带颜色。以简洁的方式,功能上的美观比原始小说中的歌剧魅影更丑陋。 我们将要编写一个色彩丰富的语法荧光笔。以最短的代码量。 您将通过输入文件或Stdin收到有效的C文件。C文件将使用您选择的行约定,并且仅包含ASCII字符32-126。您必须将其转换为至少在Chrome中正确显示的HTML文件,该文件以语法高亮显示源代码。输出可能在文件中或到Stdout。 您必须突出显示: 绿色(#00FF00)中的所有字符串和字符(包括引号字符)。字符串可能包含转义字符。 蓝色的所有C保留字(#0000FF)。 黄色所有评论(#FFFF00)。 Pink中的所有C预处理程序指令(#FF00FF)。 在Chrome中显示时,输出必须: 采用固定宽度的字体 在原始来源中出现的任何地方显示新行 准确地复制空白。制表符应视为4个空格。 奖金 x 0.9(如果包含行号)。行号必须至少能够达到99999。所有源都必须仍然对齐-因此,行号较小的源代码应与行号较高的源代码在同一位置开始 如果每行的背景在浅灰色(#C0C0C0)和白色(#FFFFFF)之间交替,则为x 0.8 x 0.9(如果您的源代码是用C编写的,并且可以正确格式化自己)。 计分 这是代码高尔夫。分数是源代码的字节数乘以任何奖励。获胜者是得分最低的高尔夫球手。
14 code-golf  string 

4
进行多项选择测试
我给你测试!您的测试就是测试。测试是用测试人员提供给您的测试来测试被测者,其中包含少量测试代码。具体来说,您将提供选择输入的多选测试。 在此挑战中,您必须输入如下内容: 1. Our site is called Programming Puzzles & Code ________. A: Debugging *B: Golf C: Hockey D: Programming 2. What is the *most* popular tag on our site? A: [debug] B: [program] *C: [code-golf] D: [number] E: [c++] 3. We are part of the ________ Exchange network. *A: …
14 code-golf 

12
3升和5升水罐拼图
您可能已经在《虎胆龙威:复仇》中看过这个问题。这个问题是基于著名的3升和5升水罐拼图,但斜度略有不同。 仔细研究一些代码,当给出1到100之间的整数时,将使用3升的水罐和5升的水罐为您提供最快的说明,将相应的水量从喷泉中量出到水箱中。 两个水罐都没有等级。喷泉的水供应充足,并且假定在每次执行该代码后将水箱清空。 一旦水进入水箱,您将无法取水。 执行的格式如下: 输入: 4 例如。 输出量 如图所示,输出每个编号的步骤,然后输出5升水罐,3升水罐和水箱的体积计数。理货格式也如下所示。步骤数也必须在步骤结束时输出。 1) Fill 5L jug 5L: 5, 3L: 0, T: 0 2) Pour from 5L jug into 3L jug 5L: 2, 3L: 3, T: 0 3) Empty 3L jug 5L: 2, 3L: 0, T: 0 4) Pour from 5L jug into …

30
实现勾股定理的最短方法
谁不喜欢勾股定理a²+b²=c²?用任何能用a和b取值并打印出“此直角三角形的斜边为+”的语言编写最短的方法。将c保留到小数点后三位。
14 code-golf 

12
在MATLAB中打高尔夫球的技巧
您在MATLAB中打高尔夫球有哪些一般技巧?我正在寻找可以应用于编码高尔夫球问题的想法,这些想法至少在某种程度上是特定于MATLAB的(例如,“删除评论”不是答案)。请为每个答案发布一个提示。
14 code-golf  tips  matlab 

4
Ratetod文字fexir
我在这本怪异的文字中写上了vewols似乎被贬低的地方: 我的文字写得不好。一些疯子用元音命令演奏。请解决我! 因此,我需要一个可以对vewols(以及看起来像是“ y”字母)进行评级的实用程序,以便文本是raadeble agian。 Ouy可以选择ouyr chieco privedod ouy meka的肺部cempleto pragrom(因此不仅是finctoun)。语法可以是未经处理的字段,文本格式的内容或cammond leni。uutpot mya olsa vyra,饰演ouy leki。 cuerso的我将为yna pragrom uutpitong写烂文字。pragrom中没有任何vulea,这使您无法理解。但是如果您愿意的话,您可以在率文本中使用ouyr cemmonts和qeistouns。 澄清说明 您的程序仅需要处理ASCII文本。 出于这个问题的目的,以下字符是元音: aeiouy 每个单词中的元音位置应旋转。在确定什么才是单词时有一定的灵活性:最低要求是用空格分隔的两个字符在不同的单词中,并且a-zA-Z仅用字母字符分隔的两个字母在同一单词中。 所需的旋转方向应从以下测试案例中得出。 测试用例 输入:I'm a badly written text. Some lunatic guy played with the order of vowels. Please fix me ! 输出:I'm a bydla wrettin text. …
14 code-golf 

4
请不要分支
任何精通低级代码优化的人都知道分支的危险,无论将其实现为if语句,循环还是select语句,分支错误预测的可能性都是一件很浪费时钟的事情。 使用简单的算法可以更好地解决简单的问题,所以让我们这样做。 对于以下问题,所有变量都是32位无符号整数,并且唯一允许的代码是仅包含以下运算符的纯集语句: + addition - subtraction * multiplication / integer division, rounds down, division by 0 not allowed % modulo & binary and | binary or ^ binary exclusive or >> bitshift right << bitshift left Logic operators, return 1 if the expression is true and 0 if it …

9
最小跳数
给定一个数字序列,找到从起始位置到结束并再次回到起始位置的最小跳数。 序列中的每个元素表示一个人可以从该位置移动的最大移动次数。 在任何位置,您最多可以跳动k个动作,其中k是存储在该位置的值。到达终点后,您只能使用以前未使用过的跳跃位置。 输入将以由单空格分隔的数字序列给出。输出应为单个数字,这是所使用的最小跳转数。如果无法结束并返回到起始位置,则打印-1 输入: 2 4 2 2 3 4 2 2 输出: 6(3个到达终点,3个返回) 输入值 1 0 输出量 -1 注意 假设序列的所有数字均为非负数 编辑1 “因此,应该很清楚,人们总是可以从最后一个位置跳下来”这一行。可能会造成混淆,所以我从问题中删除了它。这对问题没有影响。 获奖标准: 优胜者将是代码最短的那个。

4
仅在机器代码中使用可打印的可见ASCII字符在x86 / x86-64中进行不同的分支
任务很简单:编写一个程序,仅使用机器代码中的可打印可见ASCII字符0x21 ... 0x7e(不允许使用空格和del)在x86(32位)和x86-64(64位)中分支不同。 不允许有条件的汇编。 不允许使用API​​调用。 不允许使用内核模式(0环)代码。 在Linux或某些其他保护模式的OS中,代码必须在不引起IA-32和x86-64异常的情况下运行。 功能不得依赖于命令行参数。 所有指令必须仅使用0x21 ... 0x7e(十进制33 ... 126)范围内的ASCII字符以机器代码编码。因此,例如。cpuid超出限制(是0f a2),除非您使用自我修改的代码。 相同的二进制代码必须在x86和x86-64中运行,但是由于文件头(ELF / ELF64 / etc。)可能不同,因此您可能需要重新组装并链接它。但是,二进制代码不得更改。 解决方案应该可以在i386 ... Core i7之间的所有处理器上工作,但是我也对更有限的解决方案感兴趣。 该代码必须在32位x86中分支,但不能在x86-64中分支,反之亦然,但不是必须使用条件跳转(也可以接受间接跳转或调用)。分支目标地址必须有一定的空间,可以容纳一些代码,至少2个字节的空间可插入短跳转(jmp rel8)。 胜出的答案是在机器代码中使用最少字节的答案。文件头中的字节(例如ELF / ELF64)不计算在内,分支(出于测试目的等)之后的任何代码字节也不计算在内。 请以ASCII,十六进制字节和注释代码的形式显示您的答案。 我的解决方案,39个字节: ASCII: fhotfhatfhitfhutfhotfhatfhitfhut_H3<$t! 十六进制:66 68 6F 74 66 68 61 74 66 68 69 74 66 68 75 74 66 68 …

10
创建一个Twitter解析器
介绍 您使用Twitter(如果没有,请假装),在这里您想与全世界分享的每条推文最多只能有140个字符。如果您想发推文给您的追随者亚伯拉罕·林肯(Abraham Lincoln)的葛底斯堡地址(Gettysburg Address),则需要将文本分成140个字符的大块,以使整个消息完整。但是,这些块不应该总是正好为140个字符长。举例来说,我们将演讲分为17个字符,最后得到了以下推文: 四分SE 以前的我们 布鲁克林 在这个骗局上 租一个新的NATI 关于L (等等) 那不好!当个别单词分解后,可能会很难理解您要说的内容。此外,在twitterverse中,您的关注者之一可能会遇到一条特定的tweet,但并未意识到消息的更多内容,因此,您需要对tweet进行编号,以便它们可以使用一些上下文(仍使用17个字符的块) ): (1/7)四分和 (2/7)七年前 (3/7)我们的对手 (4/7)爆发 (5/7)此大陆A (6/7)新国家 (7/7)在...中 您可以手动找出适合您的推文的最佳配置,但这就是我们拥有的计算机的功能! 挑战 在最短的代码中,将葛底斯堡地址(或任何文本,但以该文本为例)解析为一组不超过140个字符的推文(假定为ASCII,因为示例文本不应包含其中的任何不常见/不寻常的位)。 细节 您的函数/程序/等应该接受一个字符串参数,并为每条推文输出一行文本。 假设无论您选择哪种解析方式(只要该选择仍然适合挑战的其他方面),解析时此输入将永远不会导致超过99条总推文。 推文需要在推文主体之前包含“ ” 格式tweet number的total tweets指示符(x/y)。 此计数将占用您140个字符的空间! 推文块只能在换行符或空格上分割。 除非紧接在空格或换行符之前或之后,否则不允许使用连字符,句号,逗号或其他标点符号。 推文应包含尽可能多的完整单词。 这种约束有点灵活,例如,当您的最终推文只有一个字时 这是代码高尔夫球,所以最短的代码获胜。 葛底斯堡演说全文 (您的代码仍然应该能够处理传递给它的任何ASCII字符串。) 四年零七年前,我们的兄弟们在这个大陆上崭露头角,这是一个自由想象的新民族,致力于实现所有男人都享有同等地位的主张。现在,我们参与了一场伟大的民用战争测试,无论这种民族还是这么一个如此设想和奉献的民族都可以长期承受。我们在那场战争中大获全胜。我们已经将那部分田地作为最终的安息之所,专门用来拯救那些赋予他们生命的国家。总而言之,我们应该做到这一点。但更大的意义是,我们不能奉献,我们不能奉献,我们不能屈服。曾被困在这里的勇敢的人过世并丧生,他们在我们可怜的力量之上或不足以奉献它。世界将永远不会记住我们所说的一切,但它永远不会忘记他们在这里所做的一切。对于我们来说,生活品味是专门针对尚未完成的工作而进行的,远远超出了他们。对于我们来说,这是我们奉献给仍然存在的伟大任务的原因,这是我们自始至终认为奉献的原因,因为他们对奉献有了最后的全面衡量,因此我们要高度解决,但绝不应该这样做已经死了,这民族在神的掌控下将拥有新的自由,人民的人民统治也不会从地球上灭亡。
14 code-golf  string 

4
绘制3D网-柏拉图式固体
这是难度更大的Drawing 3d nets-Archimedean实体的基本版本。 我对3d蚊帐有一个缺点,当将其剪裁和折叠后,可以用纸或卡片制作3d形状。任务很简单,编写最短的程序即可绘制5个柏拉图固体的网。输出应该是您选择的任何合理格式的图像文件(png,jpg等)。 在http://en.wikipedia.org/wiki/Platonic_solid中描述了所有五个形状。他们的蚊帐看起来像这样(摘自http://www.newscientist.com/gallery/unfolding-the-earth/2)。 输入: 1到5之间的整数。假设形状按其边数的顺序编号。因此,1将是四面体,5将是二十面体。 输出:包含该形状网的图像文件。只需包括内部线条的轮廓即可。无需用颜色填充 您可以使用自己喜欢的任何编程语言,也可以使用不是专门为这次比赛而制作的任何库。两者都应该在线免费提供(从两种意义上来说)。 我会在一周的时间内接受最少字符数的答案。 优胜者。只有一个参赛者,但是很棒。优胜者是……Raufio,因为我最喜欢的代码高尔夫球是什么。

3
通用(弯曲)代码高尔夫求解器
高尔夫守则总是涉及一些挑战,这些挑战通过打破挑战者视为理所当然的约束,或者只是没有考虑并且没有在规则中列出来而或多或少地改变了规则。其中这些有趣的漏洞是可能输出更比挑战询问,以获得更好的结果。 极端地讲,我们可以编写一个通用代码的高尔夫球求解器,打印出所需的输出-如果您不在乎它可能会变旧并在输出前后都输出很多其他内容。 我们需要输出的是一个序列,该序列保证包含每个可能的子序列。对于此代码高尔夫球,这将是Ehrenfeucht-Mycielski序列: 该序列以三个位010开始;否则为0。通过找到也在序列中更早出现的序列的最长后缀,并对该后缀的最近较早出现之后的位进行补充,来形成每个连续的数字。 位的每个有限子序列都是连续出现的,在序列中通常是无限出现的 序列的前几个数字是: 010011010111000100001111 ...(OEIS中的序列A038219)。 将序列的8位组合为一个字节,我们将获得ASCII输出,可以将其输出到屏幕或文件,并包含所有可能的有限输出。该程序将输出pi的部分内容,“永不放弃”的歌词,一些漂亮的ASCII艺术作品,其自己的源代码以及您可能希望其输出的所有其他内容。 为了测试正确性,以下是序列的前256个字节的哈希值: MD5: 5dc589a06e5ca0cd9280a364a456d7a4 SHA-1: 657722ceef206ad22881ceba370d32c0960e267f 序列的前8个字节以十六进制表示为: 4D 71 0F 65 27 46 0B 7C 规则: 您的程序必须输出Ehrenfeucht-Mycielski序列(没有其他内容),将8位组合成一个字节/ ASCII字符。 最短的程序(字符数)获胜。如果您设法在每个生成的字节的线性时间内生成序列,请从字符数中减去512 。

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.