Menu
Coddy logo textTech

חניון

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Kotlin של Coddy. שיעור 55 מתוך 57.

challenge icon

אתגר

קשה

בנו חניון.

  • ל-enum Size יש את SMALL, MEDIUM ו-LARGE, בסדר הזה, ולכל אחד מהם label באותיות קטנות.
  • Vehicle(plate) היא מחלקה אטומה עם המאפיינים המופשטים 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())
        }
    }
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: Kotlin אונליין