Menu
Coddy logo textTech

駐車場

CoddyのRubyジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 55/57。

challenge icon

チャレンジ

難しい

駐車ガレージを構築してください。Vehicleはplateを保持し、そのサブクラスでsizeとhourly_rateを定義します。Motorbikeはサイズ1(小型)で1時間あたり1、Carはサイズ2(中型)で3、Vanはサイズ3(大型)で5です。ガレージの定数SIZESは%w[small medium large]です。Garage.new(small, medium, large)は、サイズごとの駐車スペース数を受け取ります。park(vehicle)は、車両をその車両自身のサイズの空きスペースに、空きがなければ次に大きいサイズの空きスペースに駐車し、parked AB12 in mediumまたはfull for AB12を返します。leave(plate, hours)は駐車スペースを空け、AB12 paid 9(料金に時間数を掛けた値。ただし最低1時間分)またはno vehicle AB12を返します。statusはfree: small 1, medium 0, large 2を返します。

提供されたコードは、駐車スペース数をsmall,medium,largeとして読み込み、続いてpark car AB12、leave AB12 3、またはstatusのコマンドを処理し、それぞれの応答を出力します。

コードはvehicle.rb、motorbike.rb、car.rb、van.rb、およびgarage.rbに記述します。main.rbには提供された入出力コードが含まれており、編集できません。

自分で試してみよう

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

# 提供された入出力コード: そのままにしておく
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

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Rubyオンラインコンパイラ