Questions tagged «code-golf»

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

5
可视化差异金字塔
差异金字塔是一个金字塔,其中每个新对角线是最后一个对角线元素之间的差异的绝对值。例如,如果我们从数组开始 2 5 4 9 3 4 现在,我们将它们排列在对角线列中: 2 5 4 9 3 4 现在,我们填写下一个对角线。此数组的连续元素之间的绝对差异为: 3 1 5 6 1 这就是我们的下一个对角线。 2 3 5 1 4 5 9 6 3 1 4 重复直到金字塔被填满: 2 3 5 2 1 4 2 4 5 9 1 3 1 6 3 0 1 …

11
将xxd输出转换为shellcode
从xxd获取一些输出并将其手动转换为可用的shellcode并不有趣,因此您的工作是使过程自动化。 规则 您提交的内容可以是函数,lambda,脚本或任何合理的等效形式。您可以打印结果,或者如果您提交的是函数/ lambda,则还可以将其返回。 您的程序必须带有三个参数,第一个是包含xxd输出的字符串,运行时除了文件名外都没有其他参数,例如:xxd some_file。这是第一个参数的示例: 00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1.. 00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S. 00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX 00000030: 5858 5859 5959 59 XXXYYYY 您需要截取包含字节的中间部分(之后的前8列:),然后通过删除所有空格将其转换为shellcode,然后\x在每个字节之前放置一个。 以下是上述输入的输出(忽略任何其他参数): \x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x4e\x58\x58\x58\x58\x59\x59\x59\x59 您可以假设第一个参数将始终是有效的xxd输出,并且除了文件名外都没有其他参数。 您的输出也应该是一个字符串,其中反斜杠是文字反斜杠,而不用作转义符。因此,当我说“ \ x65”时,我并不是在说字节0x65,甚至不是字母“ A”。在代码中,它将是字符串“ …

5
走迷宫
也许它不是真正的迷宫,但仍然如此。 规则: 输入是一个两行字符串,包括*,1,x和X。那根绳子是迷宫。线的长度相等。 您可以将输入作为带有,(逗号)的字符串或这两行之间的任何方便的分隔符。或者,您也可以将这两行作为函数的单独参数。 输出是退出字符串必须执行的步骤数(最后一步是将您移出字符串的步骤)。 您从左上角(较高的线)开始,在第一个符号之前。 对于每一步,您将向前移动一个符号(从第n个位置到第(n + 1)个位置)。然后,根据您所踩的角色,结果是不同的。这是每个字符的作用: *- 没有。您通常只是踩到它。 x-踩到它后,切换线路,但与起点保持相同的水平距离。例如,您踩到较高行的第三个位置,并在x此处遇到了一个小写字母。然后,您立即移至下一行,但再次移至第三位置。 X-切换线路并转到下一个位置。此处的示例相同,但您也从第三位置移至第四位置(因此,第二行位于第四位置)。 1 -向前移动另一个位置。 每个角色完成工作后,将替换为空格,不再“有效”。 示例如下。 输入: x * 如前所述,您从第一行的第一个符号开始。第一步将您移至字母上x,此字母将您切换至第二行。该字母x不再用作x,而是由代替*。在后面的示例中,这将更有意义。您现在位于底行的星号上,对您没有任何作用。 第二步是将您向前移动,然后退出弦线,因此迷宫完成了,并且花费了2个步骤。 输出 2。 输入: xX* x1* 第一步:继续前进x,这会将您移至x下一行的。这是一条规则,该规则说使用的字符替换为星号。然后,您移回第一行,但x由于它已被使用并成为星号,因此不再存在。因此,您可以安全地在该星号上移动,并且该步骤已完成(您现在位于第一行的第一个位置)。 第二步:继续前进X,它会将您推到较低的线,然后再将您向前推。您现在位于第二行的第三个位置(星号),而从未访问过第二个位置(包含1)。 第三步:向前移动,退出字符串。 输出:3。 测试用例: 输入: *1* xxx 输出:3。(因为1使您跳到第三位置)。在那里您永远不会访问第二行,但这是输入的必需部分。 输入: *X*1*x x*1xx* 输出:4。 输入: 1x1x ***X 输出:3。 输入: 1*x1xxx1*x x*x1*11X1x 输出:6。 输入: xXXXxxx111* …

3
模拟纸牌游戏“ Oorlog”中的“战斗”
让我们为纸牌游戏的一个方面构建一个模拟,我个人以荷兰语名字“ Oorlog”(译为“战争”)来知道。 “ Oorlog”如何工作? 两副纸牌(每张纸牌包括两个小丑)在玩的玩家数量之间平均分配。每个玩家随机洗牌,将其倒置在他们面前,然后所有玩家同时打开该股票的第一张牌。 “战斗”的获胜者由遵循以下规则的纸牌值决定:小丑/王牌击败金;国王击败女王;女王击败杰克;杰克击败10;10败9; ....此外,2和3都击败了Ace / Joker。最后一条规则可能会导致一个循环,其中2或3击败Ace或Joker,Ace或Joker击败某些其他牌,反过来又击败2或3。在这种情况下,2或3赢得战斗。 (在此纸牌游戏中,衣服是无关紧要的。) 当两个或两个以上的玩家拥有相等的最高卡牌时,他们就会有“战争”。这意味着他们将一张卡片倒置,然后每张卡片从库存中打开一张新卡片,再次寻找谁拥有最高的卡片。这一直持续到一个玩家赢得整个战斗为止。 (该战役的所有卡都移到赢得战斗的玩家的弃牌堆中。然后每个人都打开一张新牌。当玩家的存储卡用完时,他们将其弃牌堆倒置并继续使用此新股票。这一直持续到玩家的所有卡都用完,然后赢得最高卡数的玩家才获胜。) 具有三个玩家的“战斗”示例: 4、8,杰克: 杰克获胜。 7,王牌,女王: 王牌获胜。 10、10,国王: 国王获胜。 3,小丑,2: 3胜。 小丑王牌: 2 :2获胜。 3,女王,王牌: 3胜。 皇后区,皇后区9: 皇后区和皇后区之间有一场“战争”,因此继续使用两张新牌:4、8; 8胜。 4、4、4: 所有人都有一场“战争”,所以它继续了三张新牌:8,王牌,2; 2胜。 Jack,5岁,Jack: Jack和Jack发生了一场“战争”,因此它继续增加了两张新牌:5、5; 5和5也相等,因此“战争”再次以两张新牌继续:10,国王; 国王赢了。 小丑,小丑,王牌: 所有人都在打一场“战争”,所以它继续推出三张新牌:9、7、9; 9和9也相等,因此“战争”继续出现了两张新牌:杰克,3; 杰克赢了。 因此,面临代码挑战: 输入: 带数组的STDIN或模拟数组的字符串(您的调用-即使您的语言支持数组也是如此)。此阵列按时间顺序包含一场战斗的卡片(请参阅测试案例以更清楚地了解这一点)。 输出: STDOUT赢得战斗的玩家的索引。 您可以选择是否要零索引(即0,1或2)或一个索引的输出(即1,2,3)。 挑战规则: 输入将是单个数组/代表数组的字符串。因此,您无法使用数组数组来简化它。对于不参与战争的卡,您也不能拥有替代物品。 我们使用数字符号代替字母符号。所以Ace / …

14
推导其指数生成函数为正切的序列
几乎每个函数都可以表示为具有无限项的多项式。 例如, e^x = 1 + x + x^2/2! + x^3/3! + x^4/4! + ... 例如, sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ... n第-个项的系数形成一个序列,相应的函数称为生成函数该序列。 的系数 n第-项形成一个序列。 通常,n-th项的分母为n!。因此,我们将系数乘以n!得到另一个序列,该序列的指数生成函数将是原始函数。 例如,其指数生成函数为的序列e^x将为1,1,1,1,...。 例如,其指数生成函数为的序列sin(x)将为0,1,0,-1,0,1,0,-1,...。 任务 您的任务是找到指数生成函数为n的序列的第n个项。tan(x) 测试用例 n result 0 0 1 1 2 0 3 2 4 0 5 16 …

12
Oneliner合并具有相同第一个字段的行
这是我的第一个代码高尔夫问题,因此,如果不合适的话,我谨此致歉,并欢迎您提供任何反馈。 我有一个具有这种格式的文件: a | rest of first line b | rest of second line b | rest of third line c | rest of fourth line d | rest of fifth line d | rest of sixth line 实际内容和定界符也有所不同。内容只是文本。分隔符每行仅出现一次。对于这个难题,可以随意更改定界符,例如,使用“%”作为定界符。 所需的输出: a | rest of first line b | rest of …


4
除数图中的最短路径
介绍 在这个挑战中,我们将处理某个无限的无向图,我将其称为高除数图。其节点是从2开始有两个节点之间的边缘的整数A <B ,如果一个分割b和一个2 ≥b 。由2到18范围组成的子图如下所示: 16-8 12 18 \|/ |/| 4 6 9 10 15 14 | |/ |/ | 2 3 5 7 11 13 17 可以证明无限高的除数图是连通的,因此我们可以询问两个节点之间的最短路径。 输入输出 您的输入是两个整数a和b。您可以假定2≤a≤b <1000。您的输出是无限高除数图中a和b之间的最短路径的长度。这意味着路径中的边数。 您可能会发现以下事实很有用:始终存在从a到b的最佳路径,该路径先增大然后减小,并且仅访问严格小于2b 2的节点。特别地,由于b <1000,您只需要考虑小于2000000的节点。 例子 考虑输入3和32。节点3和32之间的一条可能路径是 3 -- 6 -- 12 -- 96 -- 32 该路径有四个边,结果没有较短的路径,因此正确的输出是4。 作为另一示例,用于最佳路径2和25是 2 -- …

1
生成循环数组
介绍 甲指针数组是一个数组L,其中的非零整数0 ≤ L[i]+i < len(L)为所有指数保持i(假定从0开始的索引)。我们说索引i 指向索引L[i]+i。如果索引形成一个length周期,则指针数组是一个循环len(L)。这里有些例子: [1,2,-1,3]不是指针数组,因为3不会指向索引。 [1,2,-1,-3]是一个指针数组,但不是循环,因为没有索引指向-1。 [2,2,-2,-2] 是一个指针数组,但不是一个循环,因为索引形成两个周期。 [2,2,-1,-3] 是一个循环。 输入值 您的输入是以任何合理格式显示的非零整数的非空列表。它可能未排序和/或包含重复项。 输出量 您的输出将是一个循环,该循环包含输入列表中的所有整数(也可能还有其他整数),并计算重复数。它们不必以与输入中相同的顺序发生,并且输出在任何意义上都不必最小。 例 对于输入[2,-4,2],可接受的输出为[2,2,-1,1,-4]。 规则和计分 您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。感谢您在答案中包含几个示例输入和输出。 测试用例 这些以格式给出input -> some possible output(s)。 [1] -> [1,-1] or [1,1,1,-3] [2] -> [2,-1,-1] or [1,2,-2,-1] [-2] -> [1,1,-2] or [3,1,2,-2,-4] [2,-2] -> [2,-1,1,-2] or [2,-1,2,-2,-1] [2,2,2] -> [2,-1,2,-2,2,-2,-1] …

30
单独的字母和数字
一段文字混合了数字和字母。您的任务是按照每行的相同顺序将数字左侧和右侧的字母分开。 规则: 数字是纯整数;因此没有小数点,也没有负/正号。 数字可能是连续的,也可能不是连续的,但是无论如何,它们都必须以相同的顺序推到左侧。 单词之间可能出现数字。 文本仅包含ASCII字母和数字,以及空格,下划线,逗号和点。 用最少的按键操作(如vim宏)或最少的字节数(在编写脚本的情况下)执行此操作的人就是赢家。 示例文字: A word can have any number of text like 433884, but all the numb89ers has to be moved left side but alph6abetical va9lues has to be pas46ted on right side. The text might con4tain chara29cters s2huffled like hlep or dfeintino or even …

5
自动房屋建筑商
自动房屋建筑纳米机器人已经制造出来,编写它们是您的工作。 这是通过输入创建的房子 7 4 2 /-----/| / / | |-----| | | | | | | / |_____|/ 输入是包含房屋尺寸的字符串。 7 是宽度。 |_____| ---7--- 4 是高度。 | | | | 2 是深度 / / 有了这个输入,您可以建造房屋吗? 您的代码必须尽可能小,以使其适合机器人。 笔记 您将输入的最小尺寸为3 2 2。您的程序可以执行尺寸小于3 2 2。 测试用例 3 2 10 /-/| / / | / …

10
最短的语法窗口
连字符是包含所有26个字母的句子或摘录,如本代码高尔夫球挑战中所示。但是,语法窗口是某种文本片段形式的语法,可能在一个较大的作品中的某个地方出现或终止于单词的一半。这些自然地随处可见,是真正的Pangram的适当子集,因此只需验证某物是否包含Pangrammatic窗口就很无聊,而且之前也已完成。 因此,我们有兴趣根据字母长度找到给定文本中最小的文本!当然,以最短的代码(以字节为单位)以适合主题。 规则与准则 接收一个字符串作为输入,如果存在,则返回输入中最小的语法窗口的字符串。如果没有,则返回布尔False或空字符串。 字符串是否为语法窗口不区分大小写,仅取决于26个字母,而不取决于任何标点符号,数字或其他奇数符号。 同样,语法窗口的字母长度是单独出现在其中的字母出现的总数,而不仅仅是每个字符的数量。基于此计数,返回值必须最小。毕竟,我们是语言学家,而不是程序员。 但是,语法化窗口的输出必须是输入的精确子字符串,包含相同的大小写和标点符号等。 如果存在多个具有相同字母长度的最短的语法窗口,则返回其中任何一个。 测试用例 'This isn't a pangram.' ==> False 'Everyone knows about that infamous Quick-Brown-Fox (the one who jumped over some lazy ignoramus of a dog so many years ago).' ==> 'Quick-Brown-Fox (the one who jumped over some lazy ig' '"The five boxing wizards …
15 code-golf  string 

9
球拍/计划中的高尔夫技巧
您在球拍 / 计划中打高尔夫球有哪些一般提示?我正在寻找可用于编码高尔夫问题的想法,这些想法至少在某种程度上特定于球拍/计划(例如,“删除评论”不是答案)。 我知道Scheme和Racket(以前称为PLT Scheme)在技术上是不同的语言,但是在许多方面都非常相似,并且很多代码(我怀疑)都将按两种方式运行。如果您的提示仅适用于上述一种语言,请注意。
15 code-golf  tips  lisp 

5
编码代码页
介绍 代码页将整数值映射到特定字符。我们可以像这样可视化代码页: + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- +- -+ --- + --- + --- +- | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | …

30
切换字符串
挑战涉及简单地在另一个字符串中切换一个字符串。 说明 如果切换字符串是主字符串的子字符串,则从主字符串中删除切换字符串的所有实例; 否则,将切换字符串附加在main string的末尾。 规则 所有字符串均由可打印的ASCII字符组成 该函数应带有两个参数:主字符串和切换字符串。 在主串可以是空的。 该拨动弦不能为空。 结果应该是一个字符串,可以为空。 最短的答案将获胜。 例子 function toggle(main_string, toggle_string){ ... } toggle('this string has 6 words ', 'now') => 'this string has 6 words now' toggle('this string has 5 words now', ' now') => 'this string has 5 words' 测试案例 '','a' => 'a' …
15 code-golf  string 

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.