编程拼图和代码高尔夫

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

6
给定一棵树,生成其Prüfer代码
在 图论一个Prüfer代码是整数的唯一序列,它表示一个特定的树。 您可以使用以下来自维基百科的算法找到一棵树的Prüfer代码: 考虑一个标记树T与顶点{1, 2, ..., n}。在步骤i处,删除标签最小的叶子,并将Prüfer序列的第i个元素设置为该叶子邻居的标签。 (请注意,由于它是一片叶子,因此只有一个邻居)。 当图形中仅保留两个顶点时,应停止迭代。 任务 给定一个带有标签的树作为输入输出,其Prüfer代码。您可以以任何合理的方式接受输入。例如邻接矩阵或您的语言内置图形表示。(您可能不接受输入作为Prüfer代码)。 这是 代码高尔夫球 因此,您应该以最小化源中的字节为目标。 测试用例 这是一些ASCII输入,其输出如下。您不需要支持这样的ASCII输入。 3 | 1---2---4---6 | 5 {2,2,2,4} 1---4---3 | 5---2---6---7 | 8 {4,4,2,6,2,5} 5---1---4 6 | | 2---7---3 {1,1,2,7,3}

15
计算复杂的力量
破败不堪 给定任何输入x和y,执行复杂的操作,并打印相应的结果。 您的程序应如何工作 给定x和y的形式z = x + yi,找到z i-z 如果z i-z的绝对实际值大于绝对虚部,则打印该实部;否则,打印实部。反之亦然。如果两个值相等,则打印其中一个值。 例 x: 2 y: 0 因此: z = 2 z^(i-z) ~= 0.192309 + 0.159740i 由于实部的绝对值大于虚部的绝对值,因此程序返回 0.192309 更多例子 z = 1+i >> 0.5 z = i >> 1 z = 0.5 >> 1.08787 z = -2+8i >> 2.22964E7 z = …

8
最长的周期重复
众所周知,quine是一个输出自己的源代码的程序。但是,也可以编写一个输出另一个不同程序的程序,该程序再次输出第一个程序。例如,Python 2程序 x = '''x = {} print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3''' print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3 运行时将输出以下文本: print """x = '''x = {} print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3''' print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3""" 当作为Python程序运行时,这将再次输出原始代码。这被称为迭代奎因。因为您必须运行两次才能取回原始代码,所以我们说它的周期为2。但是,当然可以有更高的期限。 您面临的挑战是用您选择的语言编写一个尽可能长的迭代quin,以100字节或更小字节为单位。(请注意,我上面的示例不符合此规范,因为它是119个字节,包括结尾的换行符。) 请注意以下规则和说明: 通常采用奎因规则,即您的程序不能使用允许其直接访问其自身源代码的语言功能。 迭代后的输出最终必须精确地循环回到您的原始代码,并且您必须提供演示或证明。 您还必须说明循环为何如此长。这不必一定要经过数学证明,但应该可以说服熟悉您的语言的人。(这条规则在这里是因为我希望某些答案涉及非常大的数字。) 只要提供“至少1,000,000次迭代”之类的信息,而不是给出确切的数字,就可以了,只要您可以证明它至少那么长即可。在这种情况下,您的分数将是1,000,000。否则,您的分数就是您的寿命。 100字节的限制仅适用于您的初始程序-它输出的程序可能会更长,尽管它们最终最终必须回落到100字节才能输出原始代码。 您可以假定您的计算机具有无限的RAM和无限的运行时间,但是如果您的语言没有无限的精度数据类型(例如整数),则不能假定它们。您可以假设解析器可以处理的输入长度没有限制。 最高分获胜。 请注意:存在一个称为“ 戒烟”的挑战;启动Quining,这也涉及迭代quines。但是,除了基于相同的概念外,这些挑战是完全不同的类型。另一个是直线打高尔夫,而这个(故意!)确实是一个因变相而忙碌的海狸问题。能够很好地回答这个问题所需的技术可能与回答另一个问题所需的技术完全不同,而这在设计上是非常不同的。

6
转置奎因
在这种quine变体中,程序必须输出其源代码,该源代码从左上角到右下角跨对角线转置。例如: 你的程序 上 四行 输出 yof ono u u r r p l r i o n g e r s a m 输出中的空格不是任意的。在两种情况下会出现空格:原始文件中有空格(例如,第四列之间r和l之中),并且必须填充字符(例如,第一列中的所有空格)。这两者都是必需的,并且空格不能出现在任何地方其他在输出中。 输出中的单个尾随换行符可以有选择地忽略。源代码中的尾随换行符对输出没有影响,并且源代码中的前导换行符必须按照上面的示例进行处理。假定不是换行符的每个字符都是一列宽和一行高,即使对于诸如tab这样的字符,这也可能导致难看的输出。 您的解决方案必须至少有两行,每行至少有两个非换行符,并且不得为自己的转置(输出不能与源相同)。 不允许从包含源代码的文件中读取作弊的quine,从URL中提取数据,使用内置的quining内建等等。 这就是代码高尔夫:以字节为单位的最短代码获胜。
10 code-golf  quine 

17
设置两个列表的交集
您的目标是计算两个整数列表的集合相交。相交定义为在两个输入列表中至少发现一次的唯一无序整数组。 输入项 输入可以是所需的任何格式(功能参数,标准输入输出等),并且由两个整数列表组成。除了可能包含任何非负数的整数(即它们未排序,可能包含重复项,可能具有不同长度,甚至可能为空)之外,您可能不假设有关每个列表的任何内容。假定每个整数都适合您语言的本机带符号整数类型,长度可能超过1个十进制数字,并且已签名。 输入示例: 1 4 3 9 8 8 3 7 0 10 1 4 4 8 -1 输出量 输出是任何类似于列表的整数,代表将两个列表的交集设置为所需的任何格式(返回值,stdio等)。尽管欢迎您提供恰好总是被排序的实现,但是并不需要对输出进行排序。输出必须形成有效的无序集合(例如,它不得包含任何重复值)。 测试用例示例(请注意,输出顺序并不重要): 前两行是输入列表,第三行是输出。(empty)表示空白列表。 (empty) (empty) (empty) 1000 (empty) (empty) 3 1 2 4 3 1 1 1 1 3 3 1 -1 0 8 3 3 1 1 3 1 …

1
解密AES块
今天,您的目标是使用AES解密秘密消息。给定密文和密钥,您将解密并打印消息。 您的程序可以使用任何语言。它将在stdin上使用输入运行,并在stdout上检查其输出是否正确。 stdin输入的第一行将是16字节密钥,以十六进制编码。stdin输入的第二行将是16字节密文,以十六进制编码。 在使用给定密钥的AES-128解密密文之后,程序的输出必须为16字节消息。您必须输出解释为ASCII八位位组的结果。您可以假定解密后任何结果都是有效的ASCII。 您不得使用任何实现AES的库/内置功能。您可以使用此类功能在十六进制/二进制/ ASCII编码之间进行转换。 以字节为单位的最短代码获胜。 输入和输出示例: bd8ab53f10b3d38576a1b9a15cf03834 02c0ee126cae50ba938a8b16f0e04d23 明天进攻。 还有一个: f4af804ad097ba832906db0deb7569e3 38794338dafcb09d6b32b04357f64d4d 恭喜你

5
编写最短的alak游戏
Alak由数学家AK Dewdney发明,并在1984年的著作Planiverse中进行了描述。Alak的规则很简单: Alak是在具有11个插槽的一维板上玩的两人游戏。每个插槽一次最多只能容纳一个。有两种,“ x”和“ o”。x属于一个玩家,o属于另一玩家。该单板的初始配置为: xxxx___oooo 玩家轮流移动。在每个回合中,每个玩家只能移动一次。玩家在转牌时无法通过。玩家可以将自己的任何一块游戏移至其右侧或左侧的下一个未占用的插槽,这可能涉及跳过占用的插槽。玩家不能将棋子从棋盘的一侧移开。 如果移动产生了一种模式,对手的棋子在两侧被动子的两个棋子颜色包围(中间没有闲置的空白插槽),则这些棋子被从棋盘上移开。 游戏的目标是删除对手的所有棋子,然后游戏结束。删除所有的一个也将结束游戏,因为对手无法用一个包围你,因此无论如何都会输掉几步。 我在网上找到了这个游戏,想知道:可以打高尔夫球吗? 高尔夫规则 您的代码必须遵循游戏中的所有规则,处理捕获,正确移动等(唯一的例外是您不必添加机器人,但必须以某种方式控制两个玩家,并且一个玩家必须是人类。) 输入必须在图块X到图块Y处移动,或者退出。例如,您可以1 4说“将此块从图块1移动到图块4”。quit将结束该程序,尽管使用Control- C是可以接受的。您还必须检查移动是否无效(通过走出木板或移动到您不得不越过空闲的空间才能到达或发送不是一对磁贴或的消息quit)。 玩家赢得的和无效的输出必须是P1 WINS,P2 WINS和INVALID分别。(所有这些都是7个字符。) 输出必须显示板。这就是全部。 是否使用任何辅助工具(如编号的瓷砖或其他物件)都没关系。 该挑战在以下情况下结束: 一个答案可获得50票 3个星期内,一个答案仍然是票数最高的答案,并且在那时没有其他答案发布 并且挑战至少有3个答案(所以有一些真正的竞争)。 游戏规则 左边的玩家必须先开始。 一次只有一块占据一个正方形。您可以向左或向右移动片段,直到碰到一个空位。木板不包裹,您不能在未占用的区域中移动。例如: xoo__o。在这里,x向右移动会将板更改为_oox_o。 xxooo_。在这里,最左边的x可以移动到yield _xooox,它捕获os,离开_x___x。 x__oox。在此,o不捕获s(仍然存在间隙)。无法捕获,因为您无法在闲置空间中移动。在x左侧只能移动一分格,因为没有其他部分之间(离开_x_oox)。 如果组被对手的棋子包围,则可以一次捕获多个相邻棋子。例如,从x_oox至_xoox将同时捕获os和_x__x。 如果在移动之后,首先要捕获对手的棋子,然后再检查是否应删除自己的棋子。举两个例子: o_oxx到oxox_。首先,o捕获第二个ox_x_,因此第一个x保留在板上。 o_oox到oxoo_。这次,没有o捕获到,因此x捕获了。 如果只有一件,则游戏结束,因为您不能仅凭一件就捕捉到。 让游戏开始!我期待看到您的想法。

4
OCaml打高尔夫球的秘诀
受到其他“以xyz语言打高尔夫球的提示”的启发。与往常一样,请只提出OCaml特有的技巧,而不是一般的编程技巧。请给每个答案一个提示。
10 code-golf  tips 

6
生成菜单的键盘快捷键
菜单快捷方式 传统上,用户菜单可通过键盘快捷键(例如)访问Alt + (a letter),甚至在所有文本框都未聚焦时(gmail样式)也可以直接按字母。 你的任务 给定菜单项作为输入,您的任务是为每个菜单项授予适当的快捷键。 编写一个接受一组单词的函数或程序-菜单项(以字符串数组或您的语言等效形式),并从单个字母到菜单项返回字典或哈希图。 您可以使用参数并返回值,也可以使用STDIN并将结果输出到STDOUT。您不能假定全局/作用域变量已使用输入填充。 确定正确字母的算法 基本上,这是单词的第一个可用字母。请参见下面的假设和示例。 如果所有条目的字母都不可用,则快捷方式将为(a letter) + (a number)。您从条目中选择哪个字母是任意的。该数字应从0开始并以1递增-这样所有快捷方式都是唯一的。请参阅下面的第三个示例。 假设条件 输入将是一个Set,即没有重复,每个条目都是唯一的。 输入的长度可以是任何非负整数(最多为您的语言的MAX_INT)。 区分大小写:输入区分大小写(但忽略大小写时将保持唯一)。结果应包含原始条目及其原始大小写。但是,输出快捷方式字母不区分大小写。 所有输入的单词都不会以数字结尾。 不会测试“邪恶输入”。“邪恶输入”使您必须将某个字母的计数器增加10倍以上。 例子 下面的示例使用JSON,但是您可以将等效语言用于数组和字典,或者-在使用STD I / O的情况下-输入和输出的任何可读格式(例如csv甚至是空格-分隔值)。 1。 Input: ['File', 'Edit', 'View', 'Help'] Output: {f:'File', e:'Edit', v:'View', h:'Help'} 2。 Input: ['Foo', 'Bar', 'FooBar', 'FooBars'] Output: {f:'Foo', b:'Bar', o:'FooBar', a:'FooBars'} 3。 …
10 code-golf  string 

14
来自两个点(x,y)的线性函数求解器
任务 编写一个函数L(),该函数采用两个(x,y)形式的两个Tuple参数作为坐标,并以(a,c)形式返回它们各自的线性函数,其中a是x项和c的系数是y截距。 您可以假定输入将不是垂直于x轴的线,并且两个输入是单独的点。 计分 这就是Code Golf:最短的程序获胜。 请注意:除了基本运算符(+,-,/,*)外,请勿使用任何数学函数。 例 这是我在Python中使用的非解决方案。 def L(Point1, Point2): x = 0 y = 1 Gradient = (float(Point1[y]) - float(Point2[y])) / (float(Point1[x]) - float(Point2[x])) YIntercept = Point1[y] - Gradient * Point1[x] return (Gradient, YIntercept) 输出: >>> L( (0,0) , (1,1) ) (1.0, 0.0) >>> L( (0,0) , …
10 code-golf 

3
艾奥市高尔夫技巧
您在艾奥(Io)打高尔夫球有哪些一般提示?我正在寻找可以普遍用于解决高尔夫问题的想法,这些想法至少在某种程度上特定于艾奥(例如,“删除评论”不是答案)。请为每个答案发布一个提示。
10 code-golf  tips 

5
打印自己的镜像的程序
编写一个产生其自身镜像的程序。一个例子就是奇妙的骆驼代码,它读取自己的代码并生成两个较小的2x2版本。给定输入: $_='ev al("seek\040D ATA,0, 0;");foreach(1..3) {<DATA>;}my @camel1hump;my$camel; my$Camel ;while( <DATA>){$_=sprintf("%-6 9s",$_);my@dromedary 1=split(//);if(defined($ _=<DATA>)){@camel1hum p=split(//);}while(@dromeda ry1){my$camel1hump=0 ;my$CAMEL=3;if(defined($_=shif t(@dromedary1 ))&&/\S/){$camel1hump+=1<<$CAMEL;} $CAMEL--;if(d efined($_=shift(@dromedary1))&&/\S/){ $camel1hump+=1 <<$CAMEL;}$CAMEL--;if(defined($_=shift( @camel1hump))&&/\S/){$camel1hump+=1<<$CAMEL;}$CAMEL--;if( defined($_=shift(@camel1hump))&&/\S/){$camel1hump+=1<<$CAME L;;}$camel.=(split(//,"\040..m`{/J\047\134}L^7FX"))[$camel1h ump];}$camel.="\n";}@camel1hump=split(/\n/,$camel);foreach(@ camel1hump){chomp;$Camel=$_;y/LJF7\173\175`\047/\061\062\063\ 064\065\066\067\070/;y/12345678/JL7F\175\173\047`/;$_=reverse; print"$_\040$Camel\n";}foreach(@camel1hump){chomp;$Camel=$_;y /LJF7\173\175`\047/12345678/;y/12345678/JL7F\175\173\0 47`/; $_=reverse;print"\040$_$Camel\n";}';;s/\s*//g;;eval; eval ("seek\040DATA,0,0;");undef$/;$_=<DATA>;s/\s*//g;( );;s ;^.*_;;;map{eval"print\"$_\"";}/.{4}/g; __DATA__ \124 \1 50\145\040\165\163\145\040\157\1 46\040\1 41\0 40\143\141 \155\145\1 54\040\1 51\155\ 141 \147\145\0 40\151\156 \040\141 …

7
随机CSS颜色代码
这篇有关在JavaScript中生成随机CSS颜色代码的博文提供了多种在JavaScript中生成随机颜色的解决方案。我能找到的最短的是: '#'+(Math.random()*0xffffff).toString(16).slice(-6) 如果您不熟悉CSS颜色代码,请阅读此处的文档。 我们可以做得更好吗?那其他语言呢?
10 code-golf  random  css 

16
最长输出的最短代码[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 这很简单。 编写尽可能短的程序,同时产生最多的输出。 为了使它有趣,产生无限输出的程序将被取消资格。 获胜者是具有最大输出大小/代码大小比率的程序。 结果基于我的计算机上的运行情况,该计算机是运行Mac OS X 10.7.5的Mac,带有Intel Core i5和8GB内存。
10 code-golf 

4
Vim中最具破坏性的“忘记进入插入模式”序列
假设您有一个任意的文本文件(可以选择)。 如果打算将其插入到文本中,但以正常模式输入(即未按下i/ ),则给出最具破坏性的击键顺序(* a)。您可能没有进入可视模式并且没有退出Vim。 破坏性定义如下:更改/删除的字符与必要击键次数的比率。 如果您的更改无法被固定数量的undos 撤消,则您将获得奖励积分。 示例:没有换行符的输入文件。输入顺序:dfs。

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.