Menu
CoddyTech

Nhà để xe

Thuộc phần Lập trình hướng đối tượng trong hành trình Kotlin của Coddy. Bài học 55 trên 57.

challenge icon

Thử thách

Khó

Xây dựng một nhà để xe.

  • Enum Size có các giá trị SMALL, MEDIUM và LARGE, theo thứ tự đó, mỗi giá trị có label viết thường.
  • Vehicle(plate) là một lớp sealed với các thuộc tính trừu tượng size và hourlyRate. Motorbike có kích thước nhỏ (1 mỗi giờ), Car có kích thước vừa (3) và Van có kích thước lớn (5).
  • Garage(small, medium, large) được tạo với số chỗ cho mỗi kích thước. park(vehicle) đưa phương tiện vào một chỗ trống có cùng kích thước hoặc, nếu không còn chỗ, vào chỗ trống có kích thước lớn hơn kế tiếp, rồi trả lời parked AB12 in medium, full for AB12 hoặc AB12 is already parked. leave(plate, hours) giải phóng chỗ đỗ và trả lời AB12 paid 9 (mức phí nhân với số giờ, tối thiểu 1 giờ), hoặc no vehicle AB12. status() trả lời free: small 1, medium 0, large 2.

Code được cung cấp đọc số chỗ theo định dạng small,medium,large, sau đó đọc các lệnh park car AB12 (bike, car hoặc van), leave AB12 3 hoặc status, rồi in ra từng câu trả lời.

Code của bạn nằm trong các tệp Size.kt, Vehicle.kt, Motorbike.kt, Car.kt, Van.kt và Garage.kt. Main.kt chứa code đầu vào/đầu ra được cung cấp và không thể chỉnh sửa.

Tự làm thử

fun main() {
    // Đoạn code đầu vào/đầu ra đã được cung cấp: giữ nguyên
    val input = generateSequence(::readLine).toList()
    val (small, medium, large) = input[0].split(",").map { it.toInt() }
    val garage = Garage(small, medium, large)
    for (cmd in input.drop(1)) {
        val p = cmd.split(" ")
        when (p[0]) {
            "park" -> {
                val vehicle = when (p[1]) {
                    "bike" -> Motorbike(p[2])
                    "van" -> Van(p[2])
                    else -> Car(p[2])
                }
                println(garage.park(vehicle))
            }
            "leave" -> println(garage.leave(p[1], p[2].toInt()))
            else -> println(garage.status())
        }
    }
}

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Playground Kotlin