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
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]
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
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)
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)))
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()