どう書く?org : 急勾配の判定

original page : http://ja.doukaku.org/248/

有限の長さの数列で,各要素の値が,その要素の後ろにある残りの列に含まれるすべての要素の和よりも大きい列を「急勾配の列」ということにします(空列の和は0とします).

任意の長さ(ただし有限の長さの)数列を与えられたとき,それが「急勾配の列」であるかどうかを判定する述語関数を定義してください.

必須ではありませんが,効率についてコメントがあれば面白いかもしれませんね.

#8925

original page : http://ja.doukaku.org/comment/8925/

cumsum の結果をキャッシュしておけば線形になります。

is.superdecreasing <- function(l) all(l > rev(cumsum(rev(l)))-l)