Questions tagged «code-golf»

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

6
N个碱基中的回文数
给定一个非负整数n >= 0,请永远输出x_i >= 3以完全n不同b的底数为回文数的整数序列,底数可以是2 <= b <= x_i-2。 这基本上是OEIS A126071的反函数,在此输出中该序列中的哪些索引具有值n。有点不同,因为我更改了它,所以您忽略了碱基b = x_i-1, x_i, x_i+1,因为这些碱基的结果始终是相同的(值始终是回文率,或者始终不是)。此外,偏移量也不同。 x_i限制为数字,>= 3因此每个结果的第一项n为A037183。 请注意,输出格式是灵活的,但是应该以很好的方式分隔数字。 例子: n seq 0 3 4 6 11 19 47 53 79 103 137 139 149 163 167 ... 1 5 7 8 9 12 13 14 22 23 25 29 35 …
10 code-golf  sequence  base-conversion  palindrome  code-golf  array-manipulation  matrix  code-golf  string  ascii-art  code-golf  ascii-art  physics  code-golf  number  sequence  fibonacci  code-golf  ascii-art  packing  code-golf  string  hexadecimal  code-challenge  restricted-source  decision-problem  binary  code-golf  code-golf  code-golf  stack-exchange-api  code-golf  string  parsing  generation  data-structures  code-golf  kolmogorov-complexity  graphical-output  code-golf  array-manipulation  integer  generation  data-structures  code-golf  number  random  probability-theory  king-of-the-hill  java  minesweeper  code-golf  string  kolmogorov-complexity  animation  code-golf  string  code-golf  code-golf  quine  code-golf  internet  code-golf  arithmetic  base-conversion 

1
找到一个平衡的邻居
您的任务将是获取一个平衡的字符串和一个代表Levenshtein距离的整数(必须将其插入,删除或更改的字符数才能将一个字符串转换为另一个字符串),并且您必须找到具有该距离的平衡字符串的数量从原始字符串(即该字符串的邻域)开始。 规定 平衡的字符串将仅包含字符 ()<>[]{} 您只会被要求寻找正距离均匀的邻域 输入和输出是灵活的。只要您输入所有正确的数据并输出正确的答案,而不会出现任何漏洞,我会对您的答案感到满意。 您可以选择将所有整数输入除以2。 这是代码高尔夫球,因此目标是最小化答案中的字节数 这是受此CMC和此答案的启发 测试用例 Case | Distance | Size of Neighborhood -------------------------------------------- () | 2 | 18 ({}) | 2 | 33 (()) | 2 | 32 <> | 4 | 186 [][] | 4 | 688 <(){}> | 4 | 1379 {} | …

3
将逻辑表达式转换为合取范式
目标: 编写一个完整的程序或函数,该程序或函数接受命题逻辑中的一个公式(以下称为逻辑表达式或表达式),并以合并正规形式输出该公式。有两个常量,⊤并⊥代表真假,一元运算符¬代表否定,和二元运算⇒,⇔,∧,和∨代表暗示,对等,协同和脱节,其分别遵守所有常见的逻辑运算(德·摩根定律,双重否定消除等)。 合并范式定义如下: 任何原子表达式(包括⊤和⊥)都是合取范式。 任何先前构建的表达式的取反是合取范式。 先前构造的任何两个表达式的析取为合取范式。 任何两个先前构造的表达式的合取为合取范式。 其他任何表达式都不是合取范式。 任何逻辑表达式都可以以合取范式形式(非唯一)转换为逻辑等效表达式(请参见此算法)。您无需使用该特定算法。 输入: 您可以采用任何方便的格式输入;例如,符号逻辑表达式(如果您的语言支持),字符串,其他某种数据结构。您不需要像我在此处那样对true,false和逻辑运算符使用相同的符号,但是您的选择应保持一致,如果不清楚,则应在答案中说明您的选择。您可能不接受任何其他输入或以您的输入格式对任何其他信息进行编码。您应该有一些表达任意数量的原子表达式的方法;例如整数,字符,字符串等。 输出: 公式可以是合取范式,也可以是任何方便的格式。它的格式不必与您输入的格式相同,但是您应该解释是否存在任何差异。 测试用例: P ∧ (P ⇒ R) -> P ∧ R P ⇔ (¬ P) -> ⊥ (¬ P) ∨ (Q ⇔ (P ∧ R)) -> ((¬ P) ∨ ((¬ Q) ∨ R)) ∧ ((¬ P) ∨ (Q …
10 code-golf  math  logic 

9
事实之后的配件!
这个挑战是受数学启发的事实。编程不是。 阶乘或事实的数学符号是感叹号!。感叹号也是not许多编程语言中的常用符号。 挑战: 以包含数字和字符的字符串+ !作为输入,并输出以下内容: 感叹号前面的所有内容都应被视为数学表达式,因此2+2也应如此4。 单个感叹号之后的所有内容都应作为附件附加到其前面的内容中,因此:2+2!5应该给45,因为2+2=4,5是附件。2+2!5+5应该给410。 由于!也意味着not,事实之后不属于附件的任何东西都不应附加。因此,2+2!!5应该给4,因为5它不是附件。现在,not(not(true))==true所以2+2!!!5应该给45。2+2!!5!5+5应该给出:410,因为2+2=4,然后是阶乘和!5!5+5。第一个5不是事实,而是5+5在另一个感叹号之后,因此又是一个事实。 说明: 感叹号+在任一侧都不会相邻。 不会+以数字开头(5不是+5)。 如果这是first前面的表达式的结果,则可以选择包含前导零!。既4和04用于输入接受输出:0+0!4 内容提要:评估每个总和(!作为分隔符)。然后丢弃出现在偶数之后的所有数字!(从字符串的开头算起)。然后全部删除!。 测试用例: ! <- Empty string 5 5 12! 12 !87 87 !!5 <- Empty string 5+5!2+2 104 5+5!!2+2 10 1!2!3!4!5!6!7!8!9 12468 10+10!!2+2!!3+3!4+4 208 2!!3!5 25 2!!3!5!7 25 10!!!!!!!5 105 这是代码高尔夫球,因此以字节为单位(每种语言)的最短代码胜出!强烈建议您进行说明!
10 code-golf 

4
公开由OS线程调度程序引起的不确定性
众所周知,现代操作系统具有线程调度程序,可以根据您的代码不了解的内部逻辑来选择不同的顺序来调度线程。通常,您设计多线程代码以确保强加给您的这种不确定性不会对您的输出产生有意义的影响。 这里的目标是相反的。产生一个程序,该程序以[0,99]为间隔打印整数,但由于OS线程调度程序的原因,该顺序因运行而异。 您必须实现“足够的不确定性”,定义为: 在10个试验的10个顺序集合中,您的程序必须在每个试验中至少产生9个唯一排列。在连续成功的10个测试中,您可能会有相当数量的失败尝试。 或者,换句话说,您需要运行100次程序,其中每10次运行的程序块最多具有两次输出相同结果的运行。 因此,偶尔将98和99交换不会减少费用。 这是一个代码高尔夫球,因此使用最少字节的答案将获胜。 细节 将输出写入标准输出,每行一个条目 如果您通过让两个线程将字符写入stdout(甚至偶尔)交织字符来破坏格式(导致偶发三位数或空行的情况),则结果无效 上述规则的唯一例外是,您可以在打印最后一个所需的数字后发出一个空行(不客气) 如果错过或重复任何必需的值,则结果无效 您的程序不必在单个核心处理器上具有不确定性(尽管是赞誉的) 如果您的程序仍然可以满足挑战的其他要求,并且线程系统是您的语言或您的语言的标准库的一部分,则您的程序可能使用实际上不受OS内核管理的绿色线程/纤维。 在现代处理器上,程序的运行时间必须可靠地在5秒以内 您不必指定在程序之外发生的环境更改,例如等待或设置更改。无论程序是连续运行100次还是每次运行之间有一个小时还是并行运行100次,您的程序都应该通过(这实际上可能会有所帮助...) 您可以使用诸如GPU或Xeon Phi之类的协处理器及其自身的内部调度机制来执行任务。规则适用于此的方式与适用于绿色线程的方式相同。 只要遵守本文中指定的规则,就可以通过各种睡眠,良率和其他技巧来激发调度程序 禁止操作 允许使用不确定性的唯一来源是调度程序调度线程运行的时间。以下列表并非详尽无遗,仅是为了提供一些示例,这些示例是您接受其他不确定性来源时被禁止执行的操作。 直接或间接访问任何种类的PRNG或硬件RNG功能(除非它是调度程序的固有部分)。 读取任何类型的输入(系统时间,文件系统,网络等) 读取线程ID或进程ID 自定义操作系统调度程序;您必须使用主流操作系统中的标准操作系统调度程序 也禁止自定义绿色线程/光纤调度程序。这意味着,如果您为此挑战编写语言,则必须使用OS线程。 答案验证 最好在所有常见的OS和现代处理器上都可以找到答案,并根据支持的广度来授予荣誉。但是,这不是挑战的要求。答案至少必须支持一个现代的SMP处理器和现代的操作系统。我将在硬件可用性方面测试主要答案。 如果您的输入将不会在运行Windows 10 v1607 x64的i7 5960x上产生所需的输出,请指定所需的环境 如果可以通过VMWare Workstation轻松复制,请提供确切的OS和VM规格 如果在上述两种情况下均无法生成,请同时记录测试内容的屏幕截图,如标题部分所述,并通过鼠标和键盘的交互作用(或任何非标准计算的控制方案)对屏幕进行手持视频录制设备使用)清晰可见,并将两个视频以及您的答案一起发布,并说明其工作原理 或者,使用匹配的硬件找一个久负盛名的长期用户(不是您)来重现结果并为您提供担保 如果您的输入使用的是外来编程语言,而典型的开发人员将不会被设置为编译/编辑/解释,请提供安装说明 如果您输入的内容取决于特定版本的JVM / Python解释器/其他版本,请指定 如果要在我的测试中连续进行10次以上的连续试验需要花费超过10分钟的时间,那么您将失败(因此,不要让成功的情况异常发生,尤其是当您处于较高水平时)运行时绑定)

5
在模块化SNUSP中找到数字的最短表示形式
背景 许多深奥的编程语言都没有在文字上内置数字,因此您必须在运行时进行计算。在许多情况下,数字表示可能会很有趣。在表示欠载数字时,我们已经遇到了挑战。这个挑战是关于在模块化SNUSP中表示数字。(请注意,您不需要学习SNUSP即可完成此挑战-所需的所有信息都在规范中-但您可能会发现背景很有趣。) 任务 出于此挑战的目的,模块化SNUSP数字是由字符@,+和组成的字符串=,除了最后一个字符是#,并且倒数第二个字符必须为+或=(不能为@)。例如,有效号码包括@+#,==#,和@@+@=#; 无效号码的例子包括+=,@@#,和+?+#。 模块化SNUSP编号的值递归计算如下: # 的值为0(这是基本情况)。 如果数字具有形式=x,则对于任何字符串x,其值都等于的值x。 如果数字具有形式+x,对于任何字符串x,其值等于的值x加1。 如果数字具有形式@cx,则对于任何单个字符c和任何字符串x,其值等于的值x加上的值cx。 对于这个挑战,您必须编写一个程序,该程序将一个非负整数作为输入,并输出一个字符串,该字符串是可能的最短Modular SNUSP数字,其值等于输入。 澄清说明 完全可能存在多个具有相同值的字符串,尤其是对于某些整数,该值与最短的模块化SNUSP编号会有关系。在这种情况下,您可以输出涉及平局的任何数字。 查找数字的算法没有限制;例如,强制使用字符串并对其进行求值是一种合法策略,但这样做会更聪明以减少搜索空间。 像在PPCG上一样,您的提交可以是完整程序也可以是函数(选择使用您的语言更简洁的那个)。 这不是处理输入和输出格式的问题,因此您可以使用任何合理的方式输入非负整数并输出字符串。有上元一个完整的指南,但最常用的法律手段包括函数参数/返回,命令行参数和标准输入/标准输出。 测试用例 以下是前几个数字的最短表示形式: 0:# 1:+# 2:++# 3:+++#或@++# 4:++++#或+@++#或@=++# 5:@+++#或@@++# 6:+@+++#或+@@++#或@=+++#或@=@++#或@@=++# 7:@++++#或@+@++# 8:@@+++#或@@@++# 9:+@@+++#或+@@@++#或@+++++#或@++@++#或@+@=++#或@@=+++#或@@=@++# 10:@=@+++#或@=@@++#或@@@=++#(这是一个非常重要的测试用例,因为所有可能的答案都包括在内=) 11:@+@+++#或@+@@++#或@@++++#或@@+@++# 12:+@+@+++#或+@+@@++#或+@@++++#或+@@+@++#或@=+@+++#或@=+@@++#或@=@=+++#或@=@=@++#或@=@@=++#或@@=++++#或@@=+@++#或@@=@=++# 13:@@@+++#或@@@@++# 14:+@@@+++#或+@@@@++#或@=@++++#或@=@+@++#或@@+++++#或@@++@++#或@@+@=++# 15:@+@++++#或@+@+@++#或@@=@+++#或@@=@@++#或@@@=+++#或@@@=@++# 作为更大的试验情况下,从输入输出40应当是@@@=@@+++#,@@@=@@@++#,@@@@=@+++#,或@@@@=@@++#。 胜利条件 作为代码高尔夫球挑战,获胜者是最短的参赛作品,以字节为单位。
10 code-golf  number 

8
断弦金字塔
给定字符串n,创建一个字符串金字塔,相对于当前行,该金字塔分为几部分。 第一行包含未修改的字符串。 第二行包含被管道分成两半的字符串。 第三行将其分隔三分之二... 等等。每个子字符串的长度,其中l是字符串n的长度等于 地板(l / n) 剩下的字符将放在其自己的子字符串中。使用的最后一行是第一行,其中子字符串的长度为2。 测试用例: 输入:您好,世界。 输出: Hello, world. Hello,| world|. Hell|o, w|orld|. Hel|lo,| wo|rld|. He|ll|o,| w|or|ld|. 输入:abcdefghij 输出: abcdefghij abcde|fghij abc|def|ghi|j ab|cd|ef|gh|ij 输入:01234567890abcdef 输出: 01234567890abcdef 01234567|890abcde|f 01234|56789|0abcd|ef 0123|4567|890a|bcde|f 012|345|678|90a|bcd|ef 01|23|45|67|89|0a|bc|de|f 额外规则: 您可以编写完整的程序或函数,而使用较少的代码。 输入内容的长度至少应为4个字符。 如果您的语言支持,则必须使用换行符。如果不可能,将换行符替换为: 输入将始终是可打印的ASCII。 如果您的程序解决了P对NP,请减负100%。 排行榜: 显示代码段 var QUESTION_ID=104297,OVERRIDE_USER=62384;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function …
10 code-golf  string 

2
位置意识
位置意识 您的任务是生成一个程序,该程序针对其字符的每个排列(包括原始程序),输出每个字符相对于原始程序的位置。 如果您的程序是 Derp 你必须输出 [0, 1, 2, 3] (或一些等效)。这是因为D是在0个位置,e是在1第一,R是2Nd和p所述3次。 让我们采用另一个程序,它是原始程序,但其字符已排列: epDr 您必须输出 [1, 3, 0, 2] 因为e是在1原始程序的第一位置,p在3第三位置,D所述0th,并且r所述2第二。 如果原始程序有两个重复字符: abcda -> [0, 1, 2, 3, 4] 然后为了进行排列,数组中的0和4必须按升序排列: baadc -> [1, 0, 4, 3, 2] (0 first, then 4) 规则: 您的程序必须至少包含两个唯一字符。 最多floor(n/2)字符应相同。 aabb (acceptable) aaaabc (not acceptable, only floor(6/2) = 3 …

18
四舍五入
由于二进制浮点数的内部表示形式,某些十进制数不能精确地表示为二进制浮点数。例如:将14.225四舍五入到两位小数不会导致14.23的错误,而是导致14.22。 Python: In: round(14.225, 2) Out: 14.22 但是,假设我们将14.225的字符串表示形式为“ 14.225”,那么我们应该能够以字符串表示形式实现所需的舍入“ 14.23”。 这种方法可以推广到任意精度。 可能的Python 2/3解决方案 import sys def round_string(string, precision): assert(int(precision) >= 0) float(string) decimal_point = string.find('.') if decimal_point == -1: if precision == 0: return string return string + '.' + '0' * precision all_decimals = string[decimal_point+1:] nb_missing_decimals = precision - …

3
从单词列表中找到最短的字母
一个全字母短句是一个包含每个字母串a- z英文字母,不区分大小写的。(如果pangram包含一个字母的多个副本,或者除字母之外还包含非字母字符,则可以。) 编写一个程序或函数,其输入为字符串列表,并输出一个或多个具有以下属性的字符串: 每个输出字符串必须是一个字符集。 每个输出字符串必须通过串联输入列表中的一个或多个字符串来形成,并用空格分隔。 在具有这些属性的所有字符串中,每个输出字符串必须最短,或者最短。 许多程序将选择仅输出一个字符串;您只需要输出多个字符串,否则就不得不编写额外的代码来限制输出。 您可以假定输入中没有不可打印的字符或空格,并且输入的单词长度不超过(列表长度的自然对数的26倍)个字符。(但是,您可能不会假设输入内容只包含字母,或者仅包含小写字母;标点符号和大写字母完全可能。) 输入和输出可以任何合理的格式给出。为了测试您的程序,我建议使用两个测试用例:英语单词词典(大多数计算机都有一个),以及以下情况(不可能有完美的字母(26个字母)),因此您必须找到一个包含重复的字母): abcdefghi defghijkl ijklmnop lmnopqrs opqrstuvw rstuvwxyz 您应随程序一起提供程序输出的样本。(由于使用了不同的单词列表,这对于不同的人可能会有所不同。) 胜利条件 这是一个限制复杂度的 代码高尔夫挑战。优胜者是在多项式时间内运行的最短程序(以字节为单位)。(针对不知道这意味着什么的人的摘要:如果将单词列表的大小加倍,则程序的速度应不超过一个恒定因子。但是,有问题的恒定因子可能与您一样大例如,将它变慢4倍或8倍是有效的,但是变小它不是单词列表长度的一个因素;它变慢的因素必须加以限制。)

4
进行ASCII六边形环平铺
使用ASCII打印六边形环瓦的一部分。 这是一小部分: /\__/\ /_/ \_\ /\__/\ \__/ /\__/\ /_/ \_\/__\/_/ \_\ \ \__/ /\__/\ \__/ / \/__\/_/ \_\/__\/ /\__/\ \__/ /\__/\ /_/ \_\/__\/_/ \_\ \ \__/ /\__/\ \__/ / \/__\/_/ \_\/__\/ \ \__/ / \/__\/ 这是一个较大的部分: \ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\ \__/ /\__/\ \/__\/_/ \_\/__\/_/ \_\/__\/_/ \_\/__\/_/ \_\ …

12
将坐标与其值匹配
给定3个输入项,一个坐标对列表,一个2D字符串和一个单字符字符串,输出2D字符串的每个坐标处的字符是否等于单个字符。您可以按任何顺序输入,并且坐标可以为1索引。 您可以将2D字符串作为2D列表,线列表或2D字符串。 例: (0,0), "#_\n__", "#" -> True 字符串是 #_ __ 坐标处(0,0)(从左上角开始)的字符是#。这等于第三个输入项#,因此您输出True(或任何真实值) 例: [(0,0), (1,1)], "#_\n_#", "#" -> True 字符串是 #_ _# (0,0)和坐标处的字符(1,1)均为#,因此输出为true。 仅当每个坐标都匹配哈希时,输出才为true。但是,并非每个哈希都必须具有匹配的坐标。如果#在2D字符串中没有出现单个字符(在某些测试用例中),则输出仍然是虚假的。 您可以假设坐标将始终在2D字符串的范围内。 更多测试用例:(为了便于阅读,我将单个字符放在第二位) [(0,0), (2,1), (3,0)], # #_## #_## True [(0,0), (1,1), (3,0)], # #_## #_## False (1,1 is not a hash) [(1,1)], a #a## #a## True …

4
带有弹跳线的XY框,在Z处有一个标记
长期潜伏在这里的第一次海报。 编写一个包含3个输入的程序:X,Y和Z。 X =跨(列) Y =下降(行) Z =位置标记 然后,程序应在X上和Y上向下打印可视网格。该网格可以由“ +”以外的任何字符组成。每个“位置”都有一个索引号,从坐标1处的1开始,从1开始计数,然后一直向下直到结束。 X和Y始终至少为3,Z永远不会大于X * Y。 Z将代表该位置,并在该位置以及左,右,上和下1个字符上打印为“ +”。例如: + +++ + 最后,如果+字符将截取边缘(最上,最左,最右和/或最下边缘),则+应当沿同一轴弹回并从另一侧溢出。 示例:输入= 5、5、13 ----- --+-- -+++- --+-- ----- 输入= 10、10、10 -------+++ ---------+ ---------+ ---------- ---------- ---------- ---------- ---------- ---------- ---------- 输入= 10、10、21 ---------- +--------- +++------- +--------- ---------- ---------- ---------- ---------- ---------- ---------- …

5
那是一座奇怪的山!
灵感来自显示一连串小山,上面有个奇数!通过@sygmei。 当您可以拥有一个巨大的山脉时,为什么还要拥有一连串的山脉? 编写一个使用输入数字并打印每个奇数直到输入数字的山峰的程序。 (其中“西南”表示directly below and to the left,“东南”表示directly below and to the right) 每个数字都将在其/西南方和\东南方。它从1顶部开始,下一个数字将位于a的/西南或a的东南\。下一个数字将出现在最接近顶部和最左侧的行中。 对于多位数字,只需将第一个数字放在正确的位置即可,紧随其后的是其他数字,并且只有第一个数字应位于此位置\并/从中出来。 高达1或2的山仅是: 1 / \ 最多3或4的山仅是: 1 / \ 3 / \ 对于25或26: 1 / \ 3 5 / \ / \ 7 9 11 / \ / \ / \ 13 15 17 19 …

5
确定最佳巡航控制选项
巡航控制系统具有3个不同的选项,可移动手柄以设置要行驶的速度。 对您:增加1速度。 向上:将速度提高到10的下一个倍数(例如20-> 30、32-> 40) 向下:将速度降低到10的下一个倍数(例如20-> 10、32-> 30) 输入值 2个整数:第一个是起始速度,第二个是您想要的速度,非负值以及您喜欢的任何形式(数组,两个参数等) 任务 确定使用手柄达到所需速度的最佳方式,并以正确的顺序打印出动作。 规则 如果您可以选择拉近还是向上(例如从39到40),则可以选择其中一个,但在类似情况下,请选择任何选项 您可以使用任何3个不同的(最好是可见的)符号来区分输出中的移动(例如T,U和D)。 这些符号可以用新行,空格等分隔,但不必 以下是一些测试案例: start speed, desired speed --> output 30, 40 --> U 30, 43 --> UTTT 43, 30 --> DD 51, 39 --> DDDTTTTTTTTT 29, 30 --> T or U 29, 50 --> TUU or …

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.