Questions tagged «code-golf»

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

10
分配客机座位
受到上周APL课程的启发。 给定一个大写的2D座位图和一维客户列表,返回座位图和客户列表,但进行如下修改(以指示已占用的座位和就座的客户): 对于输入的乘客列表中的每个唯一字母,将其在座位图中的所有字母(或全部,如果没有足够的话)都小写,从左到右,从上到下。 对于座位图中的每个唯一字母,将乘客列表中该字母中的许多(或全部,如果没有足够的话)小写,从左到右。 输入座位图只包含空格和大写字母集合{ F,B,P,E},并且可以是: 通过换行符分成几行 字符串列表 大写字母矩阵 任何其他可比较的格式 输入客户名单只包含从一组大写字母{ F,B,P,E },可以是: 一个字符串 字符列表 任何其他可比较的格式 返回的座位图必须与输入的座位图相同,不同之处在于将零个或多个字母折叠成小写 返回的客户列表必须与输入的客户列表相同,除了将零个或多个字母折叠成小写字母外 允许前导和尾随空格 示例(美联航飞机的简化版) ERJ145 座位图输入: P E E PP E EE E EE E EE E EE P PP E EE E EE E EE 旅客名单输入: FFEEEEEEEEEEEEEEEE 座位图输出: P e e PP e …

12
猜词次数
任务 给定2个正整数n和k,其中n > k输出从一组可n区分元素到一组可k区分元素的排斥数。 定义 如果对于每个t∈T都有s∈S使得f(s)= t,则函数f:S→T被称为素射。 例 当n=3和时k=2,输出为6,因为存在6从{1,2,3}到的排斥{1,2}: 1↦1, 2↦1, 3↦2 1↦1, 2↦2, 3↦1 1↦1, 2↦2, 3↦2 1↦2, 2↦1, 3↦1 1↦2, 2↦1, 3↦2 1↦2, 2↦2, 3↦1 测试用例 n k output 5 3 150 8 4 40824 9 8 1451520 参考 OEIS A019538 计分 这是代码高尔夫球。以字节为单位的最短答案将获胜。 有标准漏洞。

12
设置我的自动拨号器
过去,电话自动拨号器使用打孔卡,每列要拨打的号码中的每一列都有一栏。列有七行。前三行分别代表数字(1,2,3),(4,5,6)和(7,8,9)。最后三行将这种排列旋转90°:(1,4,7),(2,5,8)和(3,6,9)。中间的行用于0。任何数字1-9都会打两个孔-前三个行一个,下三个行一个。零将只打中间行。让我们可视化数字6的打孔列(.未x打孔,已打孔,左侧的指南仅用于说明编码): 123 . 456 x 789 . 0 . 147 . 258 . 369 x 我们寻找哪些行包含我们要拨打的号码。对于6,这是第二行,第九行。这两行被打孔,其余五行未打孔。这是所有0-9数字的打孔模式: 0 1 2 3 4 5 6 7 8 9 123 . x x x . . . . . . 456 . . . . x x x . . . 789 . …

2
找出这是否是Stack Cats风格的有效Stack Cats程序!
背景 Stack Cats是Martin Ender提出的一种可逆的深奥语言。Stack Cats中的每个命令都是其自身的反函数(表示为对称字符,如-_:T|),或者具有其反命令(表示为镜像,如() {} [] <>)。Stack Cats对语法的要求很高,那就是整个程序应该是其自身的镜像。请注意,这意味着任何有效的Stack Cats程序都是自然的镜像歧义。 这是Stack Cats的整个命令集: 自对称: !*+-:=ITX^_| 对称对: () {} [] <> \/ 其他字符无效;字符不在上述字符集中的任何输入应输出false。 语言有附加约束()和{}对必须始终平衡,但是为了简单起见,你不必检查此条件。 以下是有效的Stack Cats程序的一些示例(同样,请注意,您不会检查平衡括号): {[+]==[+]} [)>^<(] ({T)}|{(T}) <(*]{[:!-_:>}<[<)*(>]>{<:_-!:]}[*)> 这些不是: b<+>d ())( ({[<++<]}) 挑战 编写确定给定字符串是否有效的Stack Cats程序的程序或函数。您的代码也应该是自然的镜像歧义,这意味着: 您的代码应该是其自身的镜像。 您的代码可能具有一个或多个换行符,只要自然显示的整个代码是其自身的镜像即可。 您可以在每行上省略或添加尾随空格,因为它不会更改显示。 不允许使用制表符,因为它们在显示上有些歧义。 注意:您的代码不会不必须是一个有效的协议栈猫节目; 它可能包含Stack Cats不允许的某些额外字符。(请参阅下面的完整列表。) 例如,以下两个程序是对称的(因此是有效的提交),而第三个则不是: ({bTd}) [<q|p>] ({bTd}) IXI ({bTd}) IXI 关于“镜像对称性”,仅考虑Stack …

13
运行基因交叉算法
您的任务是接受两个基因序列和一个“交叉点”序列作为输入,并返回由所示交叉产生的基因序列。 我的意思是说您有序列[A, A, A, A, A, A, A]和[Z, Z, Z, Z, Z, Z, Z],并且交叉了2和的点5。结果序列为[A, A, Z, Z, Z, A, A],因为: 穿越这里:VV 指数:0 1 2 3 4 5 6 基因1:AAAAAAA 基因2:ZZZZZZZ 结果:AAZZZAA ^^ 请注意,尽管我在这里使用字母是为了清楚起见,但实际的挑战是将数字用于基因。 结果是第一个序列直到遇到交叉点,然后结果从第二个序列开始直到遇到另一个交叉点,然后结果从第一个序列开始直到遇到一个交叉点... 输入: 输入可以是任何合理的形式。这两个序列可以是一对,点是第二个参数,所有三个都可以是单独的参数,一个的三元组(genes 1, genes 2, cross-points),一个具有命名键的映射... 交叉点将始终是有序的,并且将始终是入站。不会有重复的点,但是交叉点列表可能为空。 基因序列将始终具有相同的长度,并且将为非空。 索引可以基于0或1。 基因将始终是0-255范围内的数字。 哪个参数是“ genes 1”或“ genes 2”都没有关系。在没有交叉点的情况下,结果可以完全是“基因1”或“基因2”。 输出量 …

19
用我的方式阅读颜色
即使所有系统都在RGBA空间中讲话,不同的系统也有不同的颜色描述方式。熟悉CSS的前端开发人员可能更喜欢#RRGGBBAA。但是Android开发人员可能更喜欢#AARRGGBB。处理AAS文件格式时,#AABBGGRR是必需的。太混乱了。也许我们需要一个可以在不同颜色格式之间转换的程序。 输入: 输入包含3个部分: 要转换的颜色(例如#1459AC0F),以尖锐符号#开头的字符串,后跟8个十六进制数字。 给定颜色的格式(例如#RRGGBBAA),一个字符串开头,#后跟8个字母,分为4个不同的组,每个组是RR/ GG/ BB/之一AA。 转换成的格式。 输出: 以转换后的格式输出颜色 测试用例: Color, OriginalFormat, TargetFormat -> Result #12345678, #RRGGBBAA, #AARRGGBB -> #78123456 #1A2B3C4D, #RRGGBBAA, #AABBGGRR -> #4D3C2B1A #DEADBEEF, #AARRGGBB, #GGBBAARR -> #BEEFDEAD 输入/输出不区分大小写。您可以以任何可接受的方式输入/输出。 规则: 这是代码高尔夫球,每种语言的最短(以字节为单位)代码获胜

15
及物平等
挑战 您的程序应接受3个输入: 一个正整数,它是变量的数量, 一组无序的非负整数对,其中每对代表变量之间的等式,并且 代表起始变量的正整数, 它应该返回一组表示所有变量的非负整数,这些变量可以证明与起始变量(包括起始变量本身)在传递上相等。 换句话说,给定的输入N,E和S返回一个set Q,使得: S ∈ Q。 如果Z ∈ Q和(Y = Z) ∈ E,那么Y ∈ Q。 如果Z ∈ Q和(Z = Y) ∈ E,那么Y ∈ Q。 这也可以表示为图论问题: 给定无向图和图中的顶点,请列出其连接组件中的顶点。 技术指标 您可以选择使用基于0或基于1的索引。 第一个输入计算存在的变量数,其中变量以数字形式给出。或者,您不能采用此输入,在这种情况下,根据您的索引编制方案,该输入等于当前存在的最大变量索引,或者等于此变量的最大变量索引。 您可以假设输入格式正确:不会给您超出第一个输入指定范围之外的变量。例如,3, [1 = 2, 2 = 0], 1是有效输入,而4, [1 = 719, 1 = 2, 3 = …

11
是否想看魔术牌戏法?
我小时候学到的第一个魔术纸牌技巧是: 有1张纸牌,背面的图案不是垂直对称的。 将所有卡组织成一个方向。 要求个人“拿起一张卡片,任何一张卡片,记住并退还给您”。 继续将其放入甲板(方向错误)。 大力洗牌,给人一种幻觉,即您不知道他们的牌在哪里。 出示他们的卡片使他们惊讶。 如今,这种技巧显然在本质上有些缺乏光泽,但是它却带来了巨大的挑战。编写一个程序,该程序在没有输入的情况下将输出随机洗牌的纸牌,其中一张纸牌是随机选择的,并且反转了。但是,如果输入的是一副纸牌,其中一张纸牌已反转,则必须输出反转的纸牌(以正确的顺序)。 卡片组 一副纸牌定义为: [2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS, 2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD, 2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH, 2C,3C,4C,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC] 卡的定义是其号码,然后是其西装的第一个字母。卡片的反面正好相反,其西装的第一个字母后跟一个数字。 抽奖卡 例如,如果我们随机选择反转的牌是4 of Clubs (4C),我们最终会(显然没有混洗): [2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS, 2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD, 2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH, 2C,3C,C4,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC] 洗牌 然后,在改组后: [2H,2C,6S,4D,QH,6C,TD,8C,7H,5H,C4,3D,7S,7C,KC,QD,QC,JS,7D,6D,2S,5C,KD,3C,3S,2D,8H,KH,6H,AH,8S,JH,TS,AD,5D,9H,4H,JD,QS,4S,JC,3H,8D,TC,AS,TH,KS,AC,9C,9S,5S,9D] 给定空输入,这是有效的输出。 甲板输入 但是,相反,当我们的程序收到上述输出作为输入时,它应该输出4C。也就是说,输入以下内容: [2H,2C,6S,4D,QH,6C,TD,8C,7H,5H,C4,3D,7S,7C,KC,QD,QC,JS,7D,6D,2S,5C,KD,3C,3S,2D,8H,KH,6H,AH,8S,JH,TS,AD,5D,9H,4H,JD,QS,4S,JC,3H,8D,TC,AS,TH,KS,AC,9C,9S,5S,9D] 您反复进行遍历,直到找到反转的卡,然后将其返回,然后反转回到正常状态。因此,在这里我们将找到C4,知道C不是数字,然后将其返回为4C,这是正确的。 规则 您不得从任何外部来源加载卡座。 空的输入应导致随机洗牌的甲板,其中有1张随机卡片被撤消。 一副纸牌中有1张纸牌作为输入反转的结果应该会导致纸牌反转。 任何其他输入都会导致爆炸性的骆驼在未来派的电子管中骑行。 或其他任何事情。 所选卡和洗牌顺序必须一致地随机。 IE浏览器所有卡都有被选择被撤销的同等机会。 IE浏览器的所有组合卡都有相同的出现机会。 您可以使用SHCD或shcd用于西装,但要保持一致: 如果选择大写西装(SHCD),则还必须使用TJQKA。 如果选择小写字母西服(shcd),则还必须使用tjqka。 这是代码高尔夫球,获胜者是最低字节。

24
没有匹配的连续对的ID生成器
给定2个输入(m = 最小起始id,n = id的数量),生成从> = m开始的id的顺序列表,该列表由数字0-9组成,其中没有2个连续的数字相同,例如1232是好吧,1233不是(彼此相邻包含2'3')。 例 对于m = 985,n = 6,下面显示了将生成/跳过的ID ... 985 - ok, 1st 986 - ok, 2nd 987 - ok, 3rd # skip 0988 (contains '88') 989 - ok, 4th # Skip 099x (contains '99') # Skip 100x (contains '00') 1010 - ok, 5th # …

10
以前的复合数字
序列定义 构造正整数序列,a(n)如下所示: a(0) = 4 a(n)除第一项外,每个项都是满足以下条件的最小数: a)a(n)是一个复合数, b)a(n) > a(n-1), c)a(n) + a(k) + 1是每个复合数0 <= k < n。 因此,我们从开始a(0) = 4。下一个条目a(1)必须为9。它不能为5或7因为它们不是复合的,所以不能为6或8因为6+4+1=11不是复合8+4+1=13的也不是复合的。最后9+4+1=14是,因此是a(1) = 9。 下一个条目a(2)必须为10,因为它是9与10+9+1=20和10+4+1=15一起大于两者的最小数字。 对于下一个条目,11并且13都是,因为他们没有复合。12之所以出来是因为12+4+1=17这不是复合的。14之所以出来是因为14+4+1=19这不是复合的。因此,15是所述序列的下一个术语,因为15是复合材料和15+4+1=20,15+9+1=25以及15+10+1=26是所有各复合,所以a(3) = 15。 以下是此顺序中的前30个术语: 4, 9, 10, 15, 16, 22, 28, 34, 35, 39, 40, 46, 52, 58, 64, 70, 75, 76, 82, 88, 94, …

8
模拟模型神经元
一个Izhikevich神经元是一个简单但非常有效的生物神经元,专为在离散时步仿真使用的模型。在这个高尔夫挑战赛中,您将实现此模型。 参量 与生理上精确的模型的数十个参数相比,该模型仅涉及组织为2个微分方程的7个变量。 v和u是神经元的两个状态变量。在此,v“快速”变量代表随着时间的细胞电势,并且u“缓慢”变量代表某些膜的性质。v变量是最重要的变量,因为这是模拟的输出。 a,b,c,和d被固定描述该神经元的特性的常数。根据所需的行为,不同类型的神经元具有不同的常数。值得注意的c是,复位电位是细胞在加标后返回的膜电位。 I代表输入到神经元的电流。在网络仿真中,这会随着时间而变化,但是出于我们的目的,我们将其I视为固定常数。 该模型 该模型具有非常简单的伪代码。首先,我们采用的常量值abcd并使用它们来初始化v和u: v = c u = b * c 接下来,我们将根据需要遍历仿真代码多次。每次迭代代表1毫秒的时间。 for 1..t: if v >= 30: # reset after a spike v = c u = u + d v += 0.04*v^2 + 5*v + 140 - u + I u += a …

6
Panfix到括号中的括号
Quylthulg是Chris Pressey 编写的一种语言,它试图通过使用panfix来解决中缀表示法的问题: 像postfix一样,panfix不需要部署神秘的设计(例如括号)来覆盖默认的运算符优先级。同时,panfix允许以与infix相同的顺序和方式来指定术语,这对于已经习惯infix的人来说无疑是一种自然而直观的表示法。 如何获得前缀表示法的便利性以及前缀或后缀的明确性?当然,全部使用这三个! =y=+*3*x*+1+= 更正式,更+是运营商,并a和b是表达式。然后(a+b)是一个有效的(带括号)中缀表达式,该表达式的panfix表示为+a+b+,其中并置表示串联。 您的目标是获取一个panfix字符串并将其转换为带括号的后缀: (y=((3*x)+1)) 为简单起见,我们将进行以下更改: 运算符只能由两个唯一的字符组成(您可以选择任何一个,但是在这里我将使用*和+)。 只有一个文字,它由另一个不同的字符组成(您可以选择任何一个,但在这里我将使用_)。 输入将是格式正确的panfix表达式。 对于复杂性,我们将进行以下更改: 运算符可以包含任意数量的正字符,而不仅仅是一个。 这使挑战变得更加棘手,因为您无需确定字符串的其余部分就不必确定给定的操作符子字符串的分区方式。 这是挑战的参考实现,由@ user202729提供。 测试用例 format: input -> output +*+_*+_*+++_+*+_*+_*+++ -> ((_*+_)+(_+(_*+_))) **++*+***++_+_++_+*++*+***_*++*+*****_**_*_*** -> ((((_+_)+_)*++*+***_)*(_*(_*_))) ***_**_***_* -> ((_**_)*_) +_+_+ -> (_+_) *+*+++**+***+++++_*+*+++**+***+++++_*+*+++**+***+++++ -> (_*+*+++**+***+++++_) *++++*+*_*_*+*+++****+_++****+_++****++*+*+++_*+++ -> (((_*_)+*+(_++****+_))*+++_) +**+_*+_*+*_*+*_*+*_+*_+**+ -> (((_*+_)*_)+(_*(_+*_))) +**+++++_+++++_+++++*_*+*+_++++++_+++++_+++++++* -> (((_+++++_)*_)+*(_+(_+++++_))) +*+*+_+*+_+*+*_*+*_*+*+_+*+_+*+*+ -> (((_+*+_)*_)+(_*(_+*+_))) …

2
逻辑门的格里曼德
多数函数是一个布尔函数,它接受三个布尔输入并返回最常用的。例如,如果maj(x,y,z)是多数功能并T表示true和Ffalse,则: maj(T,T,T) = T maj(T,T,F) = T maj(T,F,F) = F maj(F,F,F) = F 这个问题涉及将布尔函数编写为多数函数的组合。多数函数的5元组成的示例是(x1,x2,x3,x4,x5) => maj(x1,x2,maj(x3,x4,x5))。此函数在这些样本输入向量上返回以下输出: (T,T,F,F,F) => maj(T,T,maj(F,F,F)) = maj(T,T,F) = T (T,F,T,T,F) => maj(T,F,maj(T,T,F)) = maj(T,F,T) = T (T,F,T,F,F) => maj(T,F,maj(T,F,F)) = maj(T,F,F) = F (F,F,F,T,T) => maj(F,F,maj(F,T,T)) = maj(F,F,T) = F 任务 编写一个程序,该程序输入一个正整数n和一个长度为n的布尔向量列表,并输出一个多数门树,如果可能,则在所有给定向量上返回true。该函数可能会在约束列表之外的向量上返回true或false。 向量列表可以按您喜欢的任何格式输入。如果愿意,可以输入向量中真实位置的列表,而不输入向量。因此,例如[TTF,TFT,FTT]or [[T,T,F],[T,F,T],[F,T,T]]或[[1,2],[1,3],[2,3]](真实职位列表)都很好。 输出可以是任何有效的树格式。例如,maj(maj(x1,x2,x3),x4,x5)作品。您可能想要使用单个数字作为变量的替代品,如中所述[[1,2,3],4,5]。例如,反向抛光123m45m也可以。 如果没有起作用的函数,则您的程序应生成错误或输出错误值。 …

7
排队我们的分解
在这个挑战中,我将要求您找到方矩阵的QR分解。矩阵A的QR分解是两个矩阵Q和R,因此A = QR。特别地,我们正在寻找Q为正交矩阵(即Q T Q = QQ T = I,其中I为乘法恒等式,T为转置),R为上三角矩阵(每个值小于其对角线必须为零)。 您将编写通过任何合理方法采用方矩阵并通过任何方法输出QR分解的代码。许多矩阵都有多个QR分解,但是您只需要输出一个即可。 对于矩阵中的每个条目,所得矩阵的元素应在实际答案的小数点后两位内。 这是一场代码高尔夫比赛,因此答案将以字节计分,而字节数越少越好。 测试用例 这些只是可能的输出,只要它们是有效的,您的输出就不必全部匹配。 0 0 0 1 0 0 0 0 0 0 0 0 -> 0 1 0 0 0 0 0 0 0 0 0 1 , 0 0 0 1 0 0 1 0 0 …

4
无点的元组添加
表达功能的最短方法是什么 f(a,b)(c,d)=(a+c,b+d) 用无点表示法? pointfree.io给了我们 uncurry (flip flip snd . (ap .) . flip flip fst . ((.) .) . (. (+)) . flip . (((.) . (,)) .) . (+)) 只需一点点工作就可以缩短到 uncurry$(`flip`snd).((<*>).).(`flip`fst).((.).).(.(+)).flip.(((.).(,)).).(+) 为76个字节。但这似乎还是真的对于如此简单的任务来说漫长而复杂。有什么方法可以将成对加法表示为较短的无点函数? 为了清楚理解我所说的无点,函数的无点声明涉及获取现有函数和运算符,并以创建所需函数的方式将它们相互应用。反引号,括号内文字值([],0,[1..3]等)允许的,但像关键字where和let不是。这表示: 您不得分配任何变量/功能 您不得使用lambda 您可能无法导入 这是CMC时的相同问题

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.