Menu
Coddy logo textTech

Estacionamiento

Parte de la sección Programación orientada a objetos del Journey de R de Coddy. Lección 55 de 57.

challenge icon

Desafío

Difícil

Construye un garaje de estacionamiento. Vehicle.R declara la clase S4 virtual Vehicle (ranura plate), los genéricos size_rank(v) y rate(v), y los nombres SIZES: small, medium, large para los rangos 1, 2 y 3.

  • En Motorbike.R, Car.R y Van.R se declaran las clases; añade sus métodos: una motocicleta tiene rango 1 y paga 1 por hora, un automóvil tiene rango 2 y paga 3 por hora, y una furgoneta tiene rango 3 y paga 5 por hora.
  • En Garage.R, completa la clase de referencia Garage. Su campo free contiene los espacios libres por rango y parked es una lista indexada por matrícula. park(v) ocupa un espacio libre del rango propio del vehículo o, si no hay ninguno libre, del siguiente rango mayor, y responde parked AB12 in medium, full for AB12 o AB12 is already parked. leave(plate, hours) libera el espacio y responde AB12 paid 9 (la tarifa multiplicada por las horas, al menos 1 hora) o no vehicle AB12. status() responde free: small 1, medium 0, large 2; parked: 1.

El código proporcionado lee los espacios libres como small,medium,large, después recibe los comandos park car AB12 (bike, car o van), leave AB12 3 o status, e imprime cada respuesta.

Tu código debe ir en Vehicle.R, Motorbike.R, Car.R, Van.R y Garage.R. main.R contiene el código proporcionado de entrada/salida y no se puede editar.

Pruébalo tú mismo

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

# Código de entrada/salida suministrado: mantenlo como está
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 = "")
}

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de R online