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