Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مرآب السيارات

جزء من قسم البرمجة كائنية التوجه في رحلة Kotlin على Coddy. الدرس 55 من 57.

challenge icon

التحدي

صعب

أنشئ مرأبًا للسيارات.

  • يحتوي enum Size على SMALL وMEDIUM وLARGE بهذا الترتيب، ولكل منها label بأحرف صغيرة.
  • ‏Vehicle(plate) هو sealed class يحتوي على الخاصيتين المجردتين size وhourlyRate. يكون Motorbike صغيرًا (1 لكل ساعة)، وCar متوسطًا (3)، وVan كبيرًا (5).
  • يُنشأ Garage(small, medium, large) باستخدام عدد الأماكن لكل حجم. تضع park(vehicle) المركبة في مكان شاغر من حجمها، أو، إذا لم يوجد، في المكان التالي الأكبر حجمًا الذي يتوفر فيه مكان، وتُرجع parked AB12 in medium أو full for AB12 أو AB12 is already parked. تُحرر leave(plate, hours) المكان وتُرجع AB12 paid 9 (السعر مضروبًا في عدد الساعات، بحد أدنى ساعة واحدة)، أو no vehicle AB12. تُرجع status() القيمة free: small 1, medium 0, large 2.

يقرأ الكود المزوَّد الأماكن بالتنسيق small,medium,large، ثم الأوامر park car AB12 (bike أو car أو van)، أو leave AB12 3، أو status، ويطبع كل رد.

ضع الكود في Size.kt وVehicle.kt وMotorbike.kt وCar.kt وVan.kt وGarage.kt. يحتوي Main.kt على كود الإدخال/الإخراج المزوَّد ولا يمكن تعديله.

جرّب بنفسك

fun main() {
    // كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
    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())
        }
    }
}

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: Playground لـ Kotlin