【发布时间】:2014-10-23 01:34:57
【问题描述】:
我有一个编程问题,我知道如何在 Ruby 中解决,但不知道在 Clojure 中的最佳方法(我认为可能有一种优雅的方法来解决此问题,采用函数式思维方式)。
问题可以简化为:
我有一个 3 升的桶,里面装满了水。桶底有一个孔,泄漏量为 10 mL/s(即需要 300 秒 / 5 分钟才能清空)。我有一杯容量为 100 毫升的水,可以用来向桶中倒入新水。
我只能把杯子里的东西全部倒进桶里,不能倒一部分。倾倒是瞬间发生的。
计划出一组时间步长,我可以将一杯水倒入桶中。
我知道使用代数有一种非常明显的方法可以做到这一点,但实际问题涉及随时间变化的“泄漏率”,以及并不总是等于 100 mL 的“新玻璃体积”,因此以封闭的形式解决并不简单。
解决此问题的 Ruby 方法是使用“Bucket 实例”来跟踪存储桶的容量,并在多个时间步长上进行测试以查看存储桶是否有 100 毫升的空间。如果是这样,倒掉玻璃杯,并添加到“桶实例”中的水中。继续时间步长,观察桶的体积。
我希望我所描述的很清楚。
【问题讨论】:
-
你能说明为什么答案并不总是 290mL 吗?
-
@LeonGrapenthin 请看问题描述后的段落。
标签: algorithm clojure functional-programming