编程拼图和代码高尔夫

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

9
取所有子集乘积的最快算法
给定n数组中的数字(不能假设它们是整数),我想计算size的所有子集的乘积n-1。 您可以通过将所有数字相乘然后依次除以一个数字(只要这些数字都不为零)来实现。但是,您可以多快完成一次不分割的操作? 如果您不允许除法,那么计算大小为n-1的所有子集的乘积所需的最小算术运算数(例如乘法和加法)是多少? 显然,您可以(n-1)*n乘以乘法。 要澄清的是,输出是n不同的乘积,除了对内存的读写操作外,唯一的操作是乘法,加法和减法。 例 如果输入有三个数字2,3,5,则输出为三个数字15 = 3*5,10 = 2*5和6 = 2*3。 获奖标准 答案应给出其代码将使用的算术运算次数的精确公式n。为了简化生活,我将插入n = 1000您的公式来判断其得分。越低越好。 如果很难为您的代码生成精确的公式,则可以对其运行n = 1000并计算代码中的算术运算。但是,最好使用一个精确的公式。 您应该将自己的分数添加n=1000到答案中以便于比较。

16
在框中绘制ASCII框
问题 给定输入 a,b,c a,b,c正整数在哪里 和 a > b > c 用尺寸允许的任何字符组成一个盒子 a x a 将具有不同允许字符的框居中,且尺寸b x b在上一个框内 将另一个不同允许字符的框居中,其尺寸c x c在上一个框内 允许的字符为ASCII字符 [a-zA-z0-9!@#$%^&*()+,./<>?:";=_-+] 输入项 a=6, b=4, c=2 ###### #****# #*@@*# #*@@*# #****# ###### 输入项 a=8, b=6, c=2 ######## #******# #******# #**@@**# #**@@**# #******# #******# ######## 输入项 a=12, b=6, c=2 ############ ############ …

17
它与数字模式匹配吗?
最近,我进行了一次数学测试,并注意到测试中的某个数字与一个有趣的模式匹配。数字(28384)与看起来像这样的通用数字序列匹配 (n)(x)(n+1)(x)(n+2)(x)(n+3) etc... 其中n和x是一位数字整数。该序列可与开始x或n并用端任一x或n+y。 给定一个多位数的正整数,您的任务将根据输入是否匹配模式输出真值或假值。输入的长度在4到18位之间。您可以将输入作为整数的字符串表示形式。输入将不会以0开头,而可以包含或以0结尾。 n+y 将始终是一个数字(因此长度限制为18)。 测试用例 这些应该输出真实值 182838485868788898 4344 85868 12223242526 这些应该是假的 12345 6724013635 36842478324836 1222232425 5859510511 与所有代码高尔夫球一样,最短的代码获胜!祝您好运,万事如意!

30
龙曲线序列
所述龙曲线序列(或常规纸张折叠序列)是一个二进制序列。 a(n)通过对的最低有效1的左位求反得到n。例如要进行计算,a(2136)我们首先将其转换为二进制: 100001011000 我们发现我们的最低有效位 100001011000 ^ 左移一点 100001011000 ^ 并返回其否定 0 任务 给定一个正整数作为输入,输出a(n)。(您可以按整数或布尔值输出)。您应该努力使代码尽可能地小(以字节为单位)。 测试用例 这是顺序的前100个条目 1 1 0 1 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 0 1 1 0 0 1 0 0 1 1 1 0 …

10
雨滴落在我的……眼镜上?
我住在英国,那里下雨。很多。不幸的是,我也有必要戴眼镜看,这意味着当下雨时(现在),我几乎看不到它们。这项挑战使您所有人都可以体验到相同! 任务 输出ASCII艺术眼镜,每秒加一滴水。 输入项 没有 输出量 一副眼镜与水滴的在他们的。 眼镜 ________________________ | /__\ | | / \ | | / \ | \_______/ \_______/ 雨滴 雨滴用表示.。眼镜的镜片上随机放置一个雨滴。因此,当放置雨滴时,眼镜可能看起来像这样 ________________________ | /__\ | | . / \ | | / \ | \_______/ \_______/ 如果将其放在空白处(),则会.在图像上放置一个。如果将其放置在已经有雨滴的正方形上,则该水滴会逐渐消失。 滴的步骤是 没有放置水滴: 1滴放置: . 放置2滴: o 放置3滴: O 放置了4滴以上: @ …

30
分割字符串
挑战 给定一个字符串和一个数字,将字符串分成许多相等大小的部分。例如,如果数字为3,则无论字符串有多长,都应将其分为3个部分。 如果字符串的长度未均匀地除以所提供的数字,则应四舍五入每一小节的大小并返回“剩余”字符串。例如,如果输入字符串的长度为13,数字为4,则应返回四个大小均为3的字符串,再加上大小为1的其余字符串。 如果没有余数,您可能根本不返回一个或返回空字符串。 所提供的数字保证小于或等于字符串的长度。例如,"PPCG", 7将不会出现输入,因为"PPCG"无法将其分为7个字符串。(我想正确的结果将是(["", "", "", "", "", "", ""], "PPCG")。将其简单地禁止作为输入会更容易。) 像往常一样,I / O是灵活的。您可以返回一对字符串和余数字符串,或者返回一个以余数结尾的字符串列表。 测试用例 "Hello, world!", 4 -> (["Hel", "lo,", " wo", "rld"], "!") ("!" is the remainder) "Hello, world!", 5 -> (["He", "ll", "o,", " w", "or"], "ld!") "ABCDEFGH", 2 -> (["ABCD", "EFGH"], "") (no remainder; …
23 code-golf  string 

13
创建增长最快的函数(不到100个字节)
您的工作是创建增长最快的函数,最多不超过100个字节。 您的程序将以非负整数作为输入,并输出非负整数。让我们将程序称为P。 它必须满足以下两个条件: 其源代码必须小于或等于100个字节。 对于每个K,都有一个N,使得对于每个n> = N,P(n)>K。换句话说,lim (n->∞) P(n)=∞。(这就是“增长”的意思。) 您的“分数”是程序的基础功能的增长率。 更具体地,如果对于所有n> = N,存在一个N,使得P(n)<= Q(n),并且至少一个n> = N,使得P(n )<Q(n)。如果两个程序都不比另一个程序好,那就将它们捆绑在一起。(基本上,哪个程序较慢是基于lim (n->∞) P(n)-Q(n)的值。) 根据上一段中的定义,最慢的增长函数被定义为比其他任何函数增长慢的函数。 这是增长率的目标,因此增长最快的程序将获胜! 笔记: 为了帮助评分,请尝试将程序计算的功能放在答案中。 还放置一些(理论上的)输入和输出,以帮助人们了解您可以走多慢。

6
追加还是追加?要看
明天将迎来一岁高龄!为了纪念它的生日,我们举办了一个PPCG风格的生日聚会,几个用户在其中发布与大脑flak相关的问题!帮助我们庆祝!:) Brain-flak是我写的一种深奥的语言,其中所有命令都是方括号,并且所有方括号必须完全匹配。借用我自己的定义: 出于此挑战的目的,“括号”是以下任意字符:()[]{}<>。 如果左括号和右括号的顺序正确且其中没有字符,则将一对括号视为“匹配” () []{} 或者,如果其中的每个子元素也都匹配。 [()()()()] {<[]>} (()()) 子元素也可以嵌套在几层深处。 [(){<><>[()]}<>()] <[{((()))}]> 仅在以下情况下,字符串才被视为“完全匹配”: 每个字符都是一个括号, 每对支架都有正确的打开和关闭支架,并且顺序正确 为了庆祝flask的第一个生日,今天的挑战是要采取一组不平衡的括号,并确定要使其成为有效flask所需的操作类型。 例如,((不是有效的脑筋代码,但是如果我们附加))它,它将变为(()),它是完全平衡的,因此是有效的脑筋。这使得此输入可追加。 同样,>}无效,但是我们可以{<在make之前添加{<>},这是有效的。这使该输入成为可前置的。 一些输入稍微复杂一些。例如,)][({不能仅通过追加或前置来使之有效。但是可以通过在前面[(和后面添加来使它有效})]。因此,这种投入既是prependable和追加。 最后,通过附加或前置的任何组合都不能使某些输入成为有效的大脑标志。例如,(>永远不能使之有效。(正在<创建<(>,并且正在)创建(>),这两个都无效)因此,此输入既不可添加也不可添加。 对于当今的挑战,您必须编写一个程序或函数,该程序或函数带有方括号,并确定该字符串是否为 appendable prependable both neither 您可以选择用于每种情况的值。例如,输出1, 2, 3, 4,或'a', 'p', 'b', 'n',或1, 'foo', 3.1415, -17,等等。只要每个输出都是不同且一致的,就可以了。你必须但是,明确指定哪种输出对应于哪种情况。 您可以以最方便的格式返回此值(例如,从函数返回,打印到STDOUT,修改参数,写入文件等)。 您可以假设输入永远不会是有效的大脑或空的。 例子 以下所有输入都是可添加的: )) (((()()())))} )>}] ()[]{}<>) 这些都是可附加的: (({}{}) (((( ([]()())( {<<{ 这些都是两个: …

18
打印一张随机播放的纸牌
输入项 没有 输出量 52张牌。无重复。卡用其Unicode字符表示,例如🂹。 该Unicode代码点遵循以下格式: 前三位数字是1F0。 下一个数字是A,B,C,或D分别为黑桃,红桃,方块,和俱乐部。 下一个数字是1通过C与E用于各种数字/花牌。1是王牌2- A是数字牌,和B,D和E分别是千斤顶,王后和国王。(C是骑士,不是大多数甲板上的骑士。) 输出示例: 🂶🃁🃛🃎🂧🂵🃗🂦🂽🂹🂣🃊🃚🂲🂡🂥🂷🃄🃃🃞🂺🂭🃑🃙🂪🃖🂳🃘🃒🂻🃆🂮🃍🂱🂴🃋🂸🃈🃅🃂🂨🃓🃉🂾🃇🂩🂢🂫🃔🃕 🂤🃝 规则: 这是代码高尔夫球。最短答案胜出。 禁止漏洞。 您的卡组实际上必须是随机的。如果运行20次,则必须生成20个随机(并且很可能是唯一的)输出。 注意 如果仅看到方框,请安装DejaVu字体。

15
查找一个数字可以组成多少个字母数字字符
字母数字字符具有ASCII值: 0-9 -> 48-57 A-Z -> 65-90 a-z -> 97-122 您面临的挑战是采用整数作为输入,并输出使用该数字的连续数字可以输入多少个字符。字符代码可能重叠。666应该有2,因为您有66两次。 测试用例: Input: 5698 Possible characters: '8' (56), 'E' (69), 'b' (98) Output: 3 Input: 564693 Possible characters: '8' (56), 'E' (69) Output: 2 Input: 530923864209124521 Possible characters: '5' (53), 'V' (86), '4' (52) Output: 3 Input: 1111111 Possible characters: …
23 code-golf  string 

16
每日随机高尔夫#8:随机播放无数人
关于系列 首先,您可以像对待其他任何代码高尔夫挑战赛一样对待它,并回答它而不必担心系列赛。但是,在所有挑战中都有排行榜。您可以在第一篇文章中找到排行榜以及有关该系列的更多信息。 漏洞8:随机播放一个无限列表 您应该编写一个函数或程序,该函数或程序将一个无限列表作为输入并返回该列表的改组版本。 关于无限I / O 您可以通过多种方法来输入和产生此挑战的输出: 您可以采用正整数列表或其字符串表示形式,也可以采用字符串或可打印ASCII字符列表(0x20至0x7E,包括0x20至0x7E)。输出格式必须与输入格式匹配。从现在开始,无论您选择哪个选项,我都将数据称为“列表”。 您可以从无限标准输入流中读取列表,并将输出连续写入无限标准输出流中。解决方案不应依赖任何特定值或值序列来确保输出流被定期写入和刷新(例如5,输入列表中只有a时,您不能仅写入输出)。当然,如果您读取列表的字符串表示形式,则可以等到遇到列表分隔符后再试。 在支持它们的语言中,您可以编写一个函数,该函数接受并返回一个惰性无限列表或字​​符串。 在支持它们的语言中,您可以实现一个无限生成器,该生成器将另一个生成器作为输入。 另外,您可以编写一个不带参数的函数,并在每次调用时返回一个输出值。在这种情况下,可以假定已定义一个不带任何参数的函数,并且每次调用时都返回下一个输入值。您可以自由选择该函数的名称。 您可能会假设您的程序可以永远运行并且可以使用无限内存。(可以通过有限的内存来解决此问题,但这意味着您可以泄漏内存。) 关于随机性 对于在无穷大输入的位置i上读取的任何值v,它必须有一个正概率使其最终在无穷大输出的位置i-9到i + 9中(除非该位置为负) )。对于不同的输出位置甚至不同的输入位置,这些概率不必相同。如果您的解决方案还可以将值改组到更远的其他位置,那就很好。 因此,您的解决方案不必将第一个值拖曳到列表后面很远的地方,也不需要将最后一个值拖曳到第一个位置,尽管这样做可以,只要所有位置都离列表9步即可。输入是可能的。 例如,如果您将以下字符串用作输入,则___表示X必须能够在输出中结束的所有位置: ___________________ abcdefghijklmnopqrstuvwxyzXabcdefghijklmnopqrstuvwxyz... 如果您的语言缺少内置的随机数生成器,或者您不想使用它,则可以使用其他种子值作为输入,并使用种子实现自己适合的RNG。此页面可能对此有所帮助。 无论您的解决方案使用哪种实际分布,它都必须几乎肯定在有限(但任意)的时间后产生下一个值。 请简要说明您的实现如何满足这些要求。 计分 这是代码高尔夫球,因此以字节为单位的最短有效答案为准。 排行榜 该系列的第一篇文章将产生一个排行榜。 为确保您的答案显示出来,请使用以下Markdown模板以标题开头每个答案: # Language Name, N bytes N您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数来保持标题。例如: # Ruby, <s>104</s> <s>101</s> 96 bytes (目前未显示该语言,但是该代码段确实需要并对其进行解析,并且将来我可能会添加一个语言排行榜。)

2
使用“子向量反转”优化排序
这是最小操作挑战,其目标是使用最少的反转将向量排序为升序。您的算法只能使用“子向量反转” 1对向量进行排序,但是它可以将其他运算用于算术运算,循环,检查其是否已排序等。算法执行的子向量反转的次数是其得分。 1个“子向量反转”: 在向量中选择一个数字范围,然后反转该范围内的元素。 举一个简单的例子,如果从vector开始{4,3,2,1},则可以用许多不同的方式对其进行排序: 反转整个向量。显然,这是最短的方法,因为它只需要一次逆转即可:{4,3,2,1} -> {1,2,3,4} 您可以执行冒泡排序的一个版本,该过程需要6个冲销: {4,3,2,1} -> {3,4,2,1} -> {3,2,4,1} -> {2,3,4,1} -> {2,3,1,4} -> {2,1,3,4} -> {1,2,3,4} 您可以从前三个元素开始,然后是最后三个元素,最后是两个第一个和最后两个,这需要进行4次交换: {4,3,2,1} -> {2,3,4,1} -> {2,1,4,3} -> {1,2,4,3} -> {1,2,3,4} ... 等等。有无数的可用选项(您可以根据需要重复执行任何操作)。 规则和要求: 对于包含100个数字的列表,您的代码必须在不到一分钟的时间内完成。您可以自己安排时间,但是请公平地玩2。 您必须存储所执行的所有交换的开始索引和结束索引,以便可以验证解决方案。(我将在下面解释这是什么意思)。 该代码必须是确定性的。 您可以根据需要使用任何格式的输入:数字矢量,链表,带长度的数组...任何您喜欢的格式。 您可以对向量的副本执行任何您喜欢的操作。这包括尝试不同的冲销并检查哪个效率最高。蛮力强行完全可以,但是要遵守时间限制。 分数是5个测试向量的翻转总数。抢七局将加盖日期戳。 例: 4 1 23 21 49 2 7 9 …

3
龙的形象
我看到一个由正方形制成的双龙曲线的酷图,不知道如果我们从另一个基本图像开始会发生什么。所以我写了一个程序来做到这一点。 太酷了,我以为作为挑战来做会很有趣。 任务 您将拍摄一个正方形图像,其边缘长度为2的幂(大于4)。 要制作此图像,您应先将图像分成4个相等大小的垂直带,然后将相邻的带沿相反方向移动为图像大小的八分之一(移动的带应环绕到另一侧)。然后,您应该在每次将图像分为两倍的分割并向上一次移动一半时重复此过程。每次迭代都应在垂直和水平移位之间交替。您应该进行迭代,直到移位要求您移位完成的点数像素(始终为1/2)。 从左向左垂直移动奇数编号的带(零索引)时,应向下移动,而偶数向上移动。水平移动时,从顶部起奇数编号的频段应向左移动,而偶数编号的频段应向右移动。 您只需要输出/显示转换的最终结果,而不是像gif所示的所有中间步骤。 这是代码高尔夫球,因此目标是最小化以字节为单位的源代码长度。 通过示例工作 我将逐帧浏览页面顶部显示的cat gif。 这是起始图像: 该图像为512 x 512像素。我们将其分为4个频段,以将每个频段垂直移动和移动1/8图像尺寸(64像素)。 现在,我们将其分为两倍的频段(8个频段),并将其移动到上次的一半(32像素)。这次我们将水平移动。 现在,我们这次再次垂直移动,分为16个波段,每个波段移动16个像素。 32波段8像素水平移动 64波段4像素,垂直移位。 128个波段,2个像素,水平移动。 256个波段,1个像素,垂直移位。 由于下一个移位将要求我们将每个波段移动半个像素,因此我们将在此处停止并输出结果。 测试用例 我有一个可以制作这些图像的工作脚本,所以我想我会让你们选择测试用例的图像。因此,如果您有一个平方的图像是2的幂次方,那么您希望看到它变成龙形。随时将其发送给我,我将其作为测试用例。 您还应该在纯白色或纯黑色图像上进行测试,以便确定像素是否消失。

10
自然日志上的蚂蚁
这是一个很好的初学者挑战,也是一个很好的时间杀手。 我只说了-自然-对数,因为标题太短了,这与对数无关。 给定2个变量: 蚂蚁数量n。 日志的宽度w。 输出日志宽度w与n蚁(实施例示出w=3,n=6) | | | \O/ \O/ \O/ | | -O- -O- -O- | | /o\ /o\ /o\ | | ^ ^ ^ | | | | \O/ \O/ \O/ | | -O- -O- -O- | | /o\ /o\ /o\ | | ^ ^ ^ | …

23
获取小数!
任务: 当给出三个输入时,您的任务是: 分子 n 分母 d 另一个整数 x 创建一个程序/函数,以找到x小数点后第一个数字。 眼镜: 的范围n和d之间1和2^31 - 1,包括端值。 的范围x介于1和之间10,000,000,包括在内。 您可以选择使用基于1的索引或基于0的索引x。请在回答中说明您使用的是哪个。 n可能大于d。 n,d并x保证是正整数(为基于1的索引版本x,如果您选择使用基于0的索引功能x则x可以0)。 您可以采用任何合理的方式(即非标准漏洞的任何方式)进行输入。 规则: 您必须返回精确的xth位数,而不是四舍五入-因此,例如的15th位数1/6不是7,而是6。 x除非您的语言不支持小数到1000万位,否则您的程序必须能满足1000万以下的所有要求。 I / O示例: 示例输入使用基于0的索引,这意味着x将从0到9,999,999。不仅如此,“输入”还被编写为字符串,并用空格分隔数字。 1 2 3: 0 5 6 0: 8 5 6 1: 3 1 6 15: 6 (not 7, as it's not rounded) 1 11 2: …
23 code-golf  math 

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.