[TASK] Solved Day 8
This commit is contained in:
642
input/day8.txt
Normal file
642
input/day8.txt
Normal file
@@ -0,0 +1,642 @@
|
||||
acc +40
|
||||
acc -14
|
||||
nop +386
|
||||
jmp +262
|
||||
acc -4
|
||||
nop +25
|
||||
jmp +500
|
||||
acc +13
|
||||
acc -1
|
||||
acc -7
|
||||
acc +37
|
||||
jmp +319
|
||||
acc +46
|
||||
jmp +429
|
||||
acc -4
|
||||
acc -8
|
||||
jmp +335
|
||||
acc +12
|
||||
jmp +78
|
||||
acc +16
|
||||
acc -11
|
||||
nop +137
|
||||
acc +41
|
||||
jmp +210
|
||||
jmp +83
|
||||
acc +7
|
||||
jmp +48
|
||||
nop +374
|
||||
acc +11
|
||||
jmp +268
|
||||
acc +1
|
||||
acc -17
|
||||
acc +15
|
||||
jmp +178
|
||||
acc +23
|
||||
jmp -5
|
||||
jmp +374
|
||||
acc +8
|
||||
acc +5
|
||||
nop +231
|
||||
jmp +1
|
||||
jmp -22
|
||||
acc +44
|
||||
acc +39
|
||||
jmp +415
|
||||
acc +44
|
||||
acc -8
|
||||
acc -10
|
||||
jmp +36
|
||||
nop +385
|
||||
acc +6
|
||||
jmp -37
|
||||
nop +245
|
||||
acc +5
|
||||
jmp +261
|
||||
acc -3
|
||||
jmp +23
|
||||
acc +37
|
||||
jmp +532
|
||||
acc -18
|
||||
acc -8
|
||||
nop +405
|
||||
jmp +499
|
||||
acc -1
|
||||
acc +3
|
||||
acc +47
|
||||
acc +38
|
||||
jmp +67
|
||||
jmp -9
|
||||
acc +16
|
||||
acc -4
|
||||
acc +23
|
||||
acc +6
|
||||
jmp -14
|
||||
jmp +229
|
||||
nop +235
|
||||
acc +3
|
||||
acc +17
|
||||
jmp +521
|
||||
acc +49
|
||||
acc -8
|
||||
acc +10
|
||||
jmp +103
|
||||
jmp +75
|
||||
acc +22
|
||||
nop +527
|
||||
acc +36
|
||||
acc +32
|
||||
jmp -46
|
||||
nop +434
|
||||
jmp +447
|
||||
jmp +159
|
||||
acc +37
|
||||
acc -19
|
||||
acc +39
|
||||
jmp +181
|
||||
jmp +1
|
||||
jmp +162
|
||||
jmp +1
|
||||
acc +0
|
||||
acc +0
|
||||
acc +34
|
||||
jmp +241
|
||||
acc +42
|
||||
acc +12
|
||||
jmp -75
|
||||
jmp -70
|
||||
acc +42
|
||||
acc -4
|
||||
acc +49
|
||||
jmp +456
|
||||
jmp +277
|
||||
jmp +302
|
||||
acc +45
|
||||
acc +19
|
||||
nop -41
|
||||
jmp +318
|
||||
jmp +153
|
||||
acc +9
|
||||
nop +323
|
||||
jmp -113
|
||||
nop -9
|
||||
jmp +1
|
||||
acc +37
|
||||
acc +12
|
||||
jmp +448
|
||||
acc +3
|
||||
acc +38
|
||||
jmp -114
|
||||
acc +7
|
||||
jmp +180
|
||||
acc -5
|
||||
acc -10
|
||||
jmp +117
|
||||
jmp +320
|
||||
acc +9
|
||||
jmp +330
|
||||
acc +18
|
||||
jmp +1
|
||||
jmp +330
|
||||
nop +450
|
||||
acc +10
|
||||
jmp +22
|
||||
acc +44
|
||||
jmp +298
|
||||
acc +38
|
||||
nop +433
|
||||
acc +1
|
||||
jmp +431
|
||||
jmp +339
|
||||
nop +251
|
||||
jmp -126
|
||||
nop +191
|
||||
jmp +294
|
||||
acc -7
|
||||
acc +30
|
||||
acc -15
|
||||
jmp +400
|
||||
jmp +441
|
||||
acc +5
|
||||
acc +17
|
||||
nop +35
|
||||
nop +103
|
||||
jmp +410
|
||||
nop -122
|
||||
acc +35
|
||||
jmp +73
|
||||
acc -13
|
||||
jmp +291
|
||||
acc -11
|
||||
jmp +95
|
||||
acc -12
|
||||
acc +19
|
||||
acc -16
|
||||
acc +34
|
||||
jmp +140
|
||||
acc -15
|
||||
acc +6
|
||||
acc -4
|
||||
jmp +190
|
||||
acc +11
|
||||
acc +0
|
||||
acc +19
|
||||
acc +43
|
||||
jmp +167
|
||||
acc +29
|
||||
nop +371
|
||||
jmp +1
|
||||
jmp -36
|
||||
acc +20
|
||||
acc +20
|
||||
acc +26
|
||||
jmp +374
|
||||
jmp -76
|
||||
acc +20
|
||||
jmp +115
|
||||
acc +13
|
||||
acc +25
|
||||
acc +39
|
||||
jmp -115
|
||||
acc -18
|
||||
nop -64
|
||||
jmp +133
|
||||
acc -18
|
||||
acc +32
|
||||
nop -198
|
||||
jmp -157
|
||||
acc +6
|
||||
acc +41
|
||||
nop +36
|
||||
jmp -136
|
||||
jmp +1
|
||||
jmp +41
|
||||
acc -14
|
||||
acc -17
|
||||
acc +1
|
||||
jmp +280
|
||||
jmp +1
|
||||
jmp +72
|
||||
acc +7
|
||||
jmp +1
|
||||
acc -12
|
||||
acc -8
|
||||
jmp +291
|
||||
acc -13
|
||||
acc +36
|
||||
acc +0
|
||||
jmp +97
|
||||
acc +20
|
||||
acc +0
|
||||
acc +12
|
||||
acc -16
|
||||
jmp -196
|
||||
nop +342
|
||||
jmp -122
|
||||
acc +21
|
||||
nop -33
|
||||
acc +38
|
||||
jmp +285
|
||||
acc -9
|
||||
acc -17
|
||||
acc -2
|
||||
acc +25
|
||||
jmp +232
|
||||
jmp +146
|
||||
jmp +312
|
||||
acc +11
|
||||
nop -54
|
||||
nop +351
|
||||
jmp -46
|
||||
acc +27
|
||||
jmp -244
|
||||
jmp +262
|
||||
acc +42
|
||||
acc +5
|
||||
nop +4
|
||||
acc +20
|
||||
jmp +239
|
||||
jmp -62
|
||||
nop -147
|
||||
jmp -169
|
||||
acc -12
|
||||
acc +40
|
||||
acc +29
|
||||
jmp +178
|
||||
nop +310
|
||||
jmp +49
|
||||
acc -18
|
||||
acc +5
|
||||
jmp +297
|
||||
jmp +244
|
||||
acc +31
|
||||
acc +21
|
||||
acc +47
|
||||
acc +41
|
||||
jmp +76
|
||||
acc +29
|
||||
acc +22
|
||||
acc +16
|
||||
jmp -121
|
||||
jmp -244
|
||||
acc +45
|
||||
acc -9
|
||||
acc +36
|
||||
acc +5
|
||||
jmp +265
|
||||
acc +13
|
||||
acc +47
|
||||
acc -11
|
||||
jmp +338
|
||||
acc +0
|
||||
jmp +85
|
||||
acc +18
|
||||
acc +27
|
||||
jmp +1
|
||||
acc +43
|
||||
jmp +227
|
||||
jmp +276
|
||||
acc +42
|
||||
nop +52
|
||||
acc -15
|
||||
nop +311
|
||||
jmp -199
|
||||
acc +45
|
||||
jmp +286
|
||||
acc -8
|
||||
acc +7
|
||||
acc +9
|
||||
acc -18
|
||||
jmp -273
|
||||
acc +50
|
||||
jmp +239
|
||||
nop +31
|
||||
acc +16
|
||||
jmp -162
|
||||
acc +12
|
||||
nop -204
|
||||
acc +27
|
||||
jmp -166
|
||||
acc -4
|
||||
acc +38
|
||||
acc +50
|
||||
nop +120
|
||||
jmp +243
|
||||
acc +29
|
||||
jmp -300
|
||||
acc +0
|
||||
nop +179
|
||||
acc -6
|
||||
jmp -136
|
||||
nop -305
|
||||
acc +15
|
||||
jmp -136
|
||||
acc -6
|
||||
jmp +172
|
||||
jmp +41
|
||||
acc -7
|
||||
nop +81
|
||||
jmp +199
|
||||
jmp +54
|
||||
acc +1
|
||||
acc +25
|
||||
jmp -283
|
||||
nop -132
|
||||
acc +47
|
||||
jmp +239
|
||||
acc +45
|
||||
acc -14
|
||||
acc +1
|
||||
acc +0
|
||||
jmp +10
|
||||
acc -15
|
||||
nop -338
|
||||
nop -257
|
||||
jmp +1
|
||||
jmp -218
|
||||
acc +36
|
||||
acc +33
|
||||
acc +28
|
||||
jmp -230
|
||||
acc -5
|
||||
acc -14
|
||||
jmp +1
|
||||
jmp -87
|
||||
acc +48
|
||||
nop +141
|
||||
nop +224
|
||||
acc +42
|
||||
jmp +22
|
||||
nop +140
|
||||
acc +16
|
||||
jmp +1
|
||||
acc +16
|
||||
jmp -92
|
||||
acc +37
|
||||
jmp -368
|
||||
acc +27
|
||||
jmp +155
|
||||
acc +11
|
||||
nop +196
|
||||
acc +5
|
||||
jmp -269
|
||||
nop -92
|
||||
jmp -276
|
||||
acc +46
|
||||
acc +6
|
||||
acc +34
|
||||
jmp -258
|
||||
jmp +2
|
||||
jmp +80
|
||||
jmp +36
|
||||
acc +20
|
||||
jmp -181
|
||||
nop -54
|
||||
acc +48
|
||||
nop +166
|
||||
nop +165
|
||||
jmp -263
|
||||
acc +47
|
||||
acc +33
|
||||
jmp +54
|
||||
nop -216
|
||||
acc +37
|
||||
acc +19
|
||||
jmp -349
|
||||
acc +12
|
||||
nop -156
|
||||
nop +7
|
||||
acc -5
|
||||
jmp -390
|
||||
acc -10
|
||||
jmp -315
|
||||
nop -393
|
||||
jmp -89
|
||||
jmp +1
|
||||
jmp -312
|
||||
acc +4
|
||||
jmp -120
|
||||
acc -2
|
||||
nop +23
|
||||
acc +42
|
||||
acc +28
|
||||
jmp -205
|
||||
acc +43
|
||||
acc +6
|
||||
jmp -49
|
||||
acc -13
|
||||
acc +1
|
||||
acc +10
|
||||
acc +19
|
||||
jmp -394
|
||||
acc -15
|
||||
acc +0
|
||||
jmp -365
|
||||
acc +23
|
||||
acc -17
|
||||
nop +23
|
||||
acc +0
|
||||
jmp -37
|
||||
acc +9
|
||||
acc +31
|
||||
jmp -7
|
||||
jmp -278
|
||||
nop +147
|
||||
acc +5
|
||||
acc +43
|
||||
jmp -149
|
||||
nop -65
|
||||
acc +19
|
||||
acc +46
|
||||
jmp +59
|
||||
acc +29
|
||||
nop +169
|
||||
jmp +131
|
||||
acc +43
|
||||
acc +50
|
||||
jmp +10
|
||||
acc -4
|
||||
jmp -390
|
||||
acc +24
|
||||
jmp -236
|
||||
acc +10
|
||||
acc +19
|
||||
nop -160
|
||||
acc +32
|
||||
jmp +162
|
||||
acc +29
|
||||
jmp +170
|
||||
jmp -14
|
||||
acc +36
|
||||
jmp -88
|
||||
acc +2
|
||||
acc +1
|
||||
acc +1
|
||||
jmp -86
|
||||
nop +48
|
||||
acc +21
|
||||
jmp -356
|
||||
acc +0
|
||||
nop -321
|
||||
nop -247
|
||||
nop +127
|
||||
jmp -279
|
||||
jmp +40
|
||||
acc +23
|
||||
acc +47
|
||||
acc +6
|
||||
jmp -438
|
||||
acc +26
|
||||
acc +35
|
||||
nop +120
|
||||
acc +2
|
||||
jmp -58
|
||||
acc +30
|
||||
acc +2
|
||||
jmp +42
|
||||
acc +8
|
||||
acc +24
|
||||
acc +9
|
||||
acc +19
|
||||
jmp -351
|
||||
acc +40
|
||||
acc +18
|
||||
acc +43
|
||||
acc +29
|
||||
jmp +9
|
||||
jmp +1
|
||||
jmp -210
|
||||
jmp -82
|
||||
acc +41
|
||||
acc +45
|
||||
jmp -28
|
||||
nop -395
|
||||
jmp +71
|
||||
acc +38
|
||||
acc -13
|
||||
nop -251
|
||||
acc -9
|
||||
jmp -366
|
||||
acc +34
|
||||
acc +7
|
||||
acc -7
|
||||
jmp -212
|
||||
acc +6
|
||||
acc +24
|
||||
acc +1
|
||||
acc -11
|
||||
jmp +94
|
||||
acc +20
|
||||
acc -14
|
||||
acc -5
|
||||
jmp +81
|
||||
acc +37
|
||||
jmp +77
|
||||
acc -15
|
||||
nop -486
|
||||
jmp +39
|
||||
jmp +1
|
||||
acc +39
|
||||
acc +49
|
||||
jmp -371
|
||||
acc +5
|
||||
nop -446
|
||||
jmp -267
|
||||
acc +39
|
||||
jmp +67
|
||||
acc +35
|
||||
acc +8
|
||||
nop -419
|
||||
jmp -53
|
||||
acc +20
|
||||
acc -9
|
||||
acc +46
|
||||
acc +30
|
||||
jmp -136
|
||||
acc +35
|
||||
jmp +56
|
||||
jmp +70
|
||||
acc +13
|
||||
acc +48
|
||||
jmp -290
|
||||
acc -18
|
||||
acc +48
|
||||
acc +50
|
||||
jmp -225
|
||||
jmp -226
|
||||
acc +34
|
||||
jmp -391
|
||||
acc +49
|
||||
nop -324
|
||||
acc -10
|
||||
acc +41
|
||||
jmp -130
|
||||
jmp +6
|
||||
jmp -555
|
||||
acc -17
|
||||
jmp -433
|
||||
acc +33
|
||||
jmp -64
|
||||
jmp -476
|
||||
nop -138
|
||||
nop -556
|
||||
acc +47
|
||||
jmp +27
|
||||
jmp -78
|
||||
acc -16
|
||||
acc -4
|
||||
acc -3
|
||||
acc +48
|
||||
jmp -292
|
||||
acc +43
|
||||
acc +3
|
||||
acc +44
|
||||
jmp +15
|
||||
acc +49
|
||||
acc +5
|
||||
acc +4
|
||||
acc +27
|
||||
jmp -491
|
||||
acc +6
|
||||
acc +38
|
||||
acc +31
|
||||
nop -70
|
||||
jmp -379
|
||||
acc +0
|
||||
acc +2
|
||||
acc +49
|
||||
jmp -297
|
||||
jmp -405
|
||||
jmp -72
|
||||
jmp -371
|
||||
jmp -115
|
||||
acc +7
|
||||
acc -15
|
||||
acc -9
|
||||
jmp -486
|
||||
acc +3
|
||||
acc +16
|
||||
nop -19
|
||||
acc +14
|
||||
jmp -296
|
||||
jmp -233
|
||||
acc +40
|
||||
nop -342
|
||||
nop -58
|
||||
acc -9
|
||||
jmp -316
|
||||
acc +4
|
||||
acc +15
|
||||
acc +14
|
||||
acc +50
|
||||
jmp -296
|
||||
acc -11
|
||||
acc +14
|
||||
acc +43
|
||||
acc +38
|
||||
jmp -391
|
||||
acc +43
|
||||
acc +25
|
||||
acc -5
|
||||
acc +27
|
||||
jmp +1
|
||||
9
input/day8_example.txt
Normal file
9
input/day8_example.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
|
||||
96
src/day8.rs
Normal file
96
src/day8.rs
Normal file
@@ -0,0 +1,96 @@
|
||||
use super::util;
|
||||
|
||||
pub fn solve() {
|
||||
let lines = util::read_file("input/day8.txt");
|
||||
let program = lines.iter().map(|s| Instruction::parse(s)).collect::<Vec<_>>();
|
||||
|
||||
let part1 = execute(&program);
|
||||
println!("Day 8 Part 1: {}", part1.unwrap_err().0);
|
||||
|
||||
for i in 0..program.len() {
|
||||
|
||||
let ins = &program[i];
|
||||
if ins.op == Operation::ACC {
|
||||
// No flip needed
|
||||
continue;
|
||||
}
|
||||
|
||||
let mut new_program = program.to_vec();
|
||||
if ins.op == Operation::JMP {
|
||||
new_program[i] = Instruction {
|
||||
op: Operation::NOP,
|
||||
arg: ins.arg
|
||||
}
|
||||
} else if ins.op == Operation::NOP {
|
||||
new_program[i] = Instruction {
|
||||
op: Operation::JMP,
|
||||
arg: ins.arg
|
||||
}
|
||||
}
|
||||
let res = execute(&new_program);
|
||||
if res.is_ok() {
|
||||
let part2 = res.unwrap();
|
||||
println!("Day 8 Part 2: {}", part2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn execute(instructions: &[Instruction]) -> Result<i32, (i32, String)> {
|
||||
|
||||
let mut acc = 0;
|
||||
let mut p = 0;
|
||||
let mut visited = vec![false; instructions.len()];
|
||||
|
||||
loop {
|
||||
if p == instructions.len() {
|
||||
return Result::Ok(acc);
|
||||
} else if p > instructions.len() {
|
||||
return Result::Err((acc, String::from("Out of bounds")));
|
||||
} else if visited[p] {
|
||||
return Result::Err((acc, String::from("Infinite loop")));
|
||||
}
|
||||
|
||||
let ins = &instructions[p];
|
||||
visited[p] = true;
|
||||
|
||||
match ins.op {
|
||||
Operation::JMP => p = ((p as i32) + ins.arg) as usize,
|
||||
Operation::ACC => acc += ins.arg,
|
||||
_ => ()/* Nothing to do here */,
|
||||
}
|
||||
if ins.op != Operation::JMP {
|
||||
p += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct Instruction {
|
||||
op: Operation,
|
||||
arg: i32
|
||||
}
|
||||
|
||||
impl Instruction {
|
||||
|
||||
fn parse(line: &str) -> Instruction {
|
||||
let split = line.split_ascii_whitespace().collect::<Vec<_>>();
|
||||
let op;
|
||||
match &split.get(0).unwrap()[..] {
|
||||
"acc" => op = Operation::ACC,
|
||||
"jmp" => op = Operation::JMP,
|
||||
"nop" => op = Operation::NOP,
|
||||
_ => panic!("Unknown instruction: {}", split.get(0).unwrap())
|
||||
}
|
||||
|
||||
return Instruction {
|
||||
op,
|
||||
arg: split.get(1).map(|x| x.parse::<i32>().unwrap()).unwrap_or(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
enum Operation {
|
||||
NOP, ACC, JMP
|
||||
}
|
||||
@@ -9,6 +9,7 @@ mod day4;
|
||||
mod day5;
|
||||
mod day6;
|
||||
mod day7;
|
||||
mod day8;
|
||||
|
||||
fn main() {
|
||||
|
||||
@@ -26,6 +27,7 @@ fn main() {
|
||||
5 => day5::solve(),
|
||||
6 => day6::solve(),
|
||||
7 => day7::solve(),
|
||||
8 => day8::solve(),
|
||||
_ => println!("This day is not yet implemented")
|
||||
}
|
||||
} else {
|
||||
@@ -37,6 +39,7 @@ fn main() {
|
||||
day5::solve();
|
||||
day6::solve();
|
||||
day7::solve();
|
||||
day8::solve();
|
||||
}
|
||||
|
||||
println!("Execution took {} μs", now.elapsed().as_micros());
|
||||
|
||||
Reference in New Issue
Block a user