Menu
Coddy logo textTech

Estacionamento

Parte da seção Programação Orientada a Objetos do Journey de R da Coddy. Lição 55 de 57.

challenge icon

Desafio

Difícil

Construa uma garagem de estacionamento. Vehicle.R declara a classe S4 virtual Vehicle (slot plate), os genéricos size_rank(v) e rate(v) e os nomes SIZES: small, medium, large para as categorias 1, 2 e 3.

  • Em Motorbike.R, Car.R e Van.R, as classes são declaradas; adicione seus métodos: uma moto tem categoria 1 e paga 1 por hora, um carro tem categoria 2 e paga 3 por hora, uma van tem categoria 3 e paga 5 por hora.
  • Em Garage.R, conclua a classe de referência Garage. Seu campo free contém as vagas livres por categoria e parked é uma lista indexada pela placa. park(v) ocupa uma vaga livre da própria categoria do veículo ou, se nenhuma estiver livre, da próxima categoria maior, e retorna parked AB12 in medium, full for AB12 ou AB12 is already parked. leave(plate, hours) libera a vaga e retorna AB12 paid 9 (a tarifa multiplicada pelas horas, com no mínimo 1 hora) ou no vehicle AB12. status() retorna free: small 1, medium 0, large 2; parked: 1.

O código fornecido lê as vagas livres como small,medium,large e, em seguida, os comandos park car AB12 (bike, car ou van), leave AB12 3 ou status, imprimindo cada resposta.

Seu código deve ficar em Vehicle.R, Motorbike.R, Car.R, Van.R e Garage.R. main.R contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

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

# Código de entrada/saída fornecido: mantenha-o 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 as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de R online