Menu
Coddy logo textTech

駐車場

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

challenge icon

チャレンジ

難しい

駐車場を構築してください。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 Class Garage を完成させてください。そのフィールド 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オンラインコンパイラ