diff options
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | Cargo.toml | 9 | ||||
| -rw-r--r-- | input1 | 100 | ||||
| -rw-r--r-- | src/main.rs | 60 |
4 files changed, 171 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..53eaa21 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +**/*.rs.bk diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..8547149 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "advent" +version = "0.1.0" +authors = ["Reiner Herrmann <reiner@reiner-h.de>"] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] @@ -0,0 +1,100 @@ +87819 +115026 +134815 +137411 +67764 +99126 +73336 +66216 +81346 +94695 +76336 +148938 +100089 +67341 +101811 +83239 +58537 +146622 +140006 +95115 +87728 +51664 +93463 +127521 +62195 +135326 +104650 +121170 +142794 +125892 +112521 +81326 +110930 +125273 +70131 +52291 +116316 +50670 +82145 +89869 +55474 +146525 +67064 +118129 +74723 +111269 +128051 +131256 +145221 +71059 +137530 +94041 +92331 +134280 +133517 +59611 +113590 +96394 +64731 +53491 +83163 +56863 +51928 +126075 +92833 +106741 +94873 +97241 +105203 +147315 +108651 +67542 +111622 +83522 +125500 +149284 +70747 +78945 +125322 +141425 +111995 +66892 +131105 +86896 +87588 +140571 +116504 +76218 +146224 +127819 +59032 +102767 +137517 +126448 +141218 +102267 +78692 +96306 +56531 +80841 diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..a41a05d --- /dev/null +++ b/src/main.rs @@ -0,0 +1,60 @@ +use std::fs; + +fn read_file(file : &str) -> String { + fs::read_to_string(file).unwrap() +} + +fn required_fuel(mass : u32) -> u32 { + (mass / 3).saturating_sub(2) +} + +fn required_fuel_with_fuel(mass : u32) -> u32 { + let mut total = 0; + let mut current = mass; + loop { + current = required_fuel(current); + total += current; + if current == 0 { + break; + } + } + total +} + +fn day1() { + let input = read_file("input1"); + let sum : u32 = input.split('\n') + .filter(|x| !x.is_empty()) + .map(|x| x.parse::<u32>().unwrap()) + .map(|x| required_fuel(x)) + .sum(); + println!("1a: {}", sum); + + let sum2 : u32 = input.split('\n') + .filter(|x| !x.is_empty()) + .map(|x| x.parse::<u32>().unwrap()) + .map(|x| required_fuel_with_fuel(x)) + .sum(); + println!("1b: {}", sum2); +} + +fn main() { + day1(); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_day1() { + assert_eq!(required_fuel(12), 2); + assert_eq!(required_fuel(14), 2); + assert_eq!(required_fuel(1969), 654); + assert_eq!(required_fuel(100756), 33583); + + assert_eq!(required_fuel_with_fuel(14), 2); + assert_eq!(required_fuel_with_fuel(1969), 966); + assert_eq!(required_fuel_with_fuel(100756), 50346); + } +} |
