init
This commit is contained in:
commit
1e95ecc760
8 changed files with 3206 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
/target
|
86
Cargo.lock
generated
Normal file
86
Cargo.lock
generated
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
[[package]]
|
||||||
|
name = "anyhow"
|
||||||
|
version = "1.0.51"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8b26702f315f53b6071259e15dd9d64528213b44d61de1ec926eca7715d62203"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aoc2021"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"itertools",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "either"
|
||||||
|
version = "1.6.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itertools"
|
||||||
|
version = "0.10.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
|
||||||
|
dependencies = [
|
||||||
|
"either",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro2"
|
||||||
|
version = "1.0.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-xid",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quote"
|
||||||
|
version = "1.0.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "1.0.82"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8daf5dd0bb60cbd4137b1b587d2fc0ae729bc07cf01cd70b36a1ed5ade3b9d59"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"unicode-xid",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror"
|
||||||
|
version = "1.0.30"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
|
||||||
|
dependencies = [
|
||||||
|
"thiserror-impl",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror-impl"
|
||||||
|
version = "1.0.30"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-xid"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
|
20
Cargo.toml
Normal file
20
Cargo.toml
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
[package]
|
||||||
|
name = "aoc2021"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Stefan Schwarz <stefan@f2o.io>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
anyhow = "1.0"
|
||||||
|
itertools = "0.10"
|
||||||
|
thiserror = "1.0"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "1"
|
||||||
|
path = "src/01.rs"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "2"
|
||||||
|
path = "src/02.rs"
|
39
src/01.rs
Normal file
39
src/01.rs
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
static INPUT: &str = include_str!("01.txt");
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut counter = 0;
|
||||||
|
INPUT.lines().fold(None, |last, line| {
|
||||||
|
let cur: u32 = line.parse().expect("line must be numeric");
|
||||||
|
if let Some(last) = last {
|
||||||
|
if cur > last {
|
||||||
|
counter += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Some(cur)
|
||||||
|
});
|
||||||
|
println!("increased {} times", counter);
|
||||||
|
|
||||||
|
let mut counter = 0;
|
||||||
|
let splitted: Vec<u32> = INPUT
|
||||||
|
.lines()
|
||||||
|
.map(|line| line.parse().expect("line must be a number"))
|
||||||
|
.collect();
|
||||||
|
splitted
|
||||||
|
.windows(3)
|
||||||
|
.map(|win| {
|
||||||
|
if let [a, b, c] = win {
|
||||||
|
a + b + c
|
||||||
|
} else {
|
||||||
|
unreachable!("line must be a number")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.fold(None, |last, cur| {
|
||||||
|
if let Some(last) = last {
|
||||||
|
if cur > last {
|
||||||
|
counter += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Some(cur)
|
||||||
|
});
|
||||||
|
println!("increased {} times", counter);
|
||||||
|
}
|
2000
src/01.txt
Normal file
2000
src/01.txt
Normal file
File diff suppressed because it is too large
Load diff
57
src/02.rs
Normal file
57
src/02.rs
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
static INPUT: &str = include_str!("02.txt");
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// part 1
|
||||||
|
let mut pos: i32 = 0;
|
||||||
|
let mut depth: i32 = 0;
|
||||||
|
INPUT
|
||||||
|
.lines()
|
||||||
|
.map(|line| {
|
||||||
|
let mut line = line.splitn(2, " ");
|
||||||
|
let direction = line.next().expect("no direction set");
|
||||||
|
let delta: i32 = line
|
||||||
|
.next()
|
||||||
|
.expect("no delta set")
|
||||||
|
.parse()
|
||||||
|
.expect("delta must be a number");
|
||||||
|
match direction {
|
||||||
|
"forward" => pos += delta,
|
||||||
|
"down" => depth += delta,
|
||||||
|
"up" => depth -= delta,
|
||||||
|
_ => unimplemented!("unknown direction instruction"),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.count();
|
||||||
|
println!("---");
|
||||||
|
println!("pos: {}, depth: {}", pos, depth);
|
||||||
|
println!("result: {}", pos * depth);
|
||||||
|
|
||||||
|
// part 2
|
||||||
|
let mut pos: i32 = 0;
|
||||||
|
let mut depth: i32 = 0;
|
||||||
|
let mut aim: i32 = 0;
|
||||||
|
INPUT
|
||||||
|
.lines()
|
||||||
|
.map(|line| {
|
||||||
|
let mut line = line.splitn(2, " ");
|
||||||
|
let direction = line.next().expect("no direction set");
|
||||||
|
let delta: i32 = line
|
||||||
|
.next()
|
||||||
|
.expect("no delta set")
|
||||||
|
.parse()
|
||||||
|
.expect("delta must be a number");
|
||||||
|
match direction {
|
||||||
|
"forward" => {
|
||||||
|
pos += delta;
|
||||||
|
depth += aim * delta;
|
||||||
|
}
|
||||||
|
"down" => aim += delta,
|
||||||
|
"up" => aim -= delta,
|
||||||
|
_ => unimplemented!("unknown direction instruction"),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.count();
|
||||||
|
println!("---");
|
||||||
|
println!("pos: {}, depth: {}", pos, depth);
|
||||||
|
println!("result: {}", pos * depth)
|
||||||
|
}
|
1000
src/02.txt
Normal file
1000
src/02.txt
Normal file
File diff suppressed because it is too large
Load diff
3
src/main.rs
Normal file
3
src/main.rs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
fn main() {
|
||||||
|
println!("Hello, world!");
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue