Python, should be a reasonably efficient way of doing it although in part 2 it may be better to test the longer sequences first as there are fewer of them.
fromcollectionsimportdequedefpair_is_summable_to(n,iterable):seen=set()forxiniterable:target=n-xiftargetinseen:returnTrueseen.add(x)returnFalsedefpart1(lines,preamble_len=25):queue=deque(lines[:preamble_len],preamble_len)fori,ninenumerate(lines[preamble_len:]):ifpair_is_summable_to(n,queue):queue.append(n)else:returnn,idefpart2(target_weakness,lines):# test all contiguous sets of length 2 then all of length 3 etc
fortest_leninrange(2,len(lines)):queue=deque(lines[:test_len],test_len)forposinrange(test_len,len(lines)):ifsum(queue)==target_weakness:w_0=min(queue)w_1=max(queue)returnw_0+w_1,test_len,poselse:queue.append(lines[pos])lines=[int(l.strip())forlinopen('input.txt','r')]target_weakness,at_row=part1(lines)print(f"Part 1: result is {target_weakness} which is at line {at_row}")weakness,seq_len,at_row=part2(target_weakness,lines)print(f"Part 2: result is {weakness} from a sequence of length {seq_len} ending at row {at_row}")
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Python, should be a reasonably efficient way of doing it although in part 2 it may be better to test the longer sequences first as there are fewer of them.