Poprawiona wersja

mail@pastecode.io avatar
unknown
dart
a month ago
2.9 kB
9
Indexable
Never
import 'package:sj_manager/bridge.dart';

UserAlgorithm<ClassificationScoreCreator> create() {
  return UserAlgorithm<ClassificationScoreCreator>(
    id: 'world_cup_individual',
    name: {
      "pl": "Puchar Świata (indywidualny)",
      "en": "World Cup (individual)",
      "cz": "Světový Pohár",
    },
    description: {
      "pl": "Punktuje TOP30 w każdym konkursie, według dobrze znanych wszystkim zasad PŚ",
      "en": "TOP30 of each competition scores, according to the well known WC rules",
      "cz": "TOP30 bodů z každé soutěže podle známých pravidel SP",
    },
    algorithm:
        _Algorithm(), // Tutaj jedynie pamiętajmy, żeby dobrze wpisać nazwę "klasy", którą stworzyliśmy poniżej
  );
}

class _Algorithm extends ClassificationScoreCreator {
  ClassificationScore compute(ClassificationScoreCreatingContext context) {
    // "context" to obiekt mający wszystkie przydatne informacje. Kiedyś dam dobrą instrukcję do tego, co tam znajdziemy.
    // "context.entity" to nasz skoczek bądź drużyna (w zależności)
    // Aby sprawdzić czy konkurs jest indywidualny/drużynowy, musimy sprawdzić "competition is Competition<Jumper> lub Competition<Team>"
    final significantCompetitions = context.playedCompetition.where((competition) {
      return competition.labels.contains(CompetitionType.competition) &&
          competition is Competition<
              Jumper>; // Chcemy tylko konkursy "główne", które są konkursami indywidualnymi. Dwa znaki "&" oznaczają, że muszą być spełnione oba warunki
    });
    final pointsMap = {
      1: 100,
      2: 80,
      3: 60,
      4: 50,
      5: 45,
      6: 40,
      7: 36,
      8: 32,
      9: 29,
      10: 26,
      11: 24,
      12: 22,
      13: 20,
      14: 18,
      15: 16,
      16: 15,
      17: 14,
      18: 13,
      19: 12,
      20: 11,
      21: 10,
      22: 9,
      23: 8,
      24: 7,
      25: 6,
      26: 5,
      27: 4,
      28: 3,
      29: 2,
      30: 1,
    };
    var competitionScores = <CompetitionScore>[];
    var points = 0; // Tworzymy zmienną z punktami
    for (var competition in significantCompetitions) {
      // Przechodzimy przez wszystkie przefiltrowane zawody
      final position = competition.standings.positionOf(
          entity); // Dowiedz się, jakie miejsce zajął skoczek w zawodach. Entity w tym przypadku jest skoczkiem.
      final pointsAddition =
          pointsMap[position] ?? 0; // Dodaj punkty w zależności od miejsca w zawodach
      if (pointsAddition > 0) {
        points += pointsAddition;
        competitionScores.add(competition.standings.scoreOf(entity));
      }
    }

    return ClassificationScore<Jumper>(
      entity: entity,
      points: points,
      competitionScores: competitionScores, // Lista konkursów, gdzie punktował zawodnik
    );
  }
}
Leave a Comment