-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday7.py
100 lines (79 loc) · 2.26 KB
/
day7.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
import numpy as np
def test_abba(s):
if s[0] == s[3] and s[1] == s[2] and s[0] != s[1]:
return True
else:
return False
def test_aba(s):
if s[0] == s[2] and s[0] != s[1]:
return True
else:
return False
def make_bab(s):
return s[1] + s[0] + s[1]
def find_ips_part_1(in_file):
# read file
f = open(in_file, 'r')
num_ips = 0
for line in f:
line = line.replace('\n', '')
substr = ''
hypernet = False
valid = False
for l in line:
if l == '[':
hypernet = True
substr = ''
elif l == ']':
hypernet = False
substr = ''
elif len(substr) < 4:
substr += l
if len(substr) == 4:
abba = test_abba(substr)
if abba and not hypernet:
valid = True
elif abba and hypernet:
valid = False
break
substr = substr[1:]
if valid:
print('address {} is valid'.format(line))
num_ips += 1
print('Found {} valid ips'.format(num_ips))
def find_ips_part_2(in_file):
# read file
f = open(in_file, 'r')
num_ips = 0
for line in f:
line = line.replace('\n', '')
substr = ''
hypernet = False
valid = False
babs = []
hypernet_str = ''
for l in line:
if l == '[':
hypernet = True
substr = ''
elif l == ']':
hypernet = False
elif hypernet:
hypernet_str += l
elif len(substr) < 3:
substr += l
if not hypernet and len(substr) == 3:
if test_aba(substr):
babs.append(make_bab(substr))
substr = substr[1:]
# now test to see if babs are in hypernet_str
for b in babs:
if b in hypernet_str:
valid = True
break
if valid:
print('address {} is valid'.format(line))
num_ips += 1
print('Found {} valid ips'.format(num_ips))
if __name__ == "__main__":
find_ips_part_2('day7_input.txt')