def test_outputCount(self): from main import parseInput, countUnique signalPatterns, outputValues = parseInput(sample1) result = countUnique(outputValues[0]) self.assertEqual(result, 0) result = countUnique(signalPatterns[0]) self.assertEqual(result, 4) signalPatterns, outputValues = parseInput(sample2) total = 0 for output in outputValues: total += countUnique(output) self.assertEqual(total, 26)
def test_input(self): from main import parseInput commands = parseInput(["forward 4"]) self.assertEqual(commands, [{"command": "forward", "distance": 4}]) commands = parseInput(["up 3"]) self.assertEqual(commands, [{"command": "up", "distance": 3}]) commands = parseInput(["down 12"]) self.assertEqual(commands, [{"command": "down", "distance": 12}]) commands = parseInput(["down 12"]) self.assertEqual(commands, [{"command": "down", "distance": 12}]) commands = parseInput(["up -7"]) self.assertEqual(commands, [{"command": "up", "distance": -7}])
def test_decoding(self): from main import parseInput, determineValue signalPatterns, outputValues = parseInput(sample1) result = determineValue(signalPatterns[0]) self.assertEqual(result, [ 'cagedb', 'ab', 'gcdfa', 'fbcad', 'eafb', 'cdfbe', 'cdfgeb', 'dab', 'acedgfb', 'cefabd' ])
def parse(): ''' Don't want to have to repeat this... ''' from main import parseInput fileText = sample1.replace("\n\n", "\n") inputStrings = fileText.split('\n') return parseInput(inputStrings, 5)
def test_v1_part1(self): from main import step, parseInput fish = parseInput(sample1) for i in range(0, 80): fish = step(fish) self.assertEqual(len(fish), 5934)
def test_part2(self): from main import parseInput, findLowPoints, getBasins grid = parseInput(sample2) lowPoints = findLowPoints(grid) basins = getBasins(lowPoints, grid) self.assertEqual(basins, [3, 9, 9, 14]) value = basins[-1] * basins[-2] * basins[-3] self.assertEqual(value, 1134)
def test_v2(self): from main import parseInput, Grid biggest, coordinates = parseInput(sample1) testGrid = Grid(biggest) for line in coordinates: testGrid.placeLine(line) result = testGrid.findOverlaps() print("Map for V2") pp.pprint(testGrid.map) self.assertEqual(result, 12)
def test_markGrid(self): from main import parseInput, Grid, filterOutDiagonals biggest, coordinates = parseInput(sample0) coords = filterOutDiagonals(coordinates) testGrid = Grid(biggest) for line in coords: testGrid.placeLine(line) self.assertEqual( testGrid.map, [[0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1], [1, 1, 1, 1]])
def test_v1(self): from main import parseInput, Grid, filterOutDiagonals biggest, coordinates = parseInput(sample1) coords = filterOutDiagonals(coordinates) testGrid = Grid(biggest) for line in coords: testGrid.placeLine(line) result = testGrid.findOverlaps() print("Map for V1") pp.pprint(testGrid.map) self.assertEqual(result, 5)
def test_v2_part2(self): from main import stepV2, parseInput fish = parseInput(sample1) fishTrack = np.array([ len(fish[fish == 0]), len(fish[fish == 1]), len(fish[fish == 2]), len(fish[fish == 3]), len(fish[fish == 4]), len(fish[fish == 5]), len(fish[fish == 6]), len(fish[fish == 7]), len(fish[fish == 8]) ], dtype=np.int64) for i in range(0, 256): fishTrack = stepV2(fishTrack) self.assertEqual(np.sum(fishTrack), 26984457539)
def test_filterDiagonals(self): from main import parseInput, filterOutDiagonals biggest, coordinates = parseInput(sample0) result = filterOutDiagonals(coordinates) self.assertEqual(result, [[[1, 3], [3, 3]], [[3, 0], [3, 2]]])
def test_inputParsing(self): from main import parseInput biggest, coordinates = parseInput(sample1) self.assertEqual(biggest, 9) self.assertEqual(coordinates[0], [[0, 9], [5, 9]])
def test_parse(self): from main import parseInput signalPatterns, outputValues = parseInput(sample1) self.assertEqual(outputValues, [["cdfeb", "fcadb", "cdfeb", "cdbaf"]])
distances = list(((self.getDistance(person, ambulance),) + person) for person in sorted(persons)) return distances def getDistance(self, person, ambulance): personCoordinates = (person[1], person[2]) ambulanceCoordinates = (ambulance[1], ambulance[2]) distance = self.__cityMap.getDistance(personCoordinates, ambulanceCoordinates) return distance def anyPersonsLeftToRescue(self): personsToRescue = self.__cityMap.get911Calls() if personsToRescue == set(): return False else: return True def anyAmbulancesFree(self): ambulances = self.__cityMap.callAmbulances() if ambulances == set(): return False else: return True if __name__ == '__main__': import main cityMap = main.parseInput('input') cityMap.placeHospitals() dispatcher = Dispatcher(cityMap) dispatcher.route()
def test_parse(self): from main import parseInput, findLowPoints, calculateScore grid = parseInput(sample2) lowPoints = findLowPoints(grid) result = calculateScore(lowPoints) self.assertEqual(result, 15)
def test_V2(self): from main import parseInput, traceDirectionsV2 position = {"horizontal": 0, "depth": 0, "aim": 0} commands = parseInput(sample1) position = traceDirectionsV2(commands, position) self.assertEqual(position["horizontal"] * position["depth"], 900)