56 lines
1.4 KiB
Rust
56 lines
1.4 KiB
Rust
pub fn task1() {
|
|
let input: usize = 509671;
|
|
|
|
let mut scores = vec![3, 7];
|
|
let mut recipes = vec![0, 1];
|
|
|
|
while scores.len() < input + 10 {
|
|
let mut score: usize = recipes.iter().map(|recipe| scores[*recipe]).sum();
|
|
if score >= 10 {
|
|
scores.push(1);
|
|
score -= 10;
|
|
}
|
|
scores.push(score);
|
|
|
|
for recipe in recipes.iter_mut() {
|
|
*recipe = (*recipe + 1 + scores[*recipe]) % scores.len();
|
|
}
|
|
}
|
|
|
|
let result = scores[input..input + 10]
|
|
.iter()
|
|
.map(|s| s.to_string())
|
|
.collect::<String>();
|
|
println!("Last 10 for {}: {}", input, result);
|
|
}
|
|
|
|
pub fn task2() {
|
|
let input = vec![5, 0, 9, 6, 7, 1];
|
|
|
|
let mut scores = vec![3, 7];
|
|
let mut recipes = vec![0, 1];
|
|
|
|
while scores.len() < 7
|
|
|| scores[scores.len() - 6..] != input[..]
|
|
&& scores[scores.len() - 7..scores.len() - 1] != input[..]
|
|
{
|
|
let mut score: usize = recipes.iter().map(|recipe| scores[*recipe]).sum();
|
|
if score >= 10 {
|
|
scores.push(1);
|
|
score -= 10;
|
|
}
|
|
scores.push(score);
|
|
|
|
for recipe in recipes.iter_mut() {
|
|
*recipe = (*recipe + 1 + scores[*recipe]) % scores.len();
|
|
}
|
|
}
|
|
|
|
if scores[scores.len() - 6..] != input[..] {
|
|
println!("{}", scores.len() - 7)
|
|
} else {
|
|
println!("{}", scores.len() - 8)
|
|
}
|
|
// 20227890 too high
|
|
}
|