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