Problem:
タイムカード

問題

JOI商事では社員の在社時間をタイムカードで管理している．社員は，出社すると専用の装置を使ってタイムカードに出社時刻を刻印する．勤務を終え退社するときにも，タイムカードに退社時刻を刻印する．時刻は24時間制で扱われる．

防犯上の理由から，社員の出社時刻は7時以降である．また，全ての社員は23時より前に退社する．社員の退社時刻は常に出社時刻より後である．

入力としてJOI商事の3人の社員Aさん，Bさん，Cさんの出社時刻と退社時刻が与えられたとき，それぞれの社員の在社時間を計算するプログラムを作成せよ．

入力

入力は3行からなる． 1行目にはAさんの出社時刻と退社時刻， 2行目にはBさんの出社時刻と退社時刻， 3行目にはCさんの出社時刻と退社時刻がそれぞれ空白で区切られ書かれている．

時刻はそれぞれ空白で区切られた3つの整数で書かれている． 3つの整数 h, m, s は h 時 m 分 s 秒を表す． 7 ≤ h ≤ 22, 0 ≤ m ≤ 59, 0 ≤ s ≤ 59 である．

出力

1行目にAさんの在社時間， 2行目にBさんの在社時間， 3行目にCさんの在社時間を出力せよ．

出力する在社時間が h 時間 m 分 s 秒の場合， h, m, s の順に空白で区切って出力せよ．

入出力例

入力例

9 0 0 18 0 0
9 0 1 18 0 0
12 14 52 12 15 30

出力例

9 0 0
8 59 59
0 0 38

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。

Solution in Kotlin (judge verdict: Accepted)


fun main(args:Array<String>):Unit {
    val a = readLine()!!.split(' ').map(String::toInt)
    println(Time(a[3], a[4], a[5]) - Time(a[0], a[1], a[2]))
    val b = readLine()!!.split(' ').map(String::toInt)
    println(Time(b[3], b[4], b[5]) - Time(b[0], b[1], b[2]))
    val c = readLine()!!.split(' ').map(String::toInt)
    println(Time(c[3], c[4], c[5]) - Time(c[0], c[1], c[2]))
}
class Time(hour:Int, minute:Int, second:Int){
    private constructor(second:Int):this(second / 3600, (second % 3600) / 60, second % 60)
    private val mSecond = second % 60
    private val mMinute = (second / 60 + minute) % 60
    private val mHour = ((second / 60) + minute) / 60 + hour
    override fun toString(): String = "$mHour $mMinute $mSecond"
    operator fun plus(other:Time):Time = Time(mHour + other.mHour, mMinute + other.mMinute, mSecond + other.mSecond)
    operator fun minus(other:Time):Time = Time(mHour * 3600 + mMinute * 60 + mSecond - other.mHour * 3600 - other.mMinute * 60 - other.mSecond)
}