add Knuth algorithm for combinations as Iterator

This commit is contained in:
Stephen Waits committed 2020-12-02 19:19:01 -08:00
1 parent 01b4123dd3
commit 3aa216c806
2 files changed
+68 -12

No files matched your search

+6 -12
View File
@@ -4,24 +4,18 @@ use crate::utils;
use anyhow::{anyhow, Result};
fn day01_part1(data: &[i64]) -> Result<i64> {
for i in 0..data.len() - 2 {
for j in i + 1..data.len() - 1 {
if data[i] + data[j] == 2020 {
return Ok(data[i] * data[j]);
}
for c in utils::combinations(2, data.len()) {
if data[c[0]] + data[c[1]] == 2020 {
return Ok(data[c[0]] * data[c[1]]);
}
}
Err(anyhow!("no result found"))
}
fn day01_part2(data: &[i64]) -> Result<i64> {
for i in 0..data.len() - 3 {
for j in i + 1..data.len() - 2 {
for k in j + 1..data.len() - 1 {
if data[i] + data[j] + data[k] == 2020 {
return Ok(data[i] * data[j] * data[k]);
}
}
for c in utils::combinations(3, data.len()) {
if data[c[0]] + data[c[1]] + data[c[2]] == 2020 {
return Ok(data[c[0]] * data[c[1]] * data[c[2]]);
}
}
Err(anyhow!("no result found"))