Skip to content

Instantly share code, notes, and snippets.

@fryguy1013
Created December 16, 2018 10:11
Show Gist options
  • Save fryguy1013/16da727b85e2dfa953a9aeee871b521f to your computer and use it in GitHub Desktop.
Save fryguy1013/16da727b85e2dfa953a9aeee871b521f to your computer and use it in GitHub Desktop.
pub fn solve_part1_fast2(input: &str) -> usize {
let mut lines = input.lines();
let mut ret = 0;
let lookup : Vec<u32> = vec![38195, 38195, 38195, 38195, 4403, 13107, 54743, 48059, 5393, 39219, 21847, 39355, 37137, 47411, 21973, 39355, 4403, 13107, 22391, 48059, 46899, 46899, 46899, 46899, 5427, 47411, 22391, 48059, 37171, 47923, 22007, 48059, 5427, 13107, 22391, 39867, 5939, 14195, 55287, 48059, 38773, 38773, 38773, 38773, 38193, 47923, 21973, 39867, 37171, 47923, 22519, 48059, 45875, 47923, 57343, 48059, 38193, 47547, 22519, 48059, 46521, 46521, 46521, 46521];
while let Some(line) = lines.next() {
if line.is_empty() || line.as_bytes()[0] != b'B' { break; }
let before = line.as_bytes();
let op = lines.next().unwrap().as_bytes();
let after = lines.next().unwrap().as_bytes();
let a_start = if op[1] == b' ' { 2 } else { 3 };
let a = (op[a_start] - b'0') as usize;
let b = (op[a_start+2] - b'0') as usize;
let o = (op[a_start+4] - b'0') as usize;
let afo = (after[9 + o*3] - b'0') as usize;
let rea = (before[9 + a*3] - b'0') as usize;
let reb = (before[9 + b*3] - b'0') as usize;
ret += ((lookup[(a<<4) | (b<<2) | rea] >> ((reb<<2) | afo)) & 0x01) as usize;
lines.next();
}
ret
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment