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