cargo fmt
parent
0d71008a98
commit
92cdd760e2
|
@ -9,8 +9,18 @@ fn get_coords_from_line(line: &String) -> (usize, usize, usize, usize) {
|
||||||
let top_x = top_left_pieces.get(0).unwrap().parse::<usize>().unwrap();
|
let top_x = top_left_pieces.get(0).unwrap().parse::<usize>().unwrap();
|
||||||
let top_y = top_left_pieces.get(1).unwrap().parse::<usize>().unwrap();
|
let top_y = top_left_pieces.get(1).unwrap().parse::<usize>().unwrap();
|
||||||
let bottom_right_pieces: Vec<&str> = piece_dims.get(1).unwrap().split("x").collect();
|
let bottom_right_pieces: Vec<&str> = piece_dims.get(1).unwrap().split("x").collect();
|
||||||
let bottom_x = top_x + bottom_right_pieces.get(0).unwrap().parse::<usize>().unwrap();
|
let bottom_x = top_x
|
||||||
let bottom_y = top_y + bottom_right_pieces.get(1).unwrap().parse::<usize>().unwrap();
|
+ bottom_right_pieces
|
||||||
|
.get(0)
|
||||||
|
.unwrap()
|
||||||
|
.parse::<usize>()
|
||||||
|
.unwrap();
|
||||||
|
let bottom_y = top_y
|
||||||
|
+ bottom_right_pieces
|
||||||
|
.get(1)
|
||||||
|
.unwrap()
|
||||||
|
.parse::<usize>()
|
||||||
|
.unwrap();
|
||||||
(top_x, top_y, bottom_x, bottom_y)
|
(top_x, top_y, bottom_x, bottom_y)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ fn calc_remaining_monomers(polymers: &str) -> usize {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn calc_most_significant_monomer(polymers: &str) {
|
fn calc_most_significant_monomer(polymers: &str) {
|
||||||
let chars: Vec<char> = (b'a' ..= b'z').map(char::from).collect();
|
let chars: Vec<char> = (b'a'..=b'z').map(char::from).collect();
|
||||||
let mut min_letter = 'a';
|
let mut min_letter = 'a';
|
||||||
let mut min_length = polymers.len();
|
let mut min_length = polymers.len();
|
||||||
for mychar in chars.iter() {
|
for mychar in chars.iter() {
|
||||||
|
@ -32,7 +32,10 @@ fn calc_most_significant_monomer(polymers: &str) {
|
||||||
min_length = new_len;
|
min_length = new_len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
println!("minimum new length {} found by replacing {}", min_length, min_letter);
|
println!(
|
||||||
|
"minimum new length {} found by replacing {}",
|
||||||
|
min_length, min_letter
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn react_monomer(polymers: &str, r: Regex) -> usize {
|
fn react_monomer(polymers: &str, r: Regex) -> usize {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
use std::collections::HashMap;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::{BufRead, BufReader};
|
use std::io::{BufRead, BufReader};
|
||||||
use std::iter::Iterator;
|
use std::iter::Iterator;
|
||||||
use std::collections::HashMap;
|
|
||||||
|
|
||||||
struct Point {
|
struct Point {
|
||||||
x: usize,
|
x: usize,
|
||||||
|
@ -20,7 +20,13 @@ impl std::fmt::Display for Point {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn calc_max_area(points: &Vec<Point>, min_x: usize, min_y: usize, max_x: usize, max_y: usize) -> (u8, usize) {
|
fn calc_max_area(
|
||||||
|
points: &Vec<Point>,
|
||||||
|
min_x: usize,
|
||||||
|
min_y: usize,
|
||||||
|
max_x: usize,
|
||||||
|
max_y: usize,
|
||||||
|
) -> (u8, usize) {
|
||||||
let distances = calc_distances(points, min_x, min_y, max_x, max_y);
|
let distances = calc_distances(points, min_x, min_y, max_x, max_y);
|
||||||
let mut areas: HashMap<u8, usize> = HashMap::new();
|
let mut areas: HashMap<u8, usize> = HashMap::new();
|
||||||
for i in min_x..=max_x {
|
for i in min_x..=max_x {
|
||||||
|
@ -28,7 +34,10 @@ fn calc_max_area(points: &Vec<Point>, min_x: usize, min_y: usize, max_x: usize,
|
||||||
if distances[i][j] == 0 {
|
if distances[i][j] == 0 {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
areas.entry(distances[i][j]).and_modify(|e| *e += 1).or_insert(1);
|
areas
|
||||||
|
.entry(distances[i][j])
|
||||||
|
.and_modify(|e| *e += 1)
|
||||||
|
.or_insert(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let mut index = 0;
|
let mut index = 0;
|
||||||
|
@ -43,19 +52,27 @@ fn calc_max_area(points: &Vec<Point>, min_x: usize, min_y: usize, max_x: usize,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (key, value) in areas.iter() {
|
for (key, value) in areas.iter() {
|
||||||
println!("{}: {} area {}", key, points.get((index - 1) as usize).unwrap(), value);
|
println!(
|
||||||
|
"{}: {} area {}",
|
||||||
|
key,
|
||||||
|
points.get((index - 1) as usize).unwrap(),
|
||||||
|
value
|
||||||
|
);
|
||||||
}
|
}
|
||||||
(max_area_index, max_area)
|
(max_area_index, max_area)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn calc_distances(points: &Vec<Point>, min_x: usize, min_y: usize, max_x: usize, max_y: usize) -> [[u8; 500]; 500] {
|
fn calc_distances(
|
||||||
|
points: &Vec<Point>,
|
||||||
|
min_x: usize,
|
||||||
|
min_y: usize,
|
||||||
|
max_x: usize,
|
||||||
|
max_y: usize,
|
||||||
|
) -> [[u8; 500]; 500] {
|
||||||
let mut distances = [[0u8; 500]; 500];
|
let mut distances = [[0u8; 500]; 500];
|
||||||
for i in min_x..=max_x {
|
for i in min_x..=max_x {
|
||||||
for j in min_y..=max_y {
|
for j in min_y..=max_y {
|
||||||
let cur_point = Point {
|
let cur_point = Point { x: i, y: j };
|
||||||
x: i,
|
|
||||||
y: j
|
|
||||||
};
|
|
||||||
let mut min_dis = 500;
|
let mut min_dis = 500;
|
||||||
let mut found_dupe = false;
|
let mut found_dupe = false;
|
||||||
let mut min_index = 0;
|
let mut min_index = 0;
|
||||||
|
@ -114,17 +131,30 @@ fn main() {
|
||||||
let mut max_x = 0;
|
let mut max_x = 0;
|
||||||
let mut max_y = 0;
|
let mut max_y = 0;
|
||||||
for point in points.iter() {
|
for point in points.iter() {
|
||||||
if point.x < min_x { min_x = point.x };
|
if point.x < min_x {
|
||||||
if point.x > max_x { max_x = point.x };
|
min_x = point.x
|
||||||
if point.y < min_y { min_y = point.y };
|
};
|
||||||
if point.y > max_y { max_y = point.y };
|
if point.x > max_x {
|
||||||
|
max_x = point.x
|
||||||
|
};
|
||||||
|
if point.y < min_y {
|
||||||
|
min_y = point.y
|
||||||
|
};
|
||||||
|
if point.y > max_y {
|
||||||
|
max_y = point.y
|
||||||
|
};
|
||||||
}
|
}
|
||||||
let width = max_x - min_x;
|
let width = max_x - min_x;
|
||||||
let height = max_y - min_y;
|
let height = max_y - min_y;
|
||||||
println!("map size {}x{}", width, height);
|
println!("map size {}x{}", width, height);
|
||||||
let (max_area_point, max_area) = calc_max_area(&points, min_x, min_y, max_x, max_y);
|
let (max_area_point, max_area) = calc_max_area(&points, min_x, min_y, max_x, max_y);
|
||||||
let max_area_point_index = (max_area_point - 1) as usize;
|
let max_area_point_index = (max_area_point - 1) as usize;
|
||||||
println!("max area point {} {} is {}", max_area_point, points.get(max_area_point_index).unwrap(), max_area);
|
println!(
|
||||||
|
"max area point {} {} is {}",
|
||||||
|
max_area_point,
|
||||||
|
points.get(max_area_point_index).unwrap(),
|
||||||
|
max_area
|
||||||
|
);
|
||||||
let safe_zone = calc_safe_zone(&points, 10000);
|
let safe_zone = calc_safe_zone(&points, 10000);
|
||||||
println!("safe zone area {}", safe_zone);
|
println!("safe zone area {}", safe_zone);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
use std::collections::{BTreeMap, HashMap};
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::{BufRead, BufReader};
|
use std::io::{BufRead, BufReader};
|
||||||
use std::iter::Iterator;
|
use std::iter::Iterator;
|
||||||
use std::collections::{BTreeMap, HashMap};
|
|
||||||
|
|
||||||
type Day7Map = BTreeMap<char, Vec<char>>;
|
type Day7Map = BTreeMap<char, Vec<char>>;
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ fn calc_order(steps: &mut Day7Map) -> String {
|
||||||
first_available = *key;
|
first_available = *key;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
let mut final_result = String::from("");
|
let mut final_result = String::from("");
|
||||||
if first_available == '_' {
|
if first_available == '_' {
|
||||||
|
@ -93,9 +93,12 @@ fn main() {
|
||||||
let mut chars = line_str.chars();
|
let mut chars = line_str.chars();
|
||||||
let prereq = chars.nth(5).unwrap();
|
let prereq = chars.nth(5).unwrap();
|
||||||
let target = chars.nth(30).unwrap();
|
let target = chars.nth(30).unwrap();
|
||||||
steps.entry(target).and_modify(|e| e.push(prereq)).or_insert(vec![prereq]);
|
steps
|
||||||
|
.entry(target)
|
||||||
|
.and_modify(|e| e.push(prereq))
|
||||||
|
.or_insert(vec![prereq]);
|
||||||
steps.entry(prereq).or_insert(vec![]);
|
steps.entry(prereq).or_insert(vec![]);
|
||||||
};
|
}
|
||||||
print_map(&steps);
|
print_map(&steps);
|
||||||
let order = calc_order(&mut steps.clone());
|
let order = calc_order(&mut steps.clone());
|
||||||
println!("final order: {}", order);
|
println!("final order: {}", order);
|
||||||
|
|
|
@ -45,10 +45,16 @@ fn calc_node_sum(ints: &mut Vec<i32>) -> i32 {
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let mut line = String::new();
|
let mut line = String::new();
|
||||||
BufReader::new(File::open("input").unwrap()).read_line(&mut line).unwrap();
|
BufReader::new(File::open("input").unwrap())
|
||||||
|
.read_line(&mut line)
|
||||||
|
.unwrap();
|
||||||
let len_withoutcrlf = line.trim_right().len();
|
let len_withoutcrlf = line.trim_right().len();
|
||||||
line.truncate(len_withoutcrlf);
|
line.truncate(len_withoutcrlf);
|
||||||
let ints: Vec<i32> = line.as_str().split(" ").map(|i| i.parse::<i32>().unwrap()).collect();
|
let ints: Vec<i32> = line
|
||||||
|
.as_str()
|
||||||
|
.split(" ")
|
||||||
|
.map(|i| i.parse::<i32>().unwrap())
|
||||||
|
.collect();
|
||||||
let sum = calc_metadata_sum(&mut ints.clone());
|
let sum = calc_metadata_sum(&mut ints.clone());
|
||||||
println!("part 1 sum is {}", sum);
|
println!("part 1 sum is {}", sum);
|
||||||
let sum2 = calc_node_sum(&mut ints.clone());
|
let sum2 = calc_node_sum(&mut ints.clone());
|
||||||
|
|
Loading…
Reference in New Issue