diff --git a/aoclib/__init__.py b/aoclib/__init__.py index 8698e18..ac74de9 100644 --- a/aoclib/__init__.py +++ b/aoclib/__init__.py @@ -1,2 +1,3 @@ from .inputs import * from .output import * +from .performance import * diff --git a/aoclib/performance.py b/aoclib/performance.py new file mode 100644 index 0000000..48428d3 --- /dev/null +++ b/aoclib/performance.py @@ -0,0 +1,13 @@ +import time + + +def print_execution_time(func): + def wrapper(*args, **kwargs): + time_start = time.time() + return_value = func(*args, **kwargs) + time_stop = time.time() + print('{:s} function took {:.3f}ms'.format(func.__name__, (time_stop - time_start) * 1000.0)) + + return return_value + + return wrapper diff --git a/day01.py b/day01.py index 521c24c..94e0c83 100755 --- a/day01.py +++ b/day01.py @@ -17,11 +17,13 @@ def getProductOf2020Sum(input_lines, combinations): return return_value +@aoclib.print_execution_time def part1(test_mode=False): my_input = aoclib.getInputAsArray(day=1, return_type=int, test=test_mode) return getProductOf2020Sum(my_input, 2) +@aoclib.print_execution_time def part2(test_mode=False): my_input = aoclib.getInputAsArray(day=1, return_type=int, test=test_mode) return getProductOf2020Sum(my_input, 3) diff --git a/day02.py b/day02.py index 08c215b..20f60ee 100755 --- a/day02.py +++ b/day02.py @@ -6,6 +6,7 @@ DAY = 2 splitter = re.compile(r'([0-9]+)-([0-9]+) ([a-z]): (.*)') +@aoclib.print_execution_time def part1(test_mode=False): my_input = aoclib.getInputAsArray(day=2, test=test_mode) valid_count = 0 @@ -18,6 +19,7 @@ def part1(test_mode=False): return valid_count +@aoclib.print_execution_time def part2(test_mode=False): my_input = aoclib.getInputAsArray(day=2, test=test_mode) valid_count = 0 diff --git a/day03.py b/day03.py index 78a6344..9dd89e9 100755 --- a/day03.py +++ b/day03.py @@ -19,11 +19,13 @@ def check_for_trees(right_step, down_step, treelines): return tree_count +@aoclib.print_execution_time def part1(test_mode=False): my_input = aoclib.getInputAsArray(day=3, test=test_mode) return check_for_trees(3, 1, my_input) +@aoclib.print_execution_time def part2(test_mode=False): my_input = aoclib.getInputAsArray(day=3, test=test_mode) tree_count1 = check_for_trees(1, 1, my_input) diff --git a/day04.py b/day04.py index 1d32c4c..0d54555 100644 --- a/day04.py +++ b/day04.py @@ -70,6 +70,7 @@ def verifyPassportData(passport_data, verify_data=False): return True +@aoclib.print_execution_time def part1(test_mode=False): valid = 0 for passport_line in aoclib.getMultiLineInputAsArray(day=4, test=test_mode): @@ -80,6 +81,7 @@ def part1(test_mode=False): return valid +@aoclib.print_execution_time def part2(test_mode=False): valid = 0 for passport_line in aoclib.getMultiLineInputAsArray(day=4, test=test_mode): diff --git a/day05.py b/day05.py index 0e73526..857ce75 100644 --- a/day05.py +++ b/day05.py @@ -2,6 +2,8 @@ import aoclib DAY = 5 +rows_predefined = list(range(0, 128)) +columns_predefined = list(range(0, 8)) def getSeatRowColumn(seat_string): @@ -11,7 +13,7 @@ def getSeatRowColumn(seat_string): row_string = seat_string[:7] column_string = seat_string[-3:] - rows = list(range(0, 128)) + rows = rows_predefined.copy() for row_char in row_string: if row_char == 'F': rows = rows[:int(len(rows) / 2)] @@ -21,7 +23,7 @@ def getSeatRowColumn(seat_string): if len(rows) > 1: raise ValueError('left with more than one row: %s' % rows) - columns = list(range(0, 8)) + columns = columns_predefined.copy() for column_char in column_string: if column_char == 'L': columns = columns[:int(len(columns) / 2)] @@ -38,6 +40,7 @@ def getSeatID(row, column): return row * 8 + column +@aoclib.print_execution_time def part1(test_mode=False): my_input = aoclib.getInputAsArray(day=5, test=test_mode) max_id = 0 @@ -48,6 +51,7 @@ def part1(test_mode=False): return max_id +@aoclib.print_execution_time def part2(test_mode=False): my_input = aoclib.getInputAsArray(day=5, test=test_mode) seat_list = list(range(0, 1024))