Menu
Coddy logo textTech

Parcheggio

Fa parte della sezione Programmazione orientata agli oggetti del percorso Ruby di Coddy. Lezione 55 di 57.

challenge icon

Sfida

Difficile

Costruisci un garage. Vehicle memorizza una plate; le sue sottoclassi definiscono size e hourly_rate: Motorbike ha dimensione 1 (piccola) al costo di 1 all’ora, Car dimensione 2 (media) al costo di 3 e Van dimensione 3 (grande) al costo di 5. La costante del garage SIZES è %w[small medium large]. Garage.new(small, medium, large) accetta il numero di posti per ogni dimensione. park(vehicle) parcheggia un veicolo in un posto libero della sua dimensione oppure, se non ce ne sono, in uno della dimensione immediatamente superiore, e restituisce parked AB12 in medium oppure full for AB12. leave(plate, hours) libera il posto e restituisce AB12 paid 9 (la tariffa moltiplicata per il numero di ore, almeno 1 ora) oppure no vehicle AB12. status restituisce free: small 1, medium 0, large 2.

Il codice fornito legge i posti nel formato small,medium,large, poi i comandi park car AB12, leave AB12 3 oppure status, e stampa ogni risposta.

Il tuo codice va inserito in vehicle.rb, motorbike.rb, car.rb, van.rb e garage.rb. main.rb contiene il codice di input/output fornito e non può essere modificato.

Provalo tu

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

# Codice di input/output fornito: lascialo così com'è
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

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Ruby online