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}") }
}