Initial commit: Day 1 & 2
commit
68cc03828c
|
@ -0,0 +1,9 @@
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
end_of_line = lf
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
insert_final_newline = true
|
|
@ -0,0 +1 @@
|
||||||
|
/target
|
|
@ -0,0 +1,25 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aoc"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"itertools",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[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",
|
||||||
|
]
|
|
@ -0,0 +1,9 @@
|
||||||
|
[package]
|
||||||
|
name = "aoc"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
itertools = "0.10.1"
|
|
@ -0,0 +1,2 @@
|
||||||
|
*
|
||||||
|
!.gitignore
|
|
@ -0,0 +1,29 @@
|
||||||
|
use itertools::Itertools;
|
||||||
|
|
||||||
|
const INPUT: &str = include_str!("../inputs/01");
|
||||||
|
|
||||||
|
fn input_numbers() -> impl Iterator<Item = usize> {
|
||||||
|
INPUT.lines().filter_map(|s| s.parse::<usize>().ok())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part_1() -> usize {
|
||||||
|
input_numbers()
|
||||||
|
.tuple_windows()
|
||||||
|
.filter(|(a, b)| b > a)
|
||||||
|
.count()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part_2() -> usize {
|
||||||
|
input_numbers()
|
||||||
|
.tuple_windows()
|
||||||
|
.map(|(a, b, c)| a + b + c)
|
||||||
|
.tuple_windows()
|
||||||
|
.filter(|(a, b)| b > a)
|
||||||
|
.count()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
println!("Day 1:");
|
||||||
|
println!(" Part 1: {}", part_1());
|
||||||
|
println!(" Part 2: {}", part_2());
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
const INPUT: &str = include_str!("../inputs/02");
|
||||||
|
|
||||||
|
fn get_instructions() -> impl Iterator<Item = (&'static str, isize)> {
|
||||||
|
INPUT
|
||||||
|
.lines()
|
||||||
|
.filter_map(|s| s.split_once(' '))
|
||||||
|
.filter_map(|(op, n)| n.parse::<isize>().ok().map(|n| (op, n)))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part_1() -> isize {
|
||||||
|
let x: isize = get_instructions()
|
||||||
|
.filter(|(op, _)| *op == "forward")
|
||||||
|
.map(|(_, n)| n)
|
||||||
|
.sum();
|
||||||
|
|
||||||
|
let y: isize = get_instructions()
|
||||||
|
.filter_map(|(op, n)| match op {
|
||||||
|
"up" => Some(-n),
|
||||||
|
"down" => Some(n),
|
||||||
|
_ => None,
|
||||||
|
})
|
||||||
|
.sum();
|
||||||
|
|
||||||
|
x * y
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part_2() -> isize {
|
||||||
|
let mut x = 0isize;
|
||||||
|
let mut depth = 0isize;
|
||||||
|
let mut aim = 0isize;
|
||||||
|
|
||||||
|
for (op, n) in get_instructions() {
|
||||||
|
match op {
|
||||||
|
"forward" => {
|
||||||
|
x += n;
|
||||||
|
depth += n * aim;
|
||||||
|
}
|
||||||
|
"down" => aim += n,
|
||||||
|
"up" => aim -= n,
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
x * depth
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn main() {
|
||||||
|
println!("Day 2:");
|
||||||
|
println!(" Part 1: {}", part_1());
|
||||||
|
println!(" Part 2: {}", part_2());
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
mod day01;
|
||||||
|
mod day02;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
day01::main();
|
||||||
|
day02::main();
|
||||||
|
}
|
Loading…
Reference in New Issue