Sha256: aed39a23519428ef36f8b3033ffb2b97c70f623023f0491076addd5f776e6c5b

Contents?: true

Size: 1.31 KB

Versions: 181

Compression:

Stored size: 1.31 KB

Contents

import java.time.DayOfWeek
import java.time.LocalDate

class Meetup(monthOfYear: Int, year: Int) {

    private val startOfMonth: LocalDate = LocalDate.of(year, monthOfYear, 1)

    fun day(dayOfWeek: DayOfWeek, schedule: MeetupSchedule): LocalDate {
        var result = cycleToNext(dayOfWeek, startOfMonth)

        @Suppress("NON_EXHAUSTIVE_WHEN")
        when (schedule) {
            MeetupSchedule.SECOND -> result = result.plusWeeks(1)
            MeetupSchedule.THIRD  -> result = result.plusWeeks(2)
            MeetupSchedule.FOURTH -> result = result.plusWeeks(3)
            MeetupSchedule.LAST   -> result = cycleToPrev(dayOfWeek, startOfMonth.plusMonths(1).minusDays(1))
            MeetupSchedule.TEENTH -> {
                while (result.dayOfMonth < 13) result = result.plusWeeks(1)
            }
        }

        return result
    }

    private fun cycleToPrev(dayOfWeek: DayOfWeek, current: LocalDate): LocalDate {
        var result = current

        while (result.dayOfWeek != dayOfWeek) {
            result = result.minusDays(1)
        }

        return result
    }

    private fun cycleToNext(dayOfWeek: DayOfWeek, current: LocalDate): LocalDate {
        var result = current

        while (result.dayOfWeek != dayOfWeek) {
            result = result.plusDays(1)
        }

        return result
    }

}

Version data entries

181 entries across 181 versions & 1 rubygems

Version Path
trackler-2.2.0.5 tracks/kotlin/exercises/meetup/src/example/kotlin/Meetup.kt