ṀÐƤḊ_⁸«©0×⁹I¤÷⁸I¤,®²S½S
一个二元链接,在左边有一个y值列表,在右边有一个x值列表(如OP在注释中明确允许的那样)
在线尝试!
怎么样?
被点亮的(倾斜)部分的分数与垂直下降时被照亮的分数相同。请注意,由于会进行平方运算以评估边坡长度,因此沿该方向计算的高度可能为负(也在下面,点燃的边坡的游程长度计算为负值除以负值)。
ṀÐƤḊ_⁸«©0×⁹I¤÷⁸I¤,®²S½S - Link:list, yValues; list, xValues
ÐƤ - for suffixes of the yValues: e.g. [ 3000, 3500, 1000, 5000, 2000, 3500, 0]
Ṁ - maximum [ 5000, 5000, 5000, 5000, 3500, 3500, 0]
Ḋ - dequeue [ 5000, 5000, 5000, 3500, 3500, 0]
⁸ - chain's left argument, yValues [ 3000, 3500, 1000, 5000, 2000, 3500, 0]
_ - subtract [ 2000, 1500, 4000,-1500, 1500,-3500, 0]
0 - literal zero
« - minimum (vectorises) [ 0, 0, 0,-1500, 0,-3500, 0]
© - copy to the register for later
¤ - nilad followed by link(s) as a nilad:
⁹ - chain's right argument, xValues e.g. [ 0, 500, 2500, 5000, 9000, 9000, 10200]
I - incremental differences [ 500, 2000, 2500, 4000, 0, 1200]
× - multiply (vectorises) [ 0, 0, 0,-6000000, 0,-4200000, 0]
¤ - nilad followed by link(s) as a nilad:
⁸ - chain's left argument, yValues [ 3000, 3500, 1000, 5000, 2000, 3500, 0]
I - incremental differences [ 500,-2500, 4000,-3000, 1500,-3500]
÷ - divide (vectorises) [ 0, 0, 0, 2000, 0, 1200, 0]
® - recall from the register [ 0, 0, 0,-1500, 0,-3500, 0]
, - pair (i.e. lit slope [runs, rises]) [[0, 0, 0, 2000, 0, 1200, 0], [0, 0, 0, -1500, 0, -3500, 0]]
² - square (vectorises) [[0, 0, 0, 4000000, 0, 1440000, 0], [0, 0, 0, 2250000, 0, 12250000, 0]]
S - sum (vectorises) [ 0, 0, 0, 6250000, 0, 13690000, 0]
½ - square root (vectorises) [0.0, 0.0, 0.0, 2500.0, 0.0, 3700.0, 0.0]
S - sum 6200.0
25字节的monadic版本,带有[x,y]
坐标列表:
ṀÐƤḊ_«0
Z©Ṫµ®FI×Ç÷I,DzS½S
试试这个。
(x1, y1)
和(x2,y2)
。被“阻塞”的点为(x3, y3)
。假设y2 <y3 <= y1,则段的长度为((y1 - y3)/(y1 - y2))*sqrt((x1 - x2)^2 + (y1 - y2)^2)
。距离公式,乘以实际使用的部分的分数