-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.py
More file actions
133 lines (100 loc) · 3.5 KB
/
utils.py
File metadata and controls
133 lines (100 loc) · 3.5 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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import math
def manhattan_path(p1, p2):
# Estrazione delle coordinate dei punti
x1, y1 = p1
x2, y2 = p2
# Lista per mantenere il percorso
path = []
# Aggiunta del punto di partenza al percorso
path.append((x1, y1))
# Movimento orizzontale da x1 a x2
step = 1 if x1 < x2 else -1
for x in range(x1 + step, x2 + step, step):
path.append((x, y1))
# Movimento verticale da y1 a y2
step = 1 if y1 < y2 else -1
for y in range(y1 + step, y2 + step, step):
path.append((x2, y))
return path, abs(x2-x1) + abs(y2-y1)
def euclidean_path(p1, p2):
# Estrazione delle coordinate dei punti
x1, y1 = p1
x2, y2 = p2
# Lista per mantenere il percorso
path = []
# Aggiunta del punto di partenza al percorso
path.append((x1, y1))
# Calcolo della lunghezza del percorso euclideo
distance = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
# Calcolo della quantità di spostamenti lungo x e y
dx = x2 - x1
dy = y2 - y1
# Calcolo del passo per ogni coordinata
step_x = dx / distance
step_y = dy / distance
# Aggiunta dei punti intermedi al percorso
for i in range(1, int(distance)):
intermediate_x = round(x1 + step_x * i)
intermediate_y = round(y1 + step_y * i)
path.append((intermediate_x, intermediate_y))
# Aggiunta del punto finale al percorso
path.append((x2, y2))
return path, distance
def carica_dataset(nome_file):
with open(f'input_files/{nome_file}', 'r') as file:
# Leggo l'intero contenuto del file
lines = file.readlines()
i = 0
griglia = []
diz_golden = {}
diz_silver = {}
diz_tail = {}
for line in lines:
line = line.strip('\n').strip('').split()
if i == 0 :
griglia = [line[0], line[1]]
num_golden = int(line[2])
num_silver = int(line[3])
num_tail = int(line[4])
elif i <= num_golden:
diz_golden[f'G{i}'] = [int(z) for z in line]
elif i <= num_golden + num_silver:
diz_silver[f'G{i- num_golden}'] = [int(z) for z in line]
elif i <= num_golden + num_silver + num_tail:
diz_tail[line[0]] = [int(line[1]), int(line[2])]
i = i+1
return griglia, diz_golden, diz_silver, diz_tail
def get_direzione(tupla):
if tupla[0] == -1 and tupla[1] == 0:
return ("O", "E")
elif tupla[0] == 1 and tupla[1] == 0:
return ("E", "O")
elif tupla[0] == 0 and tupla[1] == 1:
return ("S", "N")
elif tupla[0] == 0 and tupla[1] == -1:
return ("N", "S")
elif tupla[0] == -1 and tupla[1] == -1:
return ("S", "E")
elif tupla[0] == -1 and tupla[1] == 1:
return ("N", "E")
elif tupla[0] == 1 and tupla[1] == 1:
return ("N", "O")
elif tupla[0] == 1 and tupla[1] == -1:
return ("S", "O")
def get_tiles(direzione, lista_tiles):
tiles_ritorno = []
for i in lista_tiles:
if(direzione in lista_tiles[i].lista_arrivi):
tiles_ritorno.append(i)
return tiles_ritorno
def scegli_tile(lista_tiles_scelti, diz_tiles):
#print(lista_tiles_scelti)
min = 1000000
for chiave in lista_tiles_scelti:
costo = diz_tiles[chiave][0]
if costo<min:
min = costo
num_min = diz_tiles[chiave][1]
chiave_min = chiave
diz_tiles[chiave_min][1] = num_min-1
return chiave_min, diz_tiles