Cargo fmt
This commit is contained in:
67
src/day13.rs
67
src/day13.rs
@@ -4,7 +4,8 @@ use aoc_runner_derive::{aoc, aoc_generator};
|
||||
|
||||
#[aoc_generator(day13)]
|
||||
fn parse(input: &str) -> HashMap<(String, String), i32> {
|
||||
input.lines()
|
||||
input
|
||||
.lines()
|
||||
.map(|line| {
|
||||
let v: Vec<&str> = line[0..line.len() - 1].split(" ").collect();
|
||||
let from = v[0];
|
||||
@@ -14,21 +15,26 @@ fn parse(input: &str) -> HashMap<(String, String), i32> {
|
||||
value *= -1;
|
||||
}
|
||||
((from.into(), to.into()), value)
|
||||
}).collect()
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
|
||||
#[aoc(day13, part1)]
|
||||
fn part1(deltas: &HashMap<(String, String), i32>) -> i32 {
|
||||
let names: HashSet<_> = deltas.keys().map(|s| s.0.clone()).collect();
|
||||
permutations(names).iter().map(|arrangement| {
|
||||
let mut happiness = 0;
|
||||
for i in 0..arrangement.len() {
|
||||
let right = (i + 1) % arrangement.len();
|
||||
happiness += deltas[&(arrangement[right].clone(), arrangement[i].clone())] +
|
||||
deltas[&(arrangement[i].clone(), arrangement[right].clone())];
|
||||
}
|
||||
happiness
|
||||
}).max().unwrap()
|
||||
permutations(names)
|
||||
.iter()
|
||||
.map(|arrangement| {
|
||||
let mut happiness = 0;
|
||||
for i in 0..arrangement.len() {
|
||||
let right = (i + 1) % arrangement.len();
|
||||
happiness += deltas[&(arrangement[right].clone(), arrangement[i].clone())]
|
||||
+ deltas[&(arrangement[i].clone(), arrangement[right].clone())];
|
||||
}
|
||||
happiness
|
||||
})
|
||||
.max()
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
fn permutations(values: HashSet<String>) -> Vec<Vec<String>> {
|
||||
@@ -42,30 +48,41 @@ fn p(mut input: Vec<String>) -> Vec<Vec<String>> {
|
||||
}
|
||||
let mut results = Vec::new();
|
||||
for _ in 0..input.len() {
|
||||
p(input.iter().skip(1).map(|t| t.clone()).collect()).into_iter().for_each(|mut v| {
|
||||
v.insert(0, input[0].clone());
|
||||
results.push(v);
|
||||
});
|
||||
p(input.iter().skip(1).map(|t| t.clone()).collect())
|
||||
.into_iter()
|
||||
.for_each(|mut v| {
|
||||
v.insert(0, input[0].clone());
|
||||
results.push(v);
|
||||
});
|
||||
let v = input.remove(0);
|
||||
input.push(v);
|
||||
}
|
||||
results
|
||||
}
|
||||
|
||||
|
||||
#[aoc(day13, part2)]
|
||||
fn part2(deltas: &HashMap<(String, String), i32>) -> i32 {
|
||||
let mut names: HashSet<_> = deltas.keys().map(|s| s.0.clone()).collect();
|
||||
names.insert("me".to_string());
|
||||
permutations(names).iter().map(|arrangement| {
|
||||
let mut happiness = 0;
|
||||
for i in 0..arrangement.len() {
|
||||
let right = (i + 1) % arrangement.len();
|
||||
happiness += deltas.get(&(arrangement[right].clone(), arrangement[i].clone())).or(Some(&0)).unwrap() +
|
||||
deltas.get(&(arrangement[i].clone(), arrangement[right].clone())).or(Some(&0)).unwrap();
|
||||
}
|
||||
happiness
|
||||
}).max().unwrap()
|
||||
permutations(names)
|
||||
.iter()
|
||||
.map(|arrangement| {
|
||||
let mut happiness = 0;
|
||||
for i in 0..arrangement.len() {
|
||||
let right = (i + 1) % arrangement.len();
|
||||
happiness += deltas
|
||||
.get(&(arrangement[right].clone(), arrangement[i].clone()))
|
||||
.or(Some(&0))
|
||||
.unwrap()
|
||||
+ deltas
|
||||
.get(&(arrangement[i].clone(), arrangement[right].clone()))
|
||||
.or(Some(&0))
|
||||
.unwrap();
|
||||
}
|
||||
happiness
|
||||
})
|
||||
.max()
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
Reference in New Issue
Block a user