我想建一个梯子。为此,我从垃圾场挖出了两个有洞的长木板,我想把台阶放进这些洞里。然而,洞的位置不均匀,所以台阶会有点摇摇晃晃的,我发现很难估计我需要的杆的数量。你的工作是替我算计。
您的输入是两个位向量,以整数数组的形式给出,它们代表两个板。0表示没有孔的一个aud (任意距离单位)的一个段,而1表示一个带一个孔的aud的段。数组可能有不同的长度,包含不同数量的1s,但它们不会是空的。
我将按以下方式构造我的梯子。首先,我把两个板完全分开,并对齐他们的左端。对于每个指标i,我测量了第一板的i第四孔与第二板的i第四孔之间的距离,切割了一根杆,并把它连接在两孔之间。我一用完一块木板上的洞就停下来。
您的输出是我需要的步骤所需的总棒量,以aud为单位。输出应该正确到至少六个有效数字。
考虑输入[0,1,1,0,1,1,1,1,0,0]和[1,0,0,1,1,1,0,0,1]。由此产生的梯子如下所示:

这个梯子上的杆的总长度是7.06449510224598 auds。
您可以编写函数或完整的程序。最低字节数获胜,标准漏洞被禁止。
[0] [0] -> 0.0
[0] [1,0] -> 0.0
[1,0,0] [1,1,1,1,1] -> 1.0
[0,1,0,1] [1,0,0,1] -> 2.414213562373095
[0,1,1,0,1,1,1,1,0,0] [1,0,0,1,1,1,0,0,1] -> 7.06449510224598
[1,1,1,1,1] [0,0,1,1,0,1,0,0,1] -> 12.733433128760744
[0,0,0,1,0,1,1,0,0,0,1,1,1,0,0,1,0,1,1,0,0,0,1,0] [0,0,1,1,0,1,1,1,0,0,0,0,0,1,1,0,1,1,0,0,0,1] -> 20.38177416534678发布于 2015-12-06 10:47:11
发布于 2015-03-03 01:19:30
lambda*A:sum(abs(x-y+1j)for x,y in zip(*[[i for i,x in enumerate(l)if x]for l in A]))这与麦克溶液类似。将0's和1's的列表转换为一个索引的有序列表,然后对各个元素之间的距离进行求和。
发布于 2015-03-02 22:58:09
使用外部对索引孔执行不同的操作。Diag返回要求不同。然后把计算出的距离和起来
function(a,b)sum((diag(outer(which(a==1),which(b==1),"-"))^2+1)^.5)R Fiddle中的试验运行。我已经把它包装在一个打印,以显示返回符合规格。
> print((function(a,b)sum((diag(outer(which(a==1),which(b==1),"-"))^2+1)^.5))(c(0,1,1,0,1,1,1,1,0,0),c(1,0,0,1,1,1,0,0,1)),digits=10)
[1] 7.064495102
> print((function(a,b)sum((diag(outer(which(a==1),which(b==1),"-"))^2+1)^.5))(c(1,1,1,1,1),c(0,0,1,1,0,1,0,0,1)),digits=10)
[1] 12.73343313
>https://codegolf.stackexchange.com/questions/47258
复制相似问题