Menu
Coddy logo textTech

駐車場

CoddyのKotlinジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 55/57。

challenge icon

チャレンジ

難しい

駐車場を作成してください。

  • 列挙型 Size には、順番に SMALL、MEDIUM、LARGE があり、それぞれ小文字の label を持ちます。
  • Vehicle(plate) は、size と hourlyRate という抽象プロパティを持つ sealed クラスです。Motorbike は小型(1時間あたり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(料金に時間数を掛けたもの。ただし最低1時間)または 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プレイグラウンド