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.1.58 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.57 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.56 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.55 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.54 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.53 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.52 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.51 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.50 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.49 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.48 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.47 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.46 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.45 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.44 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.43 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.42 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.41 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.40 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt
trackler-2.2.1.39 tracks/kotlin/exercises/meetup/.meta/src/reference/kotlin/Meetup.kt