Przykładowy algorytm tworzenia klasyfikacji

mail@pastecode.io avatar
unknown
dart
5 months ago
2.4 kB
1
Indexable
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 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.
      points += pointsMap[position]; // Dodaj punkty w zależności od miejsca w zawodach
    }
  }
}
Leave a Comment