mirror of https://github.com/HeNine/aoc2020
day8
parent
7c3cdbde34
commit
044946d52f
@ -0,0 +1,9 @@
|
||||
[package]
|
||||
name = "day8"
|
||||
version = "0.1.0"
|
||||
authors = ["henine <matija@rezar.biz>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
@ -0,0 +1,646 @@
|
||||
acc +8
|
||||
nop +139
|
||||
nop +383
|
||||
jmp +628
|
||||
acc -6
|
||||
acc +29
|
||||
acc +9
|
||||
jmp +457
|
||||
acc +29
|
||||
acc +38
|
||||
nop +451
|
||||
jmp +44
|
||||
acc +24
|
||||
nop +260
|
||||
acc +20
|
||||
jmp +24
|
||||
acc +36
|
||||
acc +41
|
||||
acc +31
|
||||
acc +42
|
||||
jmp +35
|
||||
acc +21
|
||||
nop +216
|
||||
acc +7
|
||||
jmp +42
|
||||
nop +408
|
||||
acc +18
|
||||
acc -4
|
||||
jmp +532
|
||||
acc -8
|
||||
acc +13
|
||||
jmp +529
|
||||
acc +36
|
||||
jmp +257
|
||||
acc +26
|
||||
acc +24
|
||||
acc -11
|
||||
nop +508
|
||||
jmp +249
|
||||
acc +44
|
||||
acc +25
|
||||
jmp +464
|
||||
acc +47
|
||||
jmp +318
|
||||
acc -6
|
||||
acc -1
|
||||
jmp +175
|
||||
acc +19
|
||||
acc +25
|
||||
acc +24
|
||||
jmp +523
|
||||
acc -7
|
||||
acc +45
|
||||
jmp +353
|
||||
jmp +67
|
||||
acc -1
|
||||
jmp -17
|
||||
acc -9
|
||||
jmp +180
|
||||
acc +19
|
||||
acc -15
|
||||
acc +5
|
||||
jmp +52
|
||||
nop +312
|
||||
acc +38
|
||||
jmp -6
|
||||
acc +6
|
||||
acc -11
|
||||
acc -6
|
||||
jmp +357
|
||||
jmp +455
|
||||
acc +27
|
||||
acc +29
|
||||
acc +9
|
||||
nop +414
|
||||
jmp +380
|
||||
jmp +1
|
||||
acc +33
|
||||
jmp +47
|
||||
acc +12
|
||||
acc +34
|
||||
acc -9
|
||||
acc +17
|
||||
jmp +214
|
||||
jmp +125
|
||||
acc +38
|
||||
acc +38
|
||||
acc +16
|
||||
jmp +310
|
||||
acc +9
|
||||
acc +10
|
||||
acc -2
|
||||
nop -84
|
||||
jmp +329
|
||||
nop +120
|
||||
nop -70
|
||||
jmp -88
|
||||
jmp +1
|
||||
jmp +1
|
||||
acc +23
|
||||
jmp -34
|
||||
nop +372
|
||||
acc +18
|
||||
acc +3
|
||||
acc +24
|
||||
jmp -50
|
||||
acc -11
|
||||
acc +27
|
||||
nop +441
|
||||
jmp +443
|
||||
acc +44
|
||||
acc -3
|
||||
acc +7
|
||||
jmp +389
|
||||
acc -5
|
||||
acc +36
|
||||
acc -17
|
||||
acc +15
|
||||
jmp +13
|
||||
acc +39
|
||||
jmp +407
|
||||
acc +8
|
||||
acc +21
|
||||
jmp +360
|
||||
jmp +425
|
||||
acc +7
|
||||
acc +29
|
||||
acc +6
|
||||
jmp +10
|
||||
jmp +1
|
||||
jmp +426
|
||||
acc +23
|
||||
jmp +3
|
||||
nop +2
|
||||
jmp +1
|
||||
jmp +240
|
||||
acc +16
|
||||
jmp -2
|
||||
jmp +47
|
||||
jmp +488
|
||||
jmp +1
|
||||
acc +45
|
||||
jmp +1
|
||||
acc +20
|
||||
jmp +344
|
||||
jmp +407
|
||||
acc +2
|
||||
acc +3
|
||||
jmp +117
|
||||
acc +50
|
||||
jmp -134
|
||||
acc +1
|
||||
jmp +238
|
||||
acc +27
|
||||
acc -11
|
||||
acc +16
|
||||
nop +134
|
||||
jmp +116
|
||||
acc -16
|
||||
nop +393
|
||||
jmp +2
|
||||
jmp +24
|
||||
nop +98
|
||||
acc +36
|
||||
acc +0
|
||||
nop +268
|
||||
jmp +131
|
||||
nop +294
|
||||
acc +23
|
||||
acc +26
|
||||
acc +43
|
||||
jmp +358
|
||||
nop +316
|
||||
jmp +300
|
||||
acc +22
|
||||
acc +47
|
||||
acc +19
|
||||
acc +2
|
||||
jmp +228
|
||||
jmp +176
|
||||
acc -4
|
||||
acc +20
|
||||
nop +83
|
||||
acc -19
|
||||
jmp -99
|
||||
acc +39
|
||||
nop +374
|
||||
acc +3
|
||||
jmp +57
|
||||
jmp +1
|
||||
acc +42
|
||||
jmp +404
|
||||
acc +4
|
||||
acc -4
|
||||
acc -10
|
||||
nop +293
|
||||
jmp +349
|
||||
acc -9
|
||||
acc +33
|
||||
jmp +284
|
||||
nop +1
|
||||
acc +18
|
||||
acc -1
|
||||
acc -5
|
||||
jmp +411
|
||||
acc +4
|
||||
acc -6
|
||||
acc +16
|
||||
jmp +313
|
||||
acc +0
|
||||
acc +39
|
||||
jmp +3
|
||||
acc -13
|
||||
jmp +148
|
||||
nop +51
|
||||
nop -207
|
||||
nop +357
|
||||
acc -19
|
||||
jmp +409
|
||||
acc +32
|
||||
jmp +103
|
||||
acc +5
|
||||
jmp +116
|
||||
nop +399
|
||||
acc +19
|
||||
acc +39
|
||||
nop +78
|
||||
jmp +298
|
||||
acc -16
|
||||
acc +31
|
||||
jmp +1
|
||||
acc +45
|
||||
jmp -207
|
||||
acc +6
|
||||
acc +36
|
||||
acc +34
|
||||
acc +47
|
||||
jmp -112
|
||||
acc +23
|
||||
acc +4
|
||||
jmp +289
|
||||
acc -17
|
||||
nop +307
|
||||
nop -92
|
||||
jmp -146
|
||||
jmp +293
|
||||
nop +44
|
||||
acc +5
|
||||
acc +2
|
||||
acc -19
|
||||
jmp +172
|
||||
acc +10
|
||||
acc +49
|
||||
acc -2
|
||||
jmp +6
|
||||
acc +3
|
||||
jmp +1
|
||||
acc -19
|
||||
acc +35
|
||||
jmp +328
|
||||
acc +38
|
||||
acc -5
|
||||
nop -83
|
||||
jmp -138
|
||||
jmp -55
|
||||
acc +35
|
||||
jmp +1
|
||||
jmp -216
|
||||
nop +220
|
||||
jmp +116
|
||||
jmp -78
|
||||
nop +331
|
||||
jmp +118
|
||||
jmp +287
|
||||
jmp -258
|
||||
jmp -181
|
||||
nop +85
|
||||
acc +31
|
||||
acc +10
|
||||
acc -13
|
||||
jmp +175
|
||||
jmp +66
|
||||
acc +34
|
||||
acc +6
|
||||
nop -126
|
||||
acc +38
|
||||
jmp +4
|
||||
acc +18
|
||||
jmp -13
|
||||
jmp -8
|
||||
jmp +1
|
||||
acc -9
|
||||
acc +31
|
||||
nop +92
|
||||
jmp +118
|
||||
nop +21
|
||||
jmp +110
|
||||
acc +20
|
||||
acc +20
|
||||
jmp +280
|
||||
jmp -142
|
||||
jmp +8
|
||||
nop -286
|
||||
jmp +170
|
||||
acc +22
|
||||
acc +29
|
||||
nop -127
|
||||
jmp +36
|
||||
jmp +328
|
||||
acc +27
|
||||
jmp -110
|
||||
acc +28
|
||||
acc +44
|
||||
acc +34
|
||||
acc +43
|
||||
jmp -42
|
||||
acc -19
|
||||
jmp +185
|
||||
acc -8
|
||||
nop -3
|
||||
acc +31
|
||||
acc -11
|
||||
jmp +142
|
||||
acc +49
|
||||
acc -2
|
||||
acc +28
|
||||
acc +17
|
||||
jmp +167
|
||||
acc +16
|
||||
jmp +165
|
||||
jmp -190
|
||||
jmp -117
|
||||
acc +0
|
||||
acc +16
|
||||
jmp +1
|
||||
acc -10
|
||||
jmp -39
|
||||
jmp +69
|
||||
jmp -187
|
||||
nop -101
|
||||
jmp +1
|
||||
acc +12
|
||||
jmp +218
|
||||
acc -6
|
||||
jmp -300
|
||||
acc +10
|
||||
jmp +104
|
||||
jmp +1
|
||||
acc +36
|
||||
jmp -243
|
||||
nop +138
|
||||
acc -15
|
||||
acc +13
|
||||
nop +278
|
||||
jmp -192
|
||||
acc +13
|
||||
jmp +275
|
||||
acc +0
|
||||
nop +92
|
||||
nop +214
|
||||
jmp -90
|
||||
acc +44
|
||||
nop +225
|
||||
acc +9
|
||||
jmp -348
|
||||
acc +16
|
||||
jmp -334
|
||||
nop -335
|
||||
acc -16
|
||||
acc -9
|
||||
jmp -89
|
||||
acc +35
|
||||
acc +2
|
||||
acc +26
|
||||
jmp +68
|
||||
acc -19
|
||||
acc +14
|
||||
acc -19
|
||||
acc -19
|
||||
jmp +262
|
||||
acc -16
|
||||
nop -246
|
||||
nop -251
|
||||
acc +26
|
||||
jmp +143
|
||||
nop +48
|
||||
acc +48
|
||||
jmp +249
|
||||
acc -8
|
||||
jmp +9
|
||||
acc +42
|
||||
acc +12
|
||||
acc +19
|
||||
acc -4
|
||||
jmp +213
|
||||
acc +1
|
||||
acc +29
|
||||
jmp -259
|
||||
acc +3
|
||||
acc +17
|
||||
acc -13
|
||||
jmp -131
|
||||
acc +16
|
||||
acc -9
|
||||
acc +28
|
||||
jmp +222
|
||||
acc +42
|
||||
acc +20
|
||||
acc -3
|
||||
acc +50
|
||||
jmp -339
|
||||
jmp +1
|
||||
acc +1
|
||||
nop -315
|
||||
acc +44
|
||||
acc +50
|
||||
jmp -143
|
||||
nop -87
|
||||
nop +155
|
||||
jmp +1
|
||||
nop +44
|
||||
jmp +158
|
||||
nop -10
|
||||
acc +9
|
||||
jmp +90
|
||||
jmp +89
|
||||
acc +27
|
||||
acc -5
|
||||
acc -8
|
||||
acc +40
|
||||
jmp +3
|
||||
nop -360
|
||||
jmp +117
|
||||
acc -14
|
||||
acc -16
|
||||
nop -184
|
||||
acc +20
|
||||
jmp +185
|
||||
acc -2
|
||||
acc +36
|
||||
nop +24
|
||||
jmp +195
|
||||
acc -8
|
||||
acc -3
|
||||
acc +7
|
||||
jmp -84
|
||||
acc +0
|
||||
acc -12
|
||||
acc +43
|
||||
jmp -270
|
||||
nop -434
|
||||
acc -15
|
||||
jmp +163
|
||||
acc +14
|
||||
jmp +29
|
||||
acc +32
|
||||
acc +26
|
||||
acc +13
|
||||
jmp -91
|
||||
acc +30
|
||||
jmp -163
|
||||
nop +175
|
||||
jmp -175
|
||||
jmp +20
|
||||
acc +0
|
||||
nop -426
|
||||
acc +22
|
||||
acc -6
|
||||
jmp -83
|
||||
acc +12
|
||||
acc +43
|
||||
acc +31
|
||||
jmp -46
|
||||
acc +27
|
||||
acc +26
|
||||
acc +24
|
||||
acc -12
|
||||
jmp +118
|
||||
nop -88
|
||||
nop -251
|
||||
acc -15
|
||||
acc +3
|
||||
jmp -450
|
||||
acc +11
|
||||
acc +19
|
||||
jmp -406
|
||||
acc +39
|
||||
jmp -45
|
||||
acc +40
|
||||
acc -7
|
||||
acc +22
|
||||
nop -329
|
||||
jmp -160
|
||||
jmp +80
|
||||
acc +0
|
||||
acc -4
|
||||
jmp +31
|
||||
acc +11
|
||||
acc -2
|
||||
acc +3
|
||||
acc +48
|
||||
jmp -366
|
||||
acc -16
|
||||
jmp -345
|
||||
jmp -259
|
||||
acc -8
|
||||
acc +29
|
||||
acc +4
|
||||
acc +2
|
||||
jmp -208
|
||||
acc -6
|
||||
acc +48
|
||||
acc -3
|
||||
jmp +82
|
||||
acc +1
|
||||
acc +47
|
||||
acc +40
|
||||
acc +31
|
||||
jmp -214
|
||||
acc +10
|
||||
jmp -328
|
||||
acc -18
|
||||
acc +39
|
||||
jmp +2
|
||||
jmp -403
|
||||
jmp +48
|
||||
jmp +19
|
||||
jmp -468
|
||||
jmp -397
|
||||
acc +40
|
||||
acc +39
|
||||
acc +22
|
||||
jmp +1
|
||||
jmp -305
|
||||
acc +22
|
||||
acc -5
|
||||
acc +23
|
||||
jmp -399
|
||||
acc +21
|
||||
jmp +17
|
||||
nop -239
|
||||
acc +0
|
||||
acc +29
|
||||
acc +2
|
||||
jmp -56
|
||||
acc -14
|
||||
acc +23
|
||||
jmp -375
|
||||
jmp -450
|
||||
nop +1
|
||||
jmp -29
|
||||
jmp -208
|
||||
nop +50
|
||||
jmp -468
|
||||
acc +3
|
||||
jmp +5
|
||||
jmp -347
|
||||
acc +21
|
||||
acc +35
|
||||
jmp -527
|
||||
acc -4
|
||||
acc -14
|
||||
acc -5
|
||||
nop +24
|
||||
jmp -418
|
||||
jmp +66
|
||||
acc +8
|
||||
acc -16
|
||||
jmp -447
|
||||
nop -324
|
||||
acc +27
|
||||
acc +4
|
||||
jmp -393
|
||||
jmp -276
|
||||
jmp +1
|
||||
acc +37
|
||||
acc +15
|
||||
nop -304
|
||||
jmp -534
|
||||
acc -16
|
||||
nop -514
|
||||
acc +11
|
||||
jmp -331
|
||||
nop -69
|
||||
acc +14
|
||||
acc +44
|
||||
jmp -125
|
||||
acc +3
|
||||
acc +5
|
||||
acc +0
|
||||
nop -381
|
||||
jmp -440
|
||||
acc +48
|
||||
nop -561
|
||||
jmp -543
|
||||
acc -10
|
||||
acc +44
|
||||
acc -16
|
||||
acc +45
|
||||
jmp -177
|
||||
acc +36
|
||||
jmp -576
|
||||
acc +36
|
||||
acc +14
|
||||
nop -323
|
||||
jmp -163
|
||||
jmp -118
|
||||
acc -1
|
||||
acc -14
|
||||
acc +7
|
||||
acc +7
|
||||
jmp +11
|
||||
acc +31
|
||||
nop -309
|
||||
jmp -109
|
||||
acc +41
|
||||
acc +11
|
||||
acc +4
|
||||
jmp -52
|
||||
acc +9
|
||||
acc +16
|
||||
jmp -481
|
||||
jmp -161
|
||||
acc -8
|
||||
acc +13
|
||||
acc +16
|
||||
jmp -488
|
||||
acc +30
|
||||
jmp -390
|
||||
nop -313
|
||||
jmp -333
|
||||
jmp -44
|
||||
acc +38
|
||||
acc +33
|
||||
acc +38
|
||||
jmp -619
|
||||
jmp -186
|
||||
acc +49
|
||||
acc -5
|
||||
acc -16
|
||||
jmp -214
|
||||
acc +16
|
||||
acc +35
|
||||
nop -584
|
||||
acc -12
|
||||
jmp +1
|
@ -0,0 +1,94 @@
|
||||
use std::fs::File;
|
||||
use std::io::{BufRead, BufReader};
|
||||
use std::result::Result::{Err, Ok};
|
||||
use std::marker::Copy;
|
||||
|
||||
struct CPUState {
|
||||
pc: usize,
|
||||
acc: i32,
|
||||
}
|
||||
|
||||
trait Executable {
|
||||
fn execute(&self, state: CPUState) -> CPUState;
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
enum Instruction {
|
||||
NOP { immediate: i32 },
|
||||
JMP { offset: i32 },
|
||||
ACC { immediate: i32 },
|
||||
}
|
||||
|
||||
impl Executable for Instruction {
|
||||
fn execute(&self, mut state: CPUState) -> CPUState {
|
||||
match self {
|
||||
Instruction::NOP { immediate: _ } => {
|
||||
state.pc += 1;
|
||||
state
|
||||
}
|
||||
Instruction::JMP { offset } => {
|
||||
state.pc = (state.pc as i32 + offset) as usize;
|
||||
state
|
||||
}
|
||||
Instruction::ACC { immediate } => {
|
||||
state.pc += 1;
|
||||
state.acc += immediate;
|
||||
state
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let file = match File::open("input") {
|
||||
Ok(file) => file,
|
||||
Err(e) => panic!(e)
|
||||
};
|
||||
|
||||
let input_buffer = BufReader::new(&file);
|
||||
|
||||
let mut instructions: Vec<Instruction> = input_buffer.lines()
|
||||
.map(
|
||||
|rline| {
|
||||
let line = rline.unwrap();
|
||||
match &line[0..3] {
|
||||
"nop" => Instruction::NOP { immediate: line[4..line.len()].to_string().parse().unwrap() },
|
||||
"jmp" => Instruction::JMP { offset: line[4..line.len()].to_string().parse().unwrap() },
|
||||
"acc" => Instruction::ACC { immediate: line[4..line.len()].to_string().parse().unwrap() },
|
||||
_e => panic!()
|
||||
}
|
||||
}
|
||||
).collect();
|
||||
|
||||
let mut executed: Vec<bool> = Vec::with_capacity(instructions.len());
|
||||
for _i in 0..instructions.len() { executed.push(false) }
|
||||
|
||||
let mut state = CPUState { acc: 0, pc: 0 };
|
||||
|
||||
'found: for i in 0..instructions.len() {
|
||||
instructions[i] = flip(&instructions[i]);
|
||||
|
||||
loop {
|
||||
if state.pc >= instructions.len() { break 'found}
|
||||
if executed[state.pc] { break; }
|
||||
executed[state.pc] = true;
|
||||
state = instructions[state.pc].execute(state);
|
||||
}
|
||||
|
||||
for j in 0..instructions.len() { executed[j] = false }
|
||||
|
||||
state = CPUState { acc: 0, pc: 0 };
|
||||
|
||||
instructions[i] = flip(&instructions[i]);
|
||||
}
|
||||
|
||||
println!("{}", state.acc);
|
||||
}
|
||||
|
||||
fn flip(instruction: &Instruction) -> Instruction {
|
||||
match instruction {
|
||||
Instruction::NOP { immediate } => Instruction::JMP { offset: *immediate },
|
||||
Instruction::JMP { offset } => Instruction::NOP { immediate: *offset },
|
||||
instruction => *instruction
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue