https://coderun.yandex.ru/problem/dayofweek-ya-intern/description Средняя

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter

fun isLeapYear(year: Int): Boolean {
    return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)
}

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    // Дни в месяцах (невисокосный год)
    val daysInMonth = intArrayOf(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    val months = mapOf(
        "January" to 1, "February" to 2, "March" to 3, "April" to 4,
        "May" to 5, "June" to 6, "July" to 7, "August" to 8,
        "September" to 9, "October" to 10, "November" to 11, "December" to 12
    )
    val daysOfWeek = listOf("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")

    // Опорная дата: 1 января 1980 года — Tuesday (индекс 1 в daysOfWeek)
    val baseYear = 1980
    val baseDayOfWeek = 1 // Tuesday

    var line: String?
    while (reader.readLine().also { line = it } != null) {
        val parts = line!!.split(" ")
        val day = parts[0].toInt()
        val monthName = parts[1]
        val year = parts[2].toInt()

        val month = months[monthName]!!

        // Подсчитываем дни от 1 января 1980 до заданного года (не включая текущий год)
        var totalDays = 0
        for (y in baseYear until year) {
            totalDays += if (isLeapYear(y)) 366 else 365
        }

        // Добавляем дни в текущем году до заданного месяца
        val leap = isLeapYear(year)
        for (m in 1 until month) {
            if (m == 2 && leap) {
                totalDays += 29
            } else {
                totalDays += daysInMonth[m]
            }
        }

        // Добавляем дни текущего месяца
        totalDays += day - 1 // -1, так как 1-е число — это 0 дополнительных дней

        // Вычисляем день недели
        val dayIndex = (totalDays + baseDayOfWeek) % 7
        writer.write(daysOfWeek[dayIndex])
        writer.newLine()
    }

    reader.close()
    writer.close()
}