编程:检测数字

时间:2015-09-14 11:01:43

标签: functional-programming

任何语言,只是伪代码。

我正在寻找一种能够检测方向和停止更改数字的算法。 E.g:

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()函数也可能一遍又一遍地返回相同的数字,或者根本不会返回一个数字,在这种情况下我想假设这个数字是&#34 ;不变"

让我们通过一些例子更新这个:

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

readObscure()返回数字1,2,14,15,17,20,20,20 这应该是"上升"然后"不变#34;

所以问题也是,如何定义上升,不变,下降。我喜欢在定义之前可能会解决这些问题的人。结果应该等于"人类排序",所以我看看数字并且可以立即告诉他们,他们没有上升,或者他们正在上升。

我已经意识到Rx (Reactive Extensions) 但就我个人而言,这是用大锤敲打坚果。

1 个答案:

答案 0 :(得分:2)

只要你添加一个值就可以了:

  • 获取当前值和最后一个值,计算其delta。
  • 然后,将其添加到您持有增量的任何地方。

如果你想要某些东西,那就是"火"每当你"添加一个值,"最好将它绑定到容器或某种基于回调/事件的机制/结构以确保这一点。 Boost.Signals2(C ++)应该是处理这个问题的好方法,但是创建一个异步执行线程来计算然后将你的值推到存储向量的后面就足够了。