-
Notifications
You must be signed in to change notification settings - Fork 0
/
logic.py
83 lines (74 loc) · 2.4 KB
/
logic.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import random
class Player:
def generate_card(self):
'''
Creating card. Line by line.
:return:
'''
card = []
for string in range(1, 4):
start_num = 1
end_num = 10
line = []
for item in range(1, 10):
# generating numbers in card line
number = random.randint(start_num, end_num)
line.append(number)
start_num += 10
end_num += 10
iter_num = 4
while iter_num > 0:
x = random.randint(0, 8)
# genegating random None and checking its indexes,
if line[x] == 0:
if x == 8:
j = 1
while not line[int(x)-j]:
line[int(x)-j] = 0
j += 1
else:
line[int(x)+1] = 0
else:
line[x] = 0
iter_num -= 1
# check if zeros less than 4 ==> replace max to 0
if line.count(0) < 4:
line[line.index(max(line))] = 0
card.append(line)
return card
def validate_card(self):
'''
Validating that card has no same numbers in rows
:return: validated card
'''
card = self.generate_card()
common1 = set(card[0]) & set(card[1])
common2 = set(card[1]) & set(card[2])
common3 = set(card[0]) & set(card[2])
set1 = common1 == common2
set2 = common2 == common3
set3 = common1 == common3
if set1 and set2 and set3:
return card # card 9x3
else:
return self.validate_card()
def plainify_card(card):
'''
Deleting sub-levels and zeros from card.
:return: single leveled list without zeros
'''
plain_card = []
# make card a one line list to further easy poping
plain_card.extend(card[0][0])
plain_card.extend(card[0][1])
plain_card.extend(card[0][2])
# deleting zeros
for item in sorted(plain_card):
if item == 0:
plain_card.remove(item)
return sorted(plain_card) # plain card
def get_number_from_bag():
numbers_bag = list(range(1, 91))
while len(numbers_bag) > 0:
number = numbers_bag.pop(random.randint(0, (len(numbers_bag)-1)))
yield number