mirror of
https://github.com/RussellChamp/advent-of-code-2016.git
synced 2026-10-27 23:32:30 +00:00
Finished a few more
This commit is contained in:
1 parent
e91f81a898
commit
102b456eaf
8 files changed
+344
-25
No files matched your search
+2
-17
@@ -20,21 +20,6 @@ fn step(state: &(i32, i32), pos: &(i32, i32), dist: i32) -> (i32, i32) {
|
||||
(pos.0 + state.0 * dist, pos.1 + state.1 * dist)
|
||||
}
|
||||
|
||||
// fn state_to_direction(state: &(i32, i32)) -> String {
|
||||
// match state.0 {
|
||||
// 1 => "N",
|
||||
// -1 => "S",
|
||||
// 0 => {
|
||||
// match state.1 {
|
||||
// 1 => "E",
|
||||
// -1 => "W",
|
||||
// _ => "Invalid",
|
||||
// }
|
||||
// },
|
||||
// _ => "Invalid",
|
||||
// }
|
||||
// }
|
||||
|
||||
fn part_1(input: &String) {
|
||||
let mut state = (1, 0);
|
||||
let mut pos = (0, 0);
|
||||
@@ -62,14 +47,14 @@ fn part_2(input: &String) {
|
||||
|
||||
state = turn(&state, &dir);
|
||||
let pos = step(&state, positions.last().unwrap(), dist);
|
||||
print!("Move {} {} to ({}, {}) - ", dist, dir, pos.0, pos.1);
|
||||
print!("{}: {}{} -> ({}, {}), ", positions.len(), dist, dir, pos.0, pos.1);
|
||||
match positions.iter().position(|&p| p == pos) {
|
||||
Some(v) => {
|
||||
println!("Part 2: Stopped twice at ({}, {}) on element {}, {} away from the start", pos.0, pos.1, v, pos.0.abs() + pos.1.abs());
|
||||
break;
|
||||
},
|
||||
None => {
|
||||
println!("Did not match {} locations", positions.len());
|
||||
//println!("Did not match {} locations", positions.len());
|
||||
positions.push(pos);
|
||||
},
|
||||
}
|
||||
|
||||
+47
-8
@@ -3,7 +3,7 @@ extern crate regex;
|
||||
use std::io::Read;
|
||||
use std::fs::File;
|
||||
use regex::Regex;
|
||||
use std::collections::HashMap;
|
||||
//use std::collections::HashMap;
|
||||
|
||||
///// THIS IS NOT WORKING RIGHT. :(
|
||||
|
||||
@@ -27,18 +27,57 @@ struct Room {
|
||||
fn part_1(input: &String) {
|
||||
let re = Regex::new(r"([a-z\\-]+)-([:digit:]+)\[([:lower:]+)\]").unwrap();
|
||||
|
||||
let sum = 0;
|
||||
for cap in re.captures_iter(input) {
|
||||
let mut sum = 0;
|
||||
'outer: for cap in re.captures_iter(input) {
|
||||
let room = Room { name: String::from(cap.at(1).unwrap_or("")),
|
||||
sector: cap.at(2).unwrap_or("0").parse().unwrap_or(0),
|
||||
check: String::from(cap.at(3).unwrap_or("")),
|
||||
};
|
||||
let mut charMap: HashMap<char, i32> = HashMap::new();
|
||||
for ch in room.name.replace("-", "").chars() {
|
||||
let l = charMap.entry(ch).or_insert(0);
|
||||
*l += 1;
|
||||
//println!("{:?}", room);
|
||||
let mut accumulator = [0; 26];
|
||||
for letter in room.name.replace("-", "").chars() {
|
||||
let letter_idx = letter as u8 - 'a' as u8;
|
||||
accumulator[letter_idx as usize] = accumulator[letter_idx as usize] + 1;
|
||||
//println!("The letter is {} with a value {} - {:?}", letter, letter_idx, accumulator);
|
||||
}
|
||||
println!("{:?}", charMap);
|
||||
|
||||
//println!("Accumulated {:?}", accumulator);
|
||||
|
||||
let mut letters_to_match = room.check.len();
|
||||
let mut biggest_value = -1;
|
||||
let mut biggest_idxs: Vec<u8> = Vec::new();
|
||||
while letters_to_match > 0 {
|
||||
for idx in 0..accumulator.len() {
|
||||
if accumulator[idx] > biggest_value {
|
||||
biggest_value = accumulator[idx];
|
||||
biggest_idxs = vec![idx as u8];
|
||||
} else if accumulator[idx] == biggest_value {
|
||||
biggest_idxs.push(idx as u8); //add it with the others
|
||||
}
|
||||
}
|
||||
biggest_idxs.reverse(); //we want to take items off in the order we put them on
|
||||
//println!("These letters had a score of {}: {:?}", biggest_value, biggest_idxs);
|
||||
while letters_to_match > 0 && biggest_idxs.len() > 0 {
|
||||
let letter_idx = biggest_idxs.pop().unwrap();
|
||||
let letter_value = (letter_idx + 'a' as u8) as char;
|
||||
if ! room.check.as_str().contains(letter_value) {
|
||||
continue 'outer;
|
||||
}
|
||||
accumulator[letter_idx as usize] = 0; //nope this broke things
|
||||
biggest_value = -1;
|
||||
letters_to_match = letters_to_match - 1;
|
||||
}
|
||||
}
|
||||
//phew! we successfully checked this room. the sector is old, but it checks out
|
||||
println!("Valid! {:?}", room);
|
||||
sum = sum + room.sector;
|
||||
|
||||
// let mut char_map: HashMap<char, i32> = HashMap::new();
|
||||
// for ch in room.name.replace("-", "").chars() {
|
||||
// let l = char_map.entry(ch).or_insert(0);
|
||||
// *l += 1;
|
||||
// }
|
||||
// println!("{:?}", char_map);
|
||||
//println!("{:?}", room);
|
||||
//let mut letters: Vec<char> = .collect();
|
||||
//println!("{:?}", letters.sort());
|
||||
|
||||
Generated
+4
@@ -0,0 +1,4 @@
|
||||
[root]
|
||||
name = "day06"
|
||||
version = "0.1.0"
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "day06"
|
||||
version = "0.1.0"
|
||||
authors = ["Russell Champoux <russell.champoux@thomsonreuters.com>"]
|
||||
|
||||
[dependencies]
|
||||
@@ -0,0 +1,99 @@
|
||||
use std::io::Read;
|
||||
use std::fs::File;
|
||||
//use std::collections::HashMap;
|
||||
|
||||
fn part_1(input: &String) {
|
||||
// This would have been great if it actually worked.
|
||||
// let values = input.lines()
|
||||
// .map(|l| l
|
||||
// .trim()
|
||||
// .chars()
|
||||
// .collect::<Vec<_>>()
|
||||
// )
|
||||
// .collect::<Vec<_>>();
|
||||
// println!("first item {:?}", values[0]);
|
||||
// println!("second item {:?}", values[1]);
|
||||
|
||||
// //let mut letters: Vec<String> = vec![String::new(); values[0].len()];
|
||||
// let mut letters: Vec<Vec<char>> = vec![vec![]; values[0].len()];
|
||||
// for v in values {
|
||||
// for (idx, l) in v.iter().enumerate() {
|
||||
// letters[idx].push(*l);
|
||||
// }
|
||||
// }
|
||||
// for (idx, line) in letters.iter().enumerate() {
|
||||
// //println!("Letter {}: {:?}", idx, s);
|
||||
// let mut hash: HashMap<char, i32> = HashMap::new();
|
||||
// let mut largest: (char, i32) = ('a', -1);
|
||||
// for l in line {
|
||||
// match hash.get(l) {
|
||||
// Some(v) => {
|
||||
// v = &(v + 1);
|
||||
// // if v > largest.1 {
|
||||
// // largest = (l, v);
|
||||
// // }
|
||||
// },
|
||||
// None => hash.insert(*l, 1),
|
||||
// }
|
||||
// }
|
||||
|
||||
// //let s: String = l.iter().cloned().collect();
|
||||
// }
|
||||
|
||||
let size = input.lines().nth(0).unwrap().len();
|
||||
print!("Part 1: Answer ");
|
||||
for idx in 0..size {
|
||||
let mut accumulator = [0; 26];
|
||||
for line in input.lines() {
|
||||
let letter = line.chars().nth(idx).unwrap();
|
||||
let letter_idx = letter as u8 - 'a' as u8;
|
||||
accumulator[letter_idx as usize] = accumulator[letter_idx as usize] + 1;
|
||||
//println!("The {}th letter is {} with a value {} - {:?}", idx, letter, letter_idx, accumulator);
|
||||
}
|
||||
let mut biggest = (0, -1); //idx and value
|
||||
for idx in 0..accumulator.len() {
|
||||
if accumulator[idx] > biggest.1 {
|
||||
biggest = (idx, accumulator[idx]);
|
||||
}
|
||||
}
|
||||
let biggest_letter = (biggest.0 as u8 + 'a' as u8) as char;
|
||||
// println!("Accumulator is {:?}", accumulator);
|
||||
// println!("Biggest is {:?} which is {}", biggest, biggest_letter);
|
||||
print!("{}", biggest_letter);
|
||||
}
|
||||
println!(""); //newline
|
||||
}
|
||||
|
||||
fn part_2(input: &String) {
|
||||
let size = input.lines().nth(0).unwrap().len();
|
||||
print!("Part 2: Answer ");
|
||||
for idx in 0..size {
|
||||
let mut accumulator = [0; 26];
|
||||
for line in input.lines() {
|
||||
let letter = line.chars().nth(idx).unwrap();
|
||||
let letter_idx = letter as u8 - 'a' as u8;
|
||||
accumulator[letter_idx as usize] = accumulator[letter_idx as usize] + 1;
|
||||
//println!("The {}th letter is {} with a value {} - {:?}", idx, letter, letter_idx, accumulator);
|
||||
}
|
||||
let mut smallest = (0, <i32>::max_value()); //idx and value
|
||||
for idx in 0..accumulator.len() {
|
||||
if accumulator[idx] > 0 && accumulator[idx] < smallest.1 {
|
||||
smallest = (idx, accumulator[idx]);
|
||||
}
|
||||
}
|
||||
let smallest_letter = (smallest.0 as u8 + 'a' as u8) as char;
|
||||
// println!("Accumulator is {:?}", accumulator);
|
||||
// println!("Smallest is {:?} which is {}", smallest, smallest_letter);
|
||||
print!("{}", smallest_letter);
|
||||
}
|
||||
println!(""); //newline
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut file = File::open("./data").expect("could not open file");
|
||||
let mut input = String::new();
|
||||
file.read_to_string(&mut input).expect("could not read file");
|
||||
|
||||
part_1(&input);
|
||||
part_2(&input);
|
||||
}
|
||||
Generated
+98
@@ -0,0 +1,98 @@
|
||||
[root]
|
||||
name = "day07"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "0.5.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "kernel32-sys"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "0.1.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "0.1.80"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "thread-id"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thread_local"
|
||||
version = "0.2.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "utf8-ranges"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.2.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-build"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[metadata]
|
||||
"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
|
||||
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
|
||||
"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
|
||||
"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
|
||||
"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
|
||||
"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
|
||||
"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
|
||||
"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
|
||||
"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
|
||||
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
|
||||
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
|
||||
@@ -0,0 +1,7 @@
|
||||
[package]
|
||||
name = "day07"
|
||||
version = "0.1.0"
|
||||
authors = ["~krowbar"]
|
||||
|
||||
[dependencies]
|
||||
regex = "0.1"
|
||||
@@ -0,0 +1,81 @@
|
||||
extern crate regex;
|
||||
|
||||
use regex::Regex;
|
||||
use std::io::Read;
|
||||
use std::fs::File;
|
||||
|
||||
fn ugly_match(text: &String) -> bool {
|
||||
if text.len() < 4 {
|
||||
return false
|
||||
}
|
||||
//check for ABBA pattern
|
||||
for idx in 0..text.len() - 3 {
|
||||
if text.chars().nth(idx).unwrap() == text.chars().nth(idx+3).unwrap() &&
|
||||
text.chars().nth(idx+1).unwrap() == text.chars().nth(idx+2).unwrap() &&
|
||||
text.chars().nth(idx).unwrap() != text.chars().nth(idx+1).unwrap() {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fn part_1(input: &String) {
|
||||
|
||||
let re = Regex::new(r"\[([:lower:]+)\]").unwrap();
|
||||
let mut count = 0;
|
||||
let mut rejected = 0;
|
||||
let mut none = 0;
|
||||
|
||||
'outer: for line in input.lines() {
|
||||
|
||||
//hypernet sequences
|
||||
for cap in re.captures_iter(line) {
|
||||
let cap = cap.at(1).unwrap_or("");
|
||||
//reject if cap contains an ABBA
|
||||
if ugly_match(&cap.to_string()) {
|
||||
//println!("- {}", cap);
|
||||
rejected = rejected + 1;
|
||||
continue 'outer;
|
||||
}
|
||||
}
|
||||
|
||||
//addresses
|
||||
for cap in re.replace_all(line, ",").split(",") {
|
||||
//println!("Matched bit {}", cap);
|
||||
if ugly_match(&cap.to_string()) {
|
||||
//println!("+ {}", cap);
|
||||
count = count + 1;
|
||||
continue 'outer;
|
||||
}
|
||||
}
|
||||
|
||||
none = none + 1;
|
||||
}
|
||||
println!("Count: {} Rejected: {} None: {}", count, rejected, none);
|
||||
println!("Part 1 Answer: {}", count);
|
||||
}
|
||||
|
||||
fn part_2(input: &String) {
|
||||
let re = Regex::new(r"\[([:lower:]+)\]").unwrap();
|
||||
let mut count = 0;
|
||||
|
||||
'outer: for line in input.lines() {
|
||||
|
||||
for cap in re.replace_all(line, ",").split(",") {
|
||||
let bab: String = format!(cap.chars().nth(1).unwrap(), cap.chars().nth(0).unwrap(), cap.chars().nth(1).unwrap());
|
||||
println!("Generated bab {}", bab);
|
||||
let bre = Regex::new(&format!("{}{}{}", r"\[(", bab, r")\]")).unwrap();
|
||||
//check for ABAs
|
||||
//check for related BAB
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut file = File::open("./data").expect("could not open file");
|
||||
let mut input = String::new();
|
||||
file.read_to_string(&mut input).expect("could not read file");
|
||||
|
||||
//part_1(&input);
|
||||
part_2(&input);
|
||||
}
|
||||
Reference in new issue
Block a user