Compare commits
No commits in common. "0b0e9bc0f42527874095687ed44fb9e112167789" and "43ec9c7d2f305d185c87bef47b3b7d1caae152b0" have entirely different histories.
0b0e9bc0f4
...
43ec9c7d2f
@ -1,5 +1,4 @@
|
|||||||
use std::env;
|
use std::env;
|
||||||
use std::cmp::Ordering;
|
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::{BufReader, BufRead};
|
use std::io::{BufReader, BufRead};
|
||||||
|
|
||||||
@ -18,43 +17,40 @@ fn parse_num(s: &[u8]) -> (u64, usize) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Assuming no malformed input
|
// Assuming no malformed input
|
||||||
fn compare(left: &[u8], right: &[u8]) -> Ordering {
|
fn is_in_order(left: &[u8], right: &[u8]) -> bool {
|
||||||
|
//println!(">> {:?}, {:?} -- {:?}", str::from_utf8(left), str::from_utf8(right));
|
||||||
if left.len() == 0 {
|
if left.len() == 0 {
|
||||||
return Ordering::Less;
|
return true;
|
||||||
}
|
}
|
||||||
if right.len() == 0 {
|
if right.len() == 0 {
|
||||||
return Ordering::Greater;
|
return false;
|
||||||
}
|
}
|
||||||
let (l, r) = (left[0], right[0]);
|
let (l, r) = (left[0], right[0]);
|
||||||
if l == b',' && r == b',' {
|
if l == b',' && r == b',' {
|
||||||
compare(&left[1..], &right[1..])
|
is_in_order(&left[1..], &right[1..])
|
||||||
} else if l == b'[' && r == b'[' {
|
} else if l == b'[' && r == b'[' {
|
||||||
compare(&left[1..], &right[1..])
|
is_in_order(&left[1..], &right[1..])
|
||||||
} else if l == b']' && r == b']' {
|
} else if l == b']' && r == b']' {
|
||||||
compare(&left[1..], &right[1..])
|
is_in_order(&left[1..], &right[1..])
|
||||||
} else if l == b']' {
|
} else if l == b']' {
|
||||||
Ordering::Less
|
true
|
||||||
} else if r == b']' {
|
} else if r == b']' {
|
||||||
Ordering::Greater
|
false
|
||||||
} else if l == b'[' {
|
} else if l == b'[' {
|
||||||
let (num, len) = parse_num(right);
|
let (num, len) = parse_num(right);
|
||||||
compare(
|
is_in_order(&left, &[b"[", num.to_string().as_bytes(), b"]", &right[len..]].concat())
|
||||||
&left,
|
|
||||||
&[b"[", num.to_string().as_bytes(), b"]", &right[len..]].concat())
|
|
||||||
} else if r == b'[' {
|
} else if r == b'[' {
|
||||||
let (num, len) = parse_num(left);
|
let (num, len) = parse_num(left);
|
||||||
compare(
|
is_in_order(&[b"[", num.to_string().as_bytes(), b"]", &left[len..]].concat(), &right)
|
||||||
&[b"[", num.to_string().as_bytes(), b"]", &left[len..]].concat(),
|
|
||||||
&right)
|
|
||||||
} else {
|
} else {
|
||||||
let (lnum, llen) = parse_num(left);
|
let (lnum, llen) = parse_num(left);
|
||||||
let (rnum, rlen) = parse_num(right);
|
let (rnum, rlen) = parse_num(right);
|
||||||
if lnum < rnum {
|
if lnum < rnum {
|
||||||
Ordering::Less
|
true
|
||||||
} else if lnum > rnum {
|
} else if lnum > rnum {
|
||||||
Ordering::Greater
|
false
|
||||||
} else {
|
} else {
|
||||||
compare(&left[llen..], &right[rlen..])
|
is_in_order(&left[llen..], &right[rlen..])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,20 +58,17 @@ fn compare(left: &[u8], right: &[u8]) -> Ordering {
|
|||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let file = File::open(&env::args().nth(1).expect("input")).expect("io err");
|
let file = File::open(&env::args().nth(1).expect("input")).expect("io err");
|
||||||
let mut lines: Vec<_> = BufReader::new(file).lines().flatten()
|
let lines: Vec<String> = BufReader::new(file).lines().flatten().collect();
|
||||||
.filter(|line| line != "").collect();
|
// TODO: array_chunks() for lazy iter?
|
||||||
lines.push(String::from("[[2]]"));
|
let blocks: Vec<_> = lines.chunks(3).collect();
|
||||||
lines.push(String::from("[[6]]"));
|
|
||||||
lines.sort_unstable_by(|s1, s2| compare(s1.as_bytes(), s2.as_bytes()));
|
|
||||||
|
|
||||||
let (mut six, mut two): (usize, usize) = (0, 0);
|
let mut sum = 0;
|
||||||
for (i, line) in lines.iter().enumerate() {
|
for (i, block) in blocks.iter().enumerate() {
|
||||||
if line == "[[6]]" {
|
// TODO: return error here instead of assert?
|
||||||
six = i + 1;
|
assert!((block.len() == 3 && block[2] == "") || block.len() == 2);
|
||||||
}
|
if is_in_order(block[0].as_bytes(), block[1].as_bytes()) {
|
||||||
if line == "[[2]]" {
|
sum += i + 1;
|
||||||
two = i + 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
println!("{:?}", six*two);
|
println!("Answer: {:?}", sum);
|
||||||
}
|
}
|
||||||
|
@ -1,74 +0,0 @@
|
|||||||
use std::env;
|
|
||||||
use std::fs::File;
|
|
||||||
use std::io::{BufReader, BufRead};
|
|
||||||
|
|
||||||
fn parse_num(s: &[u8]) -> (u64, usize) {
|
|
||||||
let mut num: u64 = 0;
|
|
||||||
let mut len = 0;
|
|
||||||
for i in 0..s.len() {
|
|
||||||
if s[i].is_ascii_digit() {
|
|
||||||
num = num*10 + (s[i] as u64 - '0' as u64);
|
|
||||||
len += 1;
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
(num, len)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Assuming no malformed input
|
|
||||||
fn is_in_order(left: &[u8], right: &[u8]) -> bool {
|
|
||||||
//println!(">> {:?}, {:?} -- {:?}", str::from_utf8(left), str::from_utf8(right));
|
|
||||||
if left.len() == 0 {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if right.len() == 0 {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
let (l, r) = (left[0], right[0]);
|
|
||||||
if l == b',' && r == b',' {
|
|
||||||
is_in_order(&left[1..], &right[1..])
|
|
||||||
} else if l == b'[' && r == b'[' {
|
|
||||||
is_in_order(&left[1..], &right[1..])
|
|
||||||
} else if l == b']' && r == b']' {
|
|
||||||
is_in_order(&left[1..], &right[1..])
|
|
||||||
} else if l == b']' {
|
|
||||||
true
|
|
||||||
} else if r == b']' {
|
|
||||||
false
|
|
||||||
} else if l == b'[' {
|
|
||||||
let (num, len) = parse_num(right);
|
|
||||||
is_in_order(&left, &[b"[", num.to_string().as_bytes(), b"]", &right[len..]].concat())
|
|
||||||
} else if r == b'[' {
|
|
||||||
let (num, len) = parse_num(left);
|
|
||||||
is_in_order(&[b"[", num.to_string().as_bytes(), b"]", &left[len..]].concat(), &right)
|
|
||||||
} else {
|
|
||||||
let (lnum, llen) = parse_num(left);
|
|
||||||
let (rnum, rlen) = parse_num(right);
|
|
||||||
if lnum < rnum {
|
|
||||||
true
|
|
||||||
} else if lnum > rnum {
|
|
||||||
false
|
|
||||||
} else {
|
|
||||||
is_in_order(&left[llen..], &right[rlen..])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let file = File::open(&env::args().nth(1).expect("input")).expect("io err");
|
|
||||||
let lines: Vec<String> = BufReader::new(file).lines().flatten().collect();
|
|
||||||
// TODO: array_chunks() for lazy iter?
|
|
||||||
let blocks: Vec<_> = lines.chunks(3).collect();
|
|
||||||
|
|
||||||
let mut sum = 0;
|
|
||||||
for (i, block) in blocks.iter().enumerate() {
|
|
||||||
// TODO: return error here instead of assert?
|
|
||||||
assert!((block.len() == 3 && block[2] == "") || block.len() == 2);
|
|
||||||
if is_in_order(block[0].as_bytes(), block[1].as_bytes()) {
|
|
||||||
sum += i + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
println!("Answer: {:?}", sum);
|
|
||||||
}
|
|
7
day14/Cargo.lock
generated
7
day14/Cargo.lock
generated
@ -1,7 +0,0 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
|
||||||
# It is not intended for manual editing.
|
|
||||||
version = 3
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "day14"
|
|
||||||
version = "0.1.0"
|
|
@ -1,8 +0,0 @@
|
|||||||
[package]
|
|
||||||
name = "day14"
|
|
||||||
version = "0.1.0"
|
|
||||||
edition = "2021"
|
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
||||||
|
|
||||||
[dependencies]
|
|
151
day14/input.txt
151
day14/input.txt
@ -1,151 +0,0 @@
|
|||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
481,92 -> 481,96 -> 476,96 -> 476,99 -> 487,99 -> 487,96 -> 485,96 -> 485,92
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
470,76 -> 470,80 -> 466,80 -> 466,84 -> 481,84 -> 481,80 -> 474,80 -> 474,76
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
495,155 -> 499,155
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
500,138 -> 505,138
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
481,92 -> 481,96 -> 476,96 -> 476,99 -> 487,99 -> 487,96 -> 485,96 -> 485,92
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
489,115 -> 489,119 -> 481,119 -> 481,126 -> 494,126 -> 494,119 -> 493,119 -> 493,115
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
485,112 -> 485,102 -> 485,112 -> 487,112 -> 487,111 -> 487,112 -> 489,112 -> 489,105 -> 489,112
|
|
||||||
481,92 -> 481,96 -> 476,96 -> 476,99 -> 487,99 -> 487,96 -> 485,96 -> 485,92
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
470,49 -> 470,53 -> 468,53 -> 468,60 -> 477,60 -> 477,53 -> 476,53 -> 476,49
|
|
||||||
483,160 -> 487,160
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
491,131 -> 502,131 -> 502,130
|
|
||||||
475,88 -> 475,89 -> 483,89 -> 483,88
|
|
||||||
483,164 -> 487,164
|
|
||||||
498,147 -> 503,147
|
|
||||||
505,147 -> 510,147
|
|
||||||
485,112 -> 485,102 -> 485,112 -> 487,112 -> 487,111 -> 487,112 -> 489,112 -> 489,105 -> 489,112
|
|
||||||
516,150 -> 521,150
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
496,13 -> 501,13
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
512,147 -> 517,147
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
497,141 -> 502,141
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
480,162 -> 484,162
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
485,112 -> 485,102 -> 485,112 -> 487,112 -> 487,111 -> 487,112 -> 489,112 -> 489,105 -> 489,112
|
|
||||||
489,155 -> 493,155
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
498,157 -> 502,157
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
491,147 -> 496,147
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
489,115 -> 489,119 -> 481,119 -> 481,126 -> 494,126 -> 494,119 -> 493,119 -> 493,115
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
470,76 -> 470,80 -> 466,80 -> 466,84 -> 481,84 -> 481,80 -> 474,80 -> 474,76
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
475,88 -> 475,89 -> 483,89 -> 483,88
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
486,162 -> 490,162
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
508,144 -> 513,144
|
|
||||||
481,92 -> 481,96 -> 476,96 -> 476,99 -> 487,99 -> 487,96 -> 485,96 -> 485,92
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
470,49 -> 470,53 -> 468,53 -> 468,60 -> 477,60 -> 477,53 -> 476,53 -> 476,49
|
|
||||||
477,164 -> 481,164
|
|
||||||
485,112 -> 485,102 -> 485,112 -> 487,112 -> 487,111 -> 487,112 -> 489,112 -> 489,105 -> 489,112
|
|
||||||
504,141 -> 509,141
|
|
||||||
489,164 -> 493,164
|
|
||||||
480,42 -> 485,42
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
470,49 -> 470,53 -> 468,53 -> 468,60 -> 477,60 -> 477,53 -> 476,53 -> 476,49
|
|
||||||
485,112 -> 485,102 -> 485,112 -> 487,112 -> 487,111 -> 487,112 -> 489,112 -> 489,105 -> 489,112
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
489,115 -> 489,119 -> 481,119 -> 481,126 -> 494,126 -> 494,119 -> 493,119 -> 493,115
|
|
||||||
486,157 -> 490,157
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
470,76 -> 470,80 -> 466,80 -> 466,84 -> 481,84 -> 481,80 -> 474,80 -> 474,76
|
|
||||||
485,112 -> 485,102 -> 485,112 -> 487,112 -> 487,111 -> 487,112 -> 489,112 -> 489,105 -> 489,112
|
|
||||||
501,144 -> 506,144
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
485,112 -> 485,102 -> 485,112 -> 487,112 -> 487,111 -> 487,112 -> 489,112 -> 489,105 -> 489,112
|
|
||||||
470,76 -> 470,80 -> 466,80 -> 466,84 -> 481,84 -> 481,80 -> 474,80 -> 474,76
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
492,166 -> 496,166
|
|
||||||
509,150 -> 514,150
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
480,134 -> 480,135 -> 500,135 -> 500,134
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
486,166 -> 490,166
|
|
||||||
494,144 -> 499,144
|
|
||||||
481,92 -> 481,96 -> 476,96 -> 476,99 -> 487,99 -> 487,96 -> 485,96 -> 485,92
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
480,134 -> 480,135 -> 500,135 -> 500,134
|
|
||||||
481,46 -> 486,46
|
|
||||||
477,44 -> 482,44
|
|
||||||
470,49 -> 470,53 -> 468,53 -> 468,60 -> 477,60 -> 477,53 -> 476,53 -> 476,49
|
|
||||||
491,131 -> 502,131 -> 502,130
|
|
||||||
492,157 -> 496,157
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
488,150 -> 493,150
|
|
||||||
481,92 -> 481,96 -> 476,96 -> 476,99 -> 487,99 -> 487,96 -> 485,96 -> 485,92
|
|
||||||
474,46 -> 479,46
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
489,115 -> 489,119 -> 481,119 -> 481,126 -> 494,126 -> 494,119 -> 493,119 -> 493,115
|
|
||||||
460,73 -> 460,70 -> 460,73 -> 462,73 -> 462,69 -> 462,73 -> 464,73 -> 464,65 -> 464,73 -> 466,73 -> 466,65 -> 466,73 -> 468,73 -> 468,64 -> 468,73 -> 470,73 -> 470,68 -> 470,73 -> 472,73 -> 472,68 -> 472,73
|
|
||||||
489,115 -> 489,119 -> 481,119 -> 481,126 -> 494,126 -> 494,119 -> 493,119 -> 493,115
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
470,76 -> 470,80 -> 466,80 -> 466,84 -> 481,84 -> 481,80 -> 474,80 -> 474,76
|
|
||||||
488,46 -> 493,46
|
|
||||||
495,150 -> 500,150
|
|
||||||
474,166 -> 478,166
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
484,44 -> 489,44
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
484,39 -> 484,38 -> 484,39 -> 486,39 -> 486,33 -> 486,39 -> 488,39 -> 488,30 -> 488,39 -> 490,39 -> 490,35 -> 490,39 -> 492,39 -> 492,38 -> 492,39 -> 494,39 -> 494,30 -> 494,39 -> 496,39 -> 496,36 -> 496,39
|
|
||||||
489,115 -> 489,119 -> 481,119 -> 481,126 -> 494,126 -> 494,119 -> 493,119 -> 493,115
|
|
||||||
481,92 -> 481,96 -> 476,96 -> 476,99 -> 487,99 -> 487,96 -> 485,96 -> 485,92
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
489,115 -> 489,119 -> 481,119 -> 481,126 -> 494,126 -> 494,119 -> 493,119 -> 493,115
|
|
||||||
492,153 -> 496,153
|
|
||||||
502,150 -> 507,150
|
|
||||||
470,49 -> 470,53 -> 468,53 -> 468,60 -> 477,60 -> 477,53 -> 476,53 -> 476,49
|
|
||||||
475,88 -> 475,89 -> 483,89 -> 483,88
|
|
||||||
480,134 -> 480,135 -> 500,135 -> 500,134
|
|
||||||
470,76 -> 470,80 -> 466,80 -> 466,84 -> 481,84 -> 481,80 -> 474,80 -> 474,76
|
|
||||||
492,26 -> 492,17 -> 492,26 -> 494,26 -> 494,16 -> 494,26 -> 496,26 -> 496,22 -> 496,26 -> 498,26 -> 498,17 -> 498,26 -> 500,26 -> 500,20 -> 500,26 -> 502,26 -> 502,25 -> 502,26 -> 504,26 -> 504,23 -> 504,26 -> 506,26 -> 506,21 -> 506,26 -> 508,26 -> 508,16 -> 508,26 -> 510,26 -> 510,24 -> 510,26
|
|
||||||
480,166 -> 484,166
|
|
||||||
470,49 -> 470,53 -> 468,53 -> 468,60 -> 477,60 -> 477,53 -> 476,53 -> 476,49
|
|
||||||
470,76 -> 470,80 -> 466,80 -> 466,84 -> 481,84 -> 481,80 -> 474,80 -> 474,76
|
|
||||||
485,112 -> 485,102 -> 485,112 -> 487,112 -> 487,111 -> 487,112 -> 489,112 -> 489,105 -> 489,112
|
|
||||||
470,49 -> 470,53 -> 468,53 -> 468,60 -> 477,60 -> 477,53 -> 476,53 -> 476,49
|
|
@ -1,105 +0,0 @@
|
|||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// part2 hack here
|
|
||||||
minx = 0;
|
|
||||||
maxx = 1000;
|
|
||||||
maxy = maxy + 2;
|
|
||||||
lists.push(vec![(minx, maxy), (maxx, maxy)]);
|
|
||||||
|
|
||||||
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 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;
|
|
||||||
if rockx == 500 && rocky == 0 {
|
|
||||||
break 'map;
|
|
||||||
}
|
|
||||||
//print_map(&map);
|
|
||||||
break 'rock;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print_map(&map);
|
|
||||||
println!("{:?}", total);
|
|
||||||
}
|
|
@ -1,97 +0,0 @@
|
|||||||
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);
|
|
||||||
}
|
|
@ -1,2 +0,0 @@
|
|||||||
498,4 -> 498,6 -> 496,6
|
|
||||||
503,4 -> 502,4 -> 502,9 -> 494,9
|
|
Loading…
Reference in New Issue
Block a user