Игра в пьяницу без встроенных структур

мне нужна помощь с исправлением моей программы.

Вот игра в пьяницу:

В игре в пьяницу карточная колода раздается поровну двум игрокам. Далее они вскрывают по одной верхней карте, и тот, чья карта старше, забирает себе обе вскрытые карты, которые кладутся под низ его колоды. Тот, кто остается без карт – проигрывает.

Для простоты будем считать, что все карты различны по номиналу, а также, что самая младшая карта побеждает самую старшую карту ("шестерка берет туза").

Игрок, который забирает себе карты, сначала кладет под низ своей колоды карту первого игрока, затем карту второго игрока (то есть карта второго игрока оказывается внизу колоды).

Напишите программу, которая моделирует игру в пьяницу и определяет, кто выигрывает. В игре участвует 10 карт, имеющих значения от 0 до 9, большая карта побеждает меньшую, карта со значением 0 побеждает карту 9.

Формат ввода Программа получает на вход две строки: первая строка содержит 5 чисел, разделенных пробелами — номера карт первого игрока, вторая – аналогично 5 карт второго игрока. Карты перечислены сверху вниз, то есть каждая строка начинается с той карты, которая будет открыта первой.

Формат вывода Программа должна определить, кто выигрывает при данной раздаче, и вывести слово first или second, после чего вывести количество ходов, сделанных до выигрыша. Если на протяжении 10^6 ходов игра не заканчивается, программа должна вывести слово botva.

Вот моя программа:

class Card:
    def __init__(self, rank):
        if not (0 <= rank <= 9):
            raise ValueError("Ранг может быть от 0 до 9")
        self.rank = rank
        self.next = None  


class Deck:
    def __init__(self):
        self.top = None     
        self.bottom = None  
        self.size = 0       

    def emptytest(self):
        return self.top is None  

    def add_card(self, rank):
        new_card = Card(rank)
        if self.top is None:
            self.top = new_card
            self.bottom = new_card
        else:
            self.bottom.next = new_card
            self.bottom = new_card
        self.size += 1

    def play(self):
        if self.emptytest():
            return None
        card = self.top
        self.top = self.top.next  
        self.size -= 1
        if self.top is None:
            self.bottom = None  
        return card.rank

    def take_two_cards(self, first_card, second_card):
        self.add_card(first_card)  
        self.add_card(second_card)    



player_one = Deck()
player_two = Deck()

first_player_cards = [int(x) for x in input().split()]
second_player_cards = [int(x) for x in input().split()]

for card in first_player_cards:
    player_one.add_card(card)
for card in second_player_cards:
    player_two.add_card(card)

rounds = 0
MAX_ROUNDS = 10**6

while not player_one.emptytest() and not player_two.emptytest():
    if rounds >= MAX_ROUNDS:
        print("botva")
        break

    card_one = player_one.play()
    card_two = player_two.play()
    rounds += 1

    if (card_one == 0 and card_two == 9) or (card_one > card_two and not (card_one == 9 and card_two == 0)):
        player_one.take_two_cards(card_one, card_two)
    else:
        player_two.take_two_cards(card_two, card_one)

if player_one.emptytest():
    print("second", rounds)
elif player_two.emptytest():
    print("first", rounds)

Мне также нельзя использовать встроенные структуры данных (массивы и т.д) Помогите пожалуйста!


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

Автор решения: Stanislav Volodarskiy

А это забавно! Никаких массивов, только строки. Годится?

a = ''
for c in input():
    if '0' <= c <= '9':
        a += c

b = ''
for c in input():
    if '0' <= c <= '9':
        b += c

c = 0
while a and b:
    if c >= 1_000_000:
        break
    c += 1
    if (a[0] == '0' and b[0] == '9') or ((a[0] != '9' or b[0] != '0') and a > b):
        a += a[0] + b[0]
    else:
        b += a[0] + b[0]
    a = a[1:]
    b = b[1:]

if not a:
    print('second')
elif not b:
    print('first')
else:
    print('draw')
→ Ссылка