summaryrefslogtreecommitdiff
path: root/aoc7
diff options
context:
space:
mode:
authorJustin Worthe <justin.worthe@entelect.co.za>2016-12-07 12:53:28 +0200
committerJustin Worthe <justin.worthe@entelect.co.za>2016-12-07 12:53:28 +0200
commitd848c7e7f37a953b2c875a90416a01e0f76f3ce2 (patch)
treeb5d156fd4422b1c22e75ee26833d92c5ecf8e182 /aoc7
parent47ef58636e4ccdf48c9d64b045c7bc043e0e256b (diff)
AOC7 part 2
Diffstat (limited to 'aoc7')
-rw-r--r--aoc7/src/main.rs58
-rw-r--r--aoc7/test_input.txt4
2 files changed, 49 insertions, 13 deletions
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<String> {
@@ -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