Menu
Coddy logo textTech

Estacionamento

Parte da seção Programação orientada a objetos do Journey de Ruby da Coddy. Lição 55 de 57.

challenge icon

Desafio

Difícil

Construa uma garagem de estacionamento. Vehicle armazena uma plate; suas subclasses definem size e hourly_rate: Motorbike tem tamanho 1 (pequeno) e custa 1 por hora, Car tem tamanho 2 (médio) e custa 3, e Van tem tamanho 3 (grande) e custa 5. A constante SIZES da garagem é %w[small medium large]. Garage.new(small, medium, large) recebe o número de vagas por tamanho. park(vehicle) coloca um veículo em uma vaga livre do seu próprio tamanho ou, se nenhuma estiver livre, do próximo tamanho maior, e retorna parked AB12 in medium ou full for AB12. leave(plate, hours) libera a vaga e retorna AB12 paid 9 (a tarifa multiplicada pelo número de horas, com no mínimo 1 hora), ou no vehicle AB12. status retorna free: small 1, medium 0, large 2.

O código fornecido lê as vagas como small,medium,large, depois recebe os comandos park car AB12, leave AB12 3 ou status, e imprime cada resposta.

Seu código deve ser colocado em vehicle.rb, motorbike.rb, car.rb, van.rb e garage.rb. main.rb contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

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

# Código de entrada/saída fornecido: mantenha-o 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 as lições de Programação orientada a objetos

Pratique por conta própria: Compilador de Ruby online