-
Notifications
You must be signed in to change notification settings - Fork 2
/
puzzle_1_to_9_Nov_29.py
89 lines (76 loc) · 2.21 KB
/
puzzle_1_to_9_Nov_29.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
84
85
86
87
88
89
'''1 to 9 puzzle
November 29, 2018'''
import random
def createList():
'''Creates 36-long list, with values from
the puzzle in question'''
numList = [random.randint(1,9) for i in range(36)]
#values from design
numList[0] = 6
numList[4] = 5
numList[6] = 8
numList[8] = 3
numList[15] = 8
numList[16] = 3
numList[19] = 5
numList[20] = 4
numList[27] = 5
numList[29] = 6
numList[31] = 6
numList[35] = 8
return numList
def scoreList(myList):
'''Scores list according to whether rows
and cols add up to 30 and boxes add up to 45
Lower values are better'''
#first separate the rows so the list is stacked:
stackedList = [[] for i in range(6)]
counter = 0
for i in range(6):
for j in range(6):
stackedList[i].append(myList[6*i+j])
#Score the rows
output = 0
for row in stackedList:
output += abs(30 - sum(row))
#Score the cols:
for c in range(6):
colsum = 0
for r in range(6):
colsum += stackedList[r][c]
output += abs(30 - colsum)
#score the boxes
for x in range(2):
for y in range(2):
boxsum = 0
boxsum += sum(stackedList[3*x][3*y:3*y+3])
boxsum += sum(stackedList[3*x+1][3*y:3*y+3])
boxsum += sum(stackedList[3*x+2][3*y:3*y+3])
output += abs(45 - boxsum)
return output
def mutateN(mylist):
'''Changes a random number in the list to a random digit'''
n1,n2 = random.sample(list(range(1,10)),2)
index = random.randint(0,35)
if mylist[index] != n1:
mylist[index] = n1
else:
mylist[index] = n2
return mylist
def printNumoku(mylist):
'''Prints 6x6 grid'''
for i,num in enumerate(mylist):
print(num,end = ' ')
if i % 6 == 2:
print('|',end = ' ')
if i % 6 == 5:
print()
if i == 17:
print('-------------')
numList = createList()
theScore = scoreList(numList)
printNumoku(numList)
print("Score:",theScore)
numList2 = mutateN(numList)
printNumoku(numList2)
print("New Score:",scoreList(numList2))