diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2019-12-19 14:10:22 +0100 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2019-12-19 14:10:22 +0100 |
| commit | e0df7e7e036793228449b19b260d9af911deb5b9 (patch) | |
| tree | 6a2987e37c25e22ec985101b2d3ce09fa69245a1 | |
| parent | 0b2fa13234eb181b3cba2e39db4f177d2d6c0120 (diff) | |
small optimizations
| -rw-r--r-- | src/main.rs | 40 |
1 files changed, 9 insertions, 31 deletions
diff --git a/src/main.rs b/src/main.rs index 93dbfaa..5ce7835 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1808,48 +1808,26 @@ fn day17() { input += "n\n"; let mut computer = IntComputer::new(&program); - computer.suspend_on_output = true; computer.mem[0] = 2; - for i in input.bytes() { - computer.input.push_back(i as isize); - } + computer.input = input.bytes().map(|i| i as isize).collect(); + computer.run_program(); - let mut output = 0; - loop { - match computer.run_program() { - ProgramState::SUSPENDED => output = computer.output.pop_front().unwrap(), - ProgramState::HALTED => break, - _ => {} - } - } - println!("17b: {}", output); + println!("17b: {}", computer.output.pop_back().unwrap()); } fn check_position(program: &[isize], x: isize, y: isize) -> isize { let mut computer = IntComputer::new(program); - computer.suspend_on_output = true; - let mut output = 0; computer.input.push_back(x); computer.input.push_back(y); - loop { - match computer.run_program() { - ProgramState::SUSPENDED => output = computer.output.pop_front().unwrap(), - ProgramState::HALTED => break, - _ => {} - } - } - output + computer.run_program(); + computer.output.pop_front().unwrap() } fn check_square_fits(map: &HashSet<(isize, isize)>, size: isize, x: isize, y: isize) -> bool { - for i in 0..size { - for j in 0..size { - if !map.contains(&(x-j, y-i)) { - return false; - } - } - } - true + map.contains(&(x, y-size+1)) && + map.contains(&(x-size+1, y)) && + map.contains(&(x-size+1, y-size+1)) && + map.contains(&(x, y)) } fn day19() { |
