Files
2026-10-13 20:33:50 +02:00

103 lines
1.8 KiB
Ruby

#!/usr/bin/env ruby
class Gecko
attr_reader :name
def initialize(name)
@name = name
@meals = []
end
def eat(prey, quantity, calcium)
return false unless prey.is_a?(String)
prey = prey.strip
return false if prey.empty?
return false unless quantity.is_a?(Integer) && quantity.positive?
return false unless calcium == true || calcium == false
@meals << [prey, quantity, calcium]
true
end
def display_meals
puts "#{@name} a mangé :"
@meals.each do |prey, quantity, calcium|
suffix = calcium ? " (calcium)" : ""
puts "- #{quantity} #{prey}#{suffix}"
end
puts
puts "Total : #{total_prey} proies"
end
def display_last_meal
puts
if @meals.empty?
puts "Aucun repas enregistré."
return
end
puts "Dernier repas :"
prey, quantity, calcium = @meals.last
suffix = calcium ? " (calcium)" : ""
puts "- #{quantity} #{prey}#{suffix}"
end
def meal_count
@meals.length
end
def total_prey
total = 0
@meals.each do |_prey, quantity, _calcium|
total += quantity
end
total
end
def ate?(searched_prey)
@meals.any? do |prey, _quantity, _calcium|
prey == searched_prey
end
end
def calcium_meal_count
@meals.count do |_prey, _quantity, calcium|
calcium
end
end
end
delta = Gecko.new("Delta")
delta.eat("dubia", 2, true)
delta.eat("ver de farine", 3, false)
delta.eat("cloporte", 1, true)
delta.display_meals
delta.display_last_meal
puts
puts "Delta a fait #{delta.meal_count} repas."
puts "Delta a mangé #{delta.total_prey} proies."
puts
puts delta.ate?("dubia")
puts
puts delta.calcium_meal_count
puts
puts delta.name
puts
puts delta.eat("dubia", -2, true) # false
puts delta.eat("dubia", 2, true) # true