예제 #1
0
def run_part_2(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 2, inspect.stack()[0].function, in_file)
    result = 0
    paths = parse(loadingUtils.importToArray(in_file))
    tiles = defaultdict(Tile)
    for path in paths:
        idx = walk_path(path, False)
        if debug:
            print("gonna flip Tile {}: from {}".format(idx, tiles[idx]),
                  end="")
        tiles[idx].flip()
        if debug: print(" to {}".format(tiles[idx]))
    print_floor(tiles)
    print(count_black(tiles))
    #tiles = step(tiles)
    #print_floor(tiles)
    #print(count_black(tiles))
    for i in range(1, 101):
        #for i in range(1, 5):
        tiles = step(tiles)
        #print_floor(tiles)
        print("Step {:3}: {}".format(i, count_black(tiles)))

    result = count_black(tiles)
    # code here
    print("Result = {}".format(result))
    return result
예제 #2
0
def run_part_2(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 2, inspect.stack()[0].function, in_file)
    result = 0
    in_text = loadingUtils.importToArray(in_file)
    tile_id = 0
    tile_content = []
    tile_counter = 0
    tiles = []
    for line in in_text:
        if line == "":
            tiles.append(Tile(tile_id, tile_content))
            tile_id = 0
            tile_content = []
            continue
        if "Tile" in line:
            tile_id = int(line.split(" ")[1][:-1])
            tile_counter += 1
        else:
            tile_content.append(list(line))
    tiles.append(Tile(tile_id, tile_content))
    print("We have {} Tiles".format(tile_counter))
    print(len(tiles))
    assert len(tiles) == tile_counter
    for tile in tiles:
        print()
        tile.print()
        print(tile.edges)
    find_edges(tiles)
    print("Start Assembling Image")
    image = assemble_image(tiles)
    # now remove all monsters
    result = remove_monsters(image)
    # code here
    print("Result = {}".format(result))
    return result
예제 #3
0
def run_part_1(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 1, inspect.stack()[0].function, in_file)
    in_text = loadingUtils.importToArray(in_file)
    tile_id = 0
    tile_content = []
    tile_counter = 0
    tiles = []
    for line in in_text:
        if line == "":
            tiles.append(Tile(tile_id, tile_content))
            tile_id = 0
            tile_content = []
            continue
        if "Tile" in line:
            tile_id = int(line.split(" ")[1][:-1])
            tile_counter += 1
        else:
            tile_content.append(list(line))
    tiles.append(Tile(tile_id, tile_content))
    print("We have {} Tiles".format(tile_counter))
    print(len(tiles))
    assert len(tiles) == tile_counter
    for tile in tiles:
        print()
        tile.print()
        print(tile.edges)
    find_edges(tiles)
    result = 1
    for tile in tiles:
        if tile.is_edge:
            result = result * tile.id
    # code here
    print("Result = {}".format(result))
    return result
예제 #4
0
def run_part_2(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 2, inspect.stack()[0].function, in_file)
    result = 0
    cups = list(map(int, list(loadingUtils.importToArray(in_file)[0])))
    print(cups)
    result = run_b(cups)
    # code here
    print("Result = {}".format(result))
    return result
예제 #5
0
def run_part_1(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 1, inspect.stack()[0].function, in_file)
    result = 0
    notes = loadingUtils.importToArray(in_file)
    rules, my_ticket, nearby = parser(notes)
    result = sum_wrong(rules, nearby)
    # code here
    print("Result = {}".format(result))
    return result
예제 #6
0
def run_part_1(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 1, inspect.stack()[0].function, in_file)
    result = 0
    eqns = loadingUtils.importToArray(in_file)
    for eqn in eqns:
        res = evaluate(eqn)
        print(res)
        result += res
    print("Result = {}".format(result))
    return result
예제 #7
0
def run_part_2(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 2, inspect.stack()[0].function, in_file)
    result = 0
    nav_instr = loadingUtils.importToArray(in_file)
    print(nav_instr)
    goal = get_end_point_real(nav_instr)
    print("Endpoint {}".format(goal))
    result = abs(goal[0]) + abs(goal[1])
    print("Result = {}".format(result))
    return result
예제 #8
0
def run_part_1(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 1, inspect.stack()[0].function, in_file)
    result = 0
    boardingpasses = loadingUtils.importToArray(in_file)
    seatIDs = []
    for boardingpass in boardingpasses:
        (row_i, col_i, seatID) = calc_row_column(boardingpass)
        seatIDs.append(seatID)
    result = max(seatIDs)
    print("Result = {}".format(result))
    return result
예제 #9
0
def run_part_2(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 2, inspect.stack()[0].function, in_file)
    result = 0
    prog_array = loadingUtils.importToArray(in_file)
    handheld = cp.Computer()
    handheld.hard_reset()
    handheld.debug = debug
    handheld.load_program(prog_array)
    result = handheld.run_day08_2()
    print("Result = {}".format(result))
    return result
예제 #10
0
def run_part_2(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 2, inspect.stack()[0].function, in_file)
    result = 0
    p1, p2 = parse(loadingUtils.importToArray(in_file))
    _, winner = play_advanced(p1, p2, debug)
    print(winner)
    winner.reverse()
    for i, v in enumerate(winner):
        result += (i + 1) * v
    # code here
    print("Result = {}".format(result))
    return result
예제 #11
0
def run_part_1(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 1, inspect.stack()[0].function, in_file)
    result = 0
    _starttime, _busses = loadingUtils.importToArray(in_file)
    starttime = int(_starttime)
    print(starttime)
    busses = get_valid_busses(_busses)
    print(busses)
    result = next_to_airport(starttime, busses)
    # code here
    print("Result = {}".format(result))
    return result
예제 #12
0
def run_part_2(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 2, inspect.stack()[0].function, in_file)
    result = 0
    passwords_list = loadingUtils.importToArray(in_file)
    results = []
    for password_line in passwords_list:
        (password, min_number, max_number, test_char) = parse_input(password_line)
        if validate_password_rules2(password, min_number, max_number, test_char):
            results.append(password)
    result = len(results)
    print("We have found {} valid passwords.".format(result))
    return result
예제 #13
0
def run_part_2(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 2, inspect.stack()[0].function, in_file)
    result = 0
    notes = loadingUtils.importToArray(in_file)
    rules, my_ticket, nearby = parser(notes)
    #print_rules(rules)
    clean_nearby = cleanup(rules, nearby)
    print("before cleanup = {}; after cleanup {}".format(len(nearby), len(clean_nearby)))
    match_columns(rules, clean_nearby)
    # code here
    result = 97*163*101*73*53*131
    print("Result = {}".format(result))
    return result
예제 #14
0
def run_part_1(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 1, inspect.stack()[0].function, in_file)
    foodlist = loadingUtils.importToArray(in_file)
    list_ingredients, allergens, mapping = parse_input(foodlist)
    # all values of the values of the dict
    exclude = set(v for vs in mapping.values() for v in vs)
    print(exclude)
    result = 0
    for ingredients in list_ingredients:
        for ingredient in ingredients:
            result += ingredient not in exclude
    print("Result = {}".format(result))
    return result
예제 #15
0
def run_part_1(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 1, inspect.stack()[0].function, in_file)
    result = 0
    lines = loadingUtils.importToArray(in_file)
    rules, messages = split(lines)
    #print(rules)
    regexp = generate_regex(rules)
    print(regexp)
    #print(messages)
    result = count_matches(regexp, messages, debug)
    # code here
    print("Result = {}".format(result))
    return result
예제 #16
0
def run_part_2(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 2, inspect.stack()[0].function, in_file)
    result = 0
    foodlist = loadingUtils.importToArray(in_file)
    list_ingredients, allergens, mapping = parse_input(foodlist)
    solution = solve(mapping)
    print(solution)
    solution.sort()
    print(solution)
    result = ",".join([x[1] for x in solution])
    # code here
    print("Result = {}".format(result))
    return result
예제 #17
0
def run_part_2(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 2, inspect.stack()[0].function, in_file)
    result = 0
    eqns = loadingUtils.importToArray(in_file)
    for eqn in eqns:
        print(eqn)
        new_eqn = transform(eqn)
        print(new_eqn)
        res = evaluate(new_eqn)
        print(res)
        result += res
    # code here
    print("Result = {}".format(result))
    return result
예제 #18
0
def run_part_1(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 1, inspect.stack()[0].function, in_file)
    result = 0
    paths = parse(loadingUtils.importToArray(in_file))
    tiles = defaultdict(Tile)
    for path in paths:
        idx = walk_path(path, debug)
        if debug:
            print("gonna flip Tile {}: from {}".format(idx, tiles[idx]),
                  end="")
        tiles[idx].flip()
        if debug: print(" to {}".format(tiles[idx]))
    print(tiles)
    result = Counter([x.print() for x in tiles.values()])['BLACK']
    print()
    # code here
    print("Result = {}".format(result))
    return result
예제 #19
0
def run_part_2(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 2, inspect.stack()[0].function, in_file)
    result = 0
    _starttime, _busses = loadingUtils.importToArray(in_file)
    starttime = int(_starttime)
    print(starttime)
    busses = []
    for i, bus in enumerate(_busses.split(",")):
        print(i, bus)
        if bus == "x":
            continue
        busses.append(((int(bus) - i) % int(bus), int(bus)))
    print(busses)
    solution = solve_congruence(*busses)
    print(solution)
    # code here
    result = solution[0]
    print("Result = {}".format(result))
    return result
예제 #20
0
def run_part_2(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 2, inspect.stack()[0].function, in_file)
    result = 0
    lines = loadingUtils.importToArray(in_file)
    rules, messages = split(lines)
    print(rules["8"])
    print(rules["11"])
    new_rules = transform(rules)
    print(new_rules["8"])
    print(new_rules["11"])
    max_len = 0
    for message in messages:
        max_len = max(max_len, len(message))
    print(max_len)
    regexp = gen_regex2(rules)
    #print(regexp)
    result = count_matches(regexp, messages, debug)
    # code here
    print("Result = {}".format(result))
    return result
예제 #21
0
def run_part_1(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 1, inspect.stack()[0].function, in_file)
    result = 0
    pub_keys = loadingUtils.importToArray(in_file)
    door_pub = int(pub_keys[0])
    card_pub = int(pub_keys[1])
    print("Intercepted Public keys: door = {}; card = {}".format(
        door_pub, card_pub))
    door_secret = crack_loopsize_2(door_pub, 7)
    card_secret = crack_loopsize_2(card_pub, 7)
    print("Cracked secret loop number: door = {}; card = {}".format(
        door_secret, card_secret))
    door_encryption = transform(door_pub, card_secret)
    card_encryption = transform(card_pub, door_secret)
    print("Encyption Keys: door = {}; card = {}".format(
        door_encryption, card_encryption))
    assert door_encryption == card_encryption
    result = door_encryption
    # code here
    print("Result = {}".format(result))
    return result
예제 #22
0
def run_part_1(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 1, inspect.stack()[0].function, in_file)
    result = 0
    rules = loadingUtils.importToArray(in_file)
    rule_dict = {}
    for rule_str in rules:
        parent, child_list = rule_to_dict(rule_str)
        if child_list == []:
            if debug: print("no children")
            rule_dict[str(parent)] = []
            continue
        if debug:
            print("{} --> {}".format(
                parent, ", ".join(map(str,
                                      list(zip(*child_list))[1]))))
        rule_dict[str(parent)] = list(map(str, list(zip(*child_list))[1]))
    if debug: print(rule_dict)
    valid_bags = find_valid_bags(rule_dict, "shiny gold")
    print(valid_bags)
    result = len(valid_bags)
    print("Result = {}".format(result))
    return result
예제 #23
0
def run_part_2(in_file: str, debug: bool = False) -> int:
    pretty.printHeader(DAY, 2, inspect.stack()[0].function, in_file)
    result = 0
    boardingpasses = loadingUtils.importToArray(in_file)
    seatIDs = []
    for boardingpass in boardingpasses:
        (row_i, col_i, seatID) = calc_row_column(boardingpass)
        seatIDs.append(seatID)
    seatIDs.sort()
    print(seatIDs)
    minSeat = min(seatIDs)
    maxSeat = max(seatIDs)
    results = []
    for seat in range(minSeat, maxSeat):
        if seat in seatIDs: continue
        if seat+1 not in seatIDs: continue
        if seat-1 not in seatIDs: continue
        print(seat)
        results.append(seat)
    assert len(results) == 1
    result = results[0]
    print("Result = {}".format(result))
    return result
예제 #24
0
def test_importToArrayRaises():
    with pytest.raises(FileNotFoundError):
        loadingUtils.importToArray("non_exisiting_filename")
예제 #25
0
def test_importToArray():
    out = loadingUtils.importToArray("helper/test_input_importToArray")
    assert out == ['2', '4', '6', '8', '99', '-42']