Не могу решить задачу 54 Ейлера

Решил как-то решить одну задачу из проекта Ейлера, а именно 54(https://euler.jakumo.org/problems/view/54.html)

Несколько дней с ней мучаюсь, но никак не выходит правильное значение.

from collections import Counter

player_1 = 0
player_2 = 0

rating = {'A': 14, 'K': 13, 'Q': 12, 'J': 11, 'T': 10, '9': 9,
          '8': 8, '7': 7, '6': 6, '5': 5, '4': 4, '3': 3, '2': 2, '1': 1}

def values(x):
    cards = [sorted([rating[i] for i in x[0]]), x[1]]

    if max(Counter(cards[0]).values()) == 2: #Одна пара
        return 2
    elif Counter(cards[0]).values() == [2, 2, 1]: #Две пары
        return 3
    elif max(Counter(cards[0]).values()) == 3:#Тройка
        return 4
    elif cards[0][-1] - cards[0][0] == 4: #Стрейт
        return 5
    elif cards[1] is True: #Флаш
        return 6
    elif sorted(Counter(cards[0]).values()) == [2, 3]: #Фул-хаус
        return 7
    elif max(Counter(cards[0]).values()) == 4: #Каре
        return 8
    elif cards[0][-1] - cards[0][0] == 4 and cards[1] is True: #Стрейт-флаш
        return 9
    elif cards == [[10, 11, 12, 13, 14], True]: #Роял-флаш
        return 10
    else:
        return 0

def check(x, y): #сравнение достоинств карт каре, фул-хаус, тройка, две пары и одна пара
    a1 = [rating[i] for i in x[0]]
    keys = sorted([i for i in Counter(a1).values()])[::-1]
    for i in keys:
        if rating[get_key(Counter(x[0]), i)] > rating[get_key(Counter(y[0]), i)]:
            return True
        elif rating[get_key(Counter(x[0]), i)] < rating[get_key(Counter(y[0]), i)]:
            return False
        else:
            return check_cards_0(x, y)

def check_cards_0(x, y): #сравнение достоинств карт самых младших комбинаций
    a1 = sorted([rating[i] for i in x[0]])[::-1]
    a2 = sorted([rating[i] for i in y[0]])[::-1]
    for i in range(4):
        if a1[i] == a2[i]:
            pass
        else:
            if a1[i] > a2[i]:
                return True
            else:
                return False

def get_key(d, value):
    for k, v in d.items():
        if v == value:
            return k

with open('poker.txt', 'r') as file:
    for a in file.readlines():
        p1 = [[x for x, y in a.split()[0:5]], all(x == [y for x, y in a.split()[0:5]][0] for x in [y for x, y in a.split()[0:5]])]
        p2 = [[x for x, y in a.split()[5::]], all(x == [y for x, y in a.split()[5::]][0] for x in [y for x, y in a.split()[5::]])]
        print(p1, values(p1), p2, values(p2)) # [[список достоинств карт], True(если все карты одной масти) или False(если не одной масти)]
        if values(p1) > values(p2):
            print(values(p1), values(p2))
            player_1 += 1
        elif values(p1) < values(p2):
            print(values(p1), values(p2))
            player_2 += 1
        else:
            print(values(p1), values(p2))
            if values(p1) in [8, 7, 4, 3, 2]:
                if check(p1, p2) is True:
                    player_1 += 1
                else:
                    player_2 += 1
            else:
                if check_cards_0(p1, p2) is True:
                    player_1 += 1
                else:
                    player_2 += 1

print(player_1, player_2)

У меня выходит 382 618, а должно 376 624


Ответы (0 шт):