cargo fmt
parent
c164070d19
commit
28579c7487
|
@ -11,7 +11,7 @@ struct Point {
|
||||||
x: i32,
|
x: i32,
|
||||||
y: i32,
|
y: i32,
|
||||||
x_velocity: i32,
|
x_velocity: i32,
|
||||||
y_velocity: i32
|
y_velocity: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bounding_box(points: &Vec<Point>) -> (i32, i32, i32, i32) {
|
fn bounding_box(points: &Vec<Point>) -> (i32, i32, i32, i32) {
|
||||||
|
@ -21,10 +21,18 @@ fn bounding_box(points: &Vec<Point>) -> (i32, i32, i32, i32) {
|
||||||
let mut max_y = std::i32::MIN;
|
let mut max_y = std::i32::MIN;
|
||||||
|
|
||||||
for p in points.iter() {
|
for p in points.iter() {
|
||||||
if min_x > p.x { min_x = p.x };
|
if min_x > p.x {
|
||||||
if min_y > p.y { min_y = p.y };
|
min_x = p.x
|
||||||
if max_x < p.x { max_x = p.x };
|
};
|
||||||
if max_y < p.y { max_y = p.y };
|
if min_y > p.y {
|
||||||
|
min_y = p.y
|
||||||
|
};
|
||||||
|
if max_x < p.x {
|
||||||
|
max_x = p.x
|
||||||
|
};
|
||||||
|
if max_y < p.y {
|
||||||
|
max_y = p.y
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
(min_x, min_y, max_x, max_y)
|
(min_x, min_y, max_x, max_y)
|
||||||
|
@ -55,7 +63,10 @@ fn tick(points: &mut Vec<Point>) -> i32 {
|
||||||
}
|
}
|
||||||
|
|
||||||
let (min_x, min_y, max_x, max_y) = bounding_box(points);
|
let (min_x, min_y, max_x, max_y) = bounding_box(points);
|
||||||
println!("final bounding box: ({}, {}) ({}, {})", min_x, min_y, max_x, max_y);
|
println!(
|
||||||
|
"final bounding box: ({}, {}) ({}, {})",
|
||||||
|
min_x, min_y, max_x, max_y
|
||||||
|
);
|
||||||
let mut final_set = HashSet::with_capacity(points.len());
|
let mut final_set = HashSet::with_capacity(points.len());
|
||||||
for p in points.iter() {
|
for p in points.iter() {
|
||||||
final_set.insert((p.x, p.y));
|
final_set.insert((p.x, p.y));
|
||||||
|
@ -81,7 +92,8 @@ fn main() {
|
||||||
.map(|line| line.unwrap())
|
.map(|line| line.unwrap())
|
||||||
.collect();
|
.collect();
|
||||||
let mut points: Vec<Point> = Vec::with_capacity(lines.len());
|
let mut points: Vec<Point> = Vec::with_capacity(lines.len());
|
||||||
let re = Regex::new(r"^position=<([-| ]\d+), ([-| ]\d+)> velocity=<([-| ]\d), ([-| ]\d)>$").unwrap();
|
let re =
|
||||||
|
Regex::new(r"^position=<([-| ]\d+), ([-| ]\d+)> velocity=<([-| ]\d), ([-| ]\d)>$").unwrap();
|
||||||
for line in lines.iter() {
|
for line in lines.iter() {
|
||||||
if re.is_match(line) {
|
if re.is_match(line) {
|
||||||
let cap = re.captures(line).unwrap();
|
let cap = re.captures(line).unwrap();
|
||||||
|
@ -93,7 +105,7 @@ fn main() {
|
||||||
x,
|
x,
|
||||||
y,
|
y,
|
||||||
x_velocity,
|
x_velocity,
|
||||||
y_velocity
|
y_velocity,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,9 @@ fn find_variable_max_sum(map: &[[i32; 300]; 300]) -> (usize, usize, i32, usize)
|
||||||
let mut sum = 0;
|
let mut sum = 0;
|
||||||
for i in 1..=300 {
|
for i in 1..=300 {
|
||||||
let (new_x, new_y, new_sum) = find_max_sum(map, i);
|
let (new_x, new_y, new_sum) = find_max_sum(map, i);
|
||||||
if new_sum == 0 { break; }
|
if new_sum == 0 {
|
||||||
|
break;
|
||||||
|
}
|
||||||
if new_sum > sum {
|
if new_sum > sum {
|
||||||
size = i;
|
size = i;
|
||||||
sum = new_sum;
|
sum = new_sum;
|
||||||
|
@ -78,8 +80,14 @@ fn main() {
|
||||||
|
|
||||||
let map = calc_map_from_serial_number(serial_number);
|
let map = calc_map_from_serial_number(serial_number);
|
||||||
let (x, y, sum) = find_max_sum(&map, 3);
|
let (x, y, sum) = find_max_sum(&map, 3);
|
||||||
println!("maximum sum coordinate of ({}, {}) with sum of {}", x, y, sum);
|
println!(
|
||||||
|
"maximum sum coordinate of ({}, {}) with sum of {}",
|
||||||
|
x, y, sum
|
||||||
|
);
|
||||||
|
|
||||||
let (x, y, sum, size) = find_variable_max_sum(&map);
|
let (x, y, sum, size) = find_variable_max_sum(&map);
|
||||||
println!("maximum variable sum found at ({}, {}) sum {} with size of {}", x, y, sum, size);
|
println!(
|
||||||
|
"maximum variable sum found at ({}, {}) sum {} with size of {}",
|
||||||
|
x, y, sum, size
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,11 @@ fn get_score(state: &[char; MAP_SIZE]) -> i64 {
|
||||||
score
|
score
|
||||||
}
|
}
|
||||||
|
|
||||||
fn run_game(initial_state: String, states: HashMap<String, char>, generations: i64) -> (i64, [i64; MAP_SIZE]) {
|
fn run_game(
|
||||||
|
initial_state: String,
|
||||||
|
states: HashMap<String, char>,
|
||||||
|
generations: i64,
|
||||||
|
) -> (i64, [i64; MAP_SIZE]) {
|
||||||
let mut last_state = ['.'; MAP_SIZE];
|
let mut last_state = ['.'; MAP_SIZE];
|
||||||
for (i, c) in initial_state.char_indices() {
|
for (i, c) in initial_state.char_indices() {
|
||||||
if c == '#' {
|
if c == '#' {
|
||||||
|
@ -30,7 +34,7 @@ fn run_game(initial_state: String, states: HashMap<String, char>, generations: i
|
||||||
let mut next_state = ['.'; MAP_SIZE];
|
let mut next_state = ['.'; MAP_SIZE];
|
||||||
for i in 2..(MAP_SIZE - 2) {
|
for i in 2..(MAP_SIZE - 2) {
|
||||||
let mut key = String::new();
|
let mut key = String::new();
|
||||||
for j in i-2..=i+2 {
|
for j in i - 2..=i + 2 {
|
||||||
key.push(last_state[j]);
|
key.push(last_state[j]);
|
||||||
}
|
}
|
||||||
if let Some(dest_state) = states.get(&key) {
|
if let Some(dest_state) = states.get(&key) {
|
||||||
|
@ -53,7 +57,14 @@ fn find_big_score(initial_state: String, states: HashMap<String, char>, iteratio
|
||||||
if diff1 == diff2 {
|
if diff1 == diff2 {
|
||||||
if diff2 == diff3 {
|
if diff2 == diff3 {
|
||||||
let sum = ((iterations - i as i64 - 1) * diff1) + scores[i];
|
let sum = ((iterations - i as i64 - 1) * diff1) + scores[i];
|
||||||
println!("({} - {}) * {} + {} = {}", iterations - 1, i as i64, diff1, scores[i], sum);
|
println!(
|
||||||
|
"({} - {}) * {} + {} = {}",
|
||||||
|
iterations - 1,
|
||||||
|
i as i64,
|
||||||
|
diff1,
|
||||||
|
scores[i],
|
||||||
|
sum
|
||||||
|
);
|
||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ struct Cart {
|
||||||
x_delta: i8,
|
x_delta: i8,
|
||||||
y_delta: i8,
|
y_delta: i8,
|
||||||
intersection: u8,
|
intersection: u8,
|
||||||
removed: bool
|
removed: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Cart {
|
impl Cart {
|
||||||
|
@ -60,7 +60,11 @@ impl Cart {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn find_collision(map: &[[char; MAP_SIZE]; MAP_SIZE], carts: &mut Vec<Cart>, find_last: bool) -> (usize, usize, u32) {
|
fn find_collision(
|
||||||
|
map: &[[char; MAP_SIZE]; MAP_SIZE],
|
||||||
|
carts: &mut Vec<Cart>,
|
||||||
|
find_last: bool,
|
||||||
|
) -> (usize, usize, u32) {
|
||||||
let mut ticks = 0;
|
let mut ticks = 0;
|
||||||
let cart_len = carts.len();
|
let cart_len = carts.len();
|
||||||
loop {
|
loop {
|
||||||
|
@ -97,20 +101,20 @@ fn find_collision(map: &[[char; MAP_SIZE]; MAP_SIZE], carts: &mut Vec<Cart>, fin
|
||||||
} else {
|
} else {
|
||||||
carts[i].turn_left();
|
carts[i].turn_left();
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
'\\' => {
|
'\\' => {
|
||||||
if carts[i].x_delta == 0 {
|
if carts[i].x_delta == 0 {
|
||||||
carts[i].turn_left();
|
carts[i].turn_left();
|
||||||
} else {
|
} else {
|
||||||
carts[i].turn_right();
|
carts[i].turn_right();
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
'+' => {
|
'+' => {
|
||||||
carts[i].change_direction_at_intersection();
|
carts[i].change_direction_at_intersection();
|
||||||
},
|
}
|
||||||
' ' => {
|
' ' => {
|
||||||
panic!("off the rails!");
|
panic!("off the rails!");
|
||||||
},
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
carts[i].x = next_x;
|
carts[i].x = next_x;
|
||||||
|
@ -151,7 +155,7 @@ fn main() {
|
||||||
x_delta: 0,
|
x_delta: 0,
|
||||||
y_delta: 1,
|
y_delta: 1,
|
||||||
intersection: 0,
|
intersection: 0,
|
||||||
removed: false
|
removed: false,
|
||||||
});
|
});
|
||||||
map[j][line_number] = '|';
|
map[j][line_number] = '|';
|
||||||
} else if c == '^' {
|
} else if c == '^' {
|
||||||
|
@ -161,7 +165,7 @@ fn main() {
|
||||||
x_delta: 0,
|
x_delta: 0,
|
||||||
y_delta: -1,
|
y_delta: -1,
|
||||||
intersection: 0,
|
intersection: 0,
|
||||||
removed: false
|
removed: false,
|
||||||
});
|
});
|
||||||
map[j][line_number] = '|';
|
map[j][line_number] = '|';
|
||||||
} else if c == '<' {
|
} else if c == '<' {
|
||||||
|
@ -171,7 +175,7 @@ fn main() {
|
||||||
x_delta: -1,
|
x_delta: -1,
|
||||||
y_delta: 0,
|
y_delta: 0,
|
||||||
intersection: 0,
|
intersection: 0,
|
||||||
removed: false
|
removed: false,
|
||||||
});
|
});
|
||||||
map[j][line_number] = '-';
|
map[j][line_number] = '-';
|
||||||
} else if c == '>' {
|
} else if c == '>' {
|
||||||
|
@ -181,7 +185,7 @@ fn main() {
|
||||||
x_delta: 1,
|
x_delta: 1,
|
||||||
y_delta: 0,
|
y_delta: 0,
|
||||||
intersection: 0,
|
intersection: 0,
|
||||||
removed: false
|
removed: false,
|
||||||
});
|
});
|
||||||
map[j][line_number] = '-';
|
map[j][line_number] = '-';
|
||||||
} else {
|
} else {
|
||||||
|
@ -193,5 +197,8 @@ fn main() {
|
||||||
let (x, y, ticks) = find_collision(&map, &mut carts.clone(), false);
|
let (x, y, ticks) = find_collision(&map, &mut carts.clone(), false);
|
||||||
println!("found collision at {},{} after {} ticks", x, y, ticks);
|
println!("found collision at {},{} after {} ticks", x, y, ticks);
|
||||||
let (x, y, ticks) = find_collision(&map, &mut carts.clone(), true);
|
let (x, y, ticks) = find_collision(&map, &mut carts.clone(), true);
|
||||||
println!("found last remaining cart at {},{} after {} ticks", x, y, ticks);
|
println!(
|
||||||
|
"found last remaining cart at {},{} after {} ticks",
|
||||||
|
x, y, ticks
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,6 @@ fn mutate_chocolate(scores: &mut Vec<u8>, recipes: i32) -> (String, usize) {
|
||||||
for s in scores.iter() {
|
for s in scores.iter() {
|
||||||
score_str.push((s + 48) as char);
|
score_str.push((s + 48) as char);
|
||||||
}
|
}
|
||||||
//println!("{}", score_str);
|
|
||||||
let recipe_str = format!("{}", recipes);
|
let recipe_str = format!("{}", recipes);
|
||||||
let recipe_index = score_str.find(recipe_str.as_str()).unwrap();
|
let recipe_index = score_str.find(recipe_str.as_str()).unwrap();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue