importos.pathdefread_input(file_name='input.txt'):file_path=os.path.join(os.path.dirname(__file__),file_name)data=Nonewithopen(file_path)asfile:data=file.read()returnprocess_input(data)defprocess_input(data):return[int(value)forvalueindata.split(',')]defpart_one(crabs):max_pos=max(crabs)target_pos_fuel=[0foriinrange(max_pos)]fortarget_posinrange(0,max_pos):forcrab_posincrabs:target_pos_fuel[target_pos]+=abs(target_pos-crab_pos)print(f'{target_pos}: {target_pos_fuel[target_pos]}')returnmin(target_pos_fuel)defpart_two(crabs):max_pos=max(crabs)target_pos_fuel=[0foriinrange(max_pos)]cost_per_steps={}fortarget_posinrange(0,max_pos):forcrab_posincrabs:steps=abs(target_pos-crab_pos)ifnotstepsincost_per_steps:cost_per_steps[steps]=sum((steps-i)foriinrange(steps))target_pos_fuel[target_pos]+=cost_per_steps[steps]print(f'{target_pos}: {target_pos_fuel[target_pos]}')returnmin(target_pos_fuel)if__name__=='__main__':assertpart_one(read_input('input.example.txt'))==37,'Unexpected part 1 result for test input'result=part_one(read_input())print(f'Part 1: {result}')assertpart_two(read_input('input.example.txt'))==168,'Unexpected part 2 result for test input'result=part_two(read_input())print(f'Part 2: {result}')
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.