From d848c7e7f37a953b2c875a90416a01e0f76f3ce2 Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Wed, 7 Dec 2016 12:53:28 +0200 Subject: AOC7 part 2 --- aoc7/src/main.rs | 58 +++++++++++++++++++++++++++++++++++++++++------------ aoc7/test_input.txt | 4 ++++ 2 files changed, 49 insertions(+), 13 deletions(-) create mode 100644 aoc7/test_input.txt (limited to 'aoc7') diff --git a/aoc7/src/main.rs b/aoc7/src/main.rs index e4689d2..254f23d 100644 --- a/aoc7/src/main.rs +++ b/aoc7/src/main.rs @@ -4,17 +4,25 @@ use std::fs::File; fn main() { let lines = read_file(); - let mut abba_count = 0; + let mut ssl_count = 0; for line in lines { let mut in_squares = false; - let mut char_buffer = [' '; 4]; + let mut char_buffer = [' '; 3]; + + let mut abas = Vec::new(); + let mut babs = Vec::new(); let mut chars = line.chars(); char_buffer[0] = chars.next().unwrap(); char_buffer[1] = chars.next().unwrap(); char_buffer[2] = chars.next().unwrap(); - char_buffer[3] = chars.next().unwrap(); - let mut abba_found = is_abba(char_buffer); + if is_aba(char_buffer) { + if in_squares { + babs.push(char_buffer); + } else { + abas.push(char_buffer); + } + } for c in chars { match c { @@ -24,24 +32,34 @@ fn main() { } char_buffer[0] = char_buffer[1]; char_buffer[1] = char_buffer[2]; - char_buffer[2] = char_buffer[3]; - char_buffer[3] = c; + char_buffer[2] = c; - if is_abba(char_buffer) { + if is_aba(char_buffer) { if in_squares { - abba_found = false; - break; + babs.push(char_buffer); } else { - abba_found = true; + abas.push(char_buffer); } } } - if abba_found { - abba_count += 1; + //println!("ABA {:?}", abas); + //println!("BAB {:?}", babs); + + let mut is_ssl = false; + for aba in &abas { + for bab in &babs { + is_ssl = is_ssl || correspond(aba.clone(), bab.clone()); + } + } + + //println!("Is SSL? {}", is_ssl); + + if is_ssl { + ssl_count += 1; } } - println!("ABBA_count: {}", abba_count); + println!("SSL_count: {}", ssl_count); } fn read_file() -> Vec { @@ -61,3 +79,17 @@ fn is_abba(char_buffer: [char; 4]) -> bool { char_buffer[0] != '[' && char_buffer[1] != '[' } + +fn is_aba(char_buffer: [char; 3]) -> bool { + char_buffer[0] != char_buffer[1] && + char_buffer[0] == char_buffer[2] && + char_buffer[0] != ']' && + char_buffer[1] != ']' && + char_buffer[0] != '[' && + char_buffer[1] != '[' +} + +fn correspond(aba: [char; 3], bab: [char; 3]) -> bool { + //assumes both follow the aba pattern, so [0] == [2] + aba[0] == bab[1] && aba[1] == bab[0] +} diff --git a/aoc7/test_input.txt b/aoc7/test_input.txt new file mode 100644 index 0000000..a675097 --- /dev/null +++ b/aoc7/test_input.txt @@ -0,0 +1,4 @@ +aba[bab]xyz +xyx[xyx]xyx +aaa[kek]eke +zazbz[bzb]cdb -- cgit v1.2.3