Menu
Coddy logo textTech

Estacionamiento

Parte de la sección Programación orientada a objetos del Journey de Ruby de Coddy. Lección 55 de 57.

challenge icon

Desafío

Difícil

Construye un garaje. Vehicle almacena una plate; sus subclases definen size y hourly_rate: Motorbike tiene tamaño 1 (pequeño) a 1 por hora, Car tiene tamaño 2 (mediano) a 3, y Van tiene tamaño 3 (grande) a 5. La constante SIZES del garaje es %w[small medium large]. Garage.new(small, medium, large) recibe el número de plazas de cada tamaño. park(vehicle) coloca un vehículo en una plaza libre de su propio tamaño o, si no hay ninguna libre, de la siguiente categoría de mayor tamaño, y devuelve parked AB12 in medium o full for AB12. leave(plate, hours) libera la plaza y devuelve AB12 paid 9 (la tarifa multiplicada por las horas, con un mínimo de 1 hora), o no vehicle AB12. status devuelve free: small 1, medium 0, large 2.

El código proporcionado lee las plazas como small,medium,large, después los comandos park car AB12, leave AB12 3 o status, e imprime cada respuesta.

Tu código debe estar en vehicle.rb, motorbike.rb, car.rb, van.rb y garage.rb. main.rb contiene el código proporcionado de entrada/salida y no se puede editar.

Pruébalo tú mismo

require_relative 'vehicle'
require_relative 'motorbike'
require_relative 'car'
require_relative 'van'
require_relative 'garage'

# Código de entrada/salida suministrado: déjalo tal como está
input = []
while (line = gets)
  input << line.chomp
end
small, medium, large = input[0].split(",").map(&:to_i)
garage = Garage.new(small, medium, large)
kinds = { "bike" => Motorbike, "car" => Car, "van" => Van }
input.drop(1).each do |cmd|
  parts = cmd.split
  case parts[0]
  when "park" then puts garage.park(kinds[parts[1]].new(parts[2]))
  when "leave" then puts garage.leave(parts[1], parts[2].to_i)
  else puts garage.status
  end
end

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de Ruby online