Решение
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]
}