駐車場
CoddyのRジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 55/57。
チャレンジ
難しい駐車場を構築してください。Vehicle.R では、仮想 S4 クラス Vehicle(スロット plate)、ジェネリック関数 size_rank(v) と rate(v)、およびランク 1、2、3 に対応する名前 SIZES:small、medium、large を宣言します。
Motorbike.R、Car.R、Van.Rではクラスが宣言されています。それぞれのメソッドを追加してください。motorbike のランクは 1 で 1 時間あたり 1、car のランクは 2 で 1 時間あたり 3、van のランクは 3 で 1 時間あたり 5 です。Garage.Rでは Reference ClassGarageを完成させてください。そのフィールドfreeにはランクごとの空きスペースが格納され、parkedはプレート番号をキーとするリストです。park(v)は車両自身のランクの空きスペースを使用し、空きがない場合は次に大きいランクのスペースを使用します。そしてparked AB12 in medium、full for AB12、またはAB12 is already parkedを返します。leave(plate, hours)はスペースを解放し、AB12 paid 9(料金に時間数を掛けたもの。ただし最低 1 時間)またはno vehicle AB12を返します。status()はfree: small 1, medium 0, large 2; parked: 1を返します。
提供されているコードは空きスペースを small,medium,large として読み込み、その後、park car AB12(bike、car、または van)、leave AB12 3、または status のコマンドを処理し、それぞれの応答を出力します。
コードは Vehicle.R、Motorbike.R、Car.R、Van.R、Garage.R に記述してください。main.R には提供された入出力コードが含まれており、編集できません。
自分で試してみよう
source("Vehicle.R")
source("Motorbike.R")
source("Car.R")
source("Van.R")
source("Garage.R")
# 提供された入出力コード: そのままにしておく
input <- suppressWarnings(readLines(file("stdin")))
garage <- Garage$new(free = as.numeric(strsplit(input[1], ",")[[1]]))
for (line in input[-1]) {
p <- strsplit(line, " ")[[1]]
reply <- switch(p[1],
park = garage$park(switch(p[2],
bike = new("Motorbike", plate = p[3]),
car = new("Car", plate = p[3]),
van = new("Van", plate = p[3]))),
leave = garage$leave(p[2], as.numeric(p[3])),
status = garage$status())
cat(reply, "\n", sep = "")
}
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Rオンラインコンパイラ