Example #1
0
    def from_file(cls, filename):
        lines = read_strs(filename, sep="\n")

        program = []
        for line in lines:
            op, param = line.strip().split()
            program.append((op, int(param)))

        return cls(program)
Example #2
0
def create_ranges(file):
    '''
    Creates a list of ranges for the fields.

    Inputs: 
        file (file): The file containing the ranges and field names

    Returns: rv (list of tuples): list containing tuples of (lb, ub)
    '''
    rv = []
    field = util.read_strs(file, sep = '\n')
    for line in field:
        words = line.split()
        int_1 = words[-3]
        int_2 = words[-1]
        intv_1, intv_2 = text_to_range(int_1), text_to_range(int_2)
        rv.append(intv_1)
        rv.append(intv_2)
    return rv
Example #3
0
    """
    ids = get_ids(boarding_passes)

    min_id = min(ids)
    max_id = max(ids)

    sum_all_ids = ((max_id - min_id + 1) / 2) * (min_id + max_id)
    sum_ids = sum(ids)

    return int(sum_all_ids) - sum_ids


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

    boarding_passes = util.read_strs("input/05.in", sep="\n")

    print("TASK 1")
    util.call_and_print(decode, "FBFBBFF", "F", "B")
    util.call_and_print(decode, "RLR", "L", "R")
    util.call_and_print(decode, "BFFFBBF", "F", "B")
    util.call_and_print(decode, "RRR", "L", "R")
    util.call_and_print(decode, "FFFBBBF", "F", "B")
    util.call_and_print(decode, "RRR", "L", "R")
    util.call_and_print(decode, "BBFFBBF", "F", "B")
    util.call_and_print(decode, "RLL", "L", "R")

    util.call_and_print(task1, ["FBFBBFFRLR"])

    util.call_and_print(task1, boarding_passes)
Example #4
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)
    
Example #5
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)
Example #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)
Example #7
0
        commds.append([command, int(val)])
    n = len(commds)
    acc, last_instruction, j, to_change = run_program(commds)
    for com, i in to_change:
        if com == 'nop':
            to_change_back = 'nop'
            commds[i][0] = 'jmp'
        elif com == 'jmp':
            to_change_back = 'jmp'
            commds[i][0] = 'nop'
        else:
            print("ERROR")
        acc, _, j, _ = run_program(commds)
        if j == n - 1:
            return acc
        else:
            commds[i][0] = to_change_back


if __name__ == "__main__":
    tst = util.read_strs('inputs/day8_test.txt', sep='\n')
    inpt = util.read_strs('inputs/day8_input.txt', sep='\n')

    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)
Example #8
0
    max_magnitude = 0
    for lst1 in input:
        for lst2 in input:
            if lst1 is not lst2:
                tree1 = Tree.from_list(eval(lst1))
                tree2 = Tree.from_list(eval(lst2))

                res = tree1.add(tree2)
                magnitude = res.magnitude()

                if magnitude > max_magnitude:
                    max_magnitude = magnitude

    return max_magnitude


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

    sample = util.read_strs("input/sample/18.in", sep="\n")
    input = util.read_strs("input/18.in", sep="\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)
Example #9
0
    parser = lark.Lark(grammar)

    messages = input[1].split("\n")
    correct = 0
    for message in messages:
        try:
            parser.parse(message.strip())
            correct += 1
        except lark.exceptions.LarkError:
            pass

    return correct


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

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

    print("TASK 1")
    util.call_and_print(count_correct, sample1)
    util.call_and_print(count_correct, input)

    print("\nTASK 2")
    util.call_and_print(count_correct, sample2)
    util.call_and_print(count_correct, sample2, True)
    util.call_and_print(count_correct, input, True)
Example #10
0

def solve(program, target_digit):
    """
    Solve the problem for a given target digit (i.e., we want as many
    of the digits to be equal to that target)
    """
    
    # Find the differences between the digits
    digit_map = code_analysis(program)

    # Generate the model number
    model_number = generate_model_number(digit_map, target_digit)

    # Make sure it's actually valid
    assert validate(program, model_number)

    return model_number


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

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

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

    print("TASK 2")
    util.call_and_print(solve, input, 1)
Example #11
0
    for _ in range(6):
        cc = cc.cycle3d()

    return cc.count_active()


def task2(input):
    cc = ConwayCube()
    cc.from_grid(input)

    for _ in range(6):
        cc = cc.cycle4d()

    return cc.count_active()


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

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

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

    print("\nTASK 2")
    util.call_and_print(task2, sample)
    util.call_and_print(task2, grid)
Example #12
0
    common = wires_intersect(dirs1, dirs2)

    smallest_steps = None
    for x, y in common:
        steps1 = trace(dirs1, x, y)
        steps2 = trace(dirs2, x, y)
        total_steps = steps1 + steps2
        if smallest_steps is None or total_steps < smallest_steps:
            smallest_steps = total_steps

    return smallest_steps


if __name__ == "__main__":
    wire1, wire2 = util.read_strs("input/03.in")

    sample1_wire1 = "R75,D30,R83,U83,L12,D49,R71,U7,L72"
    sample1_wire2 = "U62,R66,U55,R34,D71,R55,D58,R83"

    sample2_wire1 = "R98,U47,R26,D63,R33,U87,L62,D20,R33,U53,R51"
    sample2_wire2 = "U98,R91,D20,R16,D67,R40,U7,R15,U6,R7"

    print("TASK 1")
    util.call_and_print(task1, sample1_wire1, sample1_wire2)
    util.call_and_print(task1, sample2_wire1, sample2_wire2)
    util.call_and_print(task1, wire1, wire2)

    print("\nTASK 2")
    util.call_and_print(task2, sample1_wire1, sample1_wire2)
    util.call_and_print(task2, sample2_wire1, sample2_wire2)
Example #13
0
        new_layer = [[0] * (col_num + 2)]
        for row in layer:
            new_row = [0]
            new_row += row
            new_row.append(0)
            new_layer.append(new_row)
        new_layer.append([0] * (col_num + 2))
        new_grid.append(new_layer)
    new_grid.append([[0] * (col_num + 2)] * (row_num + 2))
    return new_grid




if __name__ == "__main__":
    lines = util.read_strs("inputs/day17_inputs.txt")

    # creates the list of lists
    init_inpt = []
    for line in lines:
        init_line = []
        for val in line:
            if val == '.':
                init_line.append(0)
            else:
                init_line.append(1)
        init_inpt.append(init_line)

    # given test data
    tst = [[[0, 1, 0], [0, 0, 1], [1, 1, 1]]]
Example #14
0
                                or (digt >= "a" and digt <= "f")):
                            num_correct += 1
                        else:
                            invalid = True
                    if (not invalid and num_correct == 6):
                        needed += 1
            elif (field_name == "ecl" and value
                  in ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"]):
                needed += 1
            elif (field_name == "pid" and len(value) == 9
                  and unicode(value).isnumeric()):
                needed += 1
        if needed == 7:
            num_valid += 1
    return num_valid


if __name__ == "__main__":
    inpt = util.read_strs("inputs/day4_input.txt", sep="\n\n")
    tst = util.read_strs("inputs/day4_test_input.txt", sep="\n\n")
    tst2_valid = util.read_strs("inputs/day4_test_valid.txt", sep="\n\n")
    tst2_invalid = util.read_strs("inputs/day4_test_invalid.txt", sep="\n\n")

    print("TASK 1")
    util.call_and_print(task1, tst)
    util.call_and_print(task1, inpt)

    print("\nTASK 2")
    util.call_and_print(task2, tst2_valid)
    util.call_and_print(task2, tst2_invalid)
    util.call_and_print(task2, inpt)
Example #15
0
    for s in passwords:
        indices, letter, password = s.strip().split()

        i, j = (int(x) for x in indices.split("-"))

        letter = letter[0]

        li = password[i - 1]
        lj = password[j - 1]

        # Really wish Python had an "xor" operator
        if (li == letter
                or lj == letter) and not (li == letter and lj == letter):
            valid += 1

    return valid


if __name__ == "__main__":
    sample = util.read_strs("input/sample/02.in", sep="\n")
    passwords = util.read_strs("input/02.in", sep="\n")

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

    print("\nTASK 2")
    util.call_and_print(task2, sample)
    util.call_and_print(task2, passwords)
Example #16
0
    for i in range(2):
        for j in range(4):
            num_sea_creature = 0
            for y in range(n - 3):
                for x in range(n - 20):
                    if is_sea_creature(stitched_grid[y:y + 3, x:x + 20]):
                        num_sea_creature += 1
            if num_sea_creature > 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)):
Example #17
0
        A tuple (int, int, str, str) containing:
            lb (int): the lower bound/first position
            ub (int): the upper bound/second position
            ltr (str): the letter of interest
            pswrd (str): the password in question
    '''
    line_splt = line.split()
    lb, ub = line_splt[0].split('-')
    ltr = line_splt[1][0]
    pswrd = line_splt[2]
    return (int(lb), int(ub), ltr, pswrd)








if __name__ == "__main__":
    inpt = util.read_strs("inputs/day2_input.txt", sep = '\n')
    tst = util.read_strs("inputs/day2_testinput.txt", sep = '\n')

    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)
Example #18
0
    for _, outputs in patterns:
        for o in outputs:
            if len(o) in (2, 3, 4, 7):
                n += 1
    return n


def task2(input):
    """
    All the heavy lifting happens in decode()
    """
    return decode(read_input(input))


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

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

    print("TASK 1")
    util.call_and_print(task1, sample1)
    util.call_and_print(task1, sample2)
    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, input)
Example #19
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)
Example #20
0
            dic[dic_key] = generate_number(current_mask, num)
    return sum(dic.values())


def task2(inpt):
    dic = {}
    current_mask = None
    for line in inpt:
        key, _, num = line.split()
        if key[1] == 'a':
            current_mask = num
        else:
            assert key[1] == 'e'
            dic_key = key[4:-1]
            index_lst = generate_number_task2(current_mask, dic_key)
            for index in index_lst:
                dic[index] = int(num)
    return sum(dic.values())


if __name__ == "__main__":
    inpt = util.read_strs("inputs/day14_input.txt", '\n')
    tst = util.read_strs("inputs/day14_test.txt", '\n')

    print("TASK 1")
    util.call_and_print(task1, tst)
    util.call_and_print(task1, inpt)

    print("TASK 2")
    util.call_and_print(task2, tst)
    util.call_and_print(task2, inpt)
Example #21
0

def task2(tiles):
    '''
    Runs the simulation for 100 days and finds the number of black tiles at 
        the end
    
    Inputs: 
        - tiles (lst of strs): list of directions to tiles to be fliped initally
    
    Outputs: an int, number of black tiles at the end of the simulation
    '''
    _, _, tile_dict = task1(tiles)
    for i in range(1, 101):
        tile_dict = one_day(tile_dict)
        num_black, _ = find_black_tiles(tile_dict)
    num_black, _ = find_black_tiles(tile_dict)
    return num_black


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

    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)
Example #22
0
            elif action == "W":
                move_dir = Direction.WEST()

            for _ in range(value):
                wayp_coords = move_dir.move_grid_coordinates(wayp_coords)
        elif action == "F":
            ship_coords = (ship_coords[0] + value * wayp_coords[0], ship_coords[1] + value * wayp_coords[1])
        elif action == "L":
            wayp_coords = rotate_counterclockwise(wayp_coords, value, origin=(0,0))
        elif action == "R":
            wayp_coords = rotate_clockwise(wayp_coords, value, origin=(0,0))

        log(f"New coordinates {ship_coords} {wayp_coords}\n")

    return abs(int(ship_coords[0])) + abs(int(ship_coords[1]))


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

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

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

    print("\nTASK 2")
    util.call_and_print(task2, sample)
    util.call_and_print(task2, actions)
Example #23
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)
Example #24
0
    for s in strings:
        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)

Example #25
0
    Outputs: number (int) of valid passwords
    '''
    gram = create_lark_grammer(rules_inpt)
    parser = lark.Lark(gram)
    num_correct = 0
    for line in passw_inpt:
        try:
            parser.parse(line.strip())
            num_correct += 1
        except lark.exceptions.LarkError:
            pass
    return num_correct


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)
Example #26
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)

Example #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)
Example #28
0
def sum_expressions(exprs, precedence=equal_precedence):
    """
    Evaluate a list of expressions and return the sum
    """

    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",
Example #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)
Example #30
0
    decks = read_input(input_txt)

    winner, _ = play_game_r(decks, 1, recursive)

    log("== Post-game results ==")
    log("Player 1's deck:", ", ".join([str(x) for x in decks[1]]))
    log("Player 2's deck:", ", ".join([str(x) for x in decks[2]]))

    score = 0
    for card, n in zip(decks[winner], range(len(decks[winner]), 0, -1)):
        score += card * n

    return score


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

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

    print("TASK 1")
    util.call_and_print(play_game, sample1, False)
    util.call_and_print(play_game, input, False)

    print("\nTASK 2")
    util.call_and_print(play_game, sample1, True)
    util.call_and_print(play_game, sample2, True)
    util.call_and_print(play_game, input, True)