Questions tagged «code-golf»

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

8
找到旋转的单词!
不要问我如何或为什么,但是在编码一个项目时,我注意到几个单词的字符有一个特定的模式,称为字母,我用铅笔上的铅笔将单词的每个字符连接起来,我得到了两个螺旋形,然后我注意到第一个螺旋形是顺时针方向,另一个是逆时针方向,还有其他特征...因此我将它们命名为Swirling Words! 一个旋流字可以是: 顺时针或逆时针 向心或离心 这里有一些旋转字的例子: 任务1: 编写一个完整的程序或函数,该函数将从标准输入中提取一个单词,如果是旋转单词及其特征,则以可读格式,扩展文本,3个字符,标志等输出。 不同单词的测试用例和示例输出(但是您可以决定如何表示结果): EARTH, GROUP > NO // NOT A SWIRLING WORD OPERA, STAY, IRIS > SW,CF,CW // SWIRLING WORD, CENTRIFUGAL, CLOCKWISE MINER, TAX, PLUG, META > SW,CF,CC // SWIRLING WORD, CENTRIFUGAL, COUNTERCLOCKWISE AXIOM, AXIS, COOK > SW,CP,CW // SWIRLING WORD, CENTRIPETAL, CLOCKWISE WATCH, …
41 code-golf  string 

30
天哪,吉萨高尔夫!
“吉萨数”(俗称“ 蒂米数”)是指数字代表金字塔的任何数字(A134810)。例如,“ 12321”是一个吉萨数字,因为它可以像这样可视化: 3 2 2 1 1 但是,“ 123321”之类的字符不是吉萨币,因为金字塔的顶部有两位数字 33 2 2 1 1 换句话说,如果满足以下所有条件,则数字为吉萨数: 它的位数是奇数,中间的数字是最大的 它是回文的(相同的向前或向后读取),并且 数字的前半部分严格增加一个。(由于必须是回文,这意味着数字的后半部分必须严格减少一位) 您必须编写一个采用正整数作为输入的完整程序或函数,并确定它是否为吉萨数。您可以将输入作为字符串或数字。如果它是吉萨数,则输出真实值。否则,将产生虚假的值。 共有45个吉萨数字,因此这些输入中的任何一个都应产生真实值: 1 2 3 4 5 6 7 8 9 121 232 343 454 565 676 787 898 12321 23432 34543 45654 56765 67876 78987 1234321 2345432 3456543 4567654 5678765 …

9
揭开一维迷宫的秘密
背景 您醒来后发现自己迷失在一维迷宫中!出现一个神秘的精灵(或其他东西),并解释说出口位于您的面前,但是您与出口之间的挑战是一系列的。当您前行时,您会意识到所有所谓的挑战仅仅是锁着的门。首先,您会看到带有T形钥匙孔的门,而自己却没有这样的钥匙,请后退步伐,寻找具有T形状的钥匙。 沮丧的是,您在地面上发现了字母键的汤,这些汤都不符合您遇到的门。出于某种天才(或愚蠢)的考虑,您决定如果将小写字母t形的钥匙塞入足够的强度,则它可能可以装入该插槽中。当您用t手握小写字母的方式接近门时,T孔会发出绿色的光,并且门会在您面前溶解。 一倒,还有更多... 挑战 挑战的目标是标记退出迷宫需要花费多少步骤。 挑战的输入是迷宫:一个仅包含字符的字符串[A-Za-z^$ ]。词汇表: ^-起始空间。输入将只包含一个^。 $-出口(自由!)。输入将只包含一个$。 [A-Z]-大写字母表示大门。如果您已经收集了必需的密钥,则只能通过此门。 [a-z]-小写字母表示按键。通过走到包含密钥的空间中来收集这些密钥。 输入中每个大写字母最多包含一个。这意味着门的总数将在0-26之间(含0和26)。 每个锁着的门上[A-Z]都有一个对应的小写钥匙[a-z]。输入中可以有任意数量的空格()。 所有的门将在起点的右侧,在出口的左侧。这样就不会有多余的门。所有输入都是可解的。 此挑战的输出将是一个数字,即退出迷宫所采取的步骤数。 算法 您退出这个令人毛骨悚然的地方的有条理的方法如下: 从开头(^)开始,然后向前(向右)收集遇到的所有键。 当您碰到一扇门时,如果您拥有正确的钥匙,则可以继续前进到门上。如果没有正确的钥匙,您将向后走(左)收集碰到的钥匙,直到找到您无法打开的最新门的钥匙。 收集到当前麻烦门的钥匙后,您将返回右侧并继续前进。 重复此过程,直到您进入出口($)。 有经验的高尔夫球手会理解,只要您的代码输出的结果与运行此算法相同,就不必实施此特定算法。 数数 每次您从一个正方形移到另一个正方形时,这都算是一个步骤。转动180º不会产生任何附加步骤。如果没有必需的钥匙,您将无法前进到门上。您必须踩到钥匙才能捡起来,并且必须踩到出口才能赢。首次移动后,起始空格(^)的行为与其他任何常规空格相同。 例子 在这些示例中,我将空格留作下划线以供人类阅读。 输入为_a_^_A__$__。输出为11。您1往前走,注意没有A门钥匙,然后没有脸。您向后走,直到占据了包含a(3向后走,现在4总计)的空间。然后,您可以向前走直到占据包含出口的空间(7向前走,11总计)。 输入为b__j^__a_AJB_$。输出是,41您在迷宫的后面进行了两次单独的行程,一次行程获取j钥匙,而下一次行程获取b钥匙。 输入为__m__t_^__x_T_MX_$____。输出为44。x从头到门的途中捡起钥匙,您将不需要花费额外的时间就可以拿到钥匙T。 输入为g_t_^G_T$。输出为12。如果G没有钥匙,您将无法直接进入空间。您很幸运在拿到t钥匙的路上拿起g钥匙,从而在通往自由的道路上打开了两扇门。 输入为_^_____$。输出为6。那很简单。 I / O准则和制胜标准 适用标准I / O规则。这是一个代码高尔夫挑战。
41 code-golf  string 


30
水稻和象棋问题
一位印度传奇人物讲述了所谓的国际象棋发明者的故事,他用他的棋子给印度皇帝留下了深刻的印象,以至于他得到的任何要求都会得到回报。 该男子说他想用大米付钱。他想在棋盘的第一个正方形上放一粒米,第二个想要两个,第三个四个,第四个八个,依此类推,直到第64个正方形。 皇帝惊讶于这个人要求这么小的报酬,但是随着他的数学家开始数数,他最终失去了他的一个省。 任务 给定假设的棋盘的边长(默认棋盘的边长为8)和正方形之间的乘数(图例中为2),计算皇帝必须付给该人的米粒数。 笔记 边长将始终为正整数。乘数可以改为任何有理数。 如果您选择的语言不能显示非常大的数字,则可以,只要您的程序可以正确处理较小的输入即可。 同样,如果您选择的语言舍入较大的值(带有指数符号),则这些值近似正确也是可以的。 测试用例 Input (side length, multiplier) => Output 8, 2 => 18446744073709551615 3, 6 => 2015539 7, 1.5 => 850161998.2854 5, -3 => 211822152361 256, 1 => 65536 2, 2 => 15 2, -2 => -5 请注意,显式公式 result = (multiplier ^ (side …
41 code-golf  math 

22
删除每N个N
任务 在此挑战中,您的输入是一个非空的正整数列表,以您的语言的本机格式给出。您的输出是相同列表,格式相同,但删除了一些元素。您应删除的每次出现1,第二次出现的第二次出现2,第三次出现的所有第三次3,依此类推。通常,对于每个正整数N,您应从列表中删除N第一个出现的事件。NN 例 考虑输入清单 [3,2,6,1,1,6,2,3,2,6,6,6,6,1,6,6,3,3,7,2] 首先,我们删除每次出现的1: [3,2,6, 6,2,3,2,6,6,6,6, 6,6,3,3,7,2] 然后每秒出现一次2: [3,2,6, 6, 3,2,6,6,6,6, 6,6,3,3,7 ] 然后每三出现一次3: [3,2,6, 6, 3,2,6,6,6,6, 6,6, 3,7 ] 数字4和5不会出现在输入中,因此可以跳过它们。接下来,我们删除第六次出现的6: [3,2,6, 6, 3,2,6,6,6, 6,6, 3,7 ] 只会出现一次7,因此也可以跳过。因此正确的输出是 [3,2,6,6,3,2,6,6,6,6,6,3,7] 规则和计分 您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。 测试用例 [1] -> [] [2] -> [2] [1,1,1] -> [] [2,2,2] -> [2,2] [1,1,2,2,2,3,3,3,3] -> [2,2,3,3,3] [1,2,3,1,2,3,1,2,3,1,2,3] …

30
作弊多项选择测试
介绍 在学习期间,我试图提出几种欺骗多选测试的方法。它基本上是多项选择答案的压缩版本。该方法如下: 测试答案: BCAABABA 这些可以转换为3个不同的数组,如果当前字母是答案,则表示true或false: B C A A B A B A A: [0, 0, 1, 1, 0, 1, 0, 1] B: [1, 0, 0, 0, 1, 0, 1, 0] C: [0, 1, 0, 0, 0, 0, 0, 0] 将这些数字解释为二进制会压缩很多。但这实际上可以进一步压缩。如果知道A和B的位置,则不需要C的位置。这可以通过按位NOT运算符完成: A: [0, 0, 1, 1, 0, 1, 0, 1] …

30
万圣节高尔夫:2spooky4me挑战!
当前的互联网模因是键入2spooky4me,第二个人按照该(n)spooky(n+2)me模式键入3spooky5me 。 您的任务是以您选择的语言实现此模式。您应该编写一个程序或函数,该程序或函数需要一个值n(来自标准输入,作为函数参数,或最接近的替代项),然后将字符串(n)spooky(n+2)me(不带括号)输出到标准输出,作为函数的返回值或最接近的替代项)。 您的解决方案应该适用于所有输入,从1最多2个(比语言的最大可表示整数值低2个以下)开始(2^32-3例如,对于32位计算机上的C)。 Python中的示例实现: def spooky(n): return "%dspooky%dme"%(n,n+2) spooky(2) -> "2spooky4me" 这是代码高尔夫球,因此禁止标准漏洞,以字节为单位的最短答案为胜! 排行榜 这篇文章底部的Stack Snippet通过答案a)生成了排行榜,a)是每种语言的最短解决方案列表,b)则是总体排行榜。 为确保您的答案显示出来,请使用以下Markdown模板以标题开头。 ## Language Name, N bytes N您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数来保持标题。例如: ## Ruby, <s>104</s> <s>101</s> 96 bytes 如果要在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字: ## Perl, 43 + 2 (-p flag) = 45 bytes 您还可以将语言名称设置为链接,然后该链接将显示在代码段中: ## [><>](http://esolangs.org/wiki/Fish), 121 bytes 显示代码段 <style>body { text-align: left …
41 code-golf  string 

7
计算Quipu:新世界的十大基础
Quipus是一种古老的装置,在前哥伦布时期被印加人用来在绳子上以10为底的打结位置系统中记录数字,其工作方式如下: 每个结簇都是一个数字,并且有三种主要类型的结:简单的过头结;“长结”,由一个或多个附加转弯的手结组成;和八字形结。 沿线的位置显示10的幂,并且此位置在连续的线束之间对齐。 10个或更高功率的位置上的数字由简单结簇表示(例如,在“十”位位置,连续40个结是四个简单结)。 处于“一个”位置的数字由长结表示(例如,4是四圈结)。由于打结的方式不同,无法以这种方式显示数字1,而在此位置用八字形数字表示。 零表示在适当位置没有结。 细节 对于这个挑战,Quipu的每个链都代表一个数字(不过,如Wikipedia文章所述,您可以在一个链上代表多个数字,在这个挑战中,我们不能)。 结 每个结将由单个ASCII字符表示。 . 代表一个简单的结 : 代表一个长结的转一圈 8 代表八字形结 | 表示数字之间没有结以及定界符。 构建Quipus 遵循以下规则构造Quipu。 股线以位置降序从上到下排列(例如,单位数字将位于股线的底端)。链上的数字由字符(|)分隔。 数字代表的10的幂由它在链上的位置决定,其方式与使用数字系统中的数字索引来计算数字的10的幂相同。也就是说,24a 2处于十位,a 4处于单位位,将由两个结表示,一个定界符(|),然后是四个结。 处于相同位置的数字朝着链的底部对齐。如果某个位置的一位数字的结数少于同一位置上其他数字的其他数位,则这些结点的不存在用(|)表示。 连续的简单结(.)代表其位置的值。 每个数字至少由1个字符表示。当quipu中所有数字的数字值均为0时,表示不存在结(|)。 单位所处地方特殊对待。单位位置的一个由八字形结(8)表示。单位位置中的两个或多个值由连续的长节(:)表示。 当Quipo中所有数字的单位数字均为0时,不打印结点,但保留十位数的结尾定界符。 单位数字后没有定界符。 规则 输入将包含可通过任何默认输入方法接收的非负整数的非空列表。您可以假设这些整数均小于或等于2147483647或2^31-1。尽管测试用例是用空格分隔的,但是您的输入格式可以以任何方便您的语言的方式来分隔输入,无论是逗号分隔,换行分隔,数组分隔等等。 输出由根据上述规则构造的单个Quipu组成。可以通过任何默认输出方法给出输出。 您的代码应该是程序或函数,尽管它不必是命名函数。 打结需要花费一些时间,以节省时间,使您的代码越短越好。 与往常一样,如果问题仍然不清楚,请告诉我。祝你好运,打高尔夫球! 例子 输入: 5 3 1 0 输出: :||| :||| ::|| ::|| ::8| 输入: 50 …
41 code-golf  number 

30
掩盖列表中的零
受到这个SO问题的启发 作为输入,您将得到一个非空的整数列表,其中第一个值保证为非零。要构造输出,请从列表的开头开始,沿途输出每个非零值。当您遇到零时,请重复最近添加到输出中的值。 您可以编写程序或函数,并让输入/输出采用任何方便的格式,只要仍为整数的有序序列,该格式就不会编码额外的信息。如果从程序输出,则可以打印尾随换行符。除了该尾随的换行符之外,您的输出应为提交的可接受输入。 以字节为单位的最短代码获胜。 测试用例 [1, 0, 2, 0, 7, 7, 7, 0, 5, 0, 0, 0, 9] -> [1, 1, 2, 2, 7, 7, 7, 7, 5, 5, 5, 5, 9] [1, 0, 0, 0, 0, 0] -> [1, 1, 1, 1, 1, 1] [-1, 0, 5, 0, 0, …

4
枚举有效的Brainf ** k程序
Golunar / 一元是编码的所有有效的方式Brainfuck程序,但它不是一个枚举,因为最自然的号码不对应于一个有效的程序。 出于此挑战的目的,假设使用了无限的双倍磁带且没有任何注释,即Brainfuck程序在且仅当其仅由字符组成<>+-.,[]并且所有左括号和右括号都匹配时才有效。 例如,空的程序,,[+][-].,[>+<[--].]并且+[+[+][+[+]+]+]+.是有效的Brainfuck方案,同时][,并a[]没有。 任务 写接受的有效Brainfuck程序作为输入并返回的自然数(程序或函数1,2,3,...),有以下限制: 对于所有有效的Brainfuck程序,生成的输出必须不同。 对于每个自然数n,必须有一个有效的Brainfuck程序,当该程序作为输入提供时,会生成输出n。 附加规则 对于100个字节或更少字节的Brainfuck程序,您的程序或函数必须在一分钟内完成。 这意味着在匹配输入之前,您不能迭代所有有效的Brainfuck程序。 适用标准代码高尔夫球规则。

30
输入uniqchars!
给定一个包含可打印ASCII字符的字符串,请按原始顺序产生一个包含其唯一字符的输出。换句话说,输出与输入相同,不同之处在于如果以前出现过char,则将其删除。 不能使用用于在数组中查找唯一元素的内置unique函数(例如,MATLAB具有执行此操作的功能)。这个想法是手动完成的。 更多详情: 允许使用功能或程序。 输入和输出可以采用函数参数,stdin / stdout(甚至对于函数)的形式,也可以混合使用。 如果使用stdin或stdout,则将字符串理解为chars序列。如果使用函数自变量,则可能需要将字符序列括在引号或等效符号中,以供选择的编程语言定义字符串。 输出应该是仅包含输入的唯一字符的字符串。因此,没有多余的换行符,空格等。唯一的例外是:如果输出在stdout中显示,则大多数显示函数都会添加尾随\n(将字符串与接下来的内容分开)。因此在stdout中可以接受一个尾随\n。 如果可能,请发布一个指向在线解释器/编译器的链接,以便其他人可以尝试您的代码。 这是代码高尔夫,因此以字节为单位的最短代码获胜。 假设stdin和stdout的一些示例: 输入字符串: Type unique chars! 输出字符串: Type uniqchars! 输入字串 "I think it's dark and it looks like rain", you said 输出字符串 "I think'sdarloe,yu 输入字串 3.1415926535897932384626433832795 输出字符串 3.14592687
41 code-golf  string 

1
给一张桌子,放在椅子上
挑战 将为您提供一个表,以ASCII |和绘制_。您的任务是在椅子周围摆放椅子。 例 输入: ____ | | | | | | | | |____| 输出: _^_^_ < > | | < > | | <_ _ _> v v 那些椅子是用<>和制成的v^。 另一个例子: 生产线中必须有尽可能多的椅子。 _____ | |_____ | | | | | | | _____| |_____| _^_^_ < |_^_^_ | > …
41 code-golf 

16
String.prototype.isRepeated
更新:isaacg的Pyth提交是赢家! 你们中的许多人一定听说过,城镇中有一个比较凉爽的JavaScript版本(阅读ES6),该版本中的方法String.prototype.repeat可以使您 "Hello, World!".repeat(3) 并得到 "Hello, World!Hello, World!Hello, World!" 作为输出。 您的工作是用您选择的语言编写一个函数或程序,以检测字符串是否经过了这种转换。 即,输入字符串可以表示为n较小字符串的精确重复次数。如果字符串可以是,则输出(作为函数的return语句或STDOUT)应为true;如果字符串不能表示为较小字符串的重复,则输出为false。 一些样本输入: "asdfasdfasdf" // true "asdfasdfa" // false "ĴĴĴĴĴĴĴĴĴ" // true "ĴĴĴ123ĴĴĴ123" // true "abcdefgh" // false 请注意,最后一个输入为false,因此n应大于1 完整规则 编写任何语言的函数/程序以输入(通过函数参数/命令行args / STDIN)字符串 如果给定的字符串是由较小的字符串的精确重复形成的,则返回/打印真实值,至少重复两次。 理想情况下,输入字符串的最大大小为Infinity 字符串可以具有所有可能的ASCII字符 这是一个代码高尔夫球,因此以字符为单位的最小代码获胜。
41 code-golf  string 

30
是a年吗?
这个挑战很简单。您将输入从1801到2400的年份,如果不是output年则输出。 您的输入将没有换行符或尾随空格: 1954 您将以自己喜欢的任何方式输出,以清楚地告诉用户是否是a年(我将接受y或n作为是/否)。 您可以在此处获得of年列表:http : //kalender-365.de/leap-years.php 我要指出的是leap年并非总是4年。1896年是a年,但1900年不是a年。此“跳过”之后的年份是: 1900 2100 2200 2300 测试用例: 1936 -> y 1805 -> n 1900 -> n 2272 -> y 2400 -> y 编辑:这是基于标准的格里高利历:http : //www.epochconverter.com/date-and-time/daynumbers-by-year.php

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.