Esempio n. 1
0
    def get_user_results(self, user):
        print(user.codeforces_handle)
        ContestParticipation.objects.filter(user=user).delete()
        for contest in self.CONTEST_IDS:
            contest_json_path = os.path.join(self.CODEFORCES_JSON_DIR,
                                             str(contest) + '.json')

            with open(contest_json_path) as stream:
                data = json.load(stream)['result']

            for row in data['rows']:
                if row['party']['members'][0][
                        'handle'] == user.codeforces_handle:
                    participation = ContestParticipation(
                        user=user,
                        place=row['rank'],
                        name=data['contest']['name'])
                    percentile = row['rank'] / len(data['rows']) * 100
                    participation.score = self.get_score(
                        percentile, 'Div. 1' in participation.name)
                    participation.save()
                    print(
                        participation.name, participation.score,
                        "{0}/{1}".format(participation.place,
                                         len(data['rows'])))
                    break
Esempio n. 2
0
    def handle_special_cases(self):
        """DIV1 people who participated unoficially in div2 competitions"""
        # codeforces, place, total participants, contest name
        cases = [
            ('Kira96', 195, 7429,
             'Codeforces Round #350 (Div. 2) #unofficial'),
            ('Kira96', 75, 6099, 'Codeforces Round #354 (Div. 2) #unofficial'),
            ('plus10UltimateOrb', 46, 8527,
             'Codeforces Round #353 (Div. 2) #unofficial'),
            ('plus10UltimateOrb', 11, 5079,
             'Codeforces Round #354 (Div. 2) #unofficial'),
        ]

        for case in cases:
            user = DemoUser.objects.get(codeforces_handle=case[0])
            participation = ContestParticipation(user=user,
                                                 place=case[1],
                                                 name=case[3])
            percentile = case[1] / case[2] * 100
            participation.score = self.get_score(percentile, False)
            participation.save()