编程拼图和代码高尔夫

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

1
玩一个完美的2048游戏
您的工作是模拟一个数学上完美的2048游戏。其想法是找到2048游戏可以进行的理论上限,并找到达到该水平的方法。 要了解其外观,请尝试使用此2x2克隆并尝试获得68分。如果这样做,最终将得到2、4、8和16磁贴。超越这一点是不可能的。 就像此clone一样,您可以轻松选择任务,因为它们可以选择生成瓦片的位置及其值。 您必须编写一个程序或函数,接受2048板作为输入,并输出带有生成的图块的图板和折叠图块后的图板。例如: Input: ------- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8 Output: ------- 0 0 0 0 0 0 0 0 0 0 0 0 0 4 8 8 0 0 0 0 0 0 0 0 0 0 …

3
打高尔夫球的数字大于装载机的数字
作为输出量超过Graham数和Golf数大于TREE(3)的最短终止程序的后续程序,我提出了一个新的挑战。 装入程序的数量非常大,很难解释(因为它本身是具有灵活目标的代码高尔夫练习的结果)。有一个定义和解释在这里,但自我封闭的目的,我将试图在这个帖子后面解释它。 Ralph Loader所使用的算法可产生有史以来最多的(可计算的)算法之一!实际上,Loader的号码是Googology Wiki上最大的“可计算”号码。(“可计算”数字是指根据计算定义的数字。)这意味着,如果答案以有趣的方式生成的数字大于Loader的数字(即不只是Loader的数字+1),您可以在谷歌历史!话虽如此,产生类似Loader的number + 1之类的程序绝对是这个问题的有效答案和竞争者。只是不要期望任何名气。 您的工作是创建一个终止程序,该程序产生的数字大于 Loader的数字。这是代码高尔夫球,所以最短的程序会获胜! 您不允许输入。 您的程序最终必须确定性终止,但是您可以假定计算机具有无限的内存。 您可能会假设您的语言的数字类型可以包含任何有限值,但是需要解释一下它在您的语言中的确切工作方式(例如:浮点数具有无限精度吗?) 不允许将无穷大作为输出。 数字类型的下溢引发异常。它不会环绕。 您需要提供一个解释,说明为什么您的电话号码如此之大以及代码的版本不正确,以检查您的解决方案是否有效(因为没有计算机具有足够的内存来存储Loader的电话号码)。 因此,这里是装载机编号的说明。有关更精确的详细信息,请参见http://googology.wikia.com/wiki/Loader%27s_number及其链接。特别是,它包含一个程序,该程序可以准确地生成Loader的编号(根据定义)。 该结构的微积分本质上是一种编程语言,它的特殊性质。 首先,每个句法有效的程序都会终止。没有无限循环。这将非常有用,因为这意味着如果我们运行任意的构造程序演算,我们的程序将不会卡住。问题在于,这意味着构造的演算尚未完成图灵的计算。 其次,在非图灵完整语言中,它是最强大的语言之一。本质上,如果您可以证明图灵机在每个输入上都将停止,则可以在构造演算中模拟该功能的函数。(这并不能完成巡视,因为您无法证明正在停止的巡回机器已经停止。) 装入程序的编号本质上是用于构造演算的忙碌的海狸编号,由于所有coc程序均终止,因此可以计算该编号。 特别是,loader.c定义了一个名为的函数D。大约D(x)在所有小于的位串上进行迭代x,将它们解释为coc程序,运行语法上有效的程序,并将结果(也将是位串)连接起来。它返回此串联。 加载程序的编号为D(D(D(D(D(99)))))。 来自Googolology Wiki的更具可读性的代码副本 int r, a; P(y,x){return y- ~y<<x;} Z(x){return r = x % 2 ? 0 : 1 + Z (x / 2 );} L(x){return x/2 >> Z(x);} …

7
高斯飞往爱森斯坦
给定一个高斯整数,其中,是整数,并且是虚数单位,返回最接近的(爱荷华氏距离的wrt)爱森斯坦整数其中,是整数,。a + b 我a+bia+bi一种aabbbi = 经验(π我/ 2 )i=exp⁡(πi/2)i = \exp\left(\pi i/2\right)ķ + 升ωk+lωk+l\omegaķkk升llω = 经验(2 πi / 3 )= (− 1 + i 3–√)/ 2ω=exp⁡(2πi/3)=(−1+i3)/2\omega = \exp(2\pi i/3) = (-1+i\sqrt{3})/2 背景 很明显,每个高斯整数可以唯一地用,整数表示为。它不是那么明显,但仍然如此:任何艾森斯坦整数能唯一被写为与,整数。它们都形成复数内的 -模数,并且分别是或的第p个环原子整数。注意a + b 我a+bia+bi一种aabbbķ + 升ωk+lωk+l\omegaķkk升llZZ\mathbb{Z}p=2p=2p=23333+2i≠3+2ω3+2i≠3+2ω3+2i \neq 3+2\omega 资料来源:commons.wikimedia.org 细节 如果给定的复数具有两个或三个最接近的点,则可以返回任何一个。 复数以直角坐标(bass)给出,但不是以任何方便的格式(例如或或类似形式)给出。(1,i)(1,i)(1,i)(A,B)A+BiA+B*1j 爱森斯坦整数必须作为基数坐标返回但不是以任何方便的格式(如or 或etc)返回。(1,ω)(1,ω)(1,\omega)(K,L)K+LωK+L*1ω 例子 所有实整数显然应该再次映射到实整数。 6,14 -> …

7
查找适合一组和的数组
考虑A长度数组n。该数组仅包含正整数。例如A = (1,1,2,2)。让我们将定义f(A)为的所有非空连续子数组之和的集合A。在这种情况下f(A) = {1,2,3,4,5,6}。产生步骤f(A) 如下: 的子阵列A是(1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2)。它们各自的总和为1,1,2,2,2,3,4,4,5,6。因此,您从此列表中获得的集合是{1,2,3,4,5,6}。 任务 给定一组S以排序顺序给出的和,仅包含正整数和一个数组长度n,您的工作是输出至少一个X这样的数组f(X) = S。 例如,如果S = {1,2,3,5,6}and,n = 3则有效输出为X = (1,2,3)。 如果没有这样的数组,X您的代码应输出任何常量值。 例子 输入:n=4, S = (1, 3, 4, 5, 6, 8, 9, 10, 13),可能的输出:X = (3, 5, 1, 4) 输入:n=6, S = (2, …

10
机智的程序
目的 您将要编写一个程序,该程序接收一个整数n作为输入(从命令行),并将其自身(该程序)n目录嵌入目录树下。范例n=5: 文件夹名称可以是您想要的任何名称。唯一的要求是深度正确,然后可以从目录树中的新位置再次运行该程序,并且新的源文件保留相同的文件名。 奖金: 得分* 0.9如果目录都具有不同的名称(至少对深度1000万为真) 得分* 0.5如果您不直接或间接读取或移动源文件,或访问程序的源代码

8
除数除数
nnn(k1,k2,...,km)(k1,k2,...,km)(k_1,k_2,...,k_m)ki⩾2ki⩾2k_i \geqslant 2这样和 这里手段是一个多,说: “一个整除b”。如果所有条目必须至少为。对于k1⋅k2⋅...⋅km=nk1⋅k2⋅...⋅km=nk_1 \cdot k_2 \cdot ... \cdot k_m = nk1|k2 , k2|k3 , … , km−1|km.k1|k2 , k2|k3 , … , km−1|km.k_1 | k_2 \text{ , } k_2 | k_3 \text{ , } \ldots \text{ , }k_{m-1}|k_m.a|ba|ba|bbbbaaan>1n>1n>1kikik_i222n=1n=1n=1 我们没有这样的因素,因此我们得到一个空的元组。 如果您想知道这是从哪里来的:这种分解在数论中被称为不变因子分解,它被用于有限生成的Abelian组的分类中。 挑战 鉴于nnn输出所有这样的元组(k1个,ķ2,。。。,ķ米)(ķ1个,ķ2,。。。,ķ米)(k_1,k_2,...,k_m)对于给定的ññn正好一次,在任何命令你等。允许使用标准序列输出格式。 例子 1: () (empty tuple) 2: …

25
特克斯报价(UVa 272)
给定一个字符串,将所有左双引号替换为两个反引号,并将所有右双引号替换为两个单引号。 左引号表示以引号开头的引号。右引号表示以引号结尾的引号。报价不能嵌套。您可能会假设字符串中双引号的数量为偶数。 例子 输入: "To be or not to be," quoth the Bard, "that is the question". The programming contestant replied: "I must disagree. To `C' or not to `C', that is The Question!" 输出: ``To be or not to be,'' quoth the Bard, ``that is the question''. The programming …
17 code-golf 

6
做一些Prime Square!
什么是总理广场? 素数平方是所有四个边都是不同素数的平方。 但是哪个呢? 我们如何构造它们? 这是4x4 Prime Square的示例 1009 0 0 3 0 1021 首先,我们从左上角开始。我们正在顺时针工作。 我们选择4数字为1009的最小素数。 然后,我们需要具有4数字的最小素数,该素数以开头9。这是9001 第三个(4位数字)素数必须1以最后一位数字(因为9001以结尾1) ,并且必须是具有此属性的最小的4位素数,此属性以前没有用作edge。 这个素数是1021 第四个质数必须具备4数字,开始了1(因为1009点开始有1),并结束了1(因为1021点开始有1) 与此属性的最小的4位质数尚未为边缘之前使用的是1031 你的任务 您将获得一个整数n,3 to 100 该整数将是该n x n正方形的尺寸。 然后,您必须按照以下测试用例的形式准确输出该正方形 测试用例 n=3 Output 101 3 0 113 n=5 Output 10007 0 0 0 0 9 0 10061 n=7 Output 1000003 0 …

17
那不是我的X,它的Y也太Z
这项挑战的灵感来自Fiona Watt和Rachel Wells的一系列幼儿读物,最近我和女儿一起很喜欢。 在每本书中,鼠标(插图,但不是本书的一部分)都抱怨说,连续出现的5种相同类型的事物不是其事物。然后,它通过声明事物的某些组成部分不具有其期望的属性来对此进行支持。 在第六次询问时,鼠标找到了它的东西并感到高兴,因为它具有预期的属性。 这是一个典型示例的文本: That's not my bunny, its tail is too fluffy. That's not my bunny, its paws are too rough. That's not my bunny, its tail is too woolly. That's not my bunny, its eyes are too shiny. That's not my bunny, its nose is too …
17 code-golf 

30
76序列中的首次出现
该七六人序列是可以提供给序列的名字,A087409。我在Numberphile视频中了解了此序列,可以按以下方式构造它: 首先,采用以10为底的6的倍数: 6, 12, 18, 24, 30, 36, ... 接下来,将数字连接成数字流: 61218243036... 最后,将流重新分组为对,并将每个解释为整数: 61, 21, 82, 43, 3, ... 当我们将数字成对分组时,序列中的最大数字将为99,事实证明,序列中表示了所有小于100的非负整数。这项挑战是要找到Sixers序列中数字的第一个实例的索引。 输入项 范围内的整数[0-99]。您无需考虑超出此范围的数字,并且如果给出这样的输入,您的解决方案也可以具有任何行为。 输出量 在Sixers序列中首次出现输入数字的索引。这可以是0或1的索引;请说出您正在使用的答案。 规则 引言中介绍的生成序列的过程仅用于说明目的,您可以使用任何喜欢的方法,只要结果相同即可。 您可以提交完整的程序或功能。 允许使用任何明智的输入和输出方法。 不允许出现标准漏洞。 建议使用链接来在线测试您的代码! 这是代码高尔夫球,因此每种语言的最短答案都可以胜出! 测试用例 这是所有输入和输出的列表,格式为input, 0-indexed output, 1-indexed output。 0 241 242 1 21 22 2 16 17 3 4 5 4 96 …

23
枚举排列
给定一些正整数生成对象的所有排列。nñnnñn 细节 排列是没有固定点的排列。(这意味着在每个排列编号中,i一世i都不能位于第i一世i个条目中)。 输出应包含数字(1,2,…,n)(1个,2,…,ñ)(1,2,\ldots,n)(或(0,1,2,…,n−1)(0,1个,2,…,ñ-1个)(0,1,2,\ldots,n-1))的排列。 您也可以始终打印(n,n−1,…,1)(ñ,ñ-1个,…,1个)(n,n-1,\ldots,1)(或分别(n−1,n−2,…,1,0)(ñ-1个,ñ-2,…,1个,0)(n-1,n-2,\ldots,1,0))的排列,但必须指定。 输出必须是确定性的,也就是说,每当调用某个给定nñn作为输入的程序时,输出都应该是相同的(这包括排列顺序必须保持相同),并且完整的输出必须在每次有限的时间(以概率1这样做是不够的)。 您可以假设n⩾2ñ⩾2 n \geqslant 2 对于某些给定的您可以生成所有排列,也可以选择另一个整数作为索引并打印第个排列(按您选择的顺序)。nñnkķkkķk 例子 请注意,排列顺序不必与此处列出的顺序相同: n=2: (2,1) n=3: (2,3,1),(3,1,2) n=4: (2,1,4,3),(2,3,4,1),(2,4,1,3), (3,1,4,2),(3,4,1,2),(3,4,2,1), (4,1,2,3),(4,3,1,2),(4,3,2,1) OEIS A000166记录了排列的次数。

13
星星造星
介绍 这个想法是使用星号(星号)*在指定的尺寸上显示一个ascii-art星。维度是一个大于或等于1个1个1的输入数字,用于指定星形的上点的高度。这里的星星是六颗尖的星星,从图片的角度看,它们的大小更大。 在所有情况下,恒星的ascii-art表示都应显示为两个重叠的三角形,如以下示例所示。 参数化 下图和数据表描述了星形的前七个尺寸的属性。每个参数随着ññN增加以算术级数增长,除了ñ= 1ñ=1个N=1不同。 例子 对于输入1(简并的情况),程序输出应如下所示: * ***** ***** * 输入2: * *** ********* ******* ********* *** * (3) * *** ***** *************** ************* *********** ************* *************** ***** *** * (5) * *** ***** ******* ********* *************************** ************************* *********************** ********************* ******************* ********************* *********************** ************************* *************************** ********* ******* ***** …

16
我的双胞胎有剩余的排列吗?
我们定义RnRnR_n作为欧几里得除法的余数的列表nnn由222,333,555和777。 给定的整数n≥0n≥0n\ge0,则必须找出是否存在一个整数0<k<2100<k<21000,使得Rn+kRn+kR_{n+k}是的置换R48R48R_{48}是k=210k=210k=210(导致R258=(0,0,3,6)R258=(0,0,3,6)R_{258}=(0,0,3,6)为好) 规则 如果存在kkk则可以输出真实值,否则可以输出假值,也可以选择两个不同且一致的值。 这是代码高尔夫球。 暗示 您真的需要计算kkk吗?也许。或者可能不是。 测试用例 的一些值nnn为其kkk存在: 3, 4, 5, 8, 30, 100, 200, 2019 一些值nnn针对kkk不存在: 0, 1, 2, 13, 19, 48, 210, 1999

20
我在你的子网中,打高尔夫的代码
挑战 给定点address分四进制表示形式的IPv4 subnet和CIDR表示形式的IPv4 ,请确定中是否address存在subnet。如果位于中subnet,则输出一个唯一且一致的值;如果不在中,则输出一个单独的唯一且一致的值subnet。输出值不一定需要使用您的语言为真/假。 CIDR子网符号简要入门 IPv4网络地址的长度为32位,分为四组,每组8位,以便于阅读。CIDR子网表示法是从最左边开始的指定位数的掩码。例如,对于/24子网,这意味着该子网中地址的最右边8位可用。因此,两个地址之间最多相隔一个255,并且具有相同的子网掩码,它们位于同一子网中。请注意,有效CIDR的所有主机位(右侧)均未设置(零)。 xxxxxxxx xxxxxxxx xxxxxxxx 00000000 ^--- subnet mask ---^ ^-hosts-^ 再举一个例子,/32子网指定所有位都是子网掩码,从本质上讲意味着每个子网仅允许一个主机/32。 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx ^--- subnet mask ---^ 例子: 使用True“子网”和False“未子网”的输出: 127.0.0.1 127.0.0.0/24 True 127.0.0.55 127.0.0.0/23 True 127.0.1.55 127.0.0.0/23 True 10.4.1.33 10.4.0.0/16 True 255.255.255.255 0.0.0.0/0 True 127.1.2.3 127.0.0.0/24 False 127.1.2.3 127.1.2.1/32 False 10.10.83.255 10.10.84.0/22 False …

19
新订单4:世界
简介(可以忽略) 将所有正数按其常规顺序(1、2、3,...)有点无聊,不是吗?因此,这是围绕所有正数的排列(重新排列)的一系列挑战。这是本系列的第四个挑战(链接到第一个,第二个和第三个挑战)。 在这个挑战中,我们将探讨不是一个自然数的排列,而是整个世界的排列! 2000年,克拉克·金伯林在26提出了一个问题日的问题症结Mathematicorum,由加拿大数学学会出版的数学科学杂志。问题是: Sequence a=⎧⎩⎨⎪⎪a1=1an=⌊an−12⌋ if ⌊an−12⌋∉{0,a1,...,an−1}an=3an−1 otherwiseSequence a={a1=1an=⌊an−12⌋ if ⌊an−12⌋∉{0,a1,...,an−1}an=3an−1 otherwise\text{Sequence }a = \begin{cases} a_1 = 1\\ a_n = \lfloor \frac{a_{n-1}}{2} \rfloor\text{ if }\lfloor \frac{a_{n-1}}{2} \rfloor \notin \{0, a_1, ... , a_{n-1}\}\\ a_n = 3 a_{n-1}\text{ otherwise} \end{cases} 是否每个正整数都按此顺序恰好出现一次? 2004年,Mateusz Kwasnicki在同一期刊上提供了肯定的证明; 2008年,他发表了更正式的证明(与原始问题相比),给出了更一般的证明。他用参数ppp和qqq制定了序列: ⎧⎩⎨⎪⎪a1=1an=⌊an−1q⌋ if ⌊an−1q⌋∉{0,a1,...,an−1}an=pan−1 otherwise{a1=1an=⌊an−1q⌋ if ⌊an−1q⌋∉{0,a1,...,an−1}an=pan−1 …

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.