|
fun main(){ |
|
print(solution(3600)) |
|
} |
|
// output: 1h |
|
|
|
fun solution(X: Int): String { |
|
var secondsValue = TimeUnit.SECONDS() |
|
var minutesValue = TimeUnit.MINUTES() |
|
var hoursValue = TimeUnit.HOURS() |
|
var daysValue = TimeUnit.DAYS() |
|
var weeksValue = TimeUnit.WEEKS() |
|
var remainder = X |
|
do { |
|
when { |
|
remainder < 60 -> { |
|
secondsValue = TimeUnit.SECONDS(remainder) |
|
remainder = 0 |
|
} |
|
|
|
remainder < 3600 -> { |
|
minutesValue = TimeUnit.MINUTES(remainder / 60) |
|
remainder %= 60 |
|
} |
|
|
|
remainder < 86400 -> { |
|
hoursValue = TimeUnit.HOURS(remainder / 3600) |
|
remainder %= 3600 |
|
} |
|
|
|
remainder < 604800 -> { |
|
daysValue = TimeUnit.DAYS(remainder / 86400) |
|
remainder %= 86400 |
|
} |
|
|
|
else -> { |
|
weeksValue = TimeUnit.WEEKS(remainder / 604800) |
|
remainder %= 604800 |
|
} |
|
} |
|
} while (remainder != 0) |
|
val order = arrayOf(weeksValue, daysValue, hoursValue, minutesValue, secondsValue) |
|
order.sortBy { it.order } |
|
val selection = order.filter { it.value != 0 }.toMutableList() |
|
selection.getOrNull(2)?.let { |
|
selection[1] = selection[1].mCopy(selection[1].value + 1) |
|
} |
|
return "${selection.first().run { printRepresentation() }}${ |
|
selection.getOrNull(1)?.run { printRepresentation() } ?: "" |
|
}" |
|
} |
|
|
|
sealed class TimeUnit(open val value:Int, private val abbreviation:String,val order:Int){ |
|
fun printRepresentation():String = "$value$abbreviation" |
|
abstract fun mCopy(value: Int = 0):TimeUnit |
|
data class SECONDS(override val value: Int = 0): TimeUnit(value,"s",5) { |
|
override fun mCopy(value: Int): TimeUnit { |
|
return copy(value = value) |
|
} |
|
} |
|
|
|
data class MINUTES(override val value: Int = 0): TimeUnit(value,"m",4){ |
|
override fun mCopy(value: Int): TimeUnit { |
|
return copy(value = value) |
|
} |
|
} |
|
data class HOURS(override var value: Int = 0): TimeUnit(value,"h",3){ |
|
override fun mCopy(value: Int): TimeUnit { |
|
return copy(value = value) |
|
} |
|
} |
|
data class DAYS(override val value: Int = 0): TimeUnit(value,"d",2){ |
|
override fun mCopy(value: Int): TimeUnit { |
|
return copy(value = value) |
|
} |
|
} |
|
data class WEEKS(override val value: Int = 0): TimeUnit(value,"w",1){ |
|
override fun mCopy(value: Int): TimeUnit { |
|
return copy(value = value) |
|
} |
|
} |
|
} |