Menu
Coddy logo textTech

Parking

Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 55 sur 57.

challenge icon

Défi

Difficile

Construisez un garage de stationnement. Vehicle.R déclare la classe S4 virtuelle Vehicle (slot plate), les génériques size_rank(v) et rate(v), ainsi que les noms SIZES : small, medium, large pour les rangs 1, 2 et 3.

  • Dans Motorbike.R, Car.R et Van.R, les classes sont déclarées ; ajoutez leurs méthodes : une moto a le rang 1 et paie 1 par heure, une voiture le rang 2 et 3 par heure, une camionnette le rang 3 et 5 par heure.
  • Dans Garage.R, complétez la classe de référence Garage. Son champ free contient les places libres par rang et parked est une liste indexée par plaque. park(v) prend une place libre du rang propre au véhicule ou, si aucune n'est libre, du rang immédiatement supérieur, et renvoie parked AB12 in medium, full for AB12 ou AB12 is already parked. leave(plate, hours) libère la place et renvoie AB12 paid 9 (le tarif multiplié par le nombre d'heures, avec au moins 1 heure) ou no vehicle AB12. status() renvoie free: small 1, medium 0, large 2; parked: 1.

Le code fourni lit les places libres sous la forme small,medium,large, puis les commandes park car AB12 (bike, car ou van), leave AB12 3 ou status, et affiche chaque réponse.

Votre code doit être placé dans Vehicle.R, Motorbike.R, Car.R, Van.R et Garage.R. main.R contient le code fourni d'entrée/sortie et ne peut pas être modifié.

Essayez vous-même

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

# Code d'entrée/sortie fourni : le garder tel quel
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 = "")
}

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur R en ligne