Menu
Coddy logo textTech

Парковочный гараж

Часть раздела Объектно-ориентированное программирование путешествия по R на Coddy. Урок 55 из 57.

challenge icon

Задание

Сложно

Создайте гараж. Vehicle.R объявляет виртуальный S4-класс Vehicle (слот plate), обобщённые функции size_rank(v) и rate(v), а также имена SIZES: small, medium, large для рангов 1, 2 и 3.

  • В Motorbike.R, Car.R и Van.R объявлены классы; добавьте их методы: мотоцикл имеет ранг 1 и платит 1 за час, автомобиль — ранг 2 и 3 за час, фургон — ранг 3 и 5 за час.
  • В Garage.R завершите ссылочный класс 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