Просто идея.В случае, если вам нужно адаптироваться к вашему коду.
tree = []
def stats tree
p fruits_growth = tree.sum{ |t| t[:f] }
p fruits_eaten = tree.sum{ |t| t[:e] }
p fruits_on_tree = fruits_growth - fruits_eaten
p height = tree.sum{ |t| t[:h] }
end
def show_tree tree
puts
tree.each { |t| print "?" * t[:h]}
tree.each { |t| print "?" * (t[:f] - t[:e]) + "❌" * t[:e] }
puts
end
def eat_fruits_from tree, n
eat = n
tree.each do |t|
eatable = t[:f] - t[:e]
next if eatable == 0
if eat >= eatable
then
t[:e] += eatable
eat -= eatable
else
t[:e] += eat
eat = 0
end
end
end
def grow tree, h, f
tree << {h: h, f: f, e: 0}
end
grow tree, 3, 0
show_tree tree #=> ???
grow tree, 4, 2
show_tree tree #=> ?????????
eat_fruits_from tree, 2
show_tree tree #=> ???????❌❌
grow tree, 4, 4
show_tree tree #=> ???????????❌❌????
eat_fruits_from tree, 3
show_tree tree #=> ???????????❌❌?❌❌❌
Массив дерева содержит серию хешей, например {:h=>3, :f=>1, :e=>0}
, где :h
- рост дельты по высоте, :f
- фрукты и :e
едят фрукты.Каждый раз, когда дерево растет, в массив добавляется новый хэш.Когда фрукты съедены, существующие хеши обновляются.