def test_that_fabric_counts_overlapping_inches_count( self, piece1, piece2, overlapping_inches): fabric = Fabric(4, 4) fabric.claim(Piece(piece1)) fabric.claim(Piece(piece2)) self.assertEqual(overlapping_inches, fabric.overlapping_inches)
def test_that_fabric_counts_overlapping_pieces_2x2(self): fabric = Fabric(4, 4) fabric.claim(Piece("#1 @ 0,0: 2x2")) fabric.claim(Piece("#1 @ 1,1: 2x2")) self.assertEqual("\n" "11..\n" "121.\n" ".11.\n" "....\n", fabric.area())
def test_that_it_populates_attributes(self): piece = Piece("#1 @ 906,735: 28x17") self.assertEqual(1, piece.number) self.assertEqual(906, piece.left_offset) self.assertEqual(735, piece.top_offset) self.assertEqual(28, piece.width) self.assertEqual(17, piece.height)
def test_that_fabric_counts_single_piece_2x2_asymmetrical(self): piece = Piece("#1 @ 2,1: 2x2") fabric = Fabric(4, 4) fabric.claim(piece) self.assertEqual("\n" "....\n" "..11\n" "..11\n" "....\n", fabric.area())
def solve_part_2(): text_file = open("day03.input.txt", "r") pieces = list(map(lambda x: Piece(x), text_file.readlines())) text_file.close() for piece1 in pieces: overlaps = False for piece2 in pieces: if piece1 == piece2: continue if piece1.overlaps(piece2): overlaps = True continue if not overlaps: print("2. Non-overlapping piece:", piece1.number)
def solve_part_1(): text_file = open("day03.input.txt", "r") pieces = list(map(lambda x: Piece(x), text_file.readlines())) text_file.close() max_width = 0 max_height = 0 for piece in pieces: if piece.left_offset + piece.width > max_width: max_width = piece.left_offset + piece.width if piece.top_offset + piece.height > max_height: max_height = piece.top_offset + piece.height fabric = Fabric(max_width, max_height) for piece in pieces: fabric.claim(piece) print("1. Number of overlapping inches: ", fabric.overlapping_inches) out_file = open("day03.out.txt", "w") out_file.write(fabric.area()) out_file.close()
def test_that_fabric_counts_single_piece_1x1(self): piece = Piece("#1 @ 0,0: 1x1") fabric = Fabric(2, 2) fabric.claim(piece) self.assertEqual("\n" "1.\n" "..\n", fabric.area())
def test_that_piece_equals_to_itself(self): piece = Piece("#1 @ 2,2: 2x2") self.assertEqual(True, piece == piece)
def test_that_piece_does_not_overlaps_with_another_piece(self, p1, p2): piece1 = Piece(p1) piece2 = Piece(p2) self.assertEqual(False, piece1.overlaps(piece2)) self.assertEqual(False, piece2.overlaps(piece1))
def test_that_piece_does_not_overlaps_with_another_piece_wtf(self): piece1 = Piece("#1 @ 1,2: 2x3") piece2 = Piece("#2 @ 1,0: 2x2") self.assertEqual(False, piece1.overlaps(piece2))
def test_that_piece_overlaps_with_another_piece(self, s1, s2): piece1 = Piece(s1) piece2 = Piece(s2) self.assertEqual(True, piece1.overlaps(piece2)) self.assertEqual(True, piece2.overlaps(piece1))
def test_that_piece_contains_point(self): piece = Piece("#1 @ 0,0: 2x2") self.assertEqual(True, piece.contains((0, 0)))
def test_that_it_has_corners(self): piece = Piece("#1 @ 1,1: 2x3") self.assertEqual([(1, 1), (2, 1), (2, 3), (1, 3)], piece.Corners)