Загрузка данных


data class Student(
    val name: String,
    val group: String,
    val scores: List<Int>
)

fun main() {
    val students = listOf(
        Student("Иван Иванов", "ИСП-21", listOf(5, 4, 5, 4)),
        Student("Пётр Петров", "ИСП-21", listOf(3, 3, 4, 3)),
        Student("Анна Сидорова", "ИСП-21", listOf(5, 5, 5, 5)),
        Student("Мария Смирнова", "ИСП-22", listOf(4, 4, 5, 4)),
        Student("Алексей Козлов", "ИСП-22", listOf(2, 3, 4, 3)),
        Student("Дмитрий Орлов", "ИСП-22", listOf(5, 5, 4, 5))
    )

    classReport(students)
}

fun getAverageScore(student: Student): Double {
    return student.scores.average()
}

fun classReport(students: List<Student>) {
    println("1. Список студентов (по убыванию среднего балла):")
    students.sortedByDescending { getAverageScore(it) }
        .forEach { println("   ${it.name} (${it.group}): ${String.format("%.2f", getAverageScore(it))}") }

    val grouped = students.groupBy { it.group }

    println("\n2. Лучший студент в каждой группе:")
    grouped.mapValues { (_, list) -> list.maxByOrNull { getAverageScore(it) } }
        .forEach { (group, student) -> println("   $group: ${student?.name}") }

    println("\n3. Средний балл по каждой группе:")
    grouped.mapValues { (_, list) -> list.flatMap { it.scores }.average() }
        .forEach { (group, avg) -> println("   $group: ${String.format("%.2f", avg)}") }

    println("\n4. Отличники (средний балл >= 4.0):")
    students.filter { getAverageScore(it) >= 4.0 }
        .forEach { println("   ${it.name}") }

    println("\n5. Должники (есть хотя бы одна 2):")
    students.filter { student -> student.scores.any { it == 2 } }
        .forEach { println("   ${it.name}") }
}