Menu
CoddyTech

Garasi Parkir

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 55 dari 57.

challenge icon

Tantangan

Sulit

Buat garasi parkir. Vehicle menyimpan plate; subclass-nya mendefinisikan size dan hourly_rate: Motorbike berukuran 1 (small) dengan tarif 1 per jam, Car berukuran 2 (medium) dengan tarif 3, dan Van berukuran 3 (large) dengan tarif 5. Konstanta garasi SIZES adalah %w[small medium large]. Garage.new(small, medium, large) menerima jumlah tempat untuk tiap ukuran. park(vehicle) menempatkan kendaraan di tempat kosong yang sesuai ukurannya atau, jika tidak ada yang kosong, di tempat berukuran lebih besar berikutnya, lalu mengembalikan parked AB12 in medium atau full for AB12. leave(plate, hours) mengosongkan tempat tersebut dan mengembalikan AB12 paid 9 (tarif dikalikan jumlah jam, minimal 1 jam), atau no vehicle AB12. status mengembalikan free: small 1, medium 0, large 2.

Kode yang disediakan membaca jumlah tempat dalam format small,medium,large, lalu perintah park car AB12, leave AB12 3 atau status, dan mencetak setiap balasan.

Tulis kodemu di vehicle.rb, motorbike.rb, car.rb, van.rb, dan garage.rb. main.rb berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

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

# Kode input/output yang disediakan: biarkan apa adanya
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

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Ruby online