46 lines
1.0 KiB
Python
Executable File
46 lines
1.0 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
def read_input():
|
|
with open('input.txt', 'r') as f:
|
|
data = f.read().splitlines()
|
|
return data[0]
|
|
|
|
def find_longest_match(polymer):
|
|
result = 1
|
|
for x in range(len(polymer)-1):
|
|
if abs(ord(polymer[x]) - ord(polymer[x+1])) != 32:
|
|
break
|
|
result += 1
|
|
return result
|
|
|
|
|
|
def retract_polymer(polymer):
|
|
parsing_pos = 0
|
|
|
|
while parsing_pos < len(polymer):
|
|
lm = find_longest_match(polymer[parsing_pos:])
|
|
if lm < 2:
|
|
parsing_pos += 1
|
|
continue
|
|
|
|
lm = 2
|
|
if parsing_pos == 0:
|
|
polymer = polymer[lm:]
|
|
else:
|
|
polymer = polymer[:parsing_pos] + polymer[lm+parsing_pos:]
|
|
parsing_pos -= 1
|
|
|
|
return len(polymer)
|
|
|
|
l = []
|
|
for c in range(ord('a'),ord('z')+1):
|
|
p = read_input()
|
|
if chr(c) not in p:
|
|
continue
|
|
p = p.replace(chr(c), '')
|
|
p = p.replace(chr(c-32), '')
|
|
print("removing characher: {}".format(chr(c)))
|
|
l.append(retract_polymer(p))
|
|
|
|
print(min(l))
|