-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
95 lines (75 loc) · 3.03 KB
/
main.py
File metadata and controls
95 lines (75 loc) · 3.03 KB
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
90
91
92
93
94
95
import gurobipy as gp
from gurobipy import GRB
import pyautogui
import time
from screenreader import read_screen_info
time.sleep(3)
# Queens start button 1248,695
x_start = 1248
y_start = 695
# Click on the start button
pyautogui.click(x_start, y_start)
# Wait for the game to load
time.sleep(0.7)
edges_vertical, edges_horizontal, sun_indices, moon_indices, middle_x, middle_y, xtop, ytop = read_screen_info()
model = gp.Model(name="Tango Linkedin Solver")
cells = model.addMVar(shape=(6,6), vtype=GRB.BINARY) # 0: Moon, 1: Suns
# Each row has 3 suns
for i in range(6):
model.addConstr(gp.quicksum(cells[i,:]) == 3, name=f"Max Suns per Row {i}")
# Each column has 3 suns
for i in range(6):
model.addConstr(gp.quicksum(cells[:,i]) == 3, name=f"Max Suns per Column {i}")
# No more than two consecutive moons or suns
for i in range(4):
# Rows
model.addConstrs((gp.quicksum(cells[r, j] for j in range(i, i+3)) <= 2
for r in range(6)), name = "No consecutive in row 1")
model.addConstrs((gp.quicksum(cells[r, j] for j in range(i, i+3)) >= 1
for r in range(6)), name = "No consecutive in row 2")
# Columns
model.addConstrs((gp.quicksum(cells[j, c] for j in range(i, i+3)) <= 2
for c in range(6)), name = "No consecutive in column 1")
model.addConstrs((gp.quicksum(cells[j, c] for j in range(i, i+3)) >= 1
for c in range(6)), name = "No consecutive in column 2")
# Set the initial moons and suns
for index in sun_indices:
model.addConstr(cells[index] == 1, name=f"Sun {index}")
for index in moon_indices:
model.addConstr(cells[index] == 0, name=f"Moon {index}")
# Set vertical edges constraints
for i in range(6):
for j in range(5):
if edges_vertical[i,j] == 1:
model.addConstr(cells[i,j] + cells[i,j+1] == 1, name=f"Vertical edge cross {i,j}-{i,j+1}")
if edges_vertical[i,j] == 2:
model.addConstr(cells[i,j] - cells[i,j+1] == 0, name=f"Vertical edge equal {i,j}-{i,j+1}")
# Set horizontal edges constraints
for i in range(5):
for j in range(6):
if edges_horizontal[i,j] == 1:
model.addConstr(cells[i,j] + cells[i+1,j] == 1, name=f"Horizontal edge cross {i,j}-{i+1,j}")
if edges_horizontal[i,j] == 2:
model.addConstr(cells[i,j] - cells[i+1,j] == 0, name=f"Horizontal edge equal {i,j}-{i+1,j}")
model.setObjective(0, sense=GRB.MINIMIZE)
model.optimize()
for i in range(6):
for j in range(6):
if (i,j) in sun_indices or (i,j) in moon_indices:
pass
else:
# Add moons
if cells.X[i,j] == 0:
pyautogui.click(
xtop + middle_x[j],
ytop + middle_y[i],
clicks=2
)
# Add suns
if cells.X[i,j] == 1:
pyautogui.click(
xtop + middle_x[j],
ytop + middle_y[i],
clicks=1
)
print(cells.X)