Beispiel #1
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]]))
Beispiel #2
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
Beispiel #3
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
Beispiel #4
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
Beispiel #5
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()