value = 1 while loop_size < 10000000: value = value * subject_number value = value % 20201227 if value == pk: return loop_size loop_size += 1 return -1 def process_input(input_list): card_pk = int(input_list[0]) door_pk = int(input_list[1]) return card_pk, door_pk def solve_part1(input_list): card_pk, door_pk = process_input(input_list) card_loop_size = find_loop_size(7, card_pk) door_loop_size = find_loop_size(7, door_pk) encryyption_key_from_card = transform_subject_number( door_pk, card_loop_size) encryyption_key_from_door = transform_subject_number( card_pk, door_loop_size) assert encryyption_key_from_card == encryyption_key_from_door return encryyption_key_from_card if __name__ != 'main': print(solve_part1(get_input_of_day(25)))
for k, v in p1dic.items(): # This checks for a pair with equal values if (y % 2 == 0) and (k == y / 2) and (v[1] > 1): my_pair = (k, k) break if v[0] in p1dic.keys(): my_pair = (k, v[0]) break return my_pair def solve_part1(input_list): my_pair = get_pair_that_sum_to(input_list, 2020) return my_pair[0] * my_pair[1] def solve_part2(input_list): # Lazily, I brute-forced this input_list = sorted(list(map(int, input_list))) for i in range(len(input_list) - 2): for j in range(1, len(input_list) - 1): if (2020 - input_list[i] - input_list[j]) in input_list[j + 1:]: return input_list[i] * input_list[j] * (2020 - input_list[i] - input_list[j]) if __name__ != 'main': print(solve_part1(get_input_of_day(1))) print(solve_part2(get_input_of_day(1)))
possible_sum].union( {current_number, possible_sum - current_number}) if (possible_sum - current_number) not in source: source[possible_sum - current_number] = {possible_sum} else: source[possible_sum - current_number].add(possible_sum) i += 1 return current_number def solve_part2(input_list, preamble): numbers = process_numbers(input_list) target_number = solve_part1(input_list, preamble) for i in range(len(numbers)): current_sum = 0 desired_numbers = [] j = i while (j < len(numbers)) and (current_sum < target_number): current_sum += numbers[j] desired_numbers.append(numbers[j]) j += 1 if current_sum == target_number: break return min(desired_numbers) + max(desired_numbers) if __name__ != 'main': print(solve_part1(get_input_of_day(9), 25)) print(solve_part2(get_input_of_day(9), 25))