Cargo fmt

This commit is contained in:
2024-06-27 21:54:14 +02:00
parent f18e7797ed
commit d47441975d
8 changed files with 163 additions and 93 deletions

View File

@@ -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)]