编程:检测数字变化的方向和停止



任何语言,只是伪代码。

我正在寻找一种算法,可以检测方向和数字变化的停止。例如:

function detectChange(int number) {
  if number is rising return "rising"
  if number is dropping return "dropping"
  if number is unchanged return "unchanged"
}
main() {
  int number
  while(true) {
    //The read doesn't always happen
    if readObscure.readoccured() {
      //read the number from an obscure source
      number = readObscure()
      print(detectChange(number))
    }
  }
}

我一直在研究一种有时间增量的方法,但收效甚微。一个问题是,例如,在计时方法中,我总是错过最后的更改。也许我也能解出来,但它已经很粗糙了。所以我很高兴有一个干净的"教科书"解决方案,最好不使用时间,但只是逻辑。如果没有没有时间,但仍然是一个干净的解决方案,我也很感激。

解决方案可以用任何"人类可读"的语言(请不要使用haskell)或伪代码编写,我不在乎。

我应该提到过,readObscure()函数也可能反复返回相同的数字,或者根本不返回数字,在这种情况下,我想假设数字是"不变的"。

让我们用一些例子来更新一下:

readObscure()返回数字1,2,14,15,8,17,20这应该是"rising"

readObscure()返回数字1、2、14、15、17、20、20、20这应该是"rising"然后是"unchanged"

所以问题是,如何定义上升,不变,下降。我希望以前解决过这些问题的人来定义它。结果应该等于"人工排序",所以我看到这些数字,马上就能分辨出来,它们没有上升,还是在上升。

我已经知道了Rx(响应式扩展)但就我个人而言,这就像是用大锤敲开坚果。

当你添加一个值时:

  • 取当前值和最后值的值,计算其增量。
  • 然后,把它添加到你持有delta的地方。

如果你想在每次"添加值"时"触发"一些东西,最好将它绑定到容器或某种基于回调/事件的机制/结构来确保这一点。提振。Signals2 (c++)应该是处理这个问题的好方法,但是像创建一个异步执行线程来计算,然后将你的值推到存储向量的后面这样简单的事情就足够了。

最新更新