Exemplo n.º 1
0
        passport = Passport.passport_from_str(s, passport_type=REGULAR_PASSPORT)

        log(passport.fields)
        if passport.validate(validate_values):
            log("VALID")
            valid += 1
        log()

    return valid


if __name__ == "__main__":
    util.set_debug(False)

    sample = util.read_strs("input/sample/04.in", sep="\n\n")
    sample_invalid = util.read_strs("input/sample/04-invalid.in", sep="\n\n")
    sample_valid = util.read_strs("input/sample/04-valid.in", sep="\n\n")
    passports = util.read_strs("input/04.in", sep="\n\n")

    print("TASK 1")
    util.call_and_print(validate, sample, False)
    util.call_and_print(validate, passports, False)

    print("\nTASK 2")
    util.call_and_print(validate, sample, True)
    util.call_and_print(validate, sample_invalid, True)
    util.call_and_print(validate, sample_valid, True)
    util.call_and_print(validate, passports, True)


Exemplo n.º 2
0
    0xx
    00x
    000
    Returns: Tuple with product of pair and triple
    '''
    n = len(df_lst)
    df_lst.sort()
    soln_1 = None
    soln_2 = None
    for i in range(n - 1):
        for j in range(i + 1, n):
            if (df_lst[i] + df_lst[j] == 2020):
                soln_1 = df_lst[i] * df_lst[j]
            elif (df_lst[i] + df_lst[j] > 2020):
                break
            for k in range(j + 1, n):
                if (df_lst[i] + df_lst[j] + df_lst[k] == 2020):
                    soln_2 = df_lst[i] * df_lst[j] * df_lst[k]
                elif (df_lst[i] + df_lst[j] + df_lst[k] > 2020):
                    break
    return soln_1, soln_2


if __name__ == "__main__":
    inpt = util.read_ints("inputs/day1_input.txt")

    print("TASK 1 and 2")
    start = time.time()
    util.call_and_print(find_product, inpt)
    end = time.time()
    print(end - start)
Exemplo n.º 3
0
    '''
    Converts list of strings to numpy array

    Inputs:
        str_lst (lst of str): Initial input from text file
    
    Returns: (arr) numpy array corresponding to str_lst
    '''
    lst = []
    for line in str_lst:
         temp_lst = list(line)[:]
         lst.append(temp_lst)
    return np.array(lst)


if __name__ == "__main__":
    tst = util.read_strs('inputs/day3_test_input.txt')
    inpt = util.read_strs('inputs/day3_input.txt')

    tst_arr = convert_to_array(tst)
    arry = convert_to_array(inpt)

    print("TASK 1")
    util.call_and_print(task_1, tst_arr, 3, 1)
    util.call_and_print(task_1, arry, 3, 1)

    print("\nTASK 2")
    tests = [(1, 1), (3, 1), (5, 1), (7, 1), (1, 2)]
    util.call_and_print(task_2, tst_arr, tests)
    util.call_and_print(task_2, arry, tests)
    
Exemplo n.º 4
0
        sum += x
    return sum


def task2(numbers):
    sum = 0
    for n in numbers:
        while n > 0:
            n = int(math.floor(n / 3) - 2)
            if n > 0:
                sum += n

    return sum


if __name__ == "__main__":
    nums = util.read_ints("input/01.in")

    print("TASK 1")
    util.call_and_print(task1, [12])
    util.call_and_print(task1, [14])
    util.call_and_print(task1, [1969])
    util.call_and_print(task1, [100756])
    util.call_and_print(task1, nums)

    print("\nTASK 2")
    util.call_and_print(task2, [12])
    util.call_and_print(task2, [14])
    util.call_and_print(task2, [1969])
    util.call_and_print(task2, [100756])
    util.call_and_print(task2, nums)
Exemplo n.º 5
0
    llist.head = first_node
    prior_node = first_node
    next_node = None
    d[lst[0]] = first_node
    for elt in lst[1:]:
        next_node = Node(elt)
        d[elt] = next_node
        prior_node.next = next_node
        next_node.previous = prior_node
        prior_node = next_node
    if extra:
        for elt in range(10, 1000001):
            next_node = Node(elt)
            d[elt] = next_node
            prior_node.next = next_node
            next_node.previous = prior_node
            prior_node = next_node
    prior_node.next = first_node
    first_node.previous = prior_node
    return llist, d


if __name__ == "__main__":
    tst = [3, 8, 9, 1, 2, 5, 4, 6, 7]
    inpt = [7, 1, 6, 8, 9, 2, 5, 4, 3]
    print("TASK 1")
    util.call_and_print(task1, tst)
    util.call_and_print(task1, inpt)
    print("\nTASK 2")
    util.call_and_print(task2, tst)
    util.call_and_print(task2, inpt)
Exemplo n.º 6
0
        person_answer = set(person)
        all_answer = all_answer.intersection(person_answer)
    return len(all_answer)


def task2(inpt):
    '''
    Counts the number of common answers from the input

    Inputs:
        inpt (lst of strs): a list of all of the groups and their answers

    Output: an integer, the number of common answers
    '''
    tot_all = 0
    for group in inpt:
        tot_all += num_all_answer(group)
    return tot_all


if __name__ == "__main__":
    groups_tst = util.read_strs("inputs/day6_test.txt", sep = "\n\n")
    groups = util.read_strs("inputs/day6_input.txt", sep = "\n\n")

    print("TASK 1")
    util.call_and_print(task1, groups_tst)
    util.call_and_print(task1, groups)

    print("\nTASK 2")
    util.call_and_print(task2, groups_tst)
    util.call_and_print(task2, groups)
Exemplo n.º 7
0

if __name__ == "__main__":
    tst = util.read_strs("inputs/day19_tst.txt", sep="\n")
    for i, val in enumerate(tst):
        if val == "":
            break
    tst_rules = tst[:i]
    tst_codes = tst[i + 1:]

    inpt = util.read_strs("inputs/day19_input.txt", sep="\n")
    for j, val in enumerate(inpt):
        if val == "":
            break
    inpt_rules = inpt[:j]
    inpt_codes = inpt[j + 1:]

    print("TASK 1")
    util.call_and_print(task_solver, tst_rules, tst_codes)
    util.call_and_print(task_solver, inpt_rules, inpt_codes)

    task_2_rules = []
    for line in inpt_rules:
        if line == "8: 42":
            line = "8: 42 | 42 8"
        elif line == "11: 42 31":
            line = "11: 42 31 | 42 11 31"
        task_2_rules.append(line)
    print("\nTASK 2")
    util.call_and_print(task_solver, task_2_rules, inpt_codes)
Exemplo n.º 8
0
        if op in ("nop", "jmp"):
            # Reset console back to original state and program
            # (undoing any previous changes to program)
            console.reset()

            # Replace instruction
            if op == "nop":
                console.prog[i] = ("jmp", param)
            elif op == "jmp":
                console.prog[i] = ("nop", param)

            # Run console and check for normal termination
            console.run()
            if console.normal_termination():
                return console.acc                
    

if __name__ == "__main__":
    util.set_debug(False)

    sample = Console.from_file("input/sample/08.in")
    real = Console.from_file("input/08.in")

    print("TASK 1")
    util.call_and_print(task1, sample)
    util.call_and_print(task1, real)

    print("\nTASK 2")
    util.call_and_print(task2, sample)
    util.call_and_print(task2, real)
Exemplo n.º 9
0

def count_valid_password(lb, ub, require_standalone_pair):
    """
    Count the number of valid passwords in a given range
    """

    n = 0
    for password in range(lb, ub + 1):
        if is_valid(password, require_standalone_pair):
            n += 1

    return n


if __name__ == "__main__":
    min_value = 264360
    max_value = 746325

    print("TASK 1")
    util.call_and_print(is_valid, 111111, False)
    util.call_and_print(is_valid, 223450, False)
    util.call_and_print(is_valid, 123789, False)
    util.call_and_print(count_valid_password, min_value, max_value, False)

    print("\nTASK 2")
    util.call_and_print(is_valid, 112233, True)
    util.call_and_print(is_valid, 123444, True)
    util.call_and_print(is_valid, 111122, True)
    util.call_and_print(count_valid_password, min_value, max_value, True)
Exemplo n.º 10
0
        j += 1
    door_loop = j
    val = 1
    for i in range(card_loop):
        val = one_loop(val, door)
    return val


def one_loop(val, subject):
    '''
    Does one loop of transformation

    Inputs:
        val (int): the current value
        subject (int): the subject number to multiply by

    Outputs: an int, the new value
    '''
    val = val * subject
    return val % 20201227


if __name__ == "__main__":
    tst = util.read_strs('inputs/day25_test.txt')
    inpt = util.read_strs('inputs/day25_input.txt')
    tst_card, tst_door = int(tst[0]), int(tst[1])
    inpt_card, inpt_door = int(inpt[0]), int(inpt[1])

    print('TASK 1')
    util.call_and_print(task1, tst_card, tst_door)
    util.call_and_print(task1, inpt_card, inpt_door)
Exemplo n.º 11
0
    Inputs:
        intg (str): Not my best variable name, the string 'lb-ub'
    
    Returns: list of ints contaning lower bound and upper bound
    '''
    splt_intv = intg.split("-")
    return [int(splt_intv[0]), int(splt_intv[1])]


if __name__ == "__main__":
    # Read in data
    ranges = create_ranges("inputs/day16_inputranges.txt")
    test_ranges = [[1, 3], [5, 7], [6, 11], [33, 44], [13, 40],[45, 50]]
    test_tickets = [[7,3,47], [40,4,50], [55,2,20], [38,6,12]]
    df = pd.read_csv("inputs/day16_input.csv")
    nearby_tickets = df.values.tolist()
    util.call_and_print(task1, test_tickets, test_ranges)  
    util.call_and_print(task1, nearby_tickets, ranges)  
    names = ['departure location', 'departure station', 'departure platform',
        'departure track', 'departure date', 'departure time', 
        'arrival location', 'arrival station', 'arrival platform', 
        'arrival track', 'class', 'duration', 'price', 'route', 'row', 'seat', 
        'train', 'type', 'wagon', 'zone']

    answer, valid_tickets = task1(nearby_tickets, ranges)

    valid_tickets.append([89,139,79,151,97,67,71,53,59,149,127,131,103,
                            109,137,73,101,83,61,107])
    util.call_and_print(task2, valid_tickets, ranges, names)

Exemplo n.º 12
0
                return total_octathorps - (num_sea_creature * 15)
            stitched_grid = np.rot90(stitched_grid)
        stitched_grid = np.fliplr(stitched_grid)
    return total_octathorps


if __name__ == "__main__":
    tst = util.read_strs("inputs/day20_test.txt", sep="\n\n")
    inpt = util.read_strs("inputs/day20_input.txt", sep="\n\n")
    tst_tiles = create_tiles(tst)
    tst_sqr = len(tst_tiles)**.5
    inpt_tiles = create_tiles(inpt)
    len_sqr = len(inpt_tiles)**.5

    print("TASK 1")
    util.call_and_print(task1, tst_tiles)
    util.call_and_print(task1, inpt_tiles)

    full_grid = []
    for i in range(int(len_sqr)):
        full_grid.append([None] * int(len_sqr))
    tst_grid = []
    for i in range(int(tst_sqr)):
        tst_grid.append([None] * int(tst_sqr))
    tst_tiles[1].mirror_tile()
    tst_tiles[1].rotate_tile()
    tst_tiles[1].rotate_tile()
    tst_grid[0][0] = tst_tiles[1]
    tst_tiles.pop(1)

    starting_tile = None
Exemplo n.º 13
0
    """

    v = 0
    for expr in exprs:
        v += eval_expression(expr, precedence)
    return v


if __name__ == "__main__":
    util.set_debug(False)

    expressions = util.read_strs("input/18.in", sep="\n")

    print("TASK 1")

    util.call_and_print(eval_expression, "1 + 2 * 3 + 4 * 5 + 6")
    util.call_and_print(eval_expression, "1 + (2 * 3) + (4 * (5 + 6))")
    util.call_and_print(eval_expression, "2 * 3 + (4 * 5)")
    util.call_and_print(eval_expression, "5 + (8 * 3 + 9 + 3 * 4 * 3)")
    util.call_and_print(eval_expression,
                        "5 * 9 * (7 * 3 * 3 + 9 * 3 + (8 + 6 * 4))")
    util.call_and_print(eval_expression,
                        "((2 + 4 * 9) * (6 + 9 * 8 + 6) + 6) + 2 + 4 * 2")
    util.call_and_print(sum_expressions, expressions)

    print("\nTASK 2")
    util.call_and_print(eval_expression, "1 + 2 * 3 + 4 * 5 + 6",
                        addition_precedence)
    util.call_and_print(eval_expression, "1 + (2 * 3) + (4 * (5 + 6))",
                        addition_precedence)
    util.call_and_print(eval_expression, "2 * 3 + (4 * 5)",
Exemplo n.º 14
0
    return rv

def get_score(q):
    queue_lst = []
    result = 0
    mult_lst = [i for i in range(1, q.qsize() + 1)]
    for i in range(q.qsize()):
        queue_lst = [q.get()] + queue_lst
    for i, elt in enumerate(queue_lst):
        result += (i+1) * elt
    return result





if __name__ == "__main__":
    tst_player_1, tst_player_2 = util.read_strs("inputs/day22_test.txt", sep = "\n\n")
    player_1, player_2 = util.read_strs("inputs/day22_input.txt", sep = "\n\n")
    print("TASK 1")
    util.call_and_print(task1, tst_player_1, tst_player_2)
    util.call_and_print(task1, player_1, player_2)

    print("\nTASK 2")
    util.call_and_print(task2, tst_player_1, tst_player_2)
    start = time.time()
    util.call_and_print(task2, player_1, player_2)
    end = time.time()
    print(end - start)

Exemplo n.º 15
0
    Output: int, the sum of a contiguous set maxinum and minimum element of the 
        set of at least two numbers in your list which sum to the invalid 
        number from task 1
    '''
    for i,_ in enumerate(inpt):
        sum = 0
        sum_lst = []
        j = 1
        while sum < num:
            sum += inpt[i + j]
            sum_lst.append(inpt[i+j])
            j += 1
            if sum == num:
                return max(sum_lst) + min(sum_lst)




if __name__ == "__main__":
    tst = util.read_ints('inputs/day9_test.txt', sep = '\n')
    inpt = util.read_ints('inputs/day9_input.txt', sep = '\n')

    print('TASK 1')
    util.call_and_print(task1, tst, 5)
    util.call_and_print(task1, inpt, 25)

    print('\nTASK 2')
    util.call_and_print(task2, tst, 127)
    util.call_and_print(task2, inpt, 556543474)

Exemplo n.º 16
0
def find_stable_state(grid, immediate_only, threshold):
    """
    Find the number of occupied seats in the stable state.
    """
    while True:
        grid, changes = update_grid(grid, immediate_only, threshold)

        if changes == 0:
            occupied = 0
            for x in range(grid.max_x):
                for y in range(grid.max_y):
                    if grid.get(x, y) == "#":
                        occupied += 1
            return occupied


if __name__ == "__main__":
    util.set_debug(False)

    sample = util.Grid.from_file("input/sample/11.in")
    grid = util.Grid.from_file("input/11.in")

    print("TASK 1")
    util.call_and_print(find_stable_state, sample, True, 4)
    util.call_and_print(find_stable_state, grid, True, 4)

    print("\nTASK 2")
    util.call_and_print(find_stable_state, sample, False, 5)
    util.call_and_print(find_stable_state, grid, False, 5)
Exemplo n.º 17
0
"""

import util
from intcode import IntCode


def run_test(prog, system_id):
    """
    Inputs a system id to the IntCode VM, and then runs it
    until it outputs a non-zero code (and returns the code)
    """
    vm = IntCode(input)
    vm.input(system_id)

    while True:
        code = vm.output()
        if code != 0:
            return code


if __name__ == "__main__":
    util.set_debug(False)

    input = util.read_ints("input/05.in", sep=",")

    print("TASK 1")
    util.call_and_print(run_test, input, 1)

    print("\nTASK 2")
    util.call_and_print(run_test, input, 5)
Exemplo n.º 18
0
    return rv


def multiply_list(lst):
    '''
    Simple helper function to multiply elements of a list together. For some 
        reason the one in the math library wasn't working.
    
    Inputs:
        lst (lst): a list of numbers
    
    Returns: result (int/float) the product of all the elements in the list
    '''
    result = 1
    for elt in lst:
        result *= elt
    return result


if __name__ == "__main__":
    smpl_tst = "1 + (2 * 3) + (4 * (5 + 6))"
    smpl_tst2 = "1 + 2 * 3 + 4 * 5 + 6"
    smpl_tst3 = "5 * 9 * (7 * 3 * 3 + 9 * 3 + (8 + 6 * 4))"
    inpt = util.read_strs("inputs/day18_input.txt", sep="\n")
    print("TESTING")
    util.call_and_print(complicated_solver, smpl_tst3, True)
    util.call_and_print(simple_solver_task2, smpl_tst2)
    print("\nTASK 1")
    util.call_and_print(task_solver, inpt, False)
    print("\nTASK 2")
    util.call_and_print(task_solver, inpt, True)
Exemplo n.º 19
0
    grid, moves1 = half_step(grid, ">")
    grid, moves2 = half_step(grid, "v")

    return grid, moves1 + moves2


def solve(grid):
    """
    Find the step number when no moves take place.
    """
    num_steps = 1
    
    while True:
        grid, moves = step(grid)
        
        if moves == 0:
            return num_steps
        num_steps += 1


if __name__ == "__main__":
    util.set_debug(False)

    sample = util.Grid.from_file("input/sample/25.in")
    input = util.Grid.from_file("input/25.in")

    print("TASK 1")
    util.call_and_print(solve, sample)
    util.call_and_print(solve, input)

Exemplo n.º 20
0
    cups = [int(x) for x in cups_txt]

    one_node = play_game(cups, moves)
    assert one_node.value == 1

    return one_node.to_str(sep="")[1:]


def task2(cups_txt, moves):
    cups = [int(x) for x in cups_txt]
    cups += list(range(max(cups)+1, 1000001))

    one_node = play_game(cups, moves)
    assert one_node.value == 1

    return one_node.next.value * one_node.next.next.value   


if __name__ == "__main__":
    util.set_debug(False)

    print("TASK 1")
    util.call_and_print(task1, "389125467", 10)
    util.call_and_print(task1, "389125467", 100)
    util.call_and_print(task1, "952316487", 100)

    print("\nTASK 2")
    util.call_and_print(task2, "389125467", 10000000)
    util.call_and_print(task2, "952316487", 10000000)

Exemplo n.º 21
0
    """
    Find a contiguous set of at least two numbers 
    that add up to the invalid number from the previous task.
    """
    target = task1(numbers, preamble_len)

    for i in range(len(numbers)):
        range_sum = numbers[i]
        for j in range(i + 1, len(numbers)):
            range_sum += numbers[j]
            if range_sum == target:
                sublist = numbers[i:j + 1]
                return min(sublist) + max(sublist)
            elif range_sum > target:
                break


if __name__ == "__main__":
    util.set_debug(False)

    sample = util.read_ints("input/sample/09.in")
    numbers = util.read_ints("input/09.in")

    print("TASK 1")
    util.call_and_print(task1, sample, 5)
    util.call_and_print(task1, numbers, 25)

    print("\nTASK 2")
    util.call_and_print(task2, sample, 5)
    util.call_and_print(task2, numbers, 25)
Exemplo n.º 22
0
        fishes[x] = fishes.get(x, 0) + 1

    for _ in range(days):
        new_fishes = {x: 0 for x in range(0, 9)}

        for timer, n in fishes.items():
            if timer == 0:
                new_fishes[8] += n
                new_fishes[6] += n
            else:
                new_fishes[timer - 1] += n

        fishes = new_fishes

    return sum(v for v in fishes.values())


if __name__ == "__main__":
    util.set_debug(False)

    sample = util.read_ints("input/sample/06.in", sep=",")
    input = util.read_ints("input/06.in", sep=",")

    print("TASK 1")
    util.call_and_print(count_fishes, sample, 80)
    util.call_and_print(count_fishes, input, 80)

    print("\nTASK 2")
    util.call_and_print(count_fishes, sample, 256)
    util.call_and_print(count_fishes, input, 256)
Exemplo n.º 23
0
def task1(input):
    """
    Task 1: Do 10 steps
    """
    template, rules = read_input(input)
    return count_polymer(template, rules, 10)


def task2(input):
    """
    Task 2: Do 40 steps
    """
    template, rules = read_input(input)
    return count_polymer(template, rules, 40)


if __name__ == "__main__":
    util.set_debug(False)

    sample = util.read_strs("input/sample/14.in", sep="\n\n")
    input = util.read_strs("input/14.in", sep="\n\n")

    print("TASK 1")
    util.call_and_print(task1, sample)
    util.call_and_print(task1, input)

    print("\nTASK 2")
    util.call_and_print(task2, sample)
    util.call_and_print(task2, input)
Exemplo n.º 24
0
    it finds the largest value of y, and also counts up the number of probes
    that end up in the target area.
    """
    best_y = 0
    best_vel_x = 0
    best_vel_y = 0
    num_in_target = 0
    for vel_x in range(lb_x, ub_x):
        for vel_y in range(lb_y, ub_y):
            in_target, largest_y = launch(vel_x, vel_y, target_min_x,
                                          target_max_x, target_min_y,
                                          target_max_y)
            if in_target:
                num_in_target += 1
                if largest_y > best_y:
                    best_y = largest_y
                    best_vel_x = vel_x
                    best_vel_y = vel_y

    return best_y, best_vel_x, best_vel_y, num_in_target


if __name__ == "__main__":
    util.set_debug(False)

    print("TASK 1 + 2")
    util.call_and_print(check_velocities, 20, 30, -10, -5, -250, 250, -250,
                        250)
    util.call_and_print(check_velocities, 155, 182, -117, -67, -250, 250, -250,
                        250)
Exemplo n.º 25
0
    
    # Finally, find the fields that start with "departure"
    # and get their respective values in my ticket
    values = []
    for position, choices in candidate_fields:
        assert len(choices) == 1
        field_name = choices.pop()

        if field_name.startswith("departure"):
            values.append(my_ticket[position])

    return math.prod(values)



if __name__ == "__main__":
    util.set_debug(False)

    sample1 = util.read_strs("input/sample/16-1.in", sep="\n\n")
    sample2 = util.read_strs("input/sample/16-2.in", sep="\n\n")
    notes = util.read_strs("input/16.in", sep="\n\n")

    print("TASK 1")
    util.call_and_print(task1, sample1)
    util.call_and_print(task1, notes)

    print("\nTASK 2")
    util.call_and_print(test_get_valid_tickets, sample1)
    util.call_and_print(test_get_valid_tickets, sample2)
    util.call_and_print(task2, notes)
Exemplo n.º 26
0
                to_flip.append(coords)
            elif tile.color == Tile.WHITE and (n_black == 2):
                to_flip.append(coords)

        for coords in to_flip:
            all_tiles[coords].flip()

    n_black = 0
    for tile in all_tiles.values():
        if tile.color == Tile.BLACK:
            n_black += 1

    return n_black


if __name__ == "__main__":
    util.set_debug(False)

    sample = util.read_strs("input/sample/24.in", sep="\n")
    input = util.read_strs("input/24.in", sep="\n")

    print("TASK 1")
    util.call_and_print(task1, ["esew"])
    util.call_and_print(task1, ["nwwswee"])
    util.call_and_print(task1, sample)
    util.call_and_print(task1, input)

    print("\nTASK 2")
    util.call_and_print(task2, sample, 100)
    util.call_and_print(task2, input, 100)
Exemplo n.º 27
0
def task2(input):
    """
    Task 2: Second visits allowed
    """
    graph = read_graph(input)
    paths = gen_paths(graph, "start", "end", allow_second_visit=True)

    return len(paths)


if __name__ == "__main__":
    util.set_debug(False)

    sample1 = util.read_strs("input/sample/12-1.in", sep="\n")
    sample2 = util.read_strs("input/sample/12-2.in", sep="\n")
    sample3 = util.read_strs("input/sample/12-3.in", sep="\n")
    input = util.read_strs("input/12.in", sep="\n")

    print("TASK 1")
    util.call_and_print(task1, sample1)
    util.call_and_print(task1, sample2)
    util.call_and_print(task1, sample3)
    util.call_and_print(task1, input)

    print("\nTASK 2")
    util.call_and_print(task2, sample1)
    util.call_and_print(task2, sample2)
    util.call_and_print(task2, sample3)
    util.call_and_print(task2, input)
Exemplo n.º 28
0
                new_value = ""
                for digit, mask_digit in zip(bin_value, mask):
                    if mask_digit in ("1", "X"):
                        new_value += mask_digit
                    elif mask_digit == "0":
                        new_value += digit

                addrs = expand_floating(new_value)

                for addr in addrs:
                    log(f"mem[{addr}] = {value}")
                    mem[addr] = value

    return sum(mem.values())


if __name__ == "__main__":
    util.set_debug(False)

    sample1 = util.read_strs("input/sample/14-1.in", sep="\n")
    sample2 = util.read_strs("input/sample/14-2.in", sep="\n")
    commands = util.read_strs("input/14.in", sep="\n")

    print("TASK 1")
    util.call_and_print(update_memory, sample1, 1)
    util.call_and_print(update_memory, commands, 1)

    print("\nTASK 2")
    util.call_and_print(update_memory, sample2, 2)
    util.call_and_print(update_memory, commands, 2)
Exemplo n.º 29
0
    image = stitch_image(tiles, adjacencies)

    # Try four rotations, flip, try four rotations
    for i in range(8):
        if i == 4:
            image = np.flip(image, 0)
            
        num_sea_creatures = count_sea_creatures(image)
        if num_sea_creatures > 0:
            return np.sum(image) - (num_sea_creatures * SEA_CREATURE_SIZE)

        image = np.rot90(image)

    return None  


if __name__ == "__main__":
    util.set_debug(False)

    sample = util.read_strs("input/sample/20.in", sep="\n\n")
    input = util.read_strs("input/20.in", sep="\n\n")

    print("TASK 1")
    util.call_and_print(find_corners, sample)
    util.call_and_print(find_corners, input)

    print("\nTASK 2")
    util.call_and_print(compute_roughness, sample)
    util.call_and_print(compute_roughness, input)
Exemplo n.º 30
0
    """
    value = 1

    for _ in range(loop_size):
        value *= subject_number
        value %= 20201227

    return value


def crack_keys(card_pk, door_pk):
    """
    Extract the encryption key from the public keys
    """
    card_loop = find_loop_size(card_pk)
    door_loop = find_loop_size(door_pk)

    card_key = transform(door_pk, card_loop)
    door_key = transform(card_pk, door_loop)

    assert card_key == door_key

    return card_key


if __name__ == "__main__":
    util.set_debug(False)

    print("TASK 1")
    util.call_and_print(crack_keys, 5764801, 17807724)
    util.call_and_print(crack_keys, 14788856, 19316454)