aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2019-12-01 18:29:03 +0100
committerReiner Herrmann <reiner@reiner-h.de>2019-12-01 18:29:03 +0100
commitf34fa5fd3c5bc416331250a2e751166946903b95 (patch)
treed84544366178558d8b09cd908c498aa2f88e4194
day1
-rw-r--r--.gitignore2
-rw-r--r--Cargo.toml9
-rw-r--r--input1100
-rw-r--r--src/main.rs60
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]
diff --git a/input1 b/input1
new file mode 100644
index 0000000..a971d09
--- /dev/null
+++ b/input1
@@ -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);
+ }
+}