编程拼图和代码高尔夫

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

11
保加利亚纸牌
保加利亚纸牌是马丁·加德纳(Martin Gardner)在《科学美国人》的数学专栏中最受欢迎的单人游戏。 您有N相同的卡片,分成几堆。您从每堆纸牌中取出一张纸牌,并与移除的纸牌形成新纸堆。您重复此过程,直到达到已经看到的状态,因此继续操作将重复该循环。 例如,假设您有8几张纸牌,分成一堆5和一堆3。我们在写从大到小的顺序堆大小:5 3。这是游戏的文字记录: 5 3 4 2 2 3 3 1 1 4 2 2 首先,您从两堆纸叠中各取出一张卡片,留下堆4和2,以及新堆成的2给予4 2 2。下一步,将这些减小到3 1 1一堆新的3。最终,最后一步清空了已经出现的一堆堆大小1和产量4 2 2,因此我们停止了。 请注意,桩大小的总和保持不变。 您的目标是从给定的起始配置中打印游戏的副本。这是代码高尔夫,所以最少的字节获胜。 输入项 代表初始堆大小的降序正数列表。通过STDIN或功能输入进行输入。您可以使用所需的任何类似列表的结构。 您没有得到总卡数N作为输入。 输出量 打印保加利亚纸牌游戏所经历的桩号顺序。请注意,需要打印,不能返回。每个步骤应该是自己的一行。 每行应有一个正数序列,其降序为no 0。您可能有分隔符以及开始标记和结束标记(例如[3, 3, 1, 1])。这些数字可能有多个数字,因此应以某种方式将它们分开。 打印您看到的绒头大小的裂缝,直到达到并包括重复为止。因此,第一行应该是输入,最后一行应该是前一行的重复。不应有其他重复。 测试用例 >> [1] 1 1 >> [2] 2 1 1 2 >> [1, …
9 code-golf  game 

3
计数杆;数你的杆
一些背景 计数棒是小棒(3-14厘米长),许多亚洲文化的数学家使用该棒已有2000多年的历史了,它代表任何整数或分数。(尽管在本次挑战中,我们将重点放在无符号整数上)还有一个书面版本,称为标杆数字。 运作方式如下: (如果您在任何时候感到困惑,请查看每个数字的ascii表示形式以及我在底部提供的一些示例) 杆号是一个真实的位置数字系统,数字为1-9,空格为0。行数越多,数字越高。一旦超过5,则在顶部放置一条水平线,以将5加到下面的行数中。一条垂直线是1,两条垂直线2,五条垂直线是5,一条垂直线的顶部有一条水平线是6,四条垂直线的顶部有一条水平线是9(最高位数)。 垂直三位数: ||| ||| ||| ||| ||| 为了使读杆数字更容易,他们为每个交替的数字使用了不同的符号。第二种表示法互换了水平线和垂直线的作用。因此3用三条水平线表示,8用三条水平线表示,顶部有一条垂直线。 水平8位数字: | | __|__ _____ _____ 如前所述,知道使用哪种表示法很容易,这是交替使用的,孙子写道“一个是垂直的,十个是水平的”。所以最右边的数字是垂直的,我们从那里开始交替。 挑战 这些标尺用于表示负数和分数(如关于它们的Wikipedia文章中所述。出于此挑战的目的,我们仅关注正整数。目标很简单: 编写一个函数或完整程序,该函数或完整程序以任何方式将整数值作为输入,并将该整数的标尺数字表示形式打印到STDOUT(如果效果更好,也可以写入文件)。以字节为单位的最短代码获胜。 每个数字将由5x5的ASCII字符表示,并由5个空格的两个列分隔。您将使用的每个数字的确切表示形式如下: space between two digits (two colums): 0 digit, both vertical and horizontal (five columns): 1 digit, vertical: | | | | | 2 digit, vertical: | | …

3
ASCII艺术代码生成器
我有一个生成格式化的Brainfuck代码的程序。我运行我的程序 ./example "S" 和输出是 +[>+ < +++ ] >--. 在Brainfuck中打印S。 您的目标是编写一个程序,该程序接受字符串作为输入,并以另一种语言输出输出该字符串的源代码。 程序输出的源代码必须经过格式化,使其以ASCII艺术形式表示字符串(水平打印,而不是垂直打印)。 源代码不能包含字符串(但是,它可能包含字符串中出现的字母,只是不顺序出现) 除此以外, 有标准漏洞。 最短的代码胜出。 请使用所使用的语言,输出的语言以及总大小(以字节为单位)为提交的标题命名。输入字符串UNCOPYRIGHTABLE时,请包括程序的输出。 谢谢!

6
提供自Unix时间戳以来经过的时间的最短脚本
为克服这一挑战,您需要做的是编写最短的“ timeago”脚本,该脚本输出在给定的Unix时间戳与脚本运行时间之间的数十年,数年,数周,数天,数小时,数分钟和数秒的时间。 您必须以“最低的条款”给出时差,例如1 weeknot 7 days,9 yearsnot 0 decades 9 years。您还必须正确使用复数形式,例如,1 day不能1 days。 您的脚本必须精确到正负1秒以内(因此精确的第二个舍入方法并不重要)。 Time Equivalency Table 1 decade = 10 years 1 year = 31536000 seconds (not technically correct but close enough) 1 week = 7 days 1 day = 24 hours 1 hour = 60 minutes 1 minute …
9 code-golf  date 

4
森林小径
您之后灾难性乘坐独木舟,你结束了在湍急的河流最终掉下瀑布。您的独木舟爆炸了,但您成功度过了爆炸。但是,您的河流之旅完全偏离了地图-您现在发现自己迷失在森林之中。幸运的是,您仍然具有编程技能,因此决定将程序雕刻到树的一边,以帮助您找到穿过森林的道路。但是,树上没有太多的表面积,因此您必须使程序尽可能短。 森林可以用字符n的n(n > 5)平方来描述,该字符仅由小写字母组成a-z。一个示例森林: anehcienwlndm baneiryeivown bnabncmxlriru anhahirrnrauc riwuafuvocvnc riwnbaueibnxz hyirorairener ruwiiwuauawoe qnnvcizdaiehr iefyioeorauvi quoeuroenraib cuivoaisdfuae efoiebnxmcsua 您可能已经注意到,在这个森林中,a从左上角到右下角有一条斜线贯穿其中。这是穿过森林的“路径”,如果您跟随它,它将指引您到达某个地方。您的任务是编写一个程序,它将找到单数路径。我现在将更具体地描述在此挑战中什么代表“道路”。 在此挑战中,“路径”被定义为类似于可能用Bresenham算法生成的线,但具有以下附加要求: 该行必须至少6个字符长 行中的每个共线(完全相邻)字符组必须具有相同的长度。 它将从森林的一侧开始,到另一侧结束(详细说明请参见我的评论) 为了更清楚地解释第二个要求,请考虑以下内容: aaa aaa aaa aaa aaa 该行由字符的共线“段”组成,每个字符正好是三个字符长。它有资格作为一条路径。现在考虑这一行: a aa a aa a aa 该行由共线的“段”组成,它们并非完全相同长度的字符(其中一些长度为1个字符,而某些长度为2个)。因此,这条路径不符合条件。 给定森林图,您的程序将识别路径中使用的字符。输入是方便的任何内容(例如,命令行参数,STDIN prompt()等)。不能将其预先初始化为变量。输入的第一部分是一个单个整数,n代表森林的大小(森林总是一个正方形)。在那之后是一个空格,然后将整个森林作为单个字符串。例如,示例林将作为输入呈现,如下所示: 13 anehcienwlndmbaneiryeivownbnabncmxlriruanhahirrnraucriwuafuvocvncriwnbaueibnxzhyirorairenerruwiiwuauawoeqnnvcizdaiehriefyioeorauviquoeuroenraibcuivoaisdfuaeefoiebnxmcsua 输出为: a 因为路径是使用字母形成的a。森林中只有一条路。这是代码高尔夫,因此获胜的字符数最少。如有疑问,请在评论中提问。

4
调弦
任务 编写一个程序,确定调到给定频率并在给定位置按下的弦的音调,以及失调多少分。 为简单起见,假定产生的声音的频率与按下声音的右侧的弦长成反比。 注意:此任务仅涉及基音,而不涉及泛音/其他谐波。 输入项 您的程序获得了两条数据: 任意长度的字符串,表示所讨论的字符串。该字符串将用X标记,该字符串将被按下。 [-----] is a string divided in six sections (five divisions). [--X--] is a string pressed at the exact center of the string. [X----] is a string pressed at 1/6 the length of the string. (Length used is 5/6) [-X--] is a string pressed …

3
验证Loopy解决方案
这是生成Loopy拼图挑战的附加挑战。在尝试上一个链接中的较难挑战之前,您可能需要解决此挑战。 这项挑战的目的是验证一个循环难题的解决方案。请从上一链接中获取有关什么是难题的所有文档。解决的循环拼图的格式与对“生成循环拼图”挑战的有效提交的输出非常相似,其格式如下: +-+-+ +-+ +-+ + | | | |2|3| +-+ + + + + +-+ 2| | | |2| 3| + + +-+ + + +-+ 2| 2 1|3| | +-+ +-+ +-+ +-+ |2 | | 1 2| + +-+ +-+ +-+ + | |2 1 2|3|3| | …
9 code-golf 

3
计算一个立方体可以切成多少个立方体
想象一些立方体,我们可以将其切成较小的立方体,而没有剩余的碎片。 查找一个立方体可以切割多少个立方体。 例如,一个立方体可以切成8个,27个(显然是整数的3阶次幂)和20个(19个小立方体加一个其他立方体大小的八分之一,见图)。 在这里看到一些帮助:http : //mathworld.wolfram.com/CubeDissection.html 程序应将整数n(0 <= n <= 1 000)作为输入,并打印所有小于或等于的数字,n以便可以将一个立方体切成该数目的立方体。假设可以将多维数据集切成1个多维数据集,而不能切成0个多维数据集。 您只能使用大小不超过64位的整数数据类型(无数组,对象等)。最短的代码胜出。

6
排列编号
挑战 对于给定的n个整数集,编写一个程序,该程序将输出其字典索引。 规则 输入只能是由空格分隔的一组唯一的非负整数。 您应该输出排列的字典索引(范围从0到n!-1)。 不能使用置换库或内置置换。 您可能不会生成输入的排列集或排列的任何子集来帮助您找到索引。 您也不能将给定的排列递增或递减到下一个/上一个(按字典顺序)排列。 如果您找到某种无需使用阶乘就可以完成的奖励积分(-10字节)。 对于n = 100,运行时间应少于1分钟 字节数最短的代码获胜 优胜者选择星期二(2014年7月22日) 有关排列的更多信息 http://www.monkeyphysics.com/articles/read/26/numbering_permutations.html 排列组运算 http://lin-ear-th-inking.blogspot.com/2012/11/enumerating-permutations-using.html 例子 0 1 2 --> 0 0 2 1 --> 1 1 0 2 --> 2 1 2 0 --> 3 2 0 1 --> 4 2 1 0 --> 5 0 …

2
使用NAND逻辑门构建EBCDIC转换器
在这个问题中,在EBCDIC和ISO-8859-1的超集之间定义了映射。 您的任务是建立一个两输入与非门网络,该网络将采用A1, A2, A4, ..., A128代表EBCDIC字符的八个输入,并B1, B2, B4, ..., B128根据该映射返回代表对应的“ ISO-8859-1”字符的八个输出。 为简化起见,您可以在图表中使用AND,OR,NOT和XOR门,并具有以下相应的分数: NOT: 1 AND: 2 OR: 3 XOR: 4 这些分数中的每一个都对应于构建相应门所需要的NAND门数量。 使用最少的“与非”门来正确实现上述所有要求的逻辑电路将胜出。

5
找到最狡猾的素数
介绍 考虑以下过程:在某个底数b中取某个正整数n,并用右边数字底数中的表示替换每个数字。 如果右边的数字为0,请使用base b。 如果右边的数字是1,请使用带有0的一元符号作为计数标记。 如果右边没有数字(即您在那个位置),请循环到最高有效数字。 例如,让n = 160和b =10。运行该过程如下所示: The first digit is 1, the digit to the right is 6, 1 in base 6 is 1. The next digit is 6, the digit to the right is 0, 0 is not a base so use b, 6 in …

6
查找二叉树的最深节点
编写一个程序,将二叉树作为输入,并输出最深的节点及其深度。如果存在平局,请打印所有涉及的节点及其深度。每个节点表示为: T(x,x) T(x) T 其中,T是一个或多个字母数字字符的标识符,每个x是另一个节点。 这是二叉树的简单定义: 二叉树的头是一个节点。 二叉树中的一个节点最多有两个子节点。 例如,输入A(B(C,D(E)))(下面)将输出3:E。 下面的树是5、11和4之间的三向关系,其深度也是3(从0开始): 输入2(7(2,6(5,11)),5(9(4)))(下面)将输出3:5,11,4。 这是代码高尔夫,因此以字节为单位的最短代码获胜。

24
生成Z_n的组表
组是数学中广泛使用的结构,并且在计算机科学中具有应用。此代码挑战涉及为累加组Z n创建组表的最少字符数。 表格的构造方式:对于Z n,元素为{0,1,2,...,n-1}。该表将具有n行和n列。对于表的第ij个条目,该值为i + j mod n。例如,在Z 3中,第1-2个条目(如果将起始行/列计算为1,则为第2行,第3列)为(1 + 2)%3 = 0(请参见示例输出)。 输入:一个正整数,n 输出:一个表,它是Z n的文本表示形式,如上所述构造,并在示例输出中显示如下。空格是可选的 输入样例: 3 样本输出: 0 1 2 1 2 0 2 0 1 输入样例: 5 样本输出: 0 1 2 3 4 1 2 3 4 0 2 3 4 0 1 3 4 0 1 …

15
没有时间基准的随机[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 2年前关闭。 计算机不会无处不在地创建随机数,因为时间很可能是随机性的普遍基础。 我希望您创建一个使用以下规则创建随机数的代码: 在程序的任何时候都不允许以时间为基础。 不允许使用预定义的随机/伪随机函数。 生成的数字可以在任何范围内。那么至少两个不同的整数:D 数字回显。

4
寻找下一个“有趣的”时间
我今天恰好在11:11:11瞥了一眼手表(今天是1/11;可惜不是2011年),这让我开始思考:我知道!我应该对此提出一个编码问题!我是一个白痴。 无论如何,您面临的挑战是花费一个小时,一分钟和一秒作为输入,并输出下一个“有趣的”时间。在这里,我将定义有趣的步骤如下: 连接小时,分钟和秒。(例如,在4:14:14,则为41414。) 检查覆盖整个字符串长度的一组连续的1、2或3组。例如,我可以[41][41][4]在示例时间中找到(如果组无法通过字符串到达​​,请像在本示例中那样将其切断)。又如:在我的问题开始第一个例子的时候,这将是[1][1][1][1][1][1],[11][11][11]或[111][111]。 是否有一个连续的组贯穿整个字符串?如果是这样,那么时间是“有趣的!” 否则,不是。 输入可以采用任何合理的格式,但不得进行硬编码。输出也可以采用任何合理的格式,并且不必与输入采用相同的格式。 如果出于某种原因使用网络访问,则从网络下载的所有字节都将计入得分。 这是 代码高尔夫球; 以字节为单位的最短代码获胜。
9 code-golf  date 

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.