Beispiel #1
0
def test_overlap_puzzle_input():
    fabric = init_fabric()
    claims = [c.strip() for c in puzzle_input.splitlines() if c]
    for claim in claims:
        place_claim(fabric, parse_claim(claim))

    overlap = 0
    for column in fabric:
        for square in column:
            if square == 'X':
                overlap += 1

    assert overlap == 112418
Beispiel #2
0
def test_init_fabric_example():
    fabric = init_fabric(9, 11)
    expected = [
        ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
    ]

    assert fabric == expected
Beispiel #3
0
def test_place_claim_example():
    claim = Rectangle(3, 2, 5, 4)
    fabric = place_claim(init_fabric(9, 11), claim)
    expected = [
        ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
        ['.', '.', '.', '#', '#', '#', '#', '#', '.', '.', '.'],
        ['.', '.', '.', '#', '#', '#', '#', '#', '.', '.', '.'],
        ['.', '.', '.', '#', '#', '#', '#', '#', '.', '.', '.'],
        ['.', '.', '.', '#', '#', '#', '#', '#', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.'],
    ]

    assert fabric == expected
Beispiel #4
0
def test_non_overlapping_claim_puzzle_input():
    fabric = init_fabric()
    raw_claims = [r.strip() for r in puzzle_input.splitlines() if r]
    claims = [parse_claim(r) for r in raw_claims]
    for claim in claims:
        place_claim(fabric, claim)

    claim_areas_before = {c.tag: c.width * c.height for c in claims}
    claim_areas_after = get_claim_areas(fabric)

    non_overlapping = set()
    for tag, area in claim_areas_before.items():
        if claim_areas_after[tag] == area:
            non_overlapping.add(tag)

    assert len(non_overlapping) == 1
    assert non_overlapping.pop() == '560'
Beispiel #5
0
def test_overlap_visualisation_example():
    fabric = init_fabric(8, 8)
    claims = [
        '#1 @ 1,3: 4x4',
        '#2 @ 3,1: 4x4',
        '#3 @ 5,5: 2x2',
    ]
    for claim in claims:
        place_claim(fabric, parse_claim(claim))
    string = fabric_to_str(fabric)
    expected = """\
........
...2222.
...2222.
.11XX22.
.11XX22.
.111133.
.111133.
........
"""

    assert string == expected