Skip to content

Commit cd99447

Browse files
committed
Setup aoc23
0 parents  commit cd99447

16 files changed

+1733
-0
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Files and directories created by pub.
2+
.dart_tool/
3+
.packages
4+
5+
# Conventional directory for build output.
6+
build/

aoc23

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
4+
# Attempt to set ENTRYPOINT_HOME
5+
# Resolve links: $0 may be a link
6+
PRG="$0"
7+
# Need this for relative symlinks.
8+
while [ -h "$PRG" ]; do
9+
ls=$(ls -ld "$PRG")
10+
link=$(expr "$ls" : '.*-> \(.*\)$')
11+
if expr "$link" : '/.*' >/dev/null; then
12+
PRG="$link"
13+
else
14+
PRG=$(dirname "$PRG")"/$link"
15+
fi
16+
done
17+
SAVED="$(pwd)"
18+
cd "$(dirname "$PRG")/" >/dev/null
19+
export SIDEKICK_ENTRYPOINT_FILE="${PRG}"
20+
export SIDEKICK_ENTRYPOINT_HOME="$(pwd -P)"
21+
cd "$SAVED" >/dev/null
22+
23+
"${SIDEKICK_ENTRYPOINT_HOME}/aoc23_sidekick/tool/run.sh" "$@"

aoc23_sidekick/.gitignore

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Files and directories created by pub
2+
.dart_tool/
3+
.packages
4+
5+
# Conventional directory for build outputs
6+
build/
7+
8+
# Directory created by dartdoc
9+
doc/api/

aoc23_sidekick/analysis_options.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
include: package:lint/analysis_options.yaml
2+
3+
linter:
4+
rules:
5+
avoid_print: false
6+
7+
analyzer:
8+
exclude:
9+
- build/**
10+

aoc23_sidekick/bin/main.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import 'package:aoc23_sidekick/aoc23_sidekick.dart';
2+
3+
Future<void> main(List<String> arguments) async {
4+
await runAoc23(arguments);
5+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import 'dart:async';
2+
3+
import 'package:aoc23_sidekick/src/commands/clean_command.dart';
4+
import 'package:sidekick_core/sidekick_core.dart';
5+
import 'package:aoc23_sidekick/src/commands/new_day_command.dart';
6+
7+
Future<void> runAoc23(List<String> args) async {
8+
final runner = initializeSidekick(
9+
dartSdkPath: systemDartSdkPath(),
10+
);
11+
12+
runner
13+
..addCommand(DartCommand())
14+
..addCommand(DepsCommand())
15+
..addCommand(CleanCommand())
16+
..addCommand(DartAnalyzeCommand())
17+
..addCommand(FormatCommand())
18+
..addCommand(SidekickCommand())
19+
..addCommand(NewDayCommand());
20+
21+
try {
22+
return await runner.run(args);
23+
} on UsageException catch (e) {
24+
print(e);
25+
exit(64); // usage error
26+
}
27+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import 'package:sidekick_core/sidekick_core.dart';
2+
3+
class CleanCommand extends Command {
4+
@override
5+
final String description = 'Cleans the project';
6+
7+
@override
8+
final String name = 'clean';
9+
10+
@override
11+
Future<void> run() async {
12+
// TODO Please add your own project clean logic here
13+
14+
print('✔️Cleaned project');
15+
}
16+
}
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
import 'package:sidekick_core/sidekick_core.dart';
2+
3+
class NewDayCommand extends Command {
4+
@override
5+
final String description = 'Creates code for a new day';
6+
7+
@override
8+
final String name = 'new-day';
9+
10+
@override
11+
Future<void> run() async {
12+
final singleDigitDay = ask('Day?', validator: Ask.integer);
13+
final day = singleDigitDay.padLeft(2, '0');
14+
15+
final part1File = File('bin/day${day}_part1.dart')
16+
..createSync()
17+
..writeAsStringSync('''
18+
void main(List<String> args) {
19+
print(0);
20+
}
21+
''');
22+
final part1MinFile = File('bin/day${day}_part1.min.dart')
23+
..createSync()
24+
..writeAsStringSync('''
25+
main(a, {i}) {
26+
print(0);
27+
}
28+
''');
29+
30+
final part2File = File('bin/day${day}_part2.dart')
31+
..createSync()
32+
..writeAsStringSync('''
33+
void main(List<String> args) {
34+
print(0);
35+
}
36+
''');
37+
final part2MinFile = File('bin/day${day}_part2.min.dart')
38+
..createSync()
39+
..writeAsStringSync('''
40+
main(a, {i}) {
41+
print(0);
42+
}
43+
''');
44+
45+
final sampleFile = File('data/day${day}_sample.txt')..createSync();
46+
final input = File('data/day${day}_input.txt')..createSync();
47+
48+
final testFile = File('test/day${day}_test.dart')
49+
..createSync()
50+
..writeAsStringSync('''
51+
import 'dart:io';
52+
53+
import 'package:test/test.dart';
54+
import '../bin/day${day}_part1.dart' as day${day}_part1;
55+
import '../bin/day${day}_part1.min.dart' as day${day}_part1_min;
56+
import '../bin/day${day}_part2.dart' as day${day}_part2;
57+
import '../bin/day${day}_part2.min.dart' as day${day}_part2_min;
58+
import 'main_tester.dart';
59+
60+
void main() {
61+
group('day ${day}', () {
62+
test('sample part 1', () {
63+
final output = testMain(
64+
day${day}_part1.main,
65+
input: File('data/day${day}_sample.txt').readAsStringSync(),
66+
);
67+
expect(output, '100');
68+
});
69+
70+
test('golf part 1', () {
71+
final output = testMain(
72+
day${day}_part1_min.main,
73+
input: File('data/day${day}_sample.txt').readAsStringSync(),
74+
);
75+
expect(output, '100');
76+
});
77+
78+
test('solve part 1', () {
79+
final output = testMain(
80+
day${day}_part1.main,
81+
input: File('data/day${day}_input.txt').readAsStringSync(),
82+
);
83+
expect(output, isNot('0'));
84+
print(output);
85+
});
86+
87+
test('sample part 2', () {
88+
final output = testMain(
89+
day${day}_part2.main,
90+
input: File('data/day${day}_sample.txt').readAsStringSync(),
91+
);
92+
expect(output, '100');
93+
});
94+
95+
test('golf part 2', () {
96+
final output = testMain(
97+
day${day}_part2_min.main,
98+
input: File('data/day${day}_sample.txt').readAsStringSync(),
99+
);
100+
expect(output, '100');
101+
});
102+
103+
test('solve part 2', () {
104+
final output = testMain(
105+
day${day}_part2.main,
106+
input: File('data/day${day}_input.txt').readAsStringSync(),
107+
);
108+
expect(output, isNot('0'));
109+
print(output);
110+
});
111+
});
112+
}
113+
''');
114+
115+
assert(part1File.existsSync());
116+
assert(part1MinFile.existsSync());
117+
assert(part2File.existsSync());
118+
assert(part2MinFile.existsSync());
119+
assert(testFile.existsSync());
120+
assert(sampleFile.existsSync());
121+
assert(input.existsSync());
122+
123+
print(green('Created day $day'));
124+
}
125+
}

0 commit comments

Comments
 (0)