Operators overloading (Playground)
Description
Implement a kind of date arithmetic. Support adding years, weeks and days to a date. You could be able to write the code like this:
date + YEAR * 2 + WEEK * 3 + DAY * 15
.
日付演算を実装しましょう。日付の年、週、日の加算をサポートし、
date + YEAR * 2 + WEEK * 3 + DAY * 15
のようなコードが書けるようにしてください。
At first, add an extension function ‘plus()’ to MyDate, taking a TimeInterval as an argument. Use an utility function
MyDate.addTimeIntervals()
declared inDateUtil.kt
まず、TimeInterval を引数にとる拡張関数 ‘plus()’ を MyDate に追加します。
DateUtil.kt
に定義されているユーティリティ関数MyDate.addTimeIntervals()
を使用してください。
Then, try to support adding several time intervals to a date. You may need an extra class.
次に、日付にタイムインターバルを追加できるようにしてください。必要に応じてクラスを追加しましょう。
Code
import TimeInterval.*
data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int)
enum class TimeInterval { DAY, WEEK, YEAR }
operator fun MyDate.plus(timeInterval: TimeInterval): MyDate = addTimeIntervals(timeInterval, 1)
class RepeatedTimeInterval(val timeInterval: TimeInterval, val number: Int)
operator fun TimeInterval.times(number: Int) = RepeatedTimeInterval(this, number)
operator fun MyDate.plus(timeIntervals: RepeatedTimeInterval) = addTimeIntervals(timeIntervals.timeInterval, timeIntervals.number)
fun task1(today: MyDate): MyDate {
return today + YEAR + WEEK
}
fun task2(today: MyDate): MyDate {
return today + YEAR * 2 + WEEK * 3 + DAY * 5
}
Memo
- 演算子のオーバーロード
- この問題の実際の実装は
DateUtil.kt
のMyDate.addTimeIntervals()
RepeatedTimeInterval
は、TimeInterval
がnumber
回分というデータ構造
- この問題の実際の実装は