注意,从math.stackexchange询问的问题中复制的挑战。
最近,我获得了相当的吹泡泡的技巧。一开始我会像这样吹泡泡:
但后来事情开始变得奇怪了:
过了一会儿,我吹了一些很奇怪的泡泡:
吹了几百甚至几千个这样的泡泡后,我的额头突然皱起了一个问题:如果有n个泡泡,你能用多少种不同的方式排列它们?例如,如果n= 1,则只有1种排列。如果n=2时,则有2种安排。如果n= 3,则有4种安排。如果n= 4,则有9种安排。
以下是4个气泡的9种排列方式:
吹完所有这些美妙的泡泡后,我决定和你一起分享计算它们的安排的乐趣。下面是你的任务:
编写一个程序、函数或类似的程序,以计数排列n
气泡的方式。
n
,泡沫的数量。N>0
你能安排这些气泡的方法的数目。
如果我们能在你的代码周围吹个泡泡,那就太酷了。代码越小,这样做就越容易。因此,使用最少字节数制作代码的人将赢得比赛。
OEIS
发布于 2017-01-12 19:02:51
我敢打赌,使用从头开始的实现(即使在Mathematica中),这是可以克服的,但是下面是内置的版本:
<<NumericalDifferentialEquationAnalysis`
Last@ButcherTreeCount[#+1]&
ButcherTreeCount
是0索引的,因此是[#+1]
,并返回到其参数为止的所有值的列表,因此返回Last@
。但否则,它只是这个函数的内部结构。但是,它需要加载一个包,这就是第一行所做的。
发布于 2020-05-21 01:11:53
{1≥⍵:⍵⋄w÷⍨+/∊(0=v|⊂⌽v)×v××∘⊂⍨∇¨v←⍳w←⍵-1}
或‘S的Python 2答案的一个端口,使用嵌套向量的向量代替嵌套的for-循环.
{1≥⍵:⍵⋄w÷⍨+/∊(0=v|⊂⌽v)×v××∘⊂⍨∇¨v←⍳w←⍵-1} ⍝ Input: n
{1≥⍵:⍵⋄ } ⍝ If n≤1, return n; otherwise,
w←⍵-1 ⍝ w←n-1
v←⍳w ⍝ v←1..n-1
∇¨ ⍝ a←Recursive call on each of v; a(1), .., a(n-1)
×∘⊂⍨ ⍝ Multiply each of a with a, giving nested array
⍝ where [d][n-k] will contain the desired value at each iteration in Python code
v× ⍝ Multiply each of v (the value of d) with each row of the above
× ⍝ Multiply each with
(0=v|⊂⌽v) ⍝ 1 if n-k is divisible by d, 0 otherwise
w÷⍨+/∊ ⍝ Flatten, sum, and divide by n-1
https://codegolf.stackexchange.com/questions/106612
复制相似问题