d14p2
This commit is contained in:
parent
c7a6c47f0e
commit
0b0e9bc0f4
@ -48,6 +48,13 @@ fn main() {
|
|||||||
}
|
}
|
||||||
lists.push(list);
|
lists.push(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// part2 hack here
|
||||||
|
minx = 0;
|
||||||
|
maxx = 1000;
|
||||||
|
maxy = maxy + 2;
|
||||||
|
lists.push(vec![(minx, maxy), (maxx, maxy)]);
|
||||||
|
|
||||||
println!("{:?} {:?} {:?} {:?}", minx, miny, maxx, maxy);
|
println!("{:?} {:?} {:?} {:?}", minx, miny, maxx, maxy);
|
||||||
let mut map: Vec<Vec<char>> =
|
let mut map: Vec<Vec<char>> =
|
||||||
vec![vec!['.'; maxx - minx + 3]; maxy + 1];
|
vec![vec!['.'; maxx - minx + 3]; maxy + 1];
|
||||||
@ -74,9 +81,7 @@ fn main() {
|
|||||||
let (mut rockx, mut rocky) = (500, 0);
|
let (mut rockx, mut rocky) = (500, 0);
|
||||||
'rock: loop {
|
'rock: loop {
|
||||||
//println!("{:?}, {:?}", rockx, rocky);
|
//println!("{:?}, {:?}", rockx, rocky);
|
||||||
if rockx < minx || rockx > maxx || rocky == maxy {
|
if map[rocky + 1][rockx + 1 - minx] == '.' {
|
||||||
break 'map;
|
|
||||||
} else if map[rocky + 1][rockx + 1 - minx] == '.' {
|
|
||||||
rocky = rocky + 1;
|
rocky = rocky + 1;
|
||||||
} else if map[rocky + 1][rockx + 1 - minx - 1] == '.' {
|
} else if map[rocky + 1][rockx + 1 - minx - 1] == '.' {
|
||||||
rocky = rocky + 1;
|
rocky = rocky + 1;
|
||||||
@ -87,6 +92,9 @@ fn main() {
|
|||||||
} else {
|
} else {
|
||||||
map[rocky][rockx - minx + 1] = 'o';
|
map[rocky][rockx - minx + 1] = 'o';
|
||||||
total += 1;
|
total += 1;
|
||||||
|
if rockx == 500 && rocky == 0 {
|
||||||
|
break 'map;
|
||||||
|
}
|
||||||
//print_map(&map);
|
//print_map(&map);
|
||||||
break 'rock;
|
break 'rock;
|
||||||
}
|
}
|
||||||
|
97
day14/src/main1.rs
Normal file
97
day14/src/main1.rs
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
use std::env;
|
||||||
|
use std::fs::File;
|
||||||
|
use std::io::{BufReader, BufRead};
|
||||||
|
use std::cmp::{min, max};
|
||||||
|
|
||||||
|
fn parse_num(s: &[u8]) -> (usize, usize) {
|
||||||
|
let mut num: usize = 0;
|
||||||
|
let mut len = 0;
|
||||||
|
for i in 0..s.len() {
|
||||||
|
if s[i].is_ascii_digit() {
|
||||||
|
num = num*10 + (s[i] as usize - '0' as usize);
|
||||||
|
len += 1;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
(num, len)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn print_map(map: &Vec<Vec<char>>) {
|
||||||
|
for row in map {
|
||||||
|
let s: String = row.iter().collect();
|
||||||
|
println!("{}", s);
|
||||||
|
}
|
||||||
|
println!("");
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let file = File::open(&env::args().nth(1).expect("input")).expect("io err");
|
||||||
|
let lines = BufReader::new(file).lines();
|
||||||
|
let (mut minx, mut miny, mut maxx, mut maxy) =
|
||||||
|
(usize::MAX, usize::MAX, 0, 0);
|
||||||
|
let mut lists: Vec<Vec<(usize, usize)>> = Vec::new();
|
||||||
|
|
||||||
|
for line in lines.flatten() {
|
||||||
|
let l_bytes = line.as_bytes();
|
||||||
|
let mut cursor = 0;
|
||||||
|
let mut list: Vec<(usize, usize)> = Vec::new();
|
||||||
|
while cursor < l_bytes.len() {
|
||||||
|
let (x, lenx) = parse_num(&l_bytes[cursor..]);
|
||||||
|
let (y, leny) = parse_num(&l_bytes[cursor + lenx + 1..]);
|
||||||
|
list.push((x, y));
|
||||||
|
minx = if x < minx {x} else {minx};
|
||||||
|
miny = if y < miny {y} else {miny};
|
||||||
|
maxx = if x > maxx {x} else {maxx};
|
||||||
|
maxy = if y > maxy {y} else {maxy};
|
||||||
|
cursor = cursor + lenx + 1 + leny + 4;
|
||||||
|
}
|
||||||
|
lists.push(list);
|
||||||
|
}
|
||||||
|
println!("{:?} {:?} {:?} {:?}", minx, miny, maxx, maxy);
|
||||||
|
let mut map: Vec<Vec<char>> =
|
||||||
|
vec![vec!['.'; maxx - minx + 3]; maxy + 1];
|
||||||
|
for list in lists {
|
||||||
|
let (mut xprev, mut yprev) = &list[0];
|
||||||
|
for (x, y) in &list[1..] {
|
||||||
|
if *x == xprev {
|
||||||
|
for ty in *min(y, &yprev)..=*max(y, &yprev) {
|
||||||
|
map[ty][*x - minx + 1] = '#';
|
||||||
|
}
|
||||||
|
} else if *y == yprev {
|
||||||
|
for tx in *min(x, &xprev)..=*max(x, &xprev) {
|
||||||
|
map[*y][tx - minx + 1] = '#';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xprev = *x;
|
||||||
|
yprev = *y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print_map(&map);
|
||||||
|
|
||||||
|
let mut total = 0;
|
||||||
|
'map: loop {
|
||||||
|
let (mut rockx, mut rocky) = (500, 0);
|
||||||
|
'rock: loop {
|
||||||
|
//println!("{:?}, {:?}", rockx, rocky);
|
||||||
|
if rockx < minx || rockx > maxx || rocky == maxy {
|
||||||
|
break 'map;
|
||||||
|
} else if map[rocky + 1][rockx + 1 - minx] == '.' {
|
||||||
|
rocky = rocky + 1;
|
||||||
|
} else if map[rocky + 1][rockx + 1 - minx - 1] == '.' {
|
||||||
|
rocky = rocky + 1;
|
||||||
|
rockx = rockx - 1;
|
||||||
|
} else if map[rocky + 1][rockx + 1 - minx + 1] == '.' {
|
||||||
|
rocky = rocky + 1;
|
||||||
|
rockx = rockx + 1;
|
||||||
|
} else {
|
||||||
|
map[rocky][rockx - minx + 1] = 'o';
|
||||||
|
total += 1;
|
||||||
|
//print_map(&map);
|
||||||
|
break 'rock;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print_map(&map);
|
||||||
|
println!("{:?}", total);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user