In [10]:
myinput = '/home/fmuinos/projects/adventofcode/2016/ferran/inputs/input7.txt'
In [24]:
def fourlyndromes(mystr):
for i in range(len(mystr)-3):
if (mystr[i] == mystr[i+3]) and (mystr[i+1] == mystr[i+2]) and (mystr[i] != mystr[i+1]):
return True
return False
def separate_brackets(mystr):
bracket_dict = {'[': set([]), ']': set([])}
state = ']'
myword = ''
for char in mystr:
if char == '[' or char == ']' or char == '\n':
if myword != '':
bracket_dict[state].add(myword)
myword = ''
state = char
else:
myword += char
return bracket_dict
def tls_count(myinput):
tls_counter = 0
with open(myinput, 'rt') as f:
for line in f:
bracket_dict = separate_brackets(line)
inside = False
for word in bracket_dict['[']:
if fourlyndromes(word):
inside = True
continue
outside = False
for word in bracket_dict[']']:
if fourlyndromes(word):
outside = True
continue
if (not inside) and outside:
tls_counter += 1
return tls_counter
In [25]:
tls_count(myinput)
Out[25]:
In [28]:
def threelyndromes(mystr):
myset = set([])
for i in range(len(mystr)-2):
if (mystr[i] == mystr[i+2]) and (mystr[i] != mystr[i+1]):
myset.add(''.join(mystr[i:i+3]))
return myset
def transform(aba):
return aba[1]+aba[0]+aba[1]
def ssl_count(myinput):
ssl_counter = 0
with open(myinput, 'rt') as f:
for line in f:
bracket_dict = separate_brackets(line)
inside = set([])
for word in bracket_dict['[']:
inside = inside.union(threelyndromes(word))
outside = set([])
for word in bracket_dict[']']:
for aba in threelyndromes(word):
outside.add(transform(aba))
if len(outside.intersection(inside)) > 0:
ssl_counter += 1
return ssl_counter
In [29]:
ssl_count(myinput)
Out[29]: