假设我沿着无限的标尺放置了一系列纸条,其起点和终点由数字对指定。我想创建一个列表,代表标尺上各点纸的层数。

例如:

strips =
    {{-27,  20},
     { -2,  -1},
     {-47, -28},
     {-41,  32},
     { 22,  31},
     {  2,  37},
     {-28,  30},
     { -7,  39}}


应该输出:

-47 -41 -27  -7  -2  -1   2  20  22  30  31  32  37  39
  1   2   3   4   5   4   5   4   5   4   3   2   1   0


适应Real和Rational带钢位置的最有效,清洁或简洁的方法是什么?

最佳答案

这是一种方法:

Clear[hasPaper,nStrips]
hasPaper[y_, z_] := Piecewise[{{1, x <= z && x >= y}}, 0];
nStrips[y_, strip___] := Total@(hasPaper @@@ strip) /. x -> y


您可以获取任意值的条带数量。

Table[nStrips[i, strips], {i, Sort@Flatten@strips}]
{1, 2, 3, 3, 3, 4, 5, 5, 5, 5, 5, 5, 4, 3, 2, 1}


另外,把它画出来

Plot[nStrips[x, strips], {x, Min@Flatten@strips, Max@Flatten@strips}]

08-25 19:32