我有一个编程问题,在Ruby中我知道如何解决,但不知道在Clojure中最好的方法是什么(我认为可能有一种优雅的方式以函数式思维来解决这个问题)。
问题可以简化为:
我有一个3升的水桶,里面装满了水。桶底有一个洞,每秒漏10毫升水(即需要300秒/5分钟才能排空)。我有一杯容量为100毫升的水,我可以用它向桶里倒入新水。
我只能将整杯水倒入桶中,不能部分倒入。倒水是瞬间完成的。
制定一组时间步骤,我可以在这些时间步骤中向桶中倒水。
我知道使用代数学方法可以很容易地解决这个问题,但实际问题涉及到随时间变化的“泄漏速率”和不总是等于100毫升的“新玻璃容积”,因此不能简单地通过一个公式来解决。
在Ruby中解决这个问题的方法是使用“Bucket实例”跟踪桶的容积,并在许多时间步骤上测试桶是否有100毫升的空间。如果有,就倒掉杯子里的水,并将水加入“Bucket实例”中。继续时间步骤,观察桶的容积。
我希望我所描述的清楚明白。