Questions tagged «code-golf»

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

4
像专家一样可视化Nim板
背景 在Nim游戏中,玩家交替从“桩”中移除“石头”:每回合,玩家必须从单个桩中移除一个或所有宝石。Nim的目标是夺走最后一块石头,或者在惨败的情况下,迫使对手这样做-但是,事实证明,策略几乎是相同的。 Nim制作了有趣的酒吧游戏。您可以将火柴或硬币用于“石头”,并且通常将“桩”排列成一行。下面是一个经典的设置,其中包含1、3、5和7堆: 如果您以前从未玩过Nim,则可以在尝试此挑战之前尝试一下。这是一个称为“猪前珍珠”的版本。 战略 Nim中的最佳策略非常棘手,以至于大多数非专业人士始终输给专家,但是用二进制算术即可轻松描述。 但是,进行心理二进制XOR操作非常困难,因此幸运的是,有一种等效的方法可以可视化正确的策略,即使在醉酒的情况下,也更容易实时实施。 只有三个步骤: 将每行中的“石头”分为大小为2的幂的子组,从可能的最大大小开始:8、4、2和1就足以用于大多数游戏。 尝试使每个组与另一行中的双胞胎匹配,以便每个组都有一对。 如果无法做到这一点,请从单行中删除未配对的“石头”(这将始终是可能的-请参阅Wikipedia链接以了解原因),从而使步骤2成为可能。 或者说另一种方式:“从单个桩中取出一些石头,这样,如果您将这些桩归为2的幂,则所有组都可以与其他桩中的一组配对。” 需要注意的是,您不能将2的大数分解为较小的小数,例如,您不能将包含8个宝石的线分为4组。 例如,这是您可视化上面的面板的方式: 该板完全平衡,因此您希望您的对手先移动。 挑战 给定代表Nim“桩”大小的正整数列表,返回专家看到的Nim板纯文本可视化。 通过示例可以最好地解释什么构成有效的可视化,但是您必须: 给每个“ 2的幂次幂”子组及其对分配一个不同的字符(未配对的子组不合格),并使用该字符表示子组和对中的“石头”。 代表任何配对的“石头”(即那些当打正常的专家将消除-不MISERE - NIM)使用连字符:-。 有多种方法可以实现有效的可视化,并且所有方法都是有效的。让我们研究一些测试用例: 测试用例 输入:1、3、5、7 可能的输出1: A BBA CCCCD CCCCBBD 您可以选择在字符之间包括空格,在行之间包括空白行: 可能的输出2: A B B A C C C C D C C C C B B D 输入:1、2、3、4、5、6、7、8、9、10 …

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 = …

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 

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 

7
高尔夫代码:弗雷序列(I)
挑战 在此任务中,您将得到一个整数N(小于10 ^ 5),输出N阶的Farey序列。 输入N在单行中给出,输入由EOF终止。 输入项 4 3 1 2 输出量 F4 = {0/1, 1/4, 1/3, 1/2, 2/3, 3/4, 1/1} F3 = {0/1, 1/3, 1/2, 2/3, 1/1} F1 = {0/1, 1/1} F2 = {0/1, 1/2, 1/1} 约束条件 输入数量不会超过10 ^ 6个值 您可以使用任何选择的语言 最短的解决方案获胜!
10 code-golf  math  code-golf  math  code-golf  number  number-theory  code-golf  math  arithmetic  repeated-transformation  code-golf  geometry  popularity-contest  code-golf  code-golf  tips  haskell  math  fastest-algorithm  code-golf  combinatorics  code-golf  math  polynomials  rational-numbers  code-golf  code-golf  popularity-contest  javascript  code-golf  kolmogorov-complexity  code-golf  code-golf  math  combinatorics  permutations  code-challenge  restricted-source  random  array-manipulation  code-challenge  generation  code-golf  code-golf  ascii-art  arithmetic  division  code-challenge  number  code-golf  math  number  binary  code-golf  ascii-art  code-golf  interpreter  stack  code-golf  internet  networking  code-golf  math  code-golf  ascii-art  code-golf  math  sequence  code-golf  hello-world  restricted-source  code-golf  ascii-art  code-golf  geometry  code-golf  kolmogorov-complexity  pi  code-golf  math  combinatorics  permutations  code-golf  math  code-challenge  ascii-art  code-golf  string  code-golf  quine  code-golf  math  floating-point  golfscript  code-golf  string  code-golf  sliding-puzzle  code-challenge  arithmetic  code-golf  math  code-golf  geometry  optimized-output 

6
Usenet时间是几点?
1993年9月在Usenet上被称为永无止境的9月。因此,例如,发布此问题的日期是1993年9月8740日,星期六。 您的程序或函数应将任何公历日期(带有正年份)作为输入,并返回与输出相同的日期(如果该日期早于1993年9月),或者返回其后的1993年9月日历上的日期。 您可以接受YYYY-MM-DD,YYYY / MM / DD,MM / DD / YYYY,DD / MM / YYYY,D-Monthnameabbr-YYYY或使用全年的所有其他流行格式(而不是年(以100为模)。您只需要选择一种这样的格式即可。输出格式必须与输入格式匹配。 样本输入→输出: 2017年8月6日星期日→1993年9月8741日星期日 1986年1月28日,星期二→1986年1月28日,星期二 要么: 2017-08-06→1993-09-8741 1986-01-28→1986-01-28 为了获得更有趣的答案,sdate不允许使用为此目的而设计的内置函数(例如UN * X 命令)。除此之外和标准的例外,这就是高尔夫,所以最简单的回答胜。
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.