Menu
Coddy logo textTech

Parking wielopoziomowy

Część sekcji Programowanie obiektowe ścieżki R w Coddy. Lekcja 55 z 57.

challenge icon

Wyzwanie

Trudny

Zbuduj garaż. Vehicle.R deklaruje wirtualną klasę S4 Vehicle (slot plate), generyki size_rank(v) i rate(v) oraz nazwy SIZES: small, medium, large dla rang 1, 2 i 3.

  • W plikach Motorbike.R, Car.R i Van.R deklarowane są klasy; dodaj ich metody: motocykl ma rangę 1 i płaci 1 za godzinę, samochód ma rangę 2 i płaci 3 za godzinę, a van ma rangę 3 i płaci 5 za godzinę.
  • W pliku Garage.R uzupełnij klasę referencyjną Garage. Jej pole free przechowuje liczbę wolnych miejsc dla każdej rangi, a parked jest listą uporządkowaną według tablic rejestracyjnych. park(v) zajmuje wolne miejsce o randze pojazdu lub, jeśli nie ma wolnego miejsca, miejsce o kolejnej wyższej randze, i zwraca parked AB12 in medium, full for AB12 lub AB12 is already parked. leave(plate, hours) zwalnia miejsce i zwraca AB12 paid 9 (stawka pomnożona przez liczbę godzin, co najmniej za 1 godzinę) lub no vehicle AB12. status() zwraca free: small 1, medium 0, large 2; parked: 1.

Dostarczony kod odczytuje wolne miejsca w postaci small,medium,large, a następnie polecenia park car AB12 (bike, car lub van), leave AB12 3 lub status i wypisuje każdą odpowiedź.

Twój kod umieść w plikach Vehicle.R, Motorbike.R, Car.R, Van.R i Garage.R. main.R zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

source("Vehicle.R")
source("Motorbike.R")
source("Car.R")
source("Van.R")
source("Garage.R")

# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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 = "")
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator R online