https://leetcode.com/problems/day-of-the-week/ Easy

Решение

fun dayOfTheWeek(day: Int, month: Int, year: Int): String {
		// Проверка на високосный год
		fun isLeapYear(year: Int): Boolean {
		    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
		}
		
    // Список дней недели, начиная с воскресенья
    val daysOfWeek = arrayOf("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")

    // Количество дней в каждом месяце невисокосного года
    val daysInMonth = intArrayOf(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

    // Начальная точка — 1 января 1971 года (пятница)
    var totalDays = 4 // Индекс пятницы в daysOfWeek

    // Считаем количество дней с 1971 до (year-1)
    for (y in 1971 until year) {
        totalDays += if (isLeapYear(y)) 366 else 365
    }

    // Считаем дни с начала года до указанного месяца
    for (m in 1 until month) {
        totalDays += daysInMonth[m]
        // Добавляем 1 день, если текущий год високосный и месяц прошел февраль
        if (m == 2 && isLeapYear(year)) {
            totalDays += 1
        }
    }

    // Добавляем дни текущего месяца
    totalDays += day

    // Возвращаем день недели по индексу
    return daysOfWeek[totalDays % 7]
}