-
Notifications
You must be signed in to change notification settings - Fork 0
/
codeAdvent_7.py
111 lines (74 loc) · 2.41 KB
/
codeAdvent_7.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
'''
Created on 27 july 2021
@author: Antonio Martínez Fernández
'''
import re
array = []
validas = []
total = 0
global_v2 = 0
control = 0
def tratar(s):
global validas
corte = s.split(" contain ")
bolsa = corte[0].split(" bags")[0]
aux = corte[1].split(', ')
for c in aux:
c = c.split(" bag")
aux2 = re.sub(r'[0-9]+ ', '', c[0])
if((aux2 == "shiny gold" or aux2 in validas) and bolsa not in validas):
validas.append(bolsa)
return 1
return 0
def lectura():
global total
archivo = open("input6.txt")
while True:
linea = archivo.readline()
if not linea:
break
array.append(linea)
total += tratar(linea.rstrip())
def lectura_sin_tratar():
global total
archivo = open("input6.txt") # ! CUIDADO QUE TIENE PUESTO PRUEBA
while True:
linea = archivo.readline()
if not linea:
break
array.append(linea)
def tratar_array():
global total
for linea in array:
total += tratar(linea)
def busqueda_recursiva(s): # string s
# buscar la linea del estilo s-> bolsas
# si contain no bag -> return 0
# else return numero_bolsa1*busqueda_recursvia(bolsa1+1) +
# numero_bolsan*busuqueda_recursiva(bolsan+1)
global global_v2
global array
global control
aux4 = 0
for linea in array:
corte = linea.split(" contain ") # corte[1] -> y
bolsa = corte[0].split(" bags")[0] # x ->
if bolsa == s and re.match("no other bags.", str(corte[1])) != None:
return 0
elif bolsa == s:
aux = corte[1].split(', ')
for c in aux:
c = c.split(" bag")
aux2 = re.sub(r'[0-9]+ ', '', c[0])
aux3 = re.search(r"^[0-9]+", c[0]).group()
aux4 += int(aux3)*(busqueda_recursiva(aux2)+1)
# numero de bolsas del color * (recursividad + bolsa actual(1))
return aux4
if __name__ == '__main__':
lectura()
for i in range(len(array)-1): # en principio tiene que ser n^n para que ninguna regla se quede fuera pero en este caso funciona en 6 iteraciones
tratar_array()
print(total)
print()
lectura_sin_tratar()
print(busqueda_recursiva("shiny gold"))