90 lines
2.1 KiB
Python
90 lines
2.1 KiB
Python
#!/bin/python3
|
|
import sys,time,re,os
|
|
from pprint import pprint
|
|
sys.path.insert(0, '../../')
|
|
from fred import list2int,get_re,nprint,lprint,loadFile
|
|
start_time = time.time()
|
|
|
|
if sys.argv[1] == 'test':
|
|
input_f = 'test'
|
|
elif sys.argv[1] == 'input':
|
|
input_f = 'input'
|
|
else:
|
|
print('No argv provided')
|
|
exit()
|
|
|
|
|
|
#########################################
|
|
# #
|
|
# Part 1 #
|
|
# #
|
|
#########################################
|
|
|
|
def part1():
|
|
score = 0
|
|
nums = loadFile(input_f)
|
|
|
|
|
|
for n in nums:
|
|
max_nums = 0
|
|
max_idx = 0
|
|
for i in range(0,len(n)-1):
|
|
if int(n[i]) > max_nums:
|
|
max_nums = int(n[i])
|
|
max_idx = i
|
|
|
|
|
|
max2_nums = 0
|
|
|
|
if max_idx+2 == len(n):
|
|
score+= int(str(max_nums)+str(n[max_idx+1]))
|
|
else:
|
|
for i in range(max_idx+1,len(n)):
|
|
if int(n[i]) > max2_nums:
|
|
max2_nums = int(n[i])
|
|
|
|
score += int(str(max_nums)+str(max2_nums))
|
|
|
|
return score
|
|
|
|
start_time = time.time()
|
|
p1 = part1()
|
|
print('Part 1:',p1, '\t\t', round((time.time() - start_time)*1000), 'ms')
|
|
|
|
#########################################
|
|
# #
|
|
# Part 2 #
|
|
# #
|
|
#########################################
|
|
|
|
def part2():
|
|
score = 0
|
|
nums = loadFile(input_f)
|
|
|
|
for n in nums:
|
|
n=list2int(list(n))
|
|
|
|
pos = 0
|
|
filled = 0
|
|
left = len(n)
|
|
can_skip = left - 12
|
|
number = ''
|
|
|
|
while filled < 12:
|
|
current = n[pos]
|
|
window = n[pos:pos+can_skip+1]
|
|
if current >= max(window):
|
|
number += str(current)
|
|
pos += 1
|
|
filled += 1
|
|
else:
|
|
pos += 1
|
|
can_skip -= 1
|
|
score += int(number)
|
|
return score
|
|
|
|
start_time = time.time()
|
|
p2 = part2()
|
|
print('Part 2:',p2, '', round((time.time() - start_time)*1000), 'ms')
|
|
|