commit
c51433804e
5 changed files with 1236 additions and 0 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
@ -0,0 +1,44 @@ |
|||||
|
pub struct Data { |
||||
|
floors : Vec<i32>, |
||||
|
} |
||||
|
|
||||
|
impl Data { |
||||
|
pub fn new() -> Data { |
||||
|
Data { |
||||
|
floors : Vec::new(), |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
pub fn parse(&mut self, input: String) { |
||||
|
let mut floor = 0; |
||||
|
for c in input.chars() { |
||||
|
match c { |
||||
|
'(' => { |
||||
|
floor += 1; |
||||
|
self.floors.push(floor); |
||||
|
}, |
||||
|
')' => { |
||||
|
floor -= 1; |
||||
|
self.floors.push(floor); |
||||
|
}, |
||||
|
|
||||
|
_ => (), |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
pub fn floor(&mut self) -> i32 { |
||||
|
match self.floors.last() { |
||||
|
None => 0, |
||||
|
Some(val) => *val, |
||||
|
} |
||||
|
} |
||||
|
pub fn basement(&mut self) -> i32 { |
||||
|
for (i,_val) in self.floors.clone().into_iter().enumerate().filter(|&(_,_val)| _val == -1) { |
||||
|
return 1 + i as i32; |
||||
|
} |
||||
|
0 |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
@ -0,0 +1,79 @@ |
|||||
|
pub struct Data { |
||||
|
boxes: Vec<Box>, |
||||
|
} |
||||
|
|
||||
|
impl Data { |
||||
|
pub fn new() -> Data { |
||||
|
Data { |
||||
|
boxes : Vec::new(), |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
pub fn parse(&mut self, input: String) { |
||||
|
for s in input.split_whitespace() { |
||||
|
let data: Vec<&str> = s.split('x').collect(); |
||||
|
if data.len() == 3 { |
||||
|
self.boxes.push(Box { |
||||
|
l: match data[0].parse::<i32>() { |
||||
|
Ok(val) => val, |
||||
|
Err(msg) => { |
||||
|
println!("{}", msg); |
||||
|
0 |
||||
|
} |
||||
|
}, |
||||
|
w: match data[1].parse::<i32>() { |
||||
|
Ok(val) => val, |
||||
|
Err(msg) => { |
||||
|
println!("{}", msg); |
||||
|
0 |
||||
|
} |
||||
|
}, |
||||
|
h: match data[2].parse::<i32>() { |
||||
|
Ok(val) => val, |
||||
|
Err(msg) => { |
||||
|
println!("{}", msg); |
||||
|
0 |
||||
|
} |
||||
|
}, |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
pub fn paper(&mut self) -> i32 { |
||||
|
let mut sum = 0; |
||||
|
for b in &self.boxes { |
||||
|
let mut squares = [b.l*b.w, b.w*b.h, b.h*b.l]; |
||||
|
squares.sort(); |
||||
|
sum += 3*squares[0] + 2*squares[1] + 2*squares[2]; |
||||
|
} |
||||
|
sum |
||||
|
} |
||||
|
|
||||
|
pub fn ribbon(&mut self) -> i32 { |
||||
|
let mut sum = 0; |
||||
|
for b in &self.boxes { |
||||
|
let mut squares = [b.l+b.w, b.w+b.h, b.h+b.l]; |
||||
|
squares.sort(); |
||||
|
sum += 2*squares[0] + b.w*b.l*b.h; |
||||
|
} |
||||
|
sum |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
struct Box { |
||||
|
l: i32, |
||||
|
w: i32, |
||||
|
h: i32, |
||||
|
} |
||||
|
|
||||
|
impl Box { |
||||
|
pub fn new() -> Box { |
||||
|
Box { |
||||
|
l: 0, |
||||
|
w: 0, |
||||
|
h: 0, |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,112 @@ |
|||||
|
use super::*; |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_1() { |
||||
|
let mut input = String::from("(())"); |
||||
|
let mut day1 = day1::Data::new(); |
||||
|
day1.parse(input); |
||||
|
let mut res = day1.floor(); |
||||
|
assert_eq!(res, 0); |
||||
|
|
||||
|
input = String::from("()()"); |
||||
|
day1 = day1::Data::new(); |
||||
|
day1.parse(input); |
||||
|
res = day1.floor(); |
||||
|
assert_eq!(res, 0); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_2() { |
||||
|
let mut input = String::from("((("); |
||||
|
let mut day1 = day1::Data::new(); |
||||
|
day1.parse(input); |
||||
|
let mut res = day1.floor(); |
||||
|
assert_eq!(res, 3); |
||||
|
|
||||
|
input = String::from("(()(()("); |
||||
|
day1 = day1::Data::new(); |
||||
|
day1.parse(input); |
||||
|
res = day1.floor(); |
||||
|
assert_eq!(res, 3); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_3() { |
||||
|
let mut input = String::from("))((((("); |
||||
|
let mut day1 = day1::Data::new(); |
||||
|
day1.parse(input); |
||||
|
let res = day1.floor(); |
||||
|
assert_eq!(res, 3); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_4() { |
||||
|
let mut input = String::from("())"); |
||||
|
let mut day1 = day1::Data::new(); |
||||
|
day1.parse(input); |
||||
|
let mut res = day1.floor(); |
||||
|
assert_eq!(res, -1); |
||||
|
|
||||
|
input = String::from("))("); |
||||
|
day1 = day1::Data::new(); |
||||
|
day1.parse(input); |
||||
|
res = day1.floor(); |
||||
|
assert_eq!(res, -1); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_5() { |
||||
|
let mut input = String::from(")))"); |
||||
|
let mut day1 = day1::Data::new(); |
||||
|
day1.parse(input); |
||||
|
let mut res = day1.floor(); |
||||
|
assert_eq!(res, -3); |
||||
|
|
||||
|
input = String::from(")())())"); |
||||
|
day1 = day1::Data::new(); |
||||
|
day1.parse(input); |
||||
|
res = day1.floor(); |
||||
|
assert_eq!(res, -3); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_6() { |
||||
|
let mut input = String::from(")"); |
||||
|
let mut day1 = day1::Data::new(); |
||||
|
day1.parse(input); |
||||
|
let res = day1.basement(); |
||||
|
assert_eq!(res, 1); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_7() { |
||||
|
let mut input = String::from("()())"); |
||||
|
let mut day1 = day1::Data::new(); |
||||
|
day1.parse(input); |
||||
|
let res = day1.basement(); |
||||
|
assert_eq!(res, 5); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day2_1() { |
||||
|
let mut input = String::from("2x3x4"); |
||||
|
let mut day2 = day2::Data::new(); |
||||
|
day2.parse(input); |
||||
|
let mut res = day2.paper(); |
||||
|
assert_eq!(res, 58); |
||||
|
|
||||
|
res = day2.ribbon(); |
||||
|
assert_eq!(res, 34); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day2_2() { |
||||
|
let mut input = String::from("1x1x10"); |
||||
|
let mut day2 = day2::Data::new(); |
||||
|
day2.parse(input); |
||||
|
let mut res = day2.paper(); |
||||
|
assert_eq!(res, 43); |
||||
|
|
||||
|
res = day2.ribbon(); |
||||
|
assert_eq!(res, 14); |
||||
|
} |
||||
Loading…
Reference in new issue