编程拼图和代码高尔夫

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

3
[Br]追求Code Golf [Ba] d
考虑以下字符串: Tin Snips 该字符串在元素周期表中包含几个原子符号。我们可以重写此字符串以标识其中几个: [Ti][N] [Sn][I][P][S] 当然,我们也可以这样写: T[In] [S][Ni][P][S] 重写输入的规则如下: 输入的大小写与匹配原子符号无关紧要。 如果在原子符号中使用元素,则其大小写必须更改,以便该符号正确。例如:h将变为[H]。 所有元素符号都用ASCII方括号[和括起来]。 保留空白:Big ego无法将“ g”和“ e”合并为[Ge]。 并非所有输入字符都需要组合成一个原子符号:如果没有将输入字符放入符号中,则会按原样传递(大小写无关紧要)。 如果可以制作符号,则必须制作。换句话说,Tin在上面的示例中不允许输出,因为可以在该单词中创建至少一个符号。字符只能通过未使用的唯一时间是无法用于构造原子符号。 出于此挑战的目的,从氢(1)到Oganesson(118)的所有元素都是有效的。没有更高的元素有效。 某些高级元素的名称和符号含糊不清:出于挑战的目的,应使用Wikipedia的版本。为方便起见,此处允许的原子符号为:H,He,Li,Be,B,C,N,O,F,Ne,Na,Mg,Al,Si,P,S,Cl,Ar,K,Ca, Sc,Ti,V,Cr,Mn,Fe,Co,Ni,Cu,Zn,Ga,Ge,As,Se,Br,Kr,Rb,Sr,Y,Zr,Nb,Mo,Tc,Ru,Rh, Pd,Ag,Cd,In,Sn,Sb,Te,I,Xe,Cs,Ba,La,Ce,Pr,Nd,Pm,Sm,Eu,Gd,Tb,Dy,Ho,Er,Tm,Yb, Lu,Hf,Ta,W,Re,Os,Ir,Pt,Au,Hg,Tl,Pb,Bi,Po,At,Rn,Fr,Ra,Ac,Th,Pa,U,Np,Pu,Am, Cm,Bk,Cf,Es,Fm,Md,No,Lr,Rf,Db,Sg,Bh,Hs,Mt,Ds,Rg,Cn,Nh,Fl,Mc,Lv,Ts,Og。 编写一个程序或函数,以从单个提供的输入生成所有可能的输出。输入和输出都可以采用您选择的任何形式。它可以是字符串,字符数组或其他某种数据结构:无论是方便还是清楚地表示输入和输出。输入和输出都可以传入/传出代码,但是您可以选择:标准输入/出,函数参数/返回或其他。 输入应为正长度的字符串(请参见上一段),仅包含任意大小写的ASCII字符和空格(0x20)字符。 您的代码必须生成可以使用上述输入规则创建的所有输出字符串。 输出的顺序是实现定义的。唯一的要求是所有输出字符串都存在。 如果提供的有效输入字符串不包含任何原子符号,则只需输出输入字符串即可。 如果显示的输入字符串不符合上述规则(空,零字符,包含非法字符等),则您的程序可能会执行任何操作(崩溃,空白输出等) 输出是不区分大小写的,除了原子符号需要匹配元素周期表。 不允许出现标准漏洞。 测试用例: Tin Snips [Ti][N] [Sn][I][P][S] [Ti][N] [S][Ni][P][S] [Ti][N] [S][N][I][P][S] T[In] [Sn][I][P][S] T[In] [S][Ni][P][S] T[In] [S][N][I][P][S] T[I][N] ... …

1
将λ表达式转换为SK表达式
所述λ演算,或演算,是根据匿名功能的逻辑系统。例如,这是一个λ表达式: λf.(λx.xx)(λx.f(xx)) 但是,出于此挑战的目的,我们将简化表示法: 更改λ为\(以便于键入):\f.(\x.xx)(\x.f(xx)) 该.拉姆达头是不必要的,所以我们可以删除它:\f(\xxx)(\xf(xx)) 在应用程序中使用Unlambda样式的前缀表示法,`而不是将两个函数一起编写(有关如何执行此操作的完整说明,请参见在Lambda微积分表示法之间转换):\f`\x`xx\x`f`xx 这是最复杂的替换。根据变量相对于其所属的lambda标头的嵌套深度(即,使用基于0的De Bruijn索引),用括号中的数字替换每个变量。例如,在\xx(身份函数)中,x主体中的in将替换为[0],因为它属于在将表达式从变量遍历到末尾时遇到的第一个(从0开始)头。\x\y``\x`xxxy将被转换为\x\y``\x`[0][0][1][0]。现在,我们可以将变量放在标头中,离开\\``\`[0][0][1][0]。 组合逻辑基本上是由λ微积分构成的Turing Tarpit(嗯,实际上,它是第一位的,但是在这里无关紧要。) “组合逻辑可以看作是lambda演算的一种变体,其中lambda表达式(代表功能抽象)被有限的组合器集合所取代,这些组合器不存在绑定变量。1个 组合逻辑最常见的类型是SK组合器演算,它使用以下原语: K = λx.λy.x S = λx.λy.λz.xz(yz) 有时I = λx.x会添加一个组合器,但它是多余的,因为SKK(或实际上SKx对任何而言x)都等同于I。 您只需要K,S和应用程序即可编码λ微积分中的任何表达式。例如,这是从函数λf.(λx.xx)(λx.f(xx))到组合逻辑的转换: λf.(λx.xx)(λx.f(xx)) = S(K(λx.xx))(λf.λx.f(xx)) λx.f(xx) = S(Kf)(S(SKK)(SKK)) λf.λx.f(xx) = λf.S(Kf)(S(SKK)(SKK)) λf.S(Sf)(S(SKK)(SKK)) = S(λf.S(Sf))(K(S(SKK)(SKK))) λf.S(Sf) = S(KS)S λf.λx.f(xx) = S(S(KS)S)(K(S(SKK)(SKK))) λx.xx = S(SKK)(SKK) λf.(λx.xx)(λx.f(xx)) = S(K(S(SKK)(SKK)))(S(S(KS)S)(K(S(SKK)(SKK)))) 由于我们使用的是前缀表示法,因此为```S`K``S``SKK``SKK``S``S`KSS`K``SKK`。 1资料来源:维基百科 挑战 到目前为止,您可能已经猜到了什么:编写一个程序,该程序将有效的λ表达式(以上述符号表示)作为输入和输出(或返回)相同的函数,并用SK组合器演算重写。注意,有无数种方法可以重写它。您只需要输出无限方式之一。 …

9
枚举二叉树
二叉树 二叉树是具有三种类型的节点的树: 没有子节点的终端节点 一元节点,每个节点有一个孩子 二进制节点,每个都有两个子节点 我们可以用BNF(巴克斯-纳尔形式)中给出的以下语法来表示它们: <e> ::= <terminal> | <unary> | <binary> <terminal> ::= "0" <unary> ::= "(1" <e> ")" <binary> ::= "(2" <e> " " <e> ")" 在此语法中,节点是按顺序排列的,每个节点都由一个数字表示,该数字表示其拥有的子代数。 莫兹金数 Motzkin数(OEIS)(Wikipedia)有多种解释,但一种解释是,nMotzkin数是具有n节点的不同二叉树的数目。莫兹金数表开始 N Motzkin number M(N) 1 1 2 1 3 2 4 4 5 9 6 21 7 51 …

6
量子纠缠第一集:识别有限量子纠缠
编写一个程序,确定给定的矩阵是否表示一个量子点。甲quandle是配备有单个(非可交换的,非结合)操作◃其遵循以下公理一组: 该操作已关闭,这意味着a◃b = c如果a和b是的元素。 该操作是自行分配的: (a◃b)◃c = (a◃c)◃(b◃c)。 操作是右整除:对于任何选择的对a和b,有单个唯一的c,使得c◃a = b 该操作是幂等的: a◃a = a 有限量子可以表示为方矩阵。以下是5阶夸德(source)的示例。 0 0 1 1 1 1 1 0 0 0 3 4 2 4 3 4 2 4 3 2 2 3 3 2 4 位于第n行第m列(索引为0)的值是n◃m的值。例如,在这个难题中,4◃1 = 3。从这个矩阵很容易看出一些量子特性: 由于只有值0-4出现在此5x5矩阵中,因此它是封闭的。 这是幂等的,因为矩阵对角线是0 1 2 3 4 …

16
我给你第N个排列,你给我N
输入:一个大写字母序列(ASCII [65; 90]),是其字符多组的第N *个字典编排 *排列从0或1向上编号 输出:以10为底的整数N 鲁兹 有可能是重复的 (这就是如何从这一挑战不同 这一个) 字符按其ASCII值排序 如果输入的长度小于或等于1,则输入是第一个排列,结果分别是0或1 第一个置换是最左边的字符具有最低的值,最右边的字符具有最高的值,并且第一个字符与最后一个字符之间的字符序列是其字符多集的第一个置换(递归定义!) 进入时间最短的获胜者 例 输入AAB产生输出0 输入ABA产生输出1 输入BAA产生输出2 输入ZZZ产生输出0 输入DCBA产生输出23 编辑 那些想出一个不会产生所有排列并随后寻找输入的解决方案的人特别感谢。那是一个挑战。

19
蒸汽用户有多少声誉?[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 2年前关闭。 介绍 对于不熟悉蒸汽的人-或至少不熟悉此特定方面的人: 人们经常在人们的个人资料上留下评论,说“ + rep _____”或“ -rep _____”。这些是一种非官方的方法,可以出于多种原因显示您认为社区中某人的声誉良好或不良。这样的注释看起来像: +代表一个好球员 + rep有帮助 -rep黑客 -rep骗子 任务 该程序必须通过任何协商一致的方式获取输入。输入由带有可选换行符(\n)的字符串组成。在每行的开始处,'+rep '或者'-rep '可能存在。该行的其余部分可以丢弃。如果该行不是以'+rep '或开头'-rep '(请注意尾随空格),则应忽略该行。 然后,该程序必须保持总信誉得分。0从此开始,此分数应在以开头的每一行上递增,'+rep '并在以开头的每一行上递减'-rep '。 该结果应以任何商定的方式输出。 测试用例 Input: +rep fast trade +rep nice person -rep too good Output: 1 Input: -rep hacker -rep scammer -rep was mean Output: -3 Input: …

4
局部反转多项式
挑战 给定一个p具有阶1和度的实系数的n多项式,求另一个q度数的多项式最多n使得(p∘q)(X) = p(q(X)) ≡ X mod X^(n+1),或者换句话说,使得p(q(X)) = X + h(X)其中h是一个任意多项式ord(h) ≥ n+1。多项式q由唯一确定p。 对于一个多项式p(X) = a(n)*X^n + a(n+1)*X^(n+1) + ... + a(m)*X^m,其中n <= m和a(n) ≠ 0,a(m) ≠ 0我们说n是为了中p和m是度的p。 简化:您可以假设它p具有整数系数,并且a(1)=1(so p(X) = X + [some integral polynomial of order 2])。在这种情况下,q也具有积分系数。 简化的目的是避免浮点数的问题。但是,出于说明目的,有一个非整体示例。 例子 考虑泰勒级数的exp(x)-1 = x + x^2/2 + x^3/6 + …

3
漂流问题(背包变体)
我的第一个难题是,很高兴收到改进建议! 场景是;您是一家激流漂流公司的经理。每天早晨,您都会收到一份预订清单,您必须将它们分类为木筏装载。用您选择的语言编写适合您的程序或函数。 每个木筏最多可容纳一个n客户,并且每个预订的n人数是1至2 (含)之间的一组。必须遵守以下规则; 不得拆分任何组。如果他们一起订票,他们必须都在同一排。 筏子的数量必须最小化。 在符合前两个规则的前提下,组必须在木筏之间尽可能平均地分布。 输入。 数字n(您可能会认为这是一个正整数),以及所有预订的大小。如果您的语言支持,则可以是数组,列表或类似的数据结构。所有这些都是介于1和之间的正整数n。预订的顺序没有定义,也不重要。 输出。 预订编号列表,分为筏负载。必须明确指出分组,例如; 列表或数组数组。 每个筏的逗号分隔列表。每个筏之间的换行符。 如何实施第三条规则由您决定,但这可能涉及找到平均木筏占用率,并尽可能减少其偏离。这是一些测试用例。 n Bookings Output 6 [2,5] [5],[2] 4 [1,1,1,1,1] [1,1,1],[1,1] 6 [2,3,2] [2,2],[3] 6 [2,3,2,3] [2,3],[2,3] 6 [2,3,2,3,2] [2,2,2],[3,3] 12 [10,8,6,4,2] [10],[8,2],[6,4] 6 [4,4,4] [4],[4],[4] 12 [12,7,6,6] [12],[7],[6,6] 适用标准规则,以最短的代码为准。玩得开心! 编辑; 建议为第三条规则尽可能平等地定义的方法。 一旦r确定了木筏的数量(服从第二条规则),则a可以通过对预订进行求和并除以来计算平均占用率r。对于每个筏,可以使用找出与平均占用率的偏差d(x) = abs(n(x)-a),其中n(x)每个筏中的人数是和1 <= x <= …

8
引导字母
引导字母 给定方向数组,其中方向定义如下: NW N NE W . E SW S SE 或作为索引(您可以将这些索引而不是上面的字符串用作方向): 0 1 2 3 . 4 5 6 7 您可以选择任何一种格式,挑战不需要两者都支持。生成代表绘制路径的相应字母字符串,以A开头。方向数量永远不会超过25,这意味着它永远不会超过Z,因此您不必处理这种情况。除非您可以解释为什么由于语言限制这些格式不起作用,否则将不接受其他任何输入格式。使用详细说明的示例更容易解释。 因此,让我们看一个简单的例子: [E,SE,N,S,S,S,NW,W,N] or [4,7,1,6,6,6,0,3,1] 始终以A开头。 A 向东走到B。 A-B 往东南走到C。 A-B \ C 往北走到D。 A-B D \| C 向南返回E,覆盖C。 A-B D \| E 继续向南行驶2个周期,到达F和G。 A-B D \| E | …

17
随机像素戳
您的任务很简单:编写一个程序,用白色像素替换黑色16px * 8px矩形(宽度乘高度)中的随机像素。 孔必须均匀一致,并且您应该输出插入了白色像素的16px x 8 px图像。 每列仅替换1个像素(总共16个替换像素) 您不做任何输入,也不能依赖存储在计算机其他位置的图像。 这是代码高尔夫球,因此字节数最短的程序将获胜!

9
是在康托集内吗?
挑战 对于这个挑战,您应该确定Cantor集中是否有给定的数字。首先,让我们定义Cantor集。 首先,从0到1之间的数字开始。超出此范围的任何数字均不在Cantor集中。现在,让我们将数字分为三个相等的部分:[0,1 / 3],[1 / 3,2 / 3],[2 / 3、1]。不在第一部分和最后一部分范围内的任何数字都不在Cantor集中。现在,对段[0,1 / 3]和[2/3,1]重复此过程。然后,您重复剩余的内容。您会永远这样做。最后,所有剩余的数字都在Cantor集中。这是前六个迭代的图表: 输入值 两个整数x和y。 0 < y < 2^15 0 <= x <= y 最大的共同点x和y为1,除非x == 0。 输出量 如果x/y在Cantor设置中,则为真。 如果x/y不在Cantor集合中,则为假。 例子 现在,让我们看一下Cantor集中的一些数字示例。 1/3 -> true 它在边界上,并且边界永远不会删除。 1/4 -> true 1/4永远不会位于细分的中间三分之一,尽管它也永远不会位于边界上。如果遵循它的路径,您实际上会发现它在节的前三分之一和后三分之一之间交替出现。 1/13 -> true 1/13 在第一部分,第一部分和最后一部分之间切换。 1/5 -> false 1/5 …

13
拉链乘法
介绍 让我们定义一个新的算术运算,我称之为拉链乘法。要用拉链将两个非负整数相乘,请添加前导零以使长度匹配,将数字的相应前十个数字相乘,在结果中添加前导零以得到2位数字,将它们连接起来,最后删除前导零。 这是A = 1276和B = 933024的示例: 1. Add leading zeros A = 001276 B = 933024 2. Multiply digit-wise A = 0 0 1 2 7 6 B = 9 9 3 0 2 4 -> 0 0 3 0 14 24 3. Pad to 2 digits -> 00 …

7
数字键词搜索
给定一个介于1到999之间(含1和999)的整数,如果它在标准数字键盘上的3x3正方形数字1-9中的任何位置水平,垂直或对角地向前或向后出现,则输出真实值: 789 456 123 如果没有出现该数字,则输出一个伪造的值。 您需要输出真实值的确切65个数字是: 1 2 3 4 5 6 7 8 9 12 14 15 21 23 24 25 26 32 35 36 41 42 45 47 48 51 52 53 54 56 57 58 59 62 63 65 68 69 74 75 78 84 85 86 …

7
采样随机非递减序列
输入:两个整数n和k,以便于代码输入的任何形式给出 输出由k个整数组成的随机非递减序列,每个整数的范围为1到n。应该从k个整数的所有非递减序列中均匀选择样本,该整数的范围在1到n之间。 输出可以采用您认为方便的任何合理格式。 您可以使用自己喜欢的库/语言提供的任何伪随机生成器。 我们可以假设整数n,k> 0。 例 假设n,k =2。非递减序列为 1,1 1,2 2,2 每个序列应具有输出概率1/3。 限制 对于k = 20和n = 100,您的代码应在不超过几秒钟的时间内运行。 什么不起作用 如果仅从1到n范围内随机采样每个整数,然后对列表进行排序,则不会获得均匀分布。

3
土豆去皮
这是土豆: @@ @@@@ @@@@@@ @@@@@@ @@@@ @@ 更一般而言,将大小为N的马铃薯定义为以下形状: 如果N是偶数,则它是2个居中@符号,然后是4个居中@符号,然后是6个居中@符号,一直到N个居中@符号;然后,N为中心的@符号,后面是N-2为中心@的符号中,所有的方式下降到2。 如果N是奇数,在如上述描述的相同的方式产生一个大小为N马铃薯,但我们开始用1个@符号,而不是2 。 从右上角开始将土豆去皮@,然后按逆时针方向移动每个步骤一个标志。例如,去皮3号土豆看起来像这样: @ @@@ @@@ @ ​ @@@ @@@ @ ​ @@ @@@ @ ​ @@ @@ @ ​ @@ @@ ​ ​ @@ @ ​ ​ @ @ ​ ​ ​ @ ​ 挑战 编写一个程序,给定一个整数输入,该程序将显示削皮该尺寸土豆的所有步骤。 允许尾随空白/换行符。 计分 这是代码高尔夫球;以字节为单位的最短代码为准。 样本测试用例 …

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.