Beispiel #1
0
    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)))
Beispiel #2
0
    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)))
Beispiel #3
0
                    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))