假设我沿着无限的标尺放置了一系列纸条,其起点和终点由数字对指定。我想创建一个列表,代表标尺上各点纸的层数。
例如:
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}]