Menu
CoddyTech

Garasi Parkir

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 55 dari 57.

challenge icon

Tantangan

Sulit

Buatlah garasi parkir. Protokol Vehicle memiliki plate, size (enum Size: Int, Comparable dengan small = 1, medium = 2, large = 3) dan hourlyRate. Implementasikan Motorbike (small, 1 per jam), Car (medium, 3) dan Van (large, 5). Class Garage dibuat dengan jumlah tempat parkir untuk setiap ukuran. park(_:) menempatkan kendaraan di tempat kosong dengan ukuran yang sesuai atau, jika tidak ada yang kosong, di tempat kosong dengan ukuran berikutnya yang lebih besar, lalu memberikan respons parked AB12 in medium atau full for AB12. leave(plate:hours:) mengosongkan tempat parkir dan memberikan respons AB12 paid 9 (tarif dikali jumlah jam, minimal 1 jam), atau no vehicle AB12. status() memberikan respons free: small 1, medium 0, large 2.

Kode yang disediakan membaca jumlah tempat parkir dalam urutan small,medium,large, lalu perintah park car AB12, leave AB12 3 atau status, dan mencetak setiap respons.

Tuliskan kodemu di Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift dan Garage.swift. main.swift berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

// Kode input/output yang disediakan: biarkan apa adanya
var input: [String] = []
while let line = readLine() { input.append(line) }
let s = input[0].split(separator: ",").map { Int($0)! }
let garage = Garage(small: s[0], medium: s[1], large: s[2])
for cmd in input.dropFirst() {
    let p = cmd.split(separator: " ").map(String.init)
    switch p[0] {
    case "park":
        let v: any Vehicle
        switch p[1] {
        case "bike": v = Motorbike(plate: p[2])
        case "van": v = Van(plate: p[2])
        default: v = Car(plate: p[2])
        }
        print(garage.park(v))
    case "leave": print(garage.leave(plate: p[1], hours: Int(p[2])!))
    default: print(garage.status())
    }
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Playground Swift