주차장
Coddy R 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 55번째.
챌린지
어려움주차장을 만드세요. Vehicle.R은 가상 S4 클래스 Vehicle(슬롯 plate), 제네릭 size_rank(v)와 rate(v), 그리고 순위 1, 2, 3에 해당하는 이름 SIZES인 small, medium, large를 선언합니다.
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 컴파일러