Menu
Coddy logo textTech

Parkhaus

Teil des Abschnitts Objektorientierte Programmierung der Ruby-Journey von Coddy. Lektion 55 von 57.

challenge icon

Aufgabe

Schwer

Baue ein Parkhaus. Vehicle speichert ein plate; seine Unterklassen definieren size und hourly_rate: Motorbike hat die Größe 1 (klein) zu 1 pro Stunde, Car die Größe 2 (mittel) zu 3 und Van die Größe 3 (groß) zu 5. Die Konstante SIZES des Parkhauses ist %w[small medium large]. Garage.new(small, medium, large) nimmt die Anzahl der Stellplätze pro Größe entgegen. park(vehicle) stellt ein Fahrzeug auf einen freien Stellplatz seiner eigenen Größe oder, falls keiner frei ist, auf einen der nächstgrößeren Größe und gibt parked AB12 in medium oder full for AB12 zurück. leave(plate, hours) gibt den Stellplatz frei und gibt AB12 paid 9 zurück (der Tarif multipliziert mit der Anzahl der Stunden, mindestens 1 Stunde) oder no vehicle AB12. status gibt free: small 1, medium 0, large 2 zurück.

Der bereitgestellte Code liest die Stellplätze als small,medium,large ein, anschließend die Befehle park car AB12, leave AB12 3 oder status, und gibt jede Antwort aus.

Dein Code gehört in vehicle.rb, motorbike.rb, car.rb, van.rb und garage.rb. main.rb enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

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

# Gelieferter Ein-/Ausgabecode: belasse ihn wie er ist
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

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Ruby-Compiler