2020: day08: part 1
This commit is contained in:
parent
76bd7d9c54
commit
71a100179e
|
@ -7,6 +7,7 @@ use aoc2020::day04;
|
||||||
use aoc2020::day05;
|
use aoc2020::day05;
|
||||||
use aoc2020::day06;
|
use aoc2020::day06;
|
||||||
use aoc2020::day07;
|
use aoc2020::day07;
|
||||||
|
use aoc2020::day08;
|
||||||
|
|
||||||
fn aoc2020_all(c: &mut Criterion) {
|
fn aoc2020_all(c: &mut Criterion) {
|
||||||
c.bench_function("day01", |b| b.iter(|| day01::run().unwrap()));
|
c.bench_function("day01", |b| b.iter(|| day01::run().unwrap()));
|
||||||
|
@ -16,6 +17,7 @@ fn aoc2020_all(c: &mut Criterion) {
|
||||||
c.bench_function("day05", |b| b.iter(|| day05::run().unwrap()));
|
c.bench_function("day05", |b| b.iter(|| day05::run().unwrap()));
|
||||||
c.bench_function("day06", |b| b.iter(|| day06::run().unwrap()));
|
c.bench_function("day06", |b| b.iter(|| day06::run().unwrap()));
|
||||||
c.bench_function("day07", |b| b.iter(|| day07::run().unwrap()));
|
c.bench_function("day07", |b| b.iter(|| day07::run().unwrap()));
|
||||||
|
c.bench_function("day08", |b| b.iter(|| day08::run().unwrap()));
|
||||||
}
|
}
|
||||||
|
|
||||||
criterion_group! {
|
criterion_group! {
|
||||||
|
|
605
aoc2020/input/day08.txt
Normal file
605
aoc2020/input/day08.txt
Normal file
|
@ -0,0 +1,605 @@
|
||||||
|
acc +14
|
||||||
|
acc +11
|
||||||
|
nop +422
|
||||||
|
acc +14
|
||||||
|
jmp +443
|
||||||
|
acc +21
|
||||||
|
nop +524
|
||||||
|
acc -2
|
||||||
|
jmp +279
|
||||||
|
jmp +1
|
||||||
|
acc +28
|
||||||
|
acc +11
|
||||||
|
jmp +576
|
||||||
|
acc +32
|
||||||
|
acc -12
|
||||||
|
acc -8
|
||||||
|
jmp +291
|
||||||
|
nop +542
|
||||||
|
acc +41
|
||||||
|
jmp +320
|
||||||
|
acc +40
|
||||||
|
jmp +96
|
||||||
|
jmp +85
|
||||||
|
acc +38
|
||||||
|
acc +8
|
||||||
|
jmp +333
|
||||||
|
acc +44
|
||||||
|
nop +231
|
||||||
|
acc +40
|
||||||
|
jmp +323
|
||||||
|
acc +18
|
||||||
|
jmp +251
|
||||||
|
acc -1
|
||||||
|
jmp +385
|
||||||
|
acc -9
|
||||||
|
acc +48
|
||||||
|
acc +20
|
||||||
|
acc +34
|
||||||
|
jmp +150
|
||||||
|
nop +203
|
||||||
|
acc +4
|
||||||
|
acc +32
|
||||||
|
acc +44
|
||||||
|
jmp +168
|
||||||
|
acc +26
|
||||||
|
acc +46
|
||||||
|
acc +40
|
||||||
|
jmp -30
|
||||||
|
jmp +182
|
||||||
|
acc +18
|
||||||
|
jmp +404
|
||||||
|
nop +142
|
||||||
|
jmp +84
|
||||||
|
acc +30
|
||||||
|
acc +10
|
||||||
|
jmp +1
|
||||||
|
acc +40
|
||||||
|
jmp +370
|
||||||
|
jmp +381
|
||||||
|
jmp +239
|
||||||
|
acc -2
|
||||||
|
acc +47
|
||||||
|
acc -4
|
||||||
|
jmp +295
|
||||||
|
jmp -38
|
||||||
|
acc +40
|
||||||
|
acc +44
|
||||||
|
acc +4
|
||||||
|
acc +4
|
||||||
|
jmp +156
|
||||||
|
acc +31
|
||||||
|
acc +20
|
||||||
|
acc +0
|
||||||
|
acc -12
|
||||||
|
jmp -48
|
||||||
|
acc +32
|
||||||
|
acc +38
|
||||||
|
jmp +1
|
||||||
|
acc -6
|
||||||
|
jmp +375
|
||||||
|
acc +33
|
||||||
|
acc +27
|
||||||
|
acc +28
|
||||||
|
jmp +107
|
||||||
|
acc +1
|
||||||
|
acc +6
|
||||||
|
nop +136
|
||||||
|
jmp +85
|
||||||
|
acc +31
|
||||||
|
acc +49
|
||||||
|
acc +46
|
||||||
|
jmp +167
|
||||||
|
acc +5
|
||||||
|
acc -5
|
||||||
|
jmp +148
|
||||||
|
acc +22
|
||||||
|
acc +44
|
||||||
|
acc -8
|
||||||
|
acc -2
|
||||||
|
jmp -60
|
||||||
|
nop +354
|
||||||
|
jmp +59
|
||||||
|
acc +48
|
||||||
|
nop +473
|
||||||
|
acc -7
|
||||||
|
acc +4
|
||||||
|
jmp +105
|
||||||
|
jmp +456
|
||||||
|
acc +16
|
||||||
|
acc +33
|
||||||
|
acc +24
|
||||||
|
jmp -4
|
||||||
|
acc +36
|
||||||
|
acc +10
|
||||||
|
nop +441
|
||||||
|
jmp +268
|
||||||
|
jmp +388
|
||||||
|
acc +0
|
||||||
|
acc +27
|
||||||
|
acc -1
|
||||||
|
jmp -60
|
||||||
|
nop +90
|
||||||
|
jmp -90
|
||||||
|
acc +48
|
||||||
|
acc +30
|
||||||
|
jmp +284
|
||||||
|
acc +4
|
||||||
|
acc +6
|
||||||
|
acc +1
|
||||||
|
acc -10
|
||||||
|
jmp +95
|
||||||
|
acc +35
|
||||||
|
jmp +235
|
||||||
|
acc +31
|
||||||
|
acc -19
|
||||||
|
jmp -96
|
||||||
|
jmp +326
|
||||||
|
acc -7
|
||||||
|
acc +0
|
||||||
|
acc -1
|
||||||
|
jmp +53
|
||||||
|
acc +15
|
||||||
|
acc -14
|
||||||
|
jmp +450
|
||||||
|
nop +8
|
||||||
|
acc -2
|
||||||
|
acc -1
|
||||||
|
acc +17
|
||||||
|
jmp -25
|
||||||
|
nop +444
|
||||||
|
jmp +65
|
||||||
|
jmp -86
|
||||||
|
acc +44
|
||||||
|
acc +16
|
||||||
|
acc +32
|
||||||
|
acc -11
|
||||||
|
jmp +32
|
||||||
|
acc +14
|
||||||
|
acc +28
|
||||||
|
jmp +123
|
||||||
|
jmp +127
|
||||||
|
jmp -44
|
||||||
|
acc +42
|
||||||
|
acc +24
|
||||||
|
acc -3
|
||||||
|
acc +4
|
||||||
|
jmp +219
|
||||||
|
acc +28
|
||||||
|
acc +30
|
||||||
|
acc -14
|
||||||
|
acc -11
|
||||||
|
jmp +67
|
||||||
|
acc +5
|
||||||
|
acc +43
|
||||||
|
acc +23
|
||||||
|
nop +73
|
||||||
|
jmp +176
|
||||||
|
acc +28
|
||||||
|
acc +8
|
||||||
|
acc +42
|
||||||
|
acc +44
|
||||||
|
jmp +278
|
||||||
|
acc +9
|
||||||
|
acc +46
|
||||||
|
acc +0
|
||||||
|
acc +30
|
||||||
|
jmp +72
|
||||||
|
jmp +317
|
||||||
|
jmp +352
|
||||||
|
jmp +273
|
||||||
|
jmp +137
|
||||||
|
nop +364
|
||||||
|
jmp +249
|
||||||
|
nop +79
|
||||||
|
jmp +1
|
||||||
|
jmp -147
|
||||||
|
acc -10
|
||||||
|
acc -1
|
||||||
|
acc +12
|
||||||
|
acc +27
|
||||||
|
jmp +147
|
||||||
|
acc -5
|
||||||
|
acc +7
|
||||||
|
jmp +63
|
||||||
|
acc +33
|
||||||
|
acc +32
|
||||||
|
nop +81
|
||||||
|
jmp -185
|
||||||
|
acc +44
|
||||||
|
jmp +215
|
||||||
|
jmp +187
|
||||||
|
acc +14
|
||||||
|
acc +38
|
||||||
|
jmp -113
|
||||||
|
jmp +267
|
||||||
|
acc -9
|
||||||
|
acc +21
|
||||||
|
acc -5
|
||||||
|
jmp +143
|
||||||
|
nop -57
|
||||||
|
nop +281
|
||||||
|
jmp -170
|
||||||
|
jmp +267
|
||||||
|
nop -131
|
||||||
|
jmp -83
|
||||||
|
acc -6
|
||||||
|
jmp -95
|
||||||
|
acc -9
|
||||||
|
acc -8
|
||||||
|
jmp +184
|
||||||
|
acc +32
|
||||||
|
acc -16
|
||||||
|
jmp +171
|
||||||
|
acc +5
|
||||||
|
acc +22
|
||||||
|
acc -7
|
||||||
|
acc +20
|
||||||
|
jmp +45
|
||||||
|
acc +48
|
||||||
|
jmp +239
|
||||||
|
acc -4
|
||||||
|
jmp +75
|
||||||
|
acc -18
|
||||||
|
jmp -178
|
||||||
|
nop +349
|
||||||
|
acc -12
|
||||||
|
nop +313
|
||||||
|
jmp -57
|
||||||
|
acc +7
|
||||||
|
acc +6
|
||||||
|
jmp -241
|
||||||
|
acc +19
|
||||||
|
jmp +320
|
||||||
|
acc +13
|
||||||
|
jmp -61
|
||||||
|
acc +0
|
||||||
|
nop +337
|
||||||
|
jmp +66
|
||||||
|
acc +27
|
||||||
|
acc -11
|
||||||
|
acc -7
|
||||||
|
jmp +315
|
||||||
|
acc +23
|
||||||
|
acc +26
|
||||||
|
acc -5
|
||||||
|
jmp +132
|
||||||
|
acc +45
|
||||||
|
acc +21
|
||||||
|
acc -12
|
||||||
|
jmp +158
|
||||||
|
acc +19
|
||||||
|
jmp +176
|
||||||
|
acc +43
|
||||||
|
jmp +124
|
||||||
|
nop +227
|
||||||
|
nop -236
|
||||||
|
acc +11
|
||||||
|
jmp +1
|
||||||
|
jmp -67
|
||||||
|
acc +21
|
||||||
|
jmp +161
|
||||||
|
jmp +86
|
||||||
|
acc +26
|
||||||
|
acc +7
|
||||||
|
jmp +246
|
||||||
|
acc +0
|
||||||
|
jmp +215
|
||||||
|
jmp +1
|
||||||
|
acc +16
|
||||||
|
jmp -257
|
||||||
|
acc +2
|
||||||
|
jmp +281
|
||||||
|
nop -10
|
||||||
|
acc +46
|
||||||
|
jmp +124
|
||||||
|
acc +13
|
||||||
|
acc +24
|
||||||
|
jmp +204
|
||||||
|
jmp +1
|
||||||
|
acc +23
|
||||||
|
jmp +225
|
||||||
|
nop -243
|
||||||
|
jmp +167
|
||||||
|
jmp +1
|
||||||
|
jmp -142
|
||||||
|
acc -15
|
||||||
|
jmp -113
|
||||||
|
acc +27
|
||||||
|
acc -18
|
||||||
|
acc +12
|
||||||
|
jmp -259
|
||||||
|
nop +74
|
||||||
|
acc +35
|
||||||
|
acc +42
|
||||||
|
acc -4
|
||||||
|
jmp -166
|
||||||
|
nop +87
|
||||||
|
nop +86
|
||||||
|
acc +18
|
||||||
|
acc -2
|
||||||
|
jmp +212
|
||||||
|
acc -8
|
||||||
|
jmp -313
|
||||||
|
acc +36
|
||||||
|
acc -11
|
||||||
|
jmp -233
|
||||||
|
jmp +237
|
||||||
|
nop +67
|
||||||
|
acc +16
|
||||||
|
nop -57
|
||||||
|
jmp -92
|
||||||
|
acc +48
|
||||||
|
acc +2
|
||||||
|
acc +21
|
||||||
|
jmp +33
|
||||||
|
acc -15
|
||||||
|
jmp +145
|
||||||
|
acc +26
|
||||||
|
jmp -254
|
||||||
|
acc +30
|
||||||
|
acc +4
|
||||||
|
acc -1
|
||||||
|
acc -14
|
||||||
|
jmp -64
|
||||||
|
acc +32
|
||||||
|
acc +8
|
||||||
|
jmp -131
|
||||||
|
acc -13
|
||||||
|
jmp +138
|
||||||
|
acc +5
|
||||||
|
acc +4
|
||||||
|
jmp -4
|
||||||
|
acc +37
|
||||||
|
nop -278
|
||||||
|
acc +28
|
||||||
|
acc +17
|
||||||
|
jmp -215
|
||||||
|
jmp -104
|
||||||
|
nop -241
|
||||||
|
jmp -43
|
||||||
|
jmp -2
|
||||||
|
acc +5
|
||||||
|
acc -1
|
||||||
|
jmp +151
|
||||||
|
jmp +1
|
||||||
|
acc +21
|
||||||
|
jmp +19
|
||||||
|
acc +40
|
||||||
|
jmp +91
|
||||||
|
acc +50
|
||||||
|
nop +202
|
||||||
|
acc -12
|
||||||
|
jmp -333
|
||||||
|
nop -66
|
||||||
|
acc +42
|
||||||
|
acc +7
|
||||||
|
jmp +1
|
||||||
|
jmp +47
|
||||||
|
acc +32
|
||||||
|
acc +29
|
||||||
|
acc +42
|
||||||
|
nop -8
|
||||||
|
jmp +52
|
||||||
|
jmp -299
|
||||||
|
jmp +40
|
||||||
|
acc +36
|
||||||
|
acc -5
|
||||||
|
acc +39
|
||||||
|
jmp -116
|
||||||
|
acc +19
|
||||||
|
acc +30
|
||||||
|
acc +39
|
||||||
|
acc -1
|
||||||
|
jmp -276
|
||||||
|
jmp -245
|
||||||
|
acc +6
|
||||||
|
jmp -185
|
||||||
|
acc +50
|
||||||
|
acc +14
|
||||||
|
acc -7
|
||||||
|
jmp -325
|
||||||
|
acc +33
|
||||||
|
jmp -279
|
||||||
|
nop +173
|
||||||
|
acc +15
|
||||||
|
acc -17
|
||||||
|
jmp -33
|
||||||
|
acc +20
|
||||||
|
jmp -101
|
||||||
|
acc -17
|
||||||
|
jmp -335
|
||||||
|
nop -8
|
||||||
|
jmp +22
|
||||||
|
acc +0
|
||||||
|
acc +4
|
||||||
|
jmp -133
|
||||||
|
nop -81
|
||||||
|
jmp +64
|
||||||
|
jmp -306
|
||||||
|
acc -19
|
||||||
|
acc +31
|
||||||
|
acc +47
|
||||||
|
acc +26
|
||||||
|
jmp +55
|
||||||
|
jmp -402
|
||||||
|
acc +13
|
||||||
|
jmp -375
|
||||||
|
acc +6
|
||||||
|
acc -1
|
||||||
|
acc -6
|
||||||
|
acc +49
|
||||||
|
jmp -28
|
||||||
|
acc -7
|
||||||
|
jmp -203
|
||||||
|
jmp -395
|
||||||
|
acc +5
|
||||||
|
acc +38
|
||||||
|
acc +10
|
||||||
|
jmp +130
|
||||||
|
jmp +161
|
||||||
|
jmp -382
|
||||||
|
acc +45
|
||||||
|
jmp +113
|
||||||
|
acc +38
|
||||||
|
acc +48
|
||||||
|
acc +46
|
||||||
|
jmp +126
|
||||||
|
acc -1
|
||||||
|
acc -10
|
||||||
|
acc +4
|
||||||
|
acc +2
|
||||||
|
jmp -425
|
||||||
|
acc +0
|
||||||
|
jmp -80
|
||||||
|
acc +4
|
||||||
|
jmp -202
|
||||||
|
acc +25
|
||||||
|
acc +8
|
||||||
|
jmp -398
|
||||||
|
jmp -307
|
||||||
|
acc +3
|
||||||
|
jmp +17
|
||||||
|
acc +13
|
||||||
|
acc +33
|
||||||
|
acc +7
|
||||||
|
jmp -381
|
||||||
|
acc +5
|
||||||
|
acc +12
|
||||||
|
jmp -308
|
||||||
|
jmp +1
|
||||||
|
acc +3
|
||||||
|
acc -14
|
||||||
|
acc +46
|
||||||
|
jmp -415
|
||||||
|
acc +31
|
||||||
|
acc +7
|
||||||
|
acc +28
|
||||||
|
jmp -419
|
||||||
|
jmp -175
|
||||||
|
jmp +1
|
||||||
|
jmp -141
|
||||||
|
acc +20
|
||||||
|
nop -35
|
||||||
|
jmp -36
|
||||||
|
acc -6
|
||||||
|
jmp +108
|
||||||
|
nop +1
|
||||||
|
jmp +8
|
||||||
|
jmp -49
|
||||||
|
jmp -389
|
||||||
|
acc +24
|
||||||
|
nop -482
|
||||||
|
acc +41
|
||||||
|
acc +25
|
||||||
|
jmp -167
|
||||||
|
nop -26
|
||||||
|
jmp -198
|
||||||
|
nop -199
|
||||||
|
acc +23
|
||||||
|
acc -19
|
||||||
|
jmp -202
|
||||||
|
jmp +58
|
||||||
|
acc +3
|
||||||
|
jmp -237
|
||||||
|
acc +44
|
||||||
|
acc +42
|
||||||
|
acc +22
|
||||||
|
acc +5
|
||||||
|
jmp -307
|
||||||
|
acc +45
|
||||||
|
nop -418
|
||||||
|
acc +41
|
||||||
|
nop -88
|
||||||
|
jmp +63
|
||||||
|
acc +12
|
||||||
|
nop -56
|
||||||
|
acc -19
|
||||||
|
jmp +55
|
||||||
|
acc -13
|
||||||
|
acc -7
|
||||||
|
jmp -213
|
||||||
|
acc +42
|
||||||
|
jmp -88
|
||||||
|
acc +20
|
||||||
|
jmp -115
|
||||||
|
acc +6
|
||||||
|
jmp -57
|
||||||
|
acc +25
|
||||||
|
acc +49
|
||||||
|
jmp -43
|
||||||
|
jmp -322
|
||||||
|
jmp -456
|
||||||
|
acc +7
|
||||||
|
acc +40
|
||||||
|
acc +35
|
||||||
|
jmp -518
|
||||||
|
nop -461
|
||||||
|
acc +43
|
||||||
|
acc +33
|
||||||
|
jmp +7
|
||||||
|
acc +27
|
||||||
|
jmp +5
|
||||||
|
acc -15
|
||||||
|
acc -19
|
||||||
|
acc -2
|
||||||
|
jmp -238
|
||||||
|
acc +49
|
||||||
|
acc +48
|
||||||
|
acc -16
|
||||||
|
jmp +34
|
||||||
|
acc -6
|
||||||
|
acc +49
|
||||||
|
acc -4
|
||||||
|
acc +4
|
||||||
|
jmp +1
|
||||||
|
acc +35
|
||||||
|
nop -264
|
||||||
|
jmp -234
|
||||||
|
jmp -365
|
||||||
|
jmp -436
|
||||||
|
acc +20
|
||||||
|
acc +36
|
||||||
|
jmp -426
|
||||||
|
acc +39
|
||||||
|
acc +20
|
||||||
|
jmp -343
|
||||||
|
nop -443
|
||||||
|
jmp -325
|
||||||
|
jmp -127
|
||||||
|
nop -560
|
||||||
|
acc +10
|
||||||
|
jmp -511
|
||||||
|
jmp -455
|
||||||
|
acc -16
|
||||||
|
acc +18
|
||||||
|
jmp -61
|
||||||
|
acc +26
|
||||||
|
jmp -285
|
||||||
|
jmp +1
|
||||||
|
nop -397
|
||||||
|
acc +12
|
||||||
|
nop -67
|
||||||
|
jmp -371
|
||||||
|
acc +27
|
||||||
|
acc +13
|
||||||
|
jmp -395
|
||||||
|
acc +44
|
||||||
|
jmp -565
|
||||||
|
acc +1
|
||||||
|
jmp -21
|
||||||
|
nop -428
|
||||||
|
acc -4
|
||||||
|
jmp -265
|
||||||
|
acc +48
|
||||||
|
acc +10
|
||||||
|
acc +46
|
||||||
|
jmp -202
|
||||||
|
acc -4
|
||||||
|
acc -10
|
||||||
|
jmp -152
|
||||||
|
acc +17
|
||||||
|
acc -10
|
||||||
|
acc +22
|
||||||
|
acc +10
|
||||||
|
jmp +1
|
9
aoc2020/input/day08_provided.txt
Normal file
9
aoc2020/input/day08_provided.txt
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
nop +0
|
||||||
|
acc +1
|
||||||
|
jmp +4
|
||||||
|
acc +3
|
||||||
|
jmp -3
|
||||||
|
acc -99
|
||||||
|
acc +1
|
||||||
|
jmp -4
|
||||||
|
acc +6
|
105
aoc2020/src/day08.rs
Normal file
105
aoc2020/src/day08.rs
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
use std::collections::HashSet;
|
||||||
|
use std::fmt::Write;
|
||||||
|
|
||||||
|
use aoc::err;
|
||||||
|
|
||||||
|
const INPUT: &str = include_str!("../input/day08.txt");
|
||||||
|
|
||||||
|
pub fn run() -> aoc::Result<String> {
|
||||||
|
let mut res = String::with_capacity(128);
|
||||||
|
|
||||||
|
writeln!(res, "part 1: {}", part1(INPUT)?)?;
|
||||||
|
|
||||||
|
Ok(res)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part1(input: &str) -> aoc::Result<i64> {
|
||||||
|
let instructions = input
|
||||||
|
.lines()
|
||||||
|
.map(|line| line.parse())
|
||||||
|
.collect::<aoc::Result<Vec<Instruction>>>()?;
|
||||||
|
|
||||||
|
let mut interpreter = Interpreter::new(instructions);
|
||||||
|
|
||||||
|
let mut set = HashSet::new();
|
||||||
|
|
||||||
|
loop {
|
||||||
|
if !set.insert(interpreter.idx) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
interpreter.step();
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(interpreter.accumulator)
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Interpreter {
|
||||||
|
idx: usize,
|
||||||
|
accumulator: i64,
|
||||||
|
memory: Vec<Instruction>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Interpreter {
|
||||||
|
fn new(instructions: Vec<Instruction>) -> Self {
|
||||||
|
Self {
|
||||||
|
idx: 0,
|
||||||
|
accumulator: 0,
|
||||||
|
memory: instructions,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn step(&mut self) {
|
||||||
|
match self.memory[self.idx] {
|
||||||
|
Instruction::Acc(arg) => {
|
||||||
|
self.accumulator += arg;
|
||||||
|
self.idx += 1;
|
||||||
|
}
|
||||||
|
Instruction::Jmp(offset) => self.idx = self.idx.wrapping_add(offset as usize),
|
||||||
|
Instruction::Nop => self.idx += 1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Instruction {
|
||||||
|
Acc(i64),
|
||||||
|
Jmp(i64),
|
||||||
|
Nop,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::str::FromStr for Instruction {
|
||||||
|
type Err = aoc::Error;
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> aoc::Result<Self> {
|
||||||
|
let space = s.find(' ').ok_or_else(|| err!("couldn't split on space"))?;
|
||||||
|
|
||||||
|
let inst = &s[..space];
|
||||||
|
let arg = s[(space + 1)..]
|
||||||
|
.parse()
|
||||||
|
.map_err(|e| err!("couldn't parse argument for instruction: {}", e))?;
|
||||||
|
|
||||||
|
Ok(match inst {
|
||||||
|
"acc" => Self::Acc(arg),
|
||||||
|
"jmp" => Self::Jmp(arg),
|
||||||
|
"nop" => Self::Nop,
|
||||||
|
_ => return Err(err!("unrecognized instruction `{}`", inst)),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
const PROVIDED: &str = include_str!("../input/day08_provided.txt");
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1_provided() {
|
||||||
|
assert_eq!(part1(PROVIDED).unwrap(), 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1_real() {
|
||||||
|
assert_eq!(part1(INPUT).unwrap(), 1675);
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,3 +5,4 @@ pub mod day04;
|
||||||
pub mod day05;
|
pub mod day05;
|
||||||
pub mod day06;
|
pub mod day06;
|
||||||
pub mod day07;
|
pub mod day07;
|
||||||
|
pub mod day08;
|
||||||
|
|
|
@ -8,6 +8,7 @@ use aoc2020::day04;
|
||||||
use aoc2020::day05;
|
use aoc2020::day05;
|
||||||
use aoc2020::day06;
|
use aoc2020::day06;
|
||||||
use aoc2020::day07;
|
use aoc2020::day07;
|
||||||
|
use aoc2020::day08;
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
let days: &[DayFunc] = &[
|
let days: &[DayFunc] = &[
|
||||||
|
@ -18,6 +19,7 @@ fn main() -> Result<()> {
|
||||||
day05::run,
|
day05::run,
|
||||||
day06::run,
|
day06::run,
|
||||||
day07::run,
|
day07::run,
|
||||||
|
day08::run,
|
||||||
];
|
];
|
||||||
|
|
||||||
aoc::run(days)
|
aoc::run(days)
|
||||||
|
|
Loading…
Reference in a new issue