Menu
Coddy logo textTech

Otopark

Coddy'nin Swift Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 55 / 57.

challenge icon

Görev

Zor

Bir otopark garajı oluşturun. Vehicle protokolünde plate, size (small = 1, medium = 2, large = 3 değerlerine sahip Size: Int, Comparable enum'u) ve hourlyRate bulunur. Motorbike (small, saat başına 1), Car (medium, 3) ve Van (large, 5) yapılarını uygulayın. Garage sınıfı, her boyut için bir park yeri sayısıyla oluşturulur. park(_:), bir aracı kendi boyutundaki boş bir yere veya boş yer yoksa bir sonraki daha büyük boyuttaki yere koyar ve parked AB12 in medium ya da full for AB12 yanıtını verir. leave(plate:hours:) park yerini boşaltır ve AB12 paid 9 (ücret çarpı saat, en az 1 saat) ya da no vehicle AB12 yanıtını verir. status() ise free: small 1, medium 0, large 2 yanıtını verir.

Sağlanan kod, park yeri sayılarını small,medium,large biçiminde okur; ardından park car AB12, leave AB12 3 veya status komutlarını işler ve her yanıtı yazdırır.

Kodunuz Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift ve Garage.swift dosyalarına yazılmalıdır. main.swift sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

// Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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())
    }
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Swift playground