示例#1
0
def test_bake():
    day = Day(1, 1)
    day.load([1, 2, 3])

    day.data = [0]

    assert day.data == [0]
    day.bake()
    assert len(day.raw_data) == 2

    day.data = [1]
    assert day.data == [1]
    day.reset()
    assert day.data == [0]
    day.hist()
    day.reset(0)
    assert len(day.raw_data) == 1
    assert type(day.raw_data) == list
示例#2
0
def test_given_2():
    part1 = Day(8, 1)
    part1.load(["0222112222120000"])

    part1.data = shaper(part1.data, 2, 2)
    part1.bake()

    np.testing.assert_array_equal(sif_decode(part1.data),
                                  np.array([[0, 1], [1, 0]]))
def test_part2():
    part2 = Day(10, 2)
    part2.load(sep="\n")

    part2.data = process_map(part2.data)

    part2.answer(wazer_wifle(part2.data, (23, 20), 200), v=2)

    assert part2.result[0] * 100 + part2.result[1] == 1119
def test_part1():
    part1 = Day(10, 1)

    part1.load(sep="\n")

    part1.data = process_map(part1.data)

    part1.answer(count_visible(part1.data)[0], v=1)

    assert part1.result == 334
def test_given_part2():
    part2 = Day(10, 2)
    raw_data = """.#....#####...#..
##...##.#####..##
##...#...#.#####.
..#.....X...###..
..#.#.....#....##""".split("\n")
    part2.load(raw_data, sep="\n")
    part2.data = process_map(part2.data)
    assert wazer_wifle(part2.data, (8, 4), 3) == (9, 1)

    raw_data = """.#..##.###...#######
##.############..##.
.#.######.########.#
.###.#######.####.#.
#####.##.#.##.###.##
..#####..#.#########
####################
#.####....###.#.#.##
##.#################
#####.##.###..####..
..######..##.#######
####.##.####...##..#
.#####..#.######.###
##...#.##########...
#.##########.#######
.####.#.###.###.#.##
....##.##.###..#####
.#.#.###########.###
#.#.#.#####.####.###
###.##.####.##.#..##""".split("\n")

    part2.load(raw_data, sep="\n")
    part2.data = process_map(part2.data)

    shtuff = [1, 2, 3, 10, 20, 50, 100, 199, 200, 201]
    solved = [(11, 12), (12, 1), (12, 2), (12, 8), (16, 0), (16, 9), (10, 16),
              (9, 6), (8, 2), (10, 9)]
    for i, el in enumerate(shtuff):
        data = wazer_wifle(part2.data, (11, 13), el)
        print(f"The {el} asteroid to be  vaporized is at: ", data)
        assert data == solved[i]
示例#6
0
def test_part_1():
    part1 = Day(8, 1)
    part1.load(typing=str, sep=",")

    part1.data = shaper(part1.data, 25, 6)
    part1.bake()

    layer_i = min_layer(part1.data)

    part1.answer(hash(part1.data, layer_i), v=1)
    assert part1.result == 2520
示例#7
0
def test_given_1():
    part1 = Day(8, 1)
    part1.load(["123456789012"])

    part1.data = shaper(part1.data, 3, 2)
    part1.bake()
    assert part1.data.shape == (2, 2, 3)

    layer_i = min_layer(part1.data)
    assert layer_i == 0

    part1.answer(hash(part1.data, layer_i), v=1)
    assert part1.result == 1
def test_starcounts(data, result):
    part1 = Day(10, 1)

    raw_data = data.split()

    part1.load(raw_data, sep="\n")

    part1.data = process_map(part1.data)

    print(part1.data)

    print(count_visible(part1.data)[0])

    part1.answer(count_visible(part1.data)[0], v=1)

    assert part1.result == result
def test_shadow_all(center, obj, mask):
    part1 = Day(10, 1)

    raw_data = """.#..#
.....
#####
....#
...##""".split()

    part1.load(raw_data, sep="\n")

    part1.data = process_map(part1.data)

    comp_data = part1.data.copy()
    for keys in mask:
        comp_data.discard(keys)
    assert comp_data == all_shadows(part1.data, center, obj)
示例#10
0
            x += dx[index[rlud]]
            y += dy[index[rlud]]
            if (x, y) not in out:
                out[(x, y)] = steps
            # out[(x,y)] = 1  Part 1, you served me well
    return out


def intersect(pathA: dict, pathB: dict) -> list:
    return list(set(pathA.keys()) & set(pathB.keys()))


if __name__ == "__main__":
    ## Part One
    part1 = Day(3, 1)
    part2 = Day(3, 2)

    part1.load()

    part1.load(data={0: part1.data[0].split(","), 1: part1.data[1].split(",")})
    part2.data = part1.data

    pathA = path(part1.data[0])
    pathB = path(part1.data[1])
    union = intersect(pathA, pathB)

    print(part1.answer(min(abs(coord[0]) + abs(coord[1]) for coord in union)))

    print(part2.answer(min(pathA[coord] + pathB[coord] for coord in union)))

示例#11
0
def min_layer(data, axis=0):
    return np.argmax(
        [np.count_nonzero(data[i, :, :]) for i in range(data.shape[0])])


def hash(data, layer):
    return np.sum(data[layer, :, :] == 1) * np.sum(data[layer, :, :] == 2)


def sif_decode(data):
    return np.take_along_axis(data,
                              np.expand_dims(np.argmax(data < 2, axis=0), 0),
                              0).squeeze()


if __name__ == "__main__":
    # Part 1
    part1 = Day(8, 1)
    part1.load(typing=str)

    part1.data = shaper(part1.data, 25, 6)
    part1.bake()

    layer_i = min_layer(part1.data)
    part1.answer(hash(part1.data, layer_i), v=1)

    # Part 2

    plt.imshow(sif_decode(part1.data))
    plt.show()