Назад к задачам
Junior — Senior
25

Трансформация списка спортивных дисциплин в массив результатов

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Даны три класса: Sportsman, Sport и Result. В массиве triathlon находятся объекты Sport, каждый из которых содержит название дисциплины и список участников‑спортсменов. Необходимо пройтись по этому массиву, для каждой дисциплины собрать имена спортсменов, чьи баллы (score) превышают 5, и подсчитать суммарный возраст всех таких квалифицированных участников. Затем сформировать объект Result с полями discipline, qualified (список имён) и totalAge (общий возраст) и добавить его в список results внутри функции main. После выполнения программы вывести полученный список результатов в JSON‑формате.

import 'dart:convert';

class Sportsman {
  String name;
  int score;
  int age;

  Sportsman({required this.name, required this.score, required this.age});
}

class Sport {
  String discipline;
  List<Sportsman> players;

  Sport({required this.discipline, required this.players});
}

class Result {
  String discipline;
  List<String> qualified;
  int totalAge;

  Result({required this.discipline, required this.qualified, required this.totalAge});

  Map toJson() => {
        'discipline': discipline,
        'totalAge': totalAge,
        'qualified': qualified.join(', ')
      };
}

List<Sport> triathlon = [
  Sport(discipline: 'swimming', players: [
    Sportsman(name: 'Mike', age: 20, score: 9),
    Sportsman(name: 'Jim', age: 23, score: 5),
    Sportsman(name: 'Sam', age: 38, score: 12),
  ]),
  Sport(discipline: 'run', players: [
    Sportsman(name: 'John', age: 27, score: 8),
    Sportsman(name: 'Anne', age: 33, score: 11),
    Sportsman(name: 'David', age: 41, score: 2),
  ]),
  Sport(discipline: 'cycling', players: [
    Sportsman(name: 'Fred', age: 20, score: 1),
    Sportsman(name: 'John', age: 20, score: 3),
    Sportsman(name: 'Sam', age: 20, score: 7),
  ]),
];

//qualified where score > 5
///
/// {"discipline":"swimming","qualified":["Mike","Sam"],"totalAge":58},
/// {"discipline":"run","qualified":["John","Anne"],"totalAge":60},
/// {"discipline":"cycling","qualified":["Sam"],"totalAge":20}
///

void main() {
  List<Result> results = [];

  print(json.encode(results));
}