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


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("Мария Смирнова", "ВДО-21", 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.forEach { (group, groupStudents) ->
        val best = groupStudents.maxByOrNull { getAverageScore(it) }
        println("   Группа $group: ${best?.name} (${String.format("%.2f", best?.let { getAverageScore(it) } ?: 0.0)})")
    }

    println("\n3. Средний балл по каждой группе:")
    grouped.forEach { (group, groupStudents) ->
        val groupAverage = groupStudents.map { getAverageScore(it) }.average()
        println("   Группа $group: ${String.format("%.2f", groupAverage)}")
    }

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

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