-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path07_tls.py
76 lines (61 loc) · 2.33 KB
/
07_tls.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
def check_palindrome(sample):
return sample == sample[::-1] and sample[0] != sample[1] and '[' not in sample and ']' not in sample
def update_aba(sample, ob_count, cb_count, palindromes):
if check_palindrome(sample) and ob_count == cb_count:
if sample in palindromes.keys(): palindromes[sample][0] += 1
else: palindromes[sample] = [1,0]
return palindromes
def update_bab(sample, ob_count, cb_count, palindromes):
sample_aba = sample[1] + sample[0] + sample[1]
if check_palindrome(sample) and ob_count > cb_count:
if sample_aba in palindromes.keys(): palindromes[sample_aba][1] += 1
else: palindromes[sample_aba] = [0,1]
return palindromes
def check_valid_tls(palindromes, brackets):
return len(palindromes) and not any([b[0] < p < b[1] for p in palindromes for b in brackets])
def check_valid_ssl(palindromes):
return any([p[0] > 0 and p[1] > 0 for _,p in palindromes.items()])
def solve_tls(filename):
f = open(filename)
count = 0
for line in f:
brackets = []
palindromes = []
cb_count = 0
stripped = line.strip()
for x in range(len(stripped)-3):
if stripped[x] == '[' :
brackets.append([x,-1])
continue
if stripped[x] == ']' :
brackets[cb_count][1] = x
cb_count += 1
continue
if check_palindrome(stripped[x:x+4]): palindromes.append(x)
count += int(check_valid_tls(palindromes, brackets))
f.close()
return count
def solve_ssl(filename):
f = open(filename)
count = 0
for line in f:
palindromes = {}
ob_count = 0
cb_count = 0
stripped = line.strip()
for x in range(len(stripped)-2):
if stripped[x] == '[' :
ob_count += 1
continue
if stripped[x] == ']' :
cb_count += 1
continue
update_aba(stripped[x:x+3],ob_count,cb_count,palindromes)
update_bab(stripped[x:x+3],ob_count,cb_count,palindromes)
count += int(check_valid_ssl(palindromes))
f.close()
return count
if __name__ == '__main__':
result_tls = solve_tls('data/07_tls.data')
result_ssl = solve_ssl('data/07_tls.data')
print("TLS: {0}, SSL: {1}".format(result_tls, result_ssl))