编程拼图和代码高尔夫

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

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 

13
伪装编写程序[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 2年前关闭。 面临的挑战是创建一个程序,以解决另一种 HQ9 +问题,同时又看起来像另一种语言。 注意:这不是高尔夫挑战。 规则: 该程序在运行时必须执行以下任务之一。 打印“你好,世界!” 打印其整个来源。 打印的歌词“在华尔街99瓶啤酒”(如看到这里)。 乍一看,该程序应该看起来像另一种语言。 等级 满足规则的工作程序。+3 如果可以运行“其他语言”,则加分(语法有效)。+1 如果“其他语言”可以做些有用的事情,则可以得到更多的积分。+3 该程序在许多语言中都是有效的(并且非常有用)许多奖励积分。超过2种的每种语言+5。

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 “因此,应该很清楚,人们总是可以从最后一个位置跳下来”这一行。可能会造成混淆,所以我从问题中删除了它。这对问题没有影响。 获奖标准: 优胜者将是代码最短的那个。

7
避免使用符号更改重复输入
该轶事包含以下有趣的交流: “好,弗雷德。”阿维打断道。“那您将如何更改它以避免重复输入?” “哦,只要将那一个改成否定的。” 尽管此声明在上下文中并不准确,但我确实想知道是否有一些合理的代码有意义。 您的挑战是编写符合以下条件的代码(程序,函数等): 将两个输入列表合并为一个,并保持重复。[编辑:您可以选择假定它们是整数,和/或列表本身是唯一的。您不能假设整数是正数(这样做的答案是“祖父”。) 文字“ 1”出现在代码中的某处。如果将其更改为文字“ -1”,则代码执行相同的操作,但删除重复项。 该代码不只是从1 / -1分支出来。例如,我们不在寻找if (1 < 1) removeDuplicates()或[do_nothing, merge_with_dups, merge_without_dups][1].call()。 输入和输出可以采用您选择的任何合理格式。一个例子可能是 [1,2],[2,3]->[1,2,2,3]在符号更改之前和[1,2,3]之后。 这是一次人气竞赛。除非您想炫耀,否则它不是代码高尔夫球。我将在大约两周内接受投票最高的答案。

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 。

9
在Postscript中打高尔夫球的秘诀?
作为较不流行的语言之一,很难找到有关后记黑客技术前卫的文献。那么,这里的高尔夫球手有哪些发现可以利用堆栈模型(或其他功能)来克服Postscript固有的冗长性?
14 code-golf  tips 

2
畅玩Mu Torere游戏
背景 Mu Torere是一款游戏,是欧洲毛病爆发前新西兰毛利人玩过的仅有的两种游戏之一。这使其成为一个非常独特的游戏,因为它具有与现有大多数其他游戏不同的“客观获胜标准”和游戏规则。 游戏玩法: 木板是一个八边形。每个相邻顶点之间都有连接,并且有一个中心节点连接到所有顶点。在任何时间点,九个节点中的八个都被石头占据。刚开始时,有四个白色的石头和四个黑色的石头,它们分别占据八角形的一半,而中心节点为空。黑先。 玩家每回合可以将其石头之一沿16个边之一从一个节点移动到空节点。如果石头位于对手的石头旁边,则只能将石头从外部节点移动到中心节点。 玩家无法进行合法移动时会输,这是因为没有边缘将石头连接到空节点时发生。 这是一个解释规则(带有图表)并提供一些分析的网站。 挑战 您面临的挑战是编写最短的程序,以与人类对手玩一个完美的Mu Torere游戏。您的程序应该能够显示和更新游戏板,进行移动并接收来自人类对手的移动。最重要的是,它应该扮演一个完美的游戏。 完美的游戏? 是的,完美的游戏。我一直在进行一些游戏分析,发现如果双方完美玩法,游戏将持续无限长的时间。这意味着您的程序永远不会丢失。同样,只要人类对手犯下允许程序强制胜利的错误,您的程序就应该能够强制胜利。至于您的程序如何找到理想的动作,这取决于您。 细节 每次移动之后(以及游戏开始时),您的程序都应打印游戏板。但是,无论您选择显示板,它都必须显示所有节点并已完全连接(所有16条连接线均应绘制成无交叉线)。在开始时,木板应具有正确的开始位置。实现此目的的一种方法是将游戏板做成正方形。 w-w-w |\|/| b-o-w |/|\| b-b-b 这两种颜色是黑白或暗/浅。棋盘必须显示哪个节点被哪个玩家的棋子占据,例如用“ b”或“ w”标记它们,以及哪个节点是空的。鼓励(但不是必须)使游戏板更具图形效果,而不是纯文本格式。 您的游戏板应该具有一个编号系统,该编号系统为每个节点分配一个唯一的编号。您可以选择自己喜欢的方式给木板编号,但应在答案中或程序中说明。方板可以编号如下: 1-2-3 |\|/| 4-5-6 |/|\| 7-8-9 人是第一个移动的人。他的输入将是一个数字。这将是当前移动的石头所在节点的编号。如果我想将结石从节点4移动到空节点5,我将输入a 4。暗含5,因为它是唯一的空节点。 假设人类将始终采取法律行动。 在人类行动之后,应打印更新的木板。程序决定采取合法行动后,它应该打印另一个更新的标牌,然后等待人员输入其他行动。 程序一旦获胜,应终止。 笔记 应用标准的代码高尔夫规则,不访问外部文件等,等等。此外,我将为程序执行每个动作施加15秒的灵活时限(在合理的机器上)。如上所述,该游戏有可能形成无限循环,我不希望深度优先搜索进入无限循环。
14 code-golf  game 

5
最短的Hello World程序,无分号
我最近在SO上看到了一些问题,询问您是否可以在不使用C#的情况下使用半分号的情况下制作Hello World程序。面临的挑战是要再次执行此操作,但要用尽可能短的代码!
14 code-golf  c# 

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.