Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions day_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -111,13 +111,13 @@ class Day$dayNumber extends GenericDay {
}

@override
int solvePart1() {
Future<int> solvePart1() async {

return 0;
}

@override
int solvePart2() {
Future<int> solvePart2() async {

return 0;
}
Expand Down Expand Up @@ -179,11 +179,11 @@ void main() {
() {
test('Part 1', () {
final day = Day$day()..inputForTesting = _exampleInput1;
expect(day.solvePart1(), _exampleSolutionPart1);
() async => expect(await day.solvePart1(), _exampleSolutionPart1);
});
test('Part 2', () {
final day = Day$day()..inputForTesting = _exampleInput2;
expect(day.solvePart2(), _exampleSolutionPart2);
() async => expect(await day.solvePart2(), _exampleSolutionPart2);
});
},
);
Expand All @@ -196,14 +196,14 @@ void main() {
skip: _puzzleSolutionPart1 == null
? 'Skipped because _puzzleSolutionPart1 is null'
: false,
() => expect(day.solvePart1(), _puzzleSolutionPart1),
() async => expect(await day.solvePart1(), _puzzleSolutionPart1),
);
test(
'Part 2',
skip: _puzzleSolutionPart2 == null
? 'Skipped because _puzzleSolutionPart2 is null'
: false,
() => expect(day.solvePart2(), _puzzleSolutionPart2),
() async => expect(await day.solvePart2(), _puzzleSolutionPart2),
);
},
);
Expand Down
4 changes: 2 additions & 2 deletions main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ final days = <GenericDay>[
Day01(),
];

void main(List<String?> args) {
Future<void> main(List<String?> args) async {
var onlyShowLast = true;

if (args.length == 1 && args[0].isHelperArgument()) {
Expand All @@ -20,7 +20,7 @@ void main(List<String?> args) {
onlyShowLast = false;
}

onlyShowLast
return onlyShowLast
? days.last.printSolutions()
: days.forEach((day) => day.printSolutions());
}
Expand Down
26 changes: 16 additions & 10 deletions tool/generic_day.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import 'dart:async';

import 'package:meta/meta.dart';
import 'package:timing/timing.dart';

import '../utils/input_util.dart';

typedef SolveFunction = int Function();
typedef SolveFunction = FutureOr<int> Function();
typedef SolutionWithDuration = (int, Duration);

/// Provides the [InputUtil] for given day and a [printSolutions] method to show
Expand All @@ -21,12 +23,17 @@ abstract class GenericDay {
input = InputUtil.fromMultiLineString(example);

dynamic parseInput();
int solvePart1();
int solvePart2();
FutureOr<int> solvePart1();
FutureOr<int> solvePart2();

FutureOr<void> printSolutions() async {
final results = await Future.wait([
_solveAndTrackTime(solvePart1),
_solveAndTrackTime(solvePart2),
]);

void printSolutions() {
final result1 = _solveAndTrackTime(solvePart1);
final result2 = _solveAndTrackTime(solvePart2);
final result1 = results[0];
final result2 = results[1];

print('-------------------------');
print(' Day $day ');
Expand All @@ -35,10 +42,9 @@ abstract class GenericDay {
print('\n');
}

SolutionWithDuration _solveAndTrackTime(SolveFunction solve) {
final tracker = SyncTimeTracker();
late final int solution;
tracker.track(() => solution = solve());
Future<SolutionWithDuration> _solveAndTrackTime(SolveFunction solve) async {
final tracker = AsyncTimeTracker();
final int solution = await tracker.track(solve);
return (solution, tracker.duration);
}

Expand Down