Complete day 1
This commit is contained in:
parent
b613911f46
commit
c19268deca
1
day-1/.gitignore
vendored
Normal file
1
day-1/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
/target
|
94
day-1/Cargo.lock
generated
Normal file
94
day-1/Cargo.lock
generated
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
[[package]]
|
||||||
|
name = "day-1"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"indoc",
|
||||||
|
"itertools",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "either"
|
||||||
|
version = "1.6.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "indoc"
|
||||||
|
version = "0.3.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "47741a8bc60fb26eb8d6e0238bbb26d8575ff623fdc97b1a2c00c050b9684ed8"
|
||||||
|
dependencies = [
|
||||||
|
"indoc-impl",
|
||||||
|
"proc-macro-hack",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "indoc-impl"
|
||||||
|
version = "0.3.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ce046d161f000fffde5f432a0d034d0341dc152643b2598ed5bfce44c4f3a8f0"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro-hack",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
"unindent",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itertools"
|
||||||
|
version = "0.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
|
||||||
|
dependencies = [
|
||||||
|
"either",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro-hack"
|
||||||
|
version = "0.5.19"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro2"
|
||||||
|
version = "1.0.24"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-xid",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quote"
|
||||||
|
version = "1.0.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "1.0.53"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8833e20724c24de12bbaba5ad230ea61c3eafb05b881c7c9d3cfe8638b187e68"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"unicode-xid",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-xid"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unindent"
|
||||||
|
version = "0.1.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f14ee04d9415b52b3aeab06258a3f07093182b88ba0f9b8d203f211a7a7d41c7"
|
9
day-1/Cargo.toml
Normal file
9
day-1/Cargo.toml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
[package]
|
||||||
|
name = "day-1"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Tristan Daniël Maat <tm@tlater.net>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
indoc = "0.3"
|
||||||
|
itertools = "0.9"
|
200
day-1/input
Normal file
200
day-1/input
Normal file
|
@ -0,0 +1,200 @@
|
||||||
|
1429
|
||||||
|
1368
|
||||||
|
1661
|
||||||
|
1687
|
||||||
|
1593
|
||||||
|
1495
|
||||||
|
1565
|
||||||
|
1500
|
||||||
|
1635
|
||||||
|
1845
|
||||||
|
1645
|
||||||
|
1999
|
||||||
|
1415
|
||||||
|
1054
|
||||||
|
1930
|
||||||
|
1774
|
||||||
|
1405
|
||||||
|
1993
|
||||||
|
1757
|
||||||
|
1623
|
||||||
|
1675
|
||||||
|
1665
|
||||||
|
631
|
||||||
|
1950
|
||||||
|
1702
|
||||||
|
1311
|
||||||
|
1509
|
||||||
|
1790
|
||||||
|
1643
|
||||||
|
1884
|
||||||
|
226
|
||||||
|
1455
|
||||||
|
1679
|
||||||
|
1746
|
||||||
|
1284
|
||||||
|
1342
|
||||||
|
1684
|
||||||
|
1543
|
||||||
|
1396
|
||||||
|
1806
|
||||||
|
1523
|
||||||
|
1363
|
||||||
|
1011
|
||||||
|
1577
|
||||||
|
1767
|
||||||
|
1287
|
||||||
|
1885
|
||||||
|
1517
|
||||||
|
1556
|
||||||
|
1722
|
||||||
|
1260
|
||||||
|
1624
|
||||||
|
1466
|
||||||
|
1263
|
||||||
|
1162
|
||||||
|
1688
|
||||||
|
1202
|
||||||
|
1913
|
||||||
|
1964
|
||||||
|
1385
|
||||||
|
1970
|
||||||
|
1976
|
||||||
|
1431
|
||||||
|
858
|
||||||
|
1748
|
||||||
|
1544
|
||||||
|
1438
|
||||||
|
1300
|
||||||
|
1926
|
||||||
|
1587
|
||||||
|
1376
|
||||||
|
1939
|
||||||
|
1039
|
||||||
|
1639
|
||||||
|
1539
|
||||||
|
1491
|
||||||
|
1631
|
||||||
|
1521
|
||||||
|
1564
|
||||||
|
1507
|
||||||
|
1637
|
||||||
|
1534
|
||||||
|
1713
|
||||||
|
1533
|
||||||
|
1118
|
||||||
|
1356
|
||||||
|
2003
|
||||||
|
282
|
||||||
|
1079
|
||||||
|
1837
|
||||||
|
1259
|
||||||
|
1941
|
||||||
|
1836
|
||||||
|
1903
|
||||||
|
1433
|
||||||
|
1467
|
||||||
|
1027
|
||||||
|
1441
|
||||||
|
1048
|
||||||
|
1742
|
||||||
|
1087
|
||||||
|
1872
|
||||||
|
1476
|
||||||
|
1657
|
||||||
|
1361
|
||||||
|
1182
|
||||||
|
1494
|
||||||
|
1529
|
||||||
|
1822
|
||||||
|
1444
|
||||||
|
1330
|
||||||
|
1514
|
||||||
|
1723
|
||||||
|
1432
|
||||||
|
1683
|
||||||
|
1997
|
||||||
|
1443
|
||||||
|
1474
|
||||||
|
1932
|
||||||
|
1504
|
||||||
|
1313
|
||||||
|
1765
|
||||||
|
19
|
||||||
|
1784
|
||||||
|
1619
|
||||||
|
992
|
||||||
|
1560
|
||||||
|
1680
|
||||||
|
1626
|
||||||
|
1558
|
||||||
|
1899
|
||||||
|
1293
|
||||||
|
1676
|
||||||
|
1161
|
||||||
|
1140
|
||||||
|
1341
|
||||||
|
1597
|
||||||
|
1628
|
||||||
|
1611
|
||||||
|
1302
|
||||||
|
1269
|
||||||
|
1241
|
||||||
|
1952
|
||||||
|
1591
|
||||||
|
1726
|
||||||
|
428
|
||||||
|
1703
|
||||||
|
1289
|
||||||
|
1109
|
||||||
|
1478
|
||||||
|
1002
|
||||||
|
1817
|
||||||
|
1849
|
||||||
|
1838
|
||||||
|
1319
|
||||||
|
1641
|
||||||
|
583
|
||||||
|
1920
|
||||||
|
1453
|
||||||
|
1411
|
||||||
|
1870
|
||||||
|
1763
|
||||||
|
1469
|
||||||
|
1646
|
||||||
|
1719
|
||||||
|
1213
|
||||||
|
1462
|
||||||
|
1545
|
||||||
|
1682
|
||||||
|
1711
|
||||||
|
18
|
||||||
|
2004
|
||||||
|
1252
|
||||||
|
1620
|
||||||
|
1559
|
||||||
|
1315
|
||||||
|
781
|
||||||
|
1656
|
||||||
|
1987
|
||||||
|
1436
|
||||||
|
1630
|
||||||
|
1985
|
||||||
|
1897
|
||||||
|
1551
|
||||||
|
1296
|
||||||
|
1282
|
||||||
|
1735
|
||||||
|
1320
|
||||||
|
1659
|
||||||
|
1271
|
||||||
|
1380
|
||||||
|
1274
|
||||||
|
1876
|
||||||
|
1492
|
||||||
|
1298
|
||||||
|
1399
|
||||||
|
1692
|
||||||
|
1265
|
||||||
|
1555
|
||||||
|
1337
|
71
day-1/src/main.rs
Normal file
71
day-1/src/main.rs
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
use std::fs;
|
||||||
|
|
||||||
|
use itertools::Itertools;
|
||||||
|
|
||||||
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
let input = fs::read_to_string("input")?;
|
||||||
|
let input = parse_number_list(input)?;
|
||||||
|
let numbers = find_2020_numbers(input, 3)?;
|
||||||
|
println!("{}", numbers.iter().product::<u32>());
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_number_list(input: String) -> Result<Vec<u32>, std::num::ParseIntError> {
|
||||||
|
input.lines().map(|line| line.parse::<u32>()).collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn find_2020_numbers(input: Vec<u32>, sum_number: usize) -> Result<Vec<u32>, String> {
|
||||||
|
input
|
||||||
|
.into_iter()
|
||||||
|
.combinations(sum_number)
|
||||||
|
.find(|i| i.iter().sum::<u32>() == 2020)
|
||||||
|
.ok_or("Could not find 2020.".to_string())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use indoc::indoc;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_first_example() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
let example = indoc!(
|
||||||
|
"
|
||||||
|
1721
|
||||||
|
979
|
||||||
|
366
|
||||||
|
299
|
||||||
|
675
|
||||||
|
1456
|
||||||
|
"
|
||||||
|
);
|
||||||
|
|
||||||
|
let example = parse_number_list(example.to_string())?;
|
||||||
|
let numbers = find_2020_numbers(example, 2)?;
|
||||||
|
|
||||||
|
assert_eq!(numbers.iter().product::<u32>(), 514579);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_second_example() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
let example = indoc!(
|
||||||
|
"
|
||||||
|
1721
|
||||||
|
979
|
||||||
|
366
|
||||||
|
299
|
||||||
|
675
|
||||||
|
1456
|
||||||
|
"
|
||||||
|
);
|
||||||
|
|
||||||
|
let example = parse_number_list(example.to_string())?;
|
||||||
|
let numbers = find_2020_numbers(example, 3)?;
|
||||||
|
|
||||||
|
assert_eq!(numbers.iter().to_owned().product::<u32>(), 241861950);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue