Решение на От ливадите до Лас Вегас (и назад) от Дуйгу Хасан

Обратно към всички решения

Към профила на Дуйгу Хасан

Резултати

  • 7 точки от тестове
  • 0 бонус точки
  • 7 точки общо
  • 11 успешни тест(а)
  • 4 неуспешни тест(а)

Код

import random
from itertools import product
suits = ['clubs', 'spades', 'diamonds', 'hearts']
card_faces = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
class Card:
def __init__(self, suit: str, face: str):
self._suit = suit
self._face = face
def get_suit(self):
return self._suit
def get_face(self):
return self._face
class Deck:
def __init__(self, face_filter=None):
if face_filter is None:
face_filter = card_faces
self._cards: list[Card] = []
for suit, face in product(suits, face_filter):
self._cards.append(Card(suit, face))
def cut(self):
num = random.randint(0, len(self._cards))
for i in range(num):
self._cards.append(self._cards.pop(0))
def shuffle(self):
return random.shuffle(self._cards)
def get_cards(self):
return self._cards
def get_and_remove_card(self):
return self._cards.pop(0)
def add_cards(self, cards: list[Card]):
for card in cards:
self._cards.append(card)
class Player:
def __init__(self):
self._cards = []
def get_cards(self):
return self._cards
def add_card(self, card: Card):
self._cards.append(card)
def remove_cards(self):
self._cards = []
class Game:
def __init__(self, number_of_players: int, dealing_direction: str, dealing_instructions: tuple):
self._deck = Deck()
self._players: list[Player] = []
while number_of_players > 0:
self._players.append(Player())
number_of_players -= 1
self._dealing_direction = dealing_direction
self._dealing_instructions = dealing_instructions
def get_players(self):
return self._players
def prepare_deck(self):
for player in self._players:
self._deck.add_cards(player.get_cards())
player.remove_cards()
self._deck.shuffle()
self._deck.cut()
def _ltr_dealing(self, start_index, end_index, dealing_instruction):
while start_index < end_index:
instructions = dealing_instruction
while len(self._deck.get_cards()) > 0 and instructions > 0:
self._players[start_index].add_card(self._deck.get_and_remove_card())
instructions -= 1
start_index += 1
def _rtl_dealing(self, start_index, end_index, dealing_instruction):
while start_index > end_index:
instructions = dealing_instruction
while len(self._deck.get_cards()) > 0 and instructions > 0:
self._players[start_index].add_card(self._deck.get_and_remove_card())
instructions -= 1
start_index -= 1
def deal(self, player: Player):
for dealing_instruction in self._dealing_instructions:
if self._dealing_direction == "ltr":
for i in range(len(self._players)):
if self._players[i] == player:
self._ltr_dealing(i, len(self._players), dealing_instruction)
self._ltr_dealing(0, i, dealing_instruction)
break
else:
for i in range(len(self._players)):
if self._players[i] == player:
self._rtl_dealing(i, 0, dealing_instruction)
self._ltr_dealing(len(self._players) - 1, i, dealing_instruction)
break
def get_deck(self):
return self._deck
class Belot(Game):
def __init__(self):
super().__init__(4, "ltr", (2, 3, 3))
self.deck = Deck(['7', '8', '9', '10', 'J', 'Q', 'K', 'A'])
class Poker(Game):
def __init__(self):
super().__init__(9, "rtl", (1, 1, 1, 1, 1))

Лог от изпълнението

F...F.....F...F
======================================================================
FAIL: test_correct_deck_init (test.TestBelot)
Test initialization with correct deck.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/storage/deedee/data/rails/pyfmi-2022/releases/20221115154139/lib/language/python/runner.py", line 67, in thread
    raise result
AssertionError: Items in the second set but not the first:
('diamonds', '4')
('hearts', '4')
('clubs', '4')
('spades', '3')
('spades', '5')
('diamonds', '6')
('hearts', '6')
('clubs', '6')
('diamonds', '3')
('hearts', '3')
('clubs', '3')
('spades', '2')
('diamonds', '5')
('hearts', '5')
('clubs', '5')
('spades', '4')
('diamonds', '2')
('hearts', '2')
('clubs', '2')
('spades', '6')

======================================================================
FAIL: test_cutting_deck (test.TestDeck)
Test cutting a deck.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/storage/deedee/data/rails/pyfmi-2022/releases/20221115154139/lib/language/python/runner.py", line 67, in thread
    raise result
AssertionError: [<solution.Card object at 0xffffb982fe80>, <solution.Card object at 0xffffb982fe20>, <solution.Card object at 0xffffb982fdc0>, <solution.Card object at 0xffffb982fd60>, <solution.Card object at 0xffffb982fd00>, <solution.Card object at 0xffffb982f790>, <solution.Card object at 0xffffb982f730>, <solution.Card object at 0xffffb982f6d0>, <solution.Card object at 0xffffb982f670>, <solution.Card object at 0xffffb982f610>, <solution.Card object at 0xffffb982f5b0>, <solution.Card object at 0xffffb982f550>, <solution.Card object at 0xffffb982f4f0>, <solution.Card object at 0xffffb982f490>, <solution.Card object at 0xffffb982f430>, <solution.Card object at 0xffffb982f3d0>, <solution.Card object at 0xffffb982f370>, <solution.Card object at 0xffffb982f310>, <solution.Card object at 0xffffb982f2b0>, <solution.Card object at 0xffffb982f250>] == [<solution.Card object at 0xffffb982fe80>, <solution.Card object at 0xffffb982fe20>, <solution.Card object at 0xffffb982fdc0>, <solution.Card object at 0xffffb982fd60>, <solution.Card object at 0xffffb982fd00>, <solution.Card object at 0xffffb982f790>, <solution.Card object at 0xffffb982f730>, <solution.Card object at 0xffffb982f6d0>, <solution.Card object at 0xffffb982f670>, <solution.Card object at 0xffffb982f610>, <solution.Card object at 0xffffb982f5b0>, <solution.Card object at 0xffffb982f550>, <solution.Card object at 0xffffb982f4f0>, <solution.Card object at 0xffffb982f490>, <solution.Card object at 0xffffb982f430>, <solution.Card object at 0xffffb982f3d0>, <solution.Card object at 0xffffb982f370>, <solution.Card object at 0xffffb982f310>, <solution.Card object at 0xffffb982f2b0>, <solution.Card object at 0xffffb982f250>]

======================================================================
FAIL: test_dealing_rtl (test.TestGame)
Test dealing the cards right to left.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/storage/deedee/data/rails/pyfmi-2022/releases/20221115154139/lib/language/python/runner.py", line 67, in thread
    raise result
AssertionError: {('clubs', '4'), ('clubs', '3'), ('clubs', '2')} not found in ({('clubs', '3'), ('clubs', '2'), ('clubs', '10')}, {('hearts', 'K'), ('hearts', '6'), ('hearts', 'A')})

======================================================================
FAIL: test_correct_direction_and_players_deal (test.TestPoker)
Test dealing with correct direction and players.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/storage/deedee/data/rails/pyfmi-2022/releases/20221115154139/lib/language/python/runner.py", line 67, in thread
    raise result
AssertionError: {('clubs', '8'), ('clubs', '2'), ('clubs', 'A'), ('clubs', '5'), ('clubs', 'J')} not found in ({('clubs', '2'), ('clubs', 'J'), ('diamonds', '3'), ('diamonds', 'Q'), ('spades', '7')}, {('diamonds', '9'), ('hearts', 'A'), ('hearts', '5'), ('spades', 'K'), ('spades', '4')})

----------------------------------------------------------------------
Ran 15 tests in 0.160s

FAILED (failures=4)

История (2 версии и 11 коментара)

Дуйгу обнови решението на 14.11.2022 11:06 (преди над 1 година)

+import random
+from itertools import product
+
+suits = ['clubs', 'spades', 'diamonds', 'hearts']
+card_faces = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
+
+
+class Card:
+ def __init__(self, suit: str, face: str):
+ self.suit = suit
+ self.face = face
+
+ def get_suit(self):
+ return self.suit
+
+ def get_face(self):
+ return self.face
+
+
+class Deck:
+ def __init__(self, face_filter=None):
+ if face_filter is None:
+ face_filter = card_faces
+ self.cards: list[Card] = []
+ for suit, face in product(suits, face_filter):
+ self.cards.append(Card(suit, face))
+
+ def cut(self):
+ num = random.randint(0, len(self.cards))
+ for i in range(0, num):
+ self.cards.append(self.cards.pop(0))
+
+ def shuffle(self):
+ return random.shuffle(self.cards)
+
+ def get_cards(self):
+ return self.cards
+
+ def get_and_remove_card(self):
+ card = self.cards[0]
+ self.cards.pop(0)
+ return card
+
+
+class Player:
+ def __init__(self):
+ self.cards = []
+
+ def get_cards(self):
+ return self.cards
+
+ def add_card(self, card: Card):
+ self.cards.append(card)
+
+
+class Game:
+ def __init__(self, number_of_players: int, dealing_direction: str, dealing_instructions: tuple):
+ self.deck = Deck()
+ self.players: list[Player] = []
+ while number_of_players > 0:
+ self.players.append(Player())
+ number_of_players -= 1
+ self.dealing_direction = dealing_direction
+ self.dealing_instructions = dealing_instructions
+
+ def get_players(self):
+ return self.players
+
+ def prepare_deck(self):
+ self.deck.shuffle()
+ return self.deck.cut()
+
+ def deal(self, player: Player):
+ if self.dealing_direction == "ltr":
+ for curr_player in self.players:
+ if curr_player != player:
+ self.players.append(self.players.pop(0))
+ else:
+ for curr_player in self.players:
+ self.players.append(curr_player)
+ self.players.remove(curr_player)
+ if curr_player == player:
+ break
+ self.players.reverse()
+ for dealing_instruction in self.dealing_instructions:
+ while dealing_instruction > 0:
+ for plyr in self.players:
+ if self.deck.get_cards():
+ self.players.remove(plyr)
+ plyr.add_card(self.deck.get_and_remove_card())
+ self.players.append(plyr)
+ dealing_instruction -= 1
+
+ def get_deck(self):
+ return self.deck
+
+
+class Belot(Game):
+ def __init__(self):
+ super().__init__(4, "ltr", (2, 3, 3))
+ self.deck = Deck(['7', '8', '9', '10', 'J', 'Q', 'K', 'A'])
+
+
+class Poker(Game):
+ def __init__(self):
+ super().__init__(9, "rtl", (1, 1, 1, 1, 1))
+ self.deck = Deck()

Дуйгу обнови решението на 14.11.2022 16:17 (преди над 1 година)

import random
from itertools import product
suits = ['clubs', 'spades', 'diamonds', 'hearts']
card_faces = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
class Card:
def __init__(self, suit: str, face: str):
- self.suit = suit
- self.face = face
+ self._suit = suit
+ self._face = face
def get_suit(self):
- return self.suit
+ return self._suit
def get_face(self):
- return self.face
+ return self._face
class Deck:
def __init__(self, face_filter=None):
if face_filter is None:
face_filter = card_faces
- self.cards: list[Card] = []
+ self._cards: list[Card] = []
for suit, face in product(suits, face_filter):
- self.cards.append(Card(suit, face))
+ self._cards.append(Card(suit, face))
def cut(self):
- num = random.randint(0, len(self.cards))
- for i in range(0, num):
- self.cards.append(self.cards.pop(0))
+ num = random.randint(0, len(self._cards))
+ for i in range(num):
+ self._cards.append(self._cards.pop(0))
def shuffle(self):
- return random.shuffle(self.cards)
+ return random.shuffle(self._cards)
def get_cards(self):
- return self.cards
+ return self._cards
def get_and_remove_card(self):
- card = self.cards[0]
- self.cards.pop(0)
- return card
+ return self._cards.pop(0)
+ def add_cards(self, cards: list[Card]):
+ for card in cards:
+ self._cards.append(card)
+
class Player:
def __init__(self):
- self.cards = []
+ self._cards = []
def get_cards(self):
- return self.cards
+ return self._cards
def add_card(self, card: Card):
- self.cards.append(card)
+ self._cards.append(card)
+ def remove_cards(self):
+ self._cards = []
+
class Game:
def __init__(self, number_of_players: int, dealing_direction: str, dealing_instructions: tuple):
- self.deck = Deck()
- self.players: list[Player] = []
+ self._deck = Deck()
+ self._players: list[Player] = []
while number_of_players > 0:
- self.players.append(Player())
+ self._players.append(Player())
number_of_players -= 1
- self.dealing_direction = dealing_direction
- self.dealing_instructions = dealing_instructions
+ self._dealing_direction = dealing_direction
+ self._dealing_instructions = dealing_instructions
def get_players(self):
- return self.players
+ return self._players
def prepare_deck(self):
- self.deck.shuffle()
- return self.deck.cut()
+ for player in self._players:
+ self._deck.add_cards(player.get_cards())
+ player.remove_cards()
+ self._deck.shuffle()
+ self._deck.cut()
+ def _ltr_dealing(self, start_index, end_index, dealing_instruction):
+ while start_index < end_index:
+ instructions = dealing_instruction
+ while len(self._deck.get_cards()) > 0 and instructions > 0:
+ self._players[start_index].add_card(self._deck.get_and_remove_card())
+ instructions -= 1
+ start_index += 1
+
+ def _rtl_dealing(self, start_index, end_index, dealing_instruction):
+ while start_index > end_index:
+ instructions = dealing_instruction
+ while len(self._deck.get_cards()) > 0 and instructions > 0:
+ self._players[start_index].add_card(self._deck.get_and_remove_card())
+ instructions -= 1
+ start_index -= 1
+
def deal(self, player: Player):
- if self.dealing_direction == "ltr":
- for curr_player in self.players:
- if curr_player != player:
- self.players.append(self.players.pop(0))
- else:
- for curr_player in self.players:
- self.players.append(curr_player)
- self.players.remove(curr_player)
- if curr_player == player:
- break
- self.players.reverse()
- for dealing_instruction in self.dealing_instructions:
- while dealing_instruction > 0:
- for plyr in self.players:
- if self.deck.get_cards():
- self.players.remove(plyr)
- plyr.add_card(self.deck.get_and_remove_card())
- self.players.append(plyr)
- dealing_instruction -= 1
+ for dealing_instruction in self._dealing_instructions:
+ if self._dealing_direction == "ltr":
+ for i in range(len(self._players)):
+ if self._players[i] == player:
+ self._ltr_dealing(i, len(self._players), dealing_instruction)
+ self._ltr_dealing(0, i, dealing_instruction)
+ break
+ else:
+ for i in range(len(self._players)):
+ if self._players[i] == player:
+ self._rtl_dealing(i, 0, dealing_instruction)
+ self._ltr_dealing(len(self._players) - 1, i, dealing_instruction)
+ break
def get_deck(self):
- return self.deck
+ return self._deck
class Belot(Game):
def __init__(self):
super().__init__(4, "ltr", (2, 3, 3))
self.deck = Deck(['7', '8', '9', '10', 'J', 'Q', 'K', 'A'])
class Poker(Game):
def __init__(self):
super().__init__(9, "rtl", (1, 1, 1, 1, 1))
- self.deck = Deck()