- ВКонтакте
- РћРТвЂВВВВВВВВнокласснРСвЂВВВВВВВВРєРСвЂВВВВВВВВ
- РњРѕР№ Р В Р’В Р РЋРЎв„ўР В Р’В Р РЋРІР‚ВВВВВВВВРЎР‚
- Viber
- Skype
- Telegram
Игра в пьяницу без встроенных структур
мне нужна помощь с исправлением моей программы.
Вот игра в пьяницу:
В игре в пьяницу карточная колода раздается поровну двум игрокам. Далее они вскрывают по одной верхней карте, и тот, чья карта старше, забирает себе обе вскрытые карты, которые кладутся под низ его колоды. Тот, кто остается без карт – проигрывает.
Для простоты будем считать, что все карты различны по номиналу, а также, что самая младшая карта побеждает самую старшую карту ("шестерка берет туза").
Игрок, который забирает себе карты, сначала кладет под низ своей колоды карту первого игрока, затем карту второго игрока (то есть карта второго игрока оказывается внизу колоды).
Напишите программу, которая моделирует игру в пьяницу и определяет, кто выигрывает. В игре участвует 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 шт):
А это забавно! Никаких массивов, только строки. Годится?
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')