0

我正在尝试解决一个有点像这样的“腐烂”难题:

假设 A 在 DateTime.new(2012,5,10,0,0,0) 处为 100,并且每 12 秒衰减 0.5,它是否在 DateTime.new(2012,5,10,0,8, 0)?

碰巧这个问题的答案是 - 嗯,真的:)

但是关于

  • 一个存在 1304.5673,
  • 每 1.2 毫秒衰减 0.00000197
  • 并且结束时间不是一而是 2000 DateTime.new

我试过了

fd=3.minutes.ago.to_datetime
td=Time.now
material=1304.5673
decay=0.00000197
step=0.00012.seconds
fd.step(td,step){ |n| material-=decay }
puts material

并且处理时间是可以接受的——但是如果我再往后退一步(可能是 10 小时甚至 2 小时;我的 CPU 冷却器开始积聚动力,就像它即将推动整个 Mac 进入轨道一样:(

4

1 回答 1

0

我已经为这个问题苦苦挣扎了很长一段时间 - 尽管从问题到回答 SO 的时间跨度确实表明相反的 <:)

(对我来说,答案明确地证明了为什么 Ruby 是一门如此美妙的语言!)

# recap the variables in the question
total_decay = ((td.to_time - fd.to_time).divmod( step))[0]* decay
puts "new material: #{material - total_decay}"

结果可能不会通过科学审查,但我对此表示满意(目前);)

于 2012-05-12T19:22:27.777 回答