Compare commits
15 Commits
39525852e5
...
main
Author | SHA1 | Date | |
---|---|---|---|
e871837dc6
|
|||
8fbaaa4bbc
|
|||
c7087d0921 | |||
00a67d7d3d | |||
02445824a6 | |||
2c1323095f | |||
ffd5771fc9
|
|||
64820c0251
|
|||
52a17ff632
|
|||
87f14bbf0c
|
|||
c67298eb5a
|
|||
8e55e961cb
|
|||
04490516f0
|
|||
cede3289dc
|
|||
c5d6c5142d
|
16
Cargo.toml
Normal file
16
Cargo.toml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
[workspace]
|
||||||
|
|
||||||
|
members = [
|
||||||
|
"day1",
|
||||||
|
"day2",
|
||||||
|
"day3",
|
||||||
|
"day4",
|
||||||
|
"day5",
|
||||||
|
"day6",
|
||||||
|
"day7",
|
||||||
|
"day8",
|
||||||
|
"day9",
|
||||||
|
"day10",
|
||||||
|
"day11",
|
||||||
|
"day12",
|
||||||
|
]
|
8
day1/Cargo.toml
Normal file
8
day1/Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "day1"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
2242
day1/input.txt
Normal file
2242
day1/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
14
day1/sample_input.txt
Normal file
14
day1/sample_input.txt
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
1000
|
||||||
|
2000
|
||||||
|
3000
|
||||||
|
|
||||||
|
4000
|
||||||
|
|
||||||
|
5000
|
||||||
|
6000
|
||||||
|
|
||||||
|
7000
|
||||||
|
8000
|
||||||
|
9000
|
||||||
|
|
||||||
|
10000
|
24
day1/src/main.rs
Normal file
24
day1/src/main.rs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
fn main() {
|
||||||
|
const INPUT: &str = include_str!("../input.txt");
|
||||||
|
|
||||||
|
let split = INPUT.split("\n");
|
||||||
|
let mut calories: Vec<u64> = Vec::new();
|
||||||
|
|
||||||
|
let mut running_total: u64 = 0;
|
||||||
|
for s in split {
|
||||||
|
if s == "" {
|
||||||
|
calories.push(running_total);
|
||||||
|
running_total = 0;
|
||||||
|
} else {
|
||||||
|
running_total += s.trim().parse::<u64>().expect("Invalid input line: {s}!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let max_calories = calories.iter().max().unwrap();
|
||||||
|
|
||||||
|
println!("Max calories: {max_calories}");
|
||||||
|
|
||||||
|
calories.sort_by(|a, b| b.cmp(a));
|
||||||
|
let top_three = calories[0] + calories[1] + calories[2];
|
||||||
|
println!("Sum of top 3: {top_three}");
|
||||||
|
}
|
8
day10/Cargo.toml
Normal file
8
day10/Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "day10"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
143
day10/input.txt
Normal file
143
day10/input.txt
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 5
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 6
|
||||||
|
addx 4
|
||||||
|
addx -4
|
||||||
|
addx 4
|
||||||
|
addx -6
|
||||||
|
addx 11
|
||||||
|
addx -1
|
||||||
|
addx 2
|
||||||
|
addx 4
|
||||||
|
addx 3
|
||||||
|
noop
|
||||||
|
addx 2
|
||||||
|
addx -30
|
||||||
|
addx 2
|
||||||
|
addx 33
|
||||||
|
noop
|
||||||
|
addx -37
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 3
|
||||||
|
addx 2
|
||||||
|
addx 5
|
||||||
|
addx 20
|
||||||
|
addx 7
|
||||||
|
addx -24
|
||||||
|
addx 2
|
||||||
|
noop
|
||||||
|
addx 7
|
||||||
|
addx -2
|
||||||
|
addx -6
|
||||||
|
addx 13
|
||||||
|
addx 3
|
||||||
|
addx -2
|
||||||
|
addx 2
|
||||||
|
noop
|
||||||
|
addx -5
|
||||||
|
addx 10
|
||||||
|
addx 5
|
||||||
|
addx -39
|
||||||
|
addx 1
|
||||||
|
addx 5
|
||||||
|
noop
|
||||||
|
addx 3
|
||||||
|
noop
|
||||||
|
addx -5
|
||||||
|
addx 10
|
||||||
|
addx -2
|
||||||
|
addx 2
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 7
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 3
|
||||||
|
noop
|
||||||
|
addx 3
|
||||||
|
addx 2
|
||||||
|
addx 8
|
||||||
|
addx -1
|
||||||
|
addx -20
|
||||||
|
addx 21
|
||||||
|
addx -38
|
||||||
|
addx 5
|
||||||
|
addx 2
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 8
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx -2
|
||||||
|
addx 2
|
||||||
|
addx -7
|
||||||
|
addx 14
|
||||||
|
addx 5
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx -16
|
||||||
|
addx 17
|
||||||
|
addx 2
|
||||||
|
addx -12
|
||||||
|
addx 19
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx -37
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 3
|
||||||
|
addx 2
|
||||||
|
addx 2
|
||||||
|
addx 5
|
||||||
|
addx 20
|
||||||
|
addx -19
|
||||||
|
addx 2
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 5
|
||||||
|
addx 19
|
||||||
|
addx -12
|
||||||
|
addx 3
|
||||||
|
addx -2
|
||||||
|
addx 2
|
||||||
|
addx -18
|
||||||
|
addx 25
|
||||||
|
addx -14
|
||||||
|
addx -22
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 3
|
||||||
|
addx 5
|
||||||
|
addx -4
|
||||||
|
addx 7
|
||||||
|
addx 4
|
||||||
|
noop
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 2
|
||||||
|
addx -6
|
||||||
|
addx 15
|
||||||
|
addx -1
|
||||||
|
addx 4
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 1
|
||||||
|
addx 4
|
||||||
|
addx -33
|
||||||
|
noop
|
||||||
|
addx 21
|
||||||
|
noop
|
146
day10/sample_input.txt
Normal file
146
day10/sample_input.txt
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
addx 15
|
||||||
|
addx -11
|
||||||
|
addx 6
|
||||||
|
addx -3
|
||||||
|
addx 5
|
||||||
|
addx -1
|
||||||
|
addx -8
|
||||||
|
addx 13
|
||||||
|
addx 4
|
||||||
|
noop
|
||||||
|
addx -1
|
||||||
|
addx 5
|
||||||
|
addx -1
|
||||||
|
addx 5
|
||||||
|
addx -1
|
||||||
|
addx 5
|
||||||
|
addx -1
|
||||||
|
addx 5
|
||||||
|
addx -1
|
||||||
|
addx -35
|
||||||
|
addx 1
|
||||||
|
addx 24
|
||||||
|
addx -19
|
||||||
|
addx 1
|
||||||
|
addx 16
|
||||||
|
addx -11
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 21
|
||||||
|
addx -15
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx -3
|
||||||
|
addx 9
|
||||||
|
addx 1
|
||||||
|
addx -3
|
||||||
|
addx 8
|
||||||
|
addx 1
|
||||||
|
addx 5
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx -36
|
||||||
|
noop
|
||||||
|
addx 1
|
||||||
|
addx 7
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 2
|
||||||
|
addx 6
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 7
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
addx -13
|
||||||
|
addx 13
|
||||||
|
addx 7
|
||||||
|
noop
|
||||||
|
addx 1
|
||||||
|
addx -33
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 2
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 8
|
||||||
|
noop
|
||||||
|
addx -1
|
||||||
|
addx 2
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
addx 17
|
||||||
|
addx -9
|
||||||
|
addx 1
|
||||||
|
addx 1
|
||||||
|
addx -3
|
||||||
|
addx 11
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx -13
|
||||||
|
addx -19
|
||||||
|
addx 1
|
||||||
|
addx 3
|
||||||
|
addx 26
|
||||||
|
addx -30
|
||||||
|
addx 12
|
||||||
|
addx -1
|
||||||
|
addx 3
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx -9
|
||||||
|
addx 18
|
||||||
|
addx 1
|
||||||
|
addx 2
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 9
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx -1
|
||||||
|
addx 2
|
||||||
|
addx -37
|
||||||
|
addx 1
|
||||||
|
addx 3
|
||||||
|
noop
|
||||||
|
addx 15
|
||||||
|
addx -21
|
||||||
|
addx 22
|
||||||
|
addx -6
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
addx 2
|
||||||
|
addx 1
|
||||||
|
noop
|
||||||
|
addx -10
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
addx 20
|
||||||
|
addx 1
|
||||||
|
addx 2
|
||||||
|
addx 2
|
||||||
|
addx -6
|
||||||
|
addx -11
|
||||||
|
noop
|
||||||
|
noop
|
||||||
|
noop
|
53
day10/src/main.rs
Normal file
53
day10/src/main.rs
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
fn do_cycle(cycle: u64, x_reg: i64) {
|
||||||
|
let col = (cycle - 1) % 40;
|
||||||
|
|
||||||
|
// println!("{} <= ")
|
||||||
|
if x_reg - 1 <= col.try_into().unwrap() && x_reg + 1 >= col.try_into().unwrap() {
|
||||||
|
print!("#");
|
||||||
|
} else {
|
||||||
|
print!(".");
|
||||||
|
}
|
||||||
|
|
||||||
|
if col == 39 {
|
||||||
|
println!();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
const INPUT: &str = include_str!("../input.txt");
|
||||||
|
const ADD_CYCLES: u64 = 2;
|
||||||
|
|
||||||
|
let mut strengths: Vec<i64> = Vec::new();
|
||||||
|
let mut cycles = 1u64;
|
||||||
|
let mut x_reg = 1i64;
|
||||||
|
|
||||||
|
do_cycle(cycles, x_reg);
|
||||||
|
|
||||||
|
for line in INPUT.lines() {
|
||||||
|
if line.starts_with("noop") {
|
||||||
|
cycles += 1;
|
||||||
|
} else {
|
||||||
|
let (_, operand) = line.split_once(' ').unwrap();
|
||||||
|
let operand = operand.parse::<i64>().unwrap();
|
||||||
|
|
||||||
|
for _ in 0..(ADD_CYCLES - 1) {
|
||||||
|
cycles += 1;
|
||||||
|
if (cycles + 20) % 40 == 0 {
|
||||||
|
strengths.push((cycles as i64) * x_reg);
|
||||||
|
}
|
||||||
|
do_cycle(cycles, x_reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
cycles += 1;
|
||||||
|
x_reg += operand;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cycles + 20) % 40 == 0 {
|
||||||
|
strengths.push((cycles as i64) * x_reg);
|
||||||
|
}
|
||||||
|
do_cycle(cycles, x_reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
let sum: i64 = strengths.iter().sum();
|
||||||
|
println!("{}", sum);
|
||||||
|
}
|
9
day11/Cargo.toml
Normal file
9
day11/Cargo.toml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[package]
|
||||||
|
name = "day11"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
num = { version = "0.4.0" }
|
55
day11/input.txt
Normal file
55
day11/input.txt
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
Monkey 0:
|
||||||
|
Starting items: 89, 74
|
||||||
|
Operation: new = old * 5
|
||||||
|
Test: divisible by 17
|
||||||
|
If true: throw to monkey 4
|
||||||
|
If false: throw to monkey 7
|
||||||
|
|
||||||
|
Monkey 1:
|
||||||
|
Starting items: 75, 69, 87, 57, 84, 90, 66, 50
|
||||||
|
Operation: new = old + 3
|
||||||
|
Test: divisible by 7
|
||||||
|
If true: throw to monkey 3
|
||||||
|
If false: throw to monkey 2
|
||||||
|
|
||||||
|
Monkey 2:
|
||||||
|
Starting items: 55
|
||||||
|
Operation: new = old + 7
|
||||||
|
Test: divisible by 13
|
||||||
|
If true: throw to monkey 0
|
||||||
|
If false: throw to monkey 7
|
||||||
|
|
||||||
|
Monkey 3:
|
||||||
|
Starting items: 69, 82, 69, 56, 68
|
||||||
|
Operation: new = old + 5
|
||||||
|
Test: divisible by 2
|
||||||
|
If true: throw to monkey 0
|
||||||
|
If false: throw to monkey 2
|
||||||
|
|
||||||
|
Monkey 4:
|
||||||
|
Starting items: 72, 97, 50
|
||||||
|
Operation: new = old + 2
|
||||||
|
Test: divisible by 19
|
||||||
|
If true: throw to monkey 6
|
||||||
|
If false: throw to monkey 5
|
||||||
|
|
||||||
|
Monkey 5:
|
||||||
|
Starting items: 90, 84, 56, 92, 91, 91
|
||||||
|
Operation: new = old * 19
|
||||||
|
Test: divisible by 3
|
||||||
|
If true: throw to monkey 6
|
||||||
|
If false: throw to monkey 1
|
||||||
|
|
||||||
|
Monkey 6:
|
||||||
|
Starting items: 63, 93, 55, 53
|
||||||
|
Operation: new = old * old
|
||||||
|
Test: divisible by 5
|
||||||
|
If true: throw to monkey 3
|
||||||
|
If false: throw to monkey 1
|
||||||
|
|
||||||
|
Monkey 7:
|
||||||
|
Starting items: 50, 61, 52, 58, 86, 68, 97
|
||||||
|
Operation: new = old + 4
|
||||||
|
Test: divisible by 11
|
||||||
|
If true: throw to monkey 5
|
||||||
|
If false: throw to monkey 4
|
27
day11/sample_input.txt
Normal file
27
day11/sample_input.txt
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
Monkey 0:
|
||||||
|
Starting items: 79, 98
|
||||||
|
Operation: new = old * 19
|
||||||
|
Test: divisible by 23
|
||||||
|
If true: throw to monkey 2
|
||||||
|
If false: throw to monkey 3
|
||||||
|
|
||||||
|
Monkey 1:
|
||||||
|
Starting items: 54, 65, 75, 74
|
||||||
|
Operation: new = old + 6
|
||||||
|
Test: divisible by 19
|
||||||
|
If true: throw to monkey 2
|
||||||
|
If false: throw to monkey 0
|
||||||
|
|
||||||
|
Monkey 2:
|
||||||
|
Starting items: 79, 60, 97
|
||||||
|
Operation: new = old * old
|
||||||
|
Test: divisible by 13
|
||||||
|
If true: throw to monkey 1
|
||||||
|
If false: throw to monkey 3
|
||||||
|
|
||||||
|
Monkey 3:
|
||||||
|
Starting items: 74
|
||||||
|
Operation: new = old + 3
|
||||||
|
Test: divisible by 17
|
||||||
|
If true: throw to monkey 0
|
||||||
|
If false: throw to monkey 1
|
107
day11/src/main.rs
Normal file
107
day11/src/main.rs
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
struct Monkey {
|
||||||
|
items: Vec<i64>,
|
||||||
|
operation: Box<dyn Fn(i64) -> i64>,
|
||||||
|
test: Box<dyn Fn(i64) -> i64>,
|
||||||
|
inspections: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn empty_op(_: i64) -> i64 {
|
||||||
|
-1
|
||||||
|
}
|
||||||
|
|
||||||
|
fn empty_test(_: i64) -> i64 {
|
||||||
|
-1
|
||||||
|
}
|
||||||
|
|
||||||
|
fn op_func(op: char, operand: &str) -> Box<dyn Fn(i64) -> i64> {
|
||||||
|
let op = match op {
|
||||||
|
'*' => std::ops::Mul::mul,
|
||||||
|
'+' => std::ops::Add::add,
|
||||||
|
_ => panic!("unsupported op {}", op),
|
||||||
|
};
|
||||||
|
if operand == "old" {
|
||||||
|
Box::new(move |x| op(x, x))
|
||||||
|
} else {
|
||||||
|
let operand: i64 = operand.parse().unwrap();
|
||||||
|
Box::new(move |x| op(x, operand))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
const INPUT: &str = include_str!("../input.txt");
|
||||||
|
|
||||||
|
let mut monkeys: Vec<Monkey> = Vec::new();
|
||||||
|
|
||||||
|
let mut cur_monkey = -1i64;
|
||||||
|
let mut cur_test_divisor = -1i64;
|
||||||
|
let mut cur_test_true_ret = -1i64;
|
||||||
|
|
||||||
|
let mut lcm: i64 = 1;
|
||||||
|
|
||||||
|
for line in INPUT.lines() {
|
||||||
|
let line = line.trim_start();
|
||||||
|
|
||||||
|
if line == "" {
|
||||||
|
continue;
|
||||||
|
} else if line.starts_with("Monkey") {
|
||||||
|
cur_monkey += 1;
|
||||||
|
monkeys.push(Monkey {
|
||||||
|
items: Vec::new(),
|
||||||
|
operation: Box::new(empty_op),
|
||||||
|
test: Box::new(empty_test),
|
||||||
|
inspections: 0,
|
||||||
|
});
|
||||||
|
continue;
|
||||||
|
} else if line.starts_with("Starting items: ") {
|
||||||
|
let items = line[16..].split(", ");
|
||||||
|
for item in items {
|
||||||
|
monkeys[cur_monkey as usize]
|
||||||
|
.items
|
||||||
|
.push(item.parse().unwrap());
|
||||||
|
}
|
||||||
|
} else if line.starts_with("Operation: ") {
|
||||||
|
let mut items = line[21..].split(' ');
|
||||||
|
let op = items.next().unwrap().chars().next().unwrap();
|
||||||
|
let operand = items.next().unwrap();
|
||||||
|
|
||||||
|
monkeys[cur_monkey as usize].operation = op_func(op, operand);
|
||||||
|
} else if line.starts_with("Test: ") {
|
||||||
|
cur_test_divisor = line[19..].parse().unwrap();
|
||||||
|
lcm = num::integer::lcm(lcm, cur_test_divisor);
|
||||||
|
} else if line.starts_with("If true: ") {
|
||||||
|
cur_test_true_ret = line[25..].parse().unwrap();
|
||||||
|
} else if line.starts_with("If false: ") {
|
||||||
|
let target: i64 = line[26..].parse().unwrap();
|
||||||
|
|
||||||
|
monkeys[cur_monkey as usize].test = Box::new(move |x| {
|
||||||
|
if x % cur_test_divisor == 0 {
|
||||||
|
cur_test_true_ret
|
||||||
|
} else {
|
||||||
|
target
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("lcm: {}", lcm);
|
||||||
|
|
||||||
|
for _ in 1..=10000 {
|
||||||
|
for i in 0..monkeys.len() {
|
||||||
|
for j in 0..monkeys[i].items.len() {
|
||||||
|
let mut new_worry = (monkeys[i].operation)(monkeys[i].items[j]);
|
||||||
|
new_worry = new_worry % lcm;
|
||||||
|
let dest: usize = (monkeys[i].test)(new_worry).try_into().unwrap();
|
||||||
|
|
||||||
|
monkeys[dest].items.push(new_worry);
|
||||||
|
monkeys[i].inspections += 1;
|
||||||
|
}
|
||||||
|
monkeys[i].items.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut active_monkeys = monkeys.iter().map(|m| m.inspections).collect::<Vec<u64>>();
|
||||||
|
active_monkeys.sort();
|
||||||
|
active_monkeys.reverse();
|
||||||
|
|
||||||
|
println!("{}", active_monkeys[0] * active_monkeys[1]);
|
||||||
|
}
|
9
day12/Cargo.toml
Normal file
9
day12/Cargo.toml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[package]
|
||||||
|
name = "day12"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
petgraph = "0.6.2"
|
41
day12/input.txt
Normal file
41
day12/input.txt
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
abaaacccccccccaaaaaaccccccccccccccccaacccccccccccaacaaaaaaaaaaaaaaaaaccaaaaacccaaaaccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaa
|
||||||
|
abaaacccccccccaaaaaacccccccccccccccaaaaccccccccccaaaaaaaacaaaaaaaaaaaccaaaaaaccaaaacccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaa
|
||||||
|
abaaaccccccccccaaaaacccccccccccccccaaaacccccccccccaaaaacccaaaaaaaaaacccaaaaaacccaaccccccccccccccaaaaacccccccccccccccccccccccccccccccccccccaaaaaa
|
||||||
|
abccccaaccccccaaaaacccccccccaaaaaccaaaaccccccccccccaaaaacaaaaaaaaacccccaaaaaccccccccccccccccccccaaaaacccccccccccccccccaaaccccaaaccccccccccaaacaa
|
||||||
|
abcccaaaacccccaaaaacccccccccaaaaacccccccccccccccccaaacaaaaaaaaaacccccccaaaaacccccccccccccccccccaaaaaacccccccccccccccccaaaaccaaaaccccccccccccccaa
|
||||||
|
abcccaaaaacacccccccccccccccaaaaaaccccccccccccccccccaaccaaaaacaaaaccccccccccccccccccccccccccccccaaaaaaccccccccccccccccccaaaaaaaacccccccccccccccaa
|
||||||
|
abaaaaaaaaaacccccccccccccccaaaaaaccccccccccccccccccccccaaaacccaaaccccccccccccccccccccccccccccccaaaaaacccccccccccccccciiiiijaaaaccccccccccccccccc
|
||||||
|
abaaaaaaaaaacccccccccccccccaaaaaacccccccccccccccccccccccccccccaaacccccccccccccccccccccccccccccccaaaccccccccccccccccciiiiiijjjaccccccccaaaccccccc
|
||||||
|
abccaaaaaaccccccccccccccccccaaaccccccccccccccccccccccccccccccccacccccccccccaacccccccccccccccccccccccccccccccccccccciiiiioijjjjaaccccccaaaaaacccc
|
||||||
|
abccaaaaaacccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaacccccccccccccccccccccccccccccccccccciiinnooojjjjjaaccaaaaaaaacccc
|
||||||
|
abccaaaaaacccccccccccccccccccccccccccccccccccccaacccccaacccccccccccccccccaaaaaacccccccccccccccccccccccccccaaaccccciiinnnoooojjjjjjkkkaaaaaaacccc
|
||||||
|
abcaaaaaaaaccccccccccccccccccccccccccccccccccccaaaccaaaaaaccccaaacccccccccaaaacccccccccccccccccccccccccccccaaaaccciiinnnouooojjjjkkkkkaaaaaccccc
|
||||||
|
abccaccccccccccccccccccaaccccccaccccccccccccaaaaaaaaaaaaaacccaaaacccccccccaaaacccccccccccccccccccccccccccaaaaaacchhinnnttuuooooookkkkkkkaaaccccc
|
||||||
|
abccccccccccccccccccaacaaaccccaaaaaaaaccccccaaaaaaaacaaaaacccaaaacccccccccaccacccccccccccccccccccccccccccaaaaacchhhhnntttuuuooooppppkkkkcaaacccc
|
||||||
|
abccccccccaaacccccccaaaaaccccccaaaaaaccccccccaaaaaacaaaaaccccaaaaccccccccccccccccccccccccccccaccccccccccccaaaaahhhhnnntttxuuuooppppppkkkcccccccc
|
||||||
|
abccccccccaaaacccccccaaaaaaccccaaaaaaccaaacccaaaaaacaaaaaccccccccccccccaaccccccccccccccaaaaaaaacccccccccccaachhhhhnnnntttxxuuuuuuuupppkkkccccccc
|
||||||
|
abccccccccaaaacccccaaaaaaaacccaaaaaaaacaaacacaaaaaaccccccccccccccccccccaacccccccccccccccaaaaaacccccccccccccchhhhmnnnntttxxxxuuuuuuupppkkcccccccc
|
||||||
|
abacccccccaaaacccccaaaaacaaccaaaaaaaaaaaaaaaaaaccaacccccccccccccccccaaaaaaaaccccccccccccaaaaaaccccccccccccchhhhmmmntttttxxxxuyyyuvvpppklcccccccc
|
||||||
|
abacccccccccccccccccacaaaccaaaaaaaaaaaaaaaaaaaccccccccccccccccccccccaaaaaaaacccccccccccaaaaaaaaccccccccccccgghmmmtttttxxxxxxyyyyvvvpplllcccccccc
|
||||||
|
abaccccccccaacccccccccaaaccaaaaaaaacaaaaaaaaaaccccccccccccccccccccccccaaaaccccccccccccaaaaaaaaaaccccccaccccgggmmmtttxxxxxxxyyyyyvvppplllcccccccc
|
||||||
|
SbaaaccccccaaacaaaccccccccaaaaaaaaacaaaaaaaaacccccccccccccccccccccccccaaaaacccccccccccaaaaaaaaaaaaacaaaccaagggmmmtttxxxEzzzzyyyvvppplllccccccccc
|
||||||
|
abaacccccccaaaaaaacccccccaaaaaaacaaccaaaaaaaccccccccccccccaaaccccccccaaaaaacccccccccccacacaaacccaaaaaaacaaagggmmmsssxxxxxyyyyyvvvqqqlllccccccccc
|
||||||
|
abaccccccccaaaaaaccacccaaaaaaaaacccccccaaaaaaccccccccccccaaaaccccccccaaccaacccccccccccccccaaaccccaaaaaaccaagggmmmssssxxwwyyyyyyvvqqqlllccccccccc
|
||||||
|
abaccccccaaaaaaaaccaacaaaccaaaaaacccccaaaaaaaccccccccccccaaaaccccccccccaacccccccccccccccccaacccccaaaaaaaaaaggggmmmssssswwyywyyyyvvqqlllccccccccc
|
||||||
|
abaccccccaaaaaaaaacaaaaacccaaaaaacccccaaacaaaccccccccccccaaaaccccccccaaaaaaccccccccccccaacccccccaaaaaaaaaaaaggggmmmossswwyywwyyvvvqqqllccccccccc
|
||||||
|
abcccccccaaaaaaaaaacaaaaaacaaccccccccaaacccccccccccccccccccccccccccccaaaaaaccccccccccccaaaaacccaaaaaaaaaaaaaaggggoooosswwywwwwvvvvqqqmlccccccccc
|
||||||
|
abccccccccccaaacaaaaaaaaaacccccccccccaaacaccccccccccccccccccccccccccccaaaaccccccccccccaaaaaccccaaacaaacccaaacagggfooosswwwwwrvvvvqqqqmmccccccccc
|
||||||
|
abccccccccccaaacccaaaaaaaacccccccccaacaaaaacccccccccccccccccccccccccccaaaaccccccccccccaaaaaacccccccaaacccaaccccfffooosswwwwrrrrrqqqqqmmccccccccc
|
||||||
|
abccccccccccaacccccccaaccccccccccccaaaaaaaacccccccccccccaaccccccccccccaccaccccccccccccccaaaacccccccaacccccccccccfffoossrwrrrrrrrqqqqmmmccccccccc
|
||||||
|
abccaaaccccccccccccccaacccccccccccccaaaaaccccccccccccaacaacccccccaaaaacccccccccccccccccaacccccccccccccccccccccccfffoossrrrrrnnnmqqmmmmmccccccccc
|
||||||
|
abcaaaaccccccccccccccccccccccccccccccaaaaacccccccccccaaaaacccccccaaaaacccaaaccccccccccccccccccccccccccccccccccccfffooorrrrrnnnnmmmmmmmccccaacccc
|
||||||
|
abcaaaacccccccccccccccccccccccccccccaaacaaccccacccccccaaaaaaccccaaaaaaccccaaaccacccccccccccccccccccccccccccccccccffoooonnnnnnnnmmmmmmccccaaacccc
|
||||||
|
abccaaacccccccccccccccccccccaaaaaccccaaccccaaaacccccaaaaaaaaccccaaaaaaccccaaaaaaaccccccccccccccccaccaccccccccccccfffooonnnnnnddddddddcccaaaccccc
|
||||||
|
abccccccccccccccccccccccccccaaaaaccccccccccaaaaaacccaaaaacaacccaaaaaaaccaaaaaaaacccccccccccccccccaaaaccccccccccccfffeonnnnneddddddddddcaaacccccc
|
||||||
|
abccccccccccaaaccccccccccccaaaaaacccccccccccaaaacccccacaaacccccaacaacccaaaaaaaaacccccccccccccccccaaaacccccccccccccffeeeeeeeeddddddddcccaaacccccc
|
||||||
|
abcccccccccaaaaccccacccccccaaaaaaccccccccccaaaaacccccccaaaacccaaacaccccaaaaaaaaaccccccccccccccccaaaaaaccccccccccccceeeeeeeeedacccccccccccccccccc
|
||||||
|
abaccccccccaaaaccccaaacaaacaaaaaaccccccccccaacaaccccccccaaaacaaaacaaacaaaaaaaaaacccccccccccccaacaaaaaacccccccccccccceeeeeeeaaacccccccccccccccaaa
|
||||||
|
abaaacccccccaaaccccaaaaaaaccaaaccccccccaaacccccccccccccccaaaaaaaacaaaaaaaaaaaaaaacacaaccaaacaaacccaacccccccccccccccccaacccaaaacccccccccccccccaaa
|
||||||
|
abaaaccccccccccccccaaaaaaccccccccccccccaaacccccccccccccccaaaaaaaccaaaaaaccaacccaccaaaaccaaaaaaaccccccccaaccccccccccccccccccaaacccccccccccccccaaa
|
||||||
|
abaaccccccccccccccaaaaaaacccccccccccaaaaaaaaccccccccccccccaaaaaaaaaaaaaacaaaccccccaaaaaccaaaaaaccccccaaaaccccccccccccccccccaaaccccccccccccaaaaaa
|
||||||
|
abaaaccccccccccccaaaaaaaaaacccccccccaaaaaaaacccccccccccaaaaaaaaaaaaaaaaaaacccccccaaaaaacaaaaaaaaaccccaaaaaacccccccccccccccccccccccccccccccaaaaaa
|
5
day12/sample_input.txt
Normal file
5
day12/sample_input.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Sabqponm
|
||||||
|
abcryxxl
|
||||||
|
accszExk
|
||||||
|
acctuvwj
|
||||||
|
abdefghi
|
86
day12/src/main.rs
Normal file
86
day12/src/main.rs
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
use petgraph::{algo::dijkstra::*, prelude::*, visit::Reversed};
|
||||||
|
|
||||||
|
fn char_elevation(c: char) -> i16 {
|
||||||
|
let elevation = match c {
|
||||||
|
'S' => 'a',
|
||||||
|
'E' => 'z',
|
||||||
|
c => c,
|
||||||
|
};
|
||||||
|
|
||||||
|
((elevation as u8) - b'a') as i16
|
||||||
|
}
|
||||||
|
|
||||||
|
fn travelable(dest: char, src: char) -> bool {
|
||||||
|
char_elevation(src) + 1 >= char_elevation(dest)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
const INPUT: &str = include_str!("../input.txt");
|
||||||
|
|
||||||
|
let grid = INPUT.lines().collect::<Vec<&str>>();
|
||||||
|
let grid = grid
|
||||||
|
.iter()
|
||||||
|
.map(|s| s.chars().collect::<Vec<char>>())
|
||||||
|
.collect::<Vec<Vec<char>>>();
|
||||||
|
|
||||||
|
let mut graph: DiGraphMap<(usize, usize), u8> = DiGraphMap::new();
|
||||||
|
|
||||||
|
let height = grid.len();
|
||||||
|
let width = grid[0].len();
|
||||||
|
|
||||||
|
let mut start: (usize, usize) = (0, 0);
|
||||||
|
let mut end: (usize, usize) = (0, 0);
|
||||||
|
let mut starts: Vec<(usize, usize)> = Vec::new();
|
||||||
|
|
||||||
|
for i in 0..height {
|
||||||
|
for j in 0..width {
|
||||||
|
graph.add_node((i, j));
|
||||||
|
|
||||||
|
let c = grid[i][j];
|
||||||
|
if c == 'S' {
|
||||||
|
start = (i, j);
|
||||||
|
starts.push((i, j));
|
||||||
|
} else if c == 'E' {
|
||||||
|
end = (i, j);
|
||||||
|
} else if c == 'a' {
|
||||||
|
starts.push((i, j));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in 0..height {
|
||||||
|
for j in 0..width {
|
||||||
|
let c = grid[i][j];
|
||||||
|
|
||||||
|
let up = i.saturating_sub(1);
|
||||||
|
let down = i + 1;
|
||||||
|
let left = j.saturating_sub(1);
|
||||||
|
let right = j + 1;
|
||||||
|
|
||||||
|
if left != j && travelable(grid[i][left], c) {
|
||||||
|
graph.add_edge((i, j), (i, left), 1);
|
||||||
|
}
|
||||||
|
if right < width && travelable(grid[i][right], c) {
|
||||||
|
graph.add_edge((i, j), (i, right), 1);
|
||||||
|
}
|
||||||
|
if up != i && travelable(grid[up][j], c) {
|
||||||
|
graph.add_edge((i, j), (up, j), 1);
|
||||||
|
}
|
||||||
|
if down < height && travelable(grid[down][j], c) {
|
||||||
|
graph.add_edge((i, j), (down, j), 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let res = dijkstra(&graph, start, Some(end), |_| 1);
|
||||||
|
println!("{} steps from ({}, {})", res[&end], start.0, start.1);
|
||||||
|
|
||||||
|
let res = dijkstra(Reversed(&graph), end, None, |_| 1);
|
||||||
|
let mut min: (i32, usize, usize) = (i32::MAX, 0, 0);
|
||||||
|
for start in starts {
|
||||||
|
if res.contains_key(&start) && res[&start] < min.0 {
|
||||||
|
min = (res[&start], start.0, start.1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("{} steps from ({}, {})", min.0, min.1, min.2);
|
||||||
|
}
|
8
day2/Cargo.toml
Normal file
8
day2/Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "day2"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
2500
day2/input.txt
Normal file
2500
day2/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
3
day2/sample_input.txt
Normal file
3
day2/sample_input.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
A Y
|
||||||
|
B X
|
||||||
|
C Z
|
92
day2/src/main.rs
Normal file
92
day2/src/main.rs
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
#[derive(PartialEq)]
|
||||||
|
#[repr(u8)]
|
||||||
|
enum Move {
|
||||||
|
ROCK = 1,
|
||||||
|
PAPER = 2,
|
||||||
|
SCISSORS = 3,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[repr(u8)]
|
||||||
|
enum Outcome {
|
||||||
|
LOSS = 0,
|
||||||
|
DRAW = 3,
|
||||||
|
WIN = 6,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TryFrom<char> for Move {
|
||||||
|
type Error = ();
|
||||||
|
|
||||||
|
fn try_from(c: char) -> Result<Self, Self::Error> {
|
||||||
|
match c {
|
||||||
|
'A' | 'X' => Ok(Move::ROCK),
|
||||||
|
'B' | 'Y' => Ok(Move::PAPER),
|
||||||
|
'C' | 'Z' => Ok(Move::SCISSORS),
|
||||||
|
_ => Err(()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::fmt::Display for Move {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
match self {
|
||||||
|
Move::ROCK => f.write_str("Rock").unwrap(),
|
||||||
|
Move::PAPER => f.write_str("Paper").unwrap(),
|
||||||
|
Move::SCISSORS => f.write_str("Scissors").unwrap(),
|
||||||
|
};
|
||||||
|
|
||||||
|
std::fmt::Result::Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
const INPUT: &str = include_str!("../input.txt");
|
||||||
|
|
||||||
|
let mut your_score: u64 = 0;
|
||||||
|
let mut their_score: u64 = 0;
|
||||||
|
|
||||||
|
let lines = INPUT.split("\n");
|
||||||
|
for line in lines {
|
||||||
|
let mut tokens = line.split(' ');
|
||||||
|
|
||||||
|
let their_move = tokens.next().unwrap();
|
||||||
|
let your_move = tokens.next().unwrap();
|
||||||
|
|
||||||
|
let their_move = Move::try_from(their_move.chars().next().unwrap()).unwrap();
|
||||||
|
let your_move = Move::try_from(your_move.chars().next().unwrap()).unwrap();
|
||||||
|
|
||||||
|
let outcome: Outcome;
|
||||||
|
if their_move == your_move {
|
||||||
|
outcome = Outcome::DRAW
|
||||||
|
} else if their_move == Move::ROCK {
|
||||||
|
outcome = if your_move == Move::PAPER {
|
||||||
|
Outcome::WIN
|
||||||
|
} else {
|
||||||
|
Outcome::LOSS
|
||||||
|
};
|
||||||
|
} else if their_move == Move::PAPER {
|
||||||
|
outcome = if your_move == Move::SCISSORS {
|
||||||
|
Outcome::WIN
|
||||||
|
} else {
|
||||||
|
Outcome::LOSS
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
outcome = if your_move == Move::ROCK {
|
||||||
|
Outcome::WIN
|
||||||
|
} else {
|
||||||
|
Outcome::LOSS
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
let outcome: u64 = outcome as u64;
|
||||||
|
your_score += outcome;
|
||||||
|
their_score += 6 - (outcome);
|
||||||
|
|
||||||
|
let your_move: u64 = your_move as u64;
|
||||||
|
let their_move: u64 = their_move as u64;
|
||||||
|
your_score += your_move;
|
||||||
|
their_score += their_move;
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Your score: {your_score}");
|
||||||
|
println!("Their score: {their_score}");
|
||||||
|
}
|
8
day3/Cargo.toml
Normal file
8
day3/Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "day3"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
300
day3/input.txt
Normal file
300
day3/input.txt
Normal file
@ -0,0 +1,300 @@
|
|||||||
|
FzQrhQpJtJMFzlpplrTWjTnTTrjVsVvvTnTs
|
||||||
|
mScqSqqgcfPCqGPZcfGNSvTNsVVNSjNvWSNsNz
|
||||||
|
fPcPGqgCcHgFzQpJJtHtJH
|
||||||
|
DZDqqlrjplDHrNCmnBcHBMCRcJzb
|
||||||
|
RQFLStFvdcBbzdJbJM
|
||||||
|
PThQtwftTPFvtTPhvtFtfFtpZZllwjRNlsqNqqZjwpGlrZ
|
||||||
|
pPwtqgwJZPJLgQqSFlqhFFlqMd
|
||||||
|
DBmCWBBDWTRGvcVRTCCnnfQlFSdlzfhfdMWQfjhhQz
|
||||||
|
drmBVVCRgprPtrZp
|
||||||
|
HznjQjvmzDMVrQnMLJMMlfWgPSlJGWWJPl
|
||||||
|
BdcqqhcdBRpFhhZBthhctdJSJJWfgGFlJCSFgbWPCDJS
|
||||||
|
NdRTZdNqBwqtthpRBTTRqdtZrsLQVzrrzjzDwDsnmrQrnsrr
|
||||||
|
HZFZCFzZWszqsRTBZTNMhmthVTmhDppmMQVPpm
|
||||||
|
wjvSbJddvrvlrvnJSJJvlJmhPlhVPVtGVpQDBVMpphQP
|
||||||
|
frbrfrcvvnvjfwbcJgrrCBRsCFsNzRgRCHCqssRH
|
||||||
|
dDFNqNqZqPLNqvqTTvCLSPdZssGHClJQJcRHJGHHcHBcsMsQ
|
||||||
|
lrjmWgWWrhjgrppQHHMQrsQRJGcBJc
|
||||||
|
lVlmnwjmdTTSvVFN
|
||||||
|
FWNFHvQPmLGwwwSHtswwln
|
||||||
|
RfMJcDdfdcfdddfZjdchrtZmSmCZVtqVnZmrnrtC
|
||||||
|
JMmJcfjjphcghpgjhRGzGzBBGPFGNBvPTpFL
|
||||||
|
cVPVwStmmcQPBQPpSCppwhHZNNqHszNBhsNRNjqHzj
|
||||||
|
MfWdDgvdbnvgMTWgvgZfzmsZJHzNhqjqjRhJ
|
||||||
|
MDWMWGndMgFDnFLDwQrPPCSrCSVrlmGS
|
||||||
|
QLZmPdRdWmMsMDWZmsLWWrhMHcHGzHvGzFcvrvzNrc
|
||||||
|
tplSbLVBlvHHcFNnSr
|
||||||
|
VqfgwLlCJWmWQTfW
|
||||||
|
nRWvlvRbtLvdMCPFGL
|
||||||
|
wrfsJNNGhNzGrTgDMDLgPMLPfq
|
||||||
|
wcVhJQhwhrrBpmVblBRGSG
|
||||||
|
HHHcggrZLcQQcQll
|
||||||
|
GzfzTRTzmmFMwSNSwdSJQtNLNB
|
||||||
|
TGbmLMFTzVVVTMzmFMfFPMHPZhnjZCpHnhgnZnPWCPZZ
|
||||||
|
MRwwpVMHRspqVqwmccDlDrcHBBZgBl
|
||||||
|
jQfQQQjWWFBgmcgDfcZg
|
||||||
|
hvvSQzSnQQSWWQWSjTZVTRMshwVCssppwV
|
||||||
|
pvrTvCvtFppCHMMZcdDFdcZM
|
||||||
|
wLjTQnqljjSnlwjqjRgLcHHHMBDMZhBMHgHcbBDh
|
||||||
|
mqjqlSNqRqwSRrWCvzGmtfTfzs
|
||||||
|
TWScDCqCQQVBWDqWHsHswwBgRJzRhhHp
|
||||||
|
dPttGrvFfGjMjnjvshsJgsJLgghRgH
|
||||||
|
rFMlGdtjPffNnnrffSNcVCDqQqCQRqQRRN
|
||||||
|
GmBRbVpPbmJcwggBBgWW
|
||||||
|
LjsTCNNtddjHqLLgWwccqgfq
|
||||||
|
nsjNjntNtjHCsDwZmwZZVmmGSvSD
|
||||||
|
bwDDgNFtMMDbFsMbFwWWVcRcSpcgjgQWhWSp
|
||||||
|
lfTJJlvdfCffccWppRjRlcSc
|
||||||
|
RnzGdJJmsMNnMFtM
|
||||||
|
bsBTFsqqTTmFZTsQBWWznWCRshlJNJlCVh
|
||||||
|
GjGnDvDjvjPppHwwpwgrPPClJhNVRCzhhzJWlWlhNlvJ
|
||||||
|
ffdgLrgdLrDjdfHPbbZbttcBbcbLmntn
|
||||||
|
TNTwwvTTHNtTHNLLVqtqTSZBJnrnhhbrFJjZjnVZgghF
|
||||||
|
cplWfRlzcWfRCZZhFrGjBfjZjn
|
||||||
|
pddzDsRpDcclzCQMWBvNSmTTSqdvPPvqwqtT
|
||||||
|
DQTttwwLtQtVSDMJDRmmSS
|
||||||
|
ffsWfvrBWrPvwJhPhPSMPMVn
|
||||||
|
WsvsggFvwNLgHtNQ
|
||||||
|
llBbVDMTlFVdFDTbVggSVsqZqZZZqqvNJZJRNRWgtv
|
||||||
|
HhpjcHHvjPsqCsWcNcsq
|
||||||
|
GfpvnPvwFDTTFFDw
|
||||||
|
GMmFGMGFFgVwQHQwwM
|
||||||
|
cJtZNtZTbThcZtcZJJtTZWJPllgNgpPvVgpjHvQpRpHQNg
|
||||||
|
hWcJZcnhcJznbcBZLqSLDfCmHqnqCLsD
|
||||||
|
zQpjLpnhnsHTnlQLrMCCHPFrvvCMPcHm
|
||||||
|
ZfgdSBtNqBwlgSDfZDwtqSFvJCvrPrVvFmwCJFvrmmFV
|
||||||
|
dfbRNZBqDtgRNBNNNljLLjhGRGGWGLGTRhjz
|
||||||
|
hhrnfBzhtzZgDgDnBfrfDZsRpMNCNNWjwCCfGQGGNGCGQC
|
||||||
|
lcdPmHLSPDSdFDpQMLjCQQQCRGpN
|
||||||
|
lJSSbmPdVdVvdHbvSDFHHPlZqgBnttzgTsssTrqgbZbsTT
|
||||||
|
FsdsShrgggLDdbSDsgrGrlWHTpfRpTjjfFTzRTRjBWWp
|
||||||
|
mPvqCmJCqJNnPvPNPCvvLTTVjHjzNWHHTWRBRVTWVz
|
||||||
|
wJLvqPZmJtccncvZmJqqrghDGQwbdSGdsgGgQgQr
|
||||||
|
zFwtNJGtNFlpnwHccZjZbcpprsmc
|
||||||
|
PWQfBWhBgQgTWQRLThBqMSVDSbbDRsVDmsmZsSZDjr
|
||||||
|
fvQfWBfLqfTqhLhCvNFttJlCwGrrCC
|
||||||
|
fNrGLNrfNrGjllRRRPmWVL
|
||||||
|
tbJdcFbSSssZSmmpFcsSbwDWVWBlllVPDnnjBFjDRnBF
|
||||||
|
ZZJcvZctgNmmvMGhQm
|
||||||
|
HhhjFRhgrcRTFLvWVJVQWJVHDHQJPP
|
||||||
|
GwCmwBfGzfSCzCfwtmtzzJVWSVJJZrbWQQQqJJDZVJ
|
||||||
|
mtfzpGdststtBmfmCwrGRFcTcvjngjFnRcLnpLLn
|
||||||
|
rrwjdwLgVmVwHrfPCJPQBCBGmPtt
|
||||||
|
ccNZqbNnMMblNpTlNpnhhBPSJsQhJtJtChPJqS
|
||||||
|
vTWvNcWNWTFvnnvcgjzDLVQLgHVwWDrW
|
||||||
|
jNPgbNHbfLJgLzfz
|
||||||
|
ShvhhFVVDShFVqMSSSvZfffvPLtBBBBJJlpfLJJv
|
||||||
|
DqhnShhMnZZwCSDCMhChrRnNrNdNQbHNNPmjmdHN
|
||||||
|
VQVZGQFnzFTSsBfgzgfs
|
||||||
|
rjlpjtDrtMLZPMtPtpPZPwCsgSHgMHCCmCTWsgBWSBmg
|
||||||
|
pjvDqLwrlDtwqtqNLvtjpPPwRNbQRncQVQddZhRhJQbJncbG
|
||||||
|
PsBSqnSdQsFhmmmnppFc
|
||||||
|
TRhNvrTCvNTHVcfHbJVTpc
|
||||||
|
rhtWvGWLrjRqdSqqLLqdld
|
||||||
|
vPhfqPJvrMrnffDDhvpMjdzGMLdLLQpllLGQ
|
||||||
|
mbmcFSScGbSCcQlzwQQlclsg
|
||||||
|
BSGVCmCTZWCGGvnvfZHqqrDhHN
|
||||||
|
GSRfrzGRhzsGChjTBBlqBgjgCTCn
|
||||||
|
wHQwtDVDHwHHDJcDWJZwzHZBqTnnBFlvjFgBqnljjvBdBZ
|
||||||
|
JNmVJpVmNtDHJWHrbfPLhbGhrzRbpr
|
||||||
|
WcWcbzNPbDwBNvWBwRMPQmJZQRQZftRZGP
|
||||||
|
LhVHFgggTHCFHhfMQQSMMGQRMLLM
|
||||||
|
qnrqppFVHphqfDsNbzjrzbrN
|
||||||
|
cwgDrdLSrBrvvhDzCljjTW
|
||||||
|
VHtVZpspQtMQsVRQppFVQVHtCdPTPTzdjvhTzTTPRvjjvWhn
|
||||||
|
QQZpMdJsQFJHtMHdScwLwLJGrSScSwqw
|
||||||
|
ZsjNflGfRfRPrZNRFcffLwJdwcLdDBnwzzzDznVn
|
||||||
|
CTGvhhTqbtbgTqLJWdDntzWWdnLw
|
||||||
|
phCMgmQGvvHCvMhbTQQFsNsNFPZSfZjffmNsll
|
||||||
|
CNpCJHLNhhSSHZPgrFlFFWgpFpmzjj
|
||||||
|
qQttDVDwQGdQGvqDQfwbcVrrlljjzzmzrVJgrr
|
||||||
|
nvMDsqqqQvfvsqDnRSZHJPPZHhLHLS
|
||||||
|
RNNrrPfDNRQwQhjscghMqs
|
||||||
|
WVZlHvnZqtlLVLvwjwhsggTstMhwTw
|
||||||
|
vGHWLJlVWlmLVqRCGCFFNfqqGf
|
||||||
|
MNzqCnvqvqvCVLBvvCVCpVcRssncrPSTWGrPSPdGTcrP
|
||||||
|
hmHwFmQjFlhtZmHwtZjjddSSGcsdPrrGcQQQRGPW
|
||||||
|
fHbbFjlhZwmtwhfjmmwmmLbpLqzqvBzLzCvLNRMbNB
|
||||||
|
tQfLrtQPrrfDSSCVlDfLSrmbBjGvWjjLmWWWpWNNppmv
|
||||||
|
wdHhRTTndnRThdvnBFGpNBMnpvvp
|
||||||
|
JdqTHTHHRdqzsJRRzTRHscJdDSGCfDlqQZqlfZrZZCffqSSQ
|
||||||
|
hQMWLsgGJMMhsCHggQWhgspDWFPzZvPvptDvzvmtdtdF
|
||||||
|
BrBlrTBrNRbfnjNQlZDztPvpmpppmzvfdd
|
||||||
|
jQlQlqQVbVcsMgMgChhJVs
|
||||||
|
MtFMCTWRFRRtCRTTRTMGJddjLdstHvBzBHzHVVpL
|
||||||
|
lZSDnbDlnZPrbHpzJJsdSVJpBL
|
||||||
|
nNghhPrlZlgDTFhCfMFJRMQF
|
||||||
|
RGpPFZPRQZPFRGvpPQPpjvpmhnnCMjhmhgBgVgMVWBVgVM
|
||||||
|
wLtfNdNHmrNthCBgCbhnngWd
|
||||||
|
srSfwHfszsNmtswlrqQDGQFDRPJGDvzRppRJ
|
||||||
|
GVFFGvVWZLFsmssFRNfVvmGGJPpJTTqDBvTpqlpDvqbBtTPl
|
||||||
|
gQhzzChzrMQhjpzlzWzJpPpBJb
|
||||||
|
ghgWjcCjMgCHWdQMhdjChCmfwmRRGZZGVHLZHRfmNwVs
|
||||||
|
DnDVhdnrfSfpcGGjQQGdJddJ
|
||||||
|
bPWPRbRsRMsHNzDqTZcGBcqZqmmN
|
||||||
|
HvwPvvzMPwDCChDVwS
|
||||||
|
vTCCvTfWFDTtRPMvfWFlDFHBqGLpLzbwBgWwqzGqbBbB
|
||||||
|
cQcSNchSJSZShVJNnZrhSqBpgwGHHtGwqtbwLbqpbr
|
||||||
|
JNnJVsJscNstNhQsjnVVNlFfMmTMFfCTfjFvfPRPPF
|
||||||
|
VLFBsgffNFNqRvbz
|
||||||
|
ChltjTdjDhHpHZvdpjjZhwCpbNrbSzzbrNGMTMMNSMbWWNSN
|
||||||
|
vQjpttQhHnLsBQVLsQ
|
||||||
|
mbzQgTzRVVbsVdQgzzVRddmztFGWNGNNWnGtFSGBsrCNWCrC
|
||||||
|
jfJjvPPwLDcHDPvDDPDppLCWCFBGWntCBnrtFcrFWTGn
|
||||||
|
wpJPLjvpTTDpwhfgzmVMbqhdhVRgzl
|
||||||
|
PlcqbWClLmnqZVLq
|
||||||
|
THwdrrhddhhfJJhwLJhpQnDVnznnmZQQnSpfpD
|
||||||
|
vrFdvGsGHhhhwHjFGrFGJHdMCCcNgbWMPccRRccMFLNPPP
|
||||||
|
tbppJqcNtJnZzRJbPFsFPHfZrrshFDjj
|
||||||
|
GdwgwlLgGCndsDFrhDHHFF
|
||||||
|
SSlLnmmvqWNqmcqb
|
||||||
|
ZPFPPTZpZSWzCMMSzPBsFvhtlQvJQQtJhsVs
|
||||||
|
dmNbmgbrwDNmbcDgwNdcwdLsnhlJlnvtsBJnhVQqqnstLB
|
||||||
|
bNGfDGgHHVwbwNwVfgmRMzCzzCSHjSRZSZCTRS
|
||||||
|
dDTffQdqQQLBLnVLLQvL
|
||||||
|
rrBHZZcgJcrLvNLtLgRLbN
|
||||||
|
cjjJhrFlhZwFFzwJzmTBBdmTsDPzDsBP
|
||||||
|
ClGrJJMNCrGQqlcPvWgnDP
|
||||||
|
ZBvbjHpSwBVVVcWjjjqQ
|
||||||
|
BLSbbwsHSTBHwmLHHLbBsSTFdrfvCrtmdzfGJzrdzGJddGfh
|
||||||
|
gljWRwmSjtJWjJtJjgjSZfVSTVVHGZSVHcVchZ
|
||||||
|
pBzLFQpPsFBGcGBTThfB
|
||||||
|
pFpQzFLPLpvQFQnLbsqqGddgjbmwRldwtWmlGWwj
|
||||||
|
PDQDMFQBMfWPvjdLLndLjrmsMj
|
||||||
|
qZqVzTRRqHtvZGGtVqTTzVjLLsrmJCddnLjrjHsrhdCr
|
||||||
|
GzwcZtqNzqvNqwzZVGRwSzbpWfFbWPlWFpNDBfQfFNNf
|
||||||
|
dfRszdzVdsjwdhLwCCqwGllHvPGPwG
|
||||||
|
SpJtBLFgcGqHQClqZF
|
||||||
|
JrttrtcTmSSLrmtBTrNgnBJjbNhhbhzRdsVdMhNjhMMhVd
|
||||||
|
MPFSCfSMqVSBGrtzlvccfQctzbzl
|
||||||
|
hZNjTHWWTZwshbLvmlWpBzmbmm
|
||||||
|
dRTTJNDNhjsJqBBMMgrJPVVr
|
||||||
|
WnVzDMjlDVWwwHgwhmgNhNNsJh
|
||||||
|
qfvrLNCcbLdvpcvbrPPqCsGhSJGTTBspTshBpTBBms
|
||||||
|
ZLvvZfrPfPCLbCFFzjVQzRnNNMVzDQ
|
||||||
|
nllbFTTpTFTBcnCjQPqQdZRQZhCb
|
||||||
|
tvWszrrztvSmzQQvrDmZRjjjPPDVqPRdZRdCPd
|
||||||
|
gfzvSsftgQHQHgQl
|
||||||
|
GVbHRRGRLpdmGWTm
|
||||||
|
gSPPltPlrlvccFccPlcJNCTpnnmpMCLMMmWfdRmMSS
|
||||||
|
FzNJRhhvPFRvQwzqjqzBHZZj
|
||||||
|
PhZSpFBPBFsNmjBVllltBj
|
||||||
|
JMGLnrrnbfffrdqRqPHnnqLDVTDDjgmRgwtmjDljlDVlwl
|
||||||
|
LHMqPqPnnqGLWJPMnndrGfSWppzvvFSChFFFvvzQSQZz
|
||||||
|
RSWWssbvnnCqZnWsRCnssWrTggNhgbNHBgQjhhQBgjNT
|
||||||
|
mcpzcppzczcDGVcPcDLLGLjmrMNTNtQNHhMHrQBQNTgN
|
||||||
|
LVpPfcjjWvsFFnFf
|
||||||
|
MpddpdCpJdJlbdMvBHMnnsHqSRvG
|
||||||
|
PWvZfFmZrrfmwWwFznBnqRRSGcsBVmVBRG
|
||||||
|
zjzzhQPQvzjLPQzwffrwrtlTCDtJDlgJLltpTTJlTl
|
||||||
|
TvTWjjzpznGttFFZccrrPrSZllcB
|
||||||
|
gNNSqHMqsMHQJHNZCDDCZDqLZdlZBD
|
||||||
|
SMQNSRNbRRHwhwhsRmtnvWVmmnbGnjmpGn
|
||||||
|
ccSVQjCQddTsFJcH
|
||||||
|
gLppBfgfmvCRFdsddTJJgb
|
||||||
|
WMLMmWGGBZWZLCtvDhlSSDGlwhSPSzSP
|
||||||
|
TpqVGVHFQGmqSqPZdccNCzzhdwCjNG
|
||||||
|
fffbbvftMrBMDDcCccCZCjlvhCCd
|
||||||
|
RLWMnbftDhnMRtfBftRJMtLMgFgHmmpmPmSmmQFPPLHHVTQS
|
||||||
|
nRvwQSDNcpVJJcJR
|
||||||
|
qZMjBhjhZMMBzLBGLGrjJbTPVTpbdPPdVbVb
|
||||||
|
ZZpmFFZlfGqfmmGMzlfmMmnWQDtHtSvnWWNSHSSstFtS
|
||||||
|
bFDGZjGDbbRSgLtN
|
||||||
|
CphJVfJWCTBgvfLHNRcwnt
|
||||||
|
WVhPWBTzzChzhhhBmrpPPCJZDQtdMlrjFQdrFqsjdrQsFG
|
||||||
|
ZBpVQHHVMMWWdmmLWw
|
||||||
|
lQhhrjcRttrqbvQLNwdDWzmNSDmStz
|
||||||
|
QbGqhcbvcsqvCCHnsCZHCnTn
|
||||||
|
tlWtQTTTJjTQtVnmrbnPWVShVC
|
||||||
|
MDMGGzsHcwFgGZBqrmmPSnbqVmNVGC
|
||||||
|
sZFPwHcMZDBRTlvQQJttTQTR
|
||||||
|
FhVRfGptMGMnZhRFBNRBCCNHHNvTNTRC
|
||||||
|
zmwrLLSjrbzmNlcvvrHvDPCN
|
||||||
|
JLwjQdSbjdbSdqJQFGVqFVMgnGHMfGVV
|
||||||
|
fffZWrJqZSHWTWHqSvrgDhggzRjttsDhpDgs
|
||||||
|
PGlBLcBBbnnbLLFbGLBjRgjFTFVzshtzpgsppz
|
||||||
|
TGCPnMPQlGnPmclPlnnQmbmHJvNvfHdqwddwvvZfCNHCfW
|
||||||
|
ClLwpspTPrTFZCdzFbZdbQ
|
||||||
|
RRMWfRgWVRMRQBZZScVczVGFbjNb
|
||||||
|
MfnvMqWmslvDhQPw
|
||||||
|
hdndSdqsTddBhdcmmNHFDcqHttPF
|
||||||
|
JjMzzMZQGwZGZJzMzZJQzGJFvPvNPtFmvmNmDvcFtvDHMv
|
||||||
|
gZwzQwJfGVJQJbGLBsSTSTdTbCWDBSnd
|
||||||
|
ZZCHZRzMZGRMhMMVVFNThrdd
|
||||||
|
SgsccSPmmgqssSlqsgcmscSqlhpFdVThjphNrdrhjdwdhFJN
|
||||||
|
vmttqTcqvLqqmPccmqSBbRWnWzQZZZZBHnQCzHDH
|
||||||
|
GgPnGdSPBpGsLTBL
|
||||||
|
rVNJjmwZqtZZshltFTtvRFsL
|
||||||
|
mqmWrZVqWjrqZMNwPMQQbsddgdsbsgPz
|
||||||
|
LZLVvjZrggHLJggSZDgrnPnQnRnppVRllntRdPFz
|
||||||
|
chMCzbqGmhNhhbBCMBdFnpfqFnltRRQnlPpQ
|
||||||
|
TChmWcMMTmBswJzZZrWrvzgg
|
||||||
|
gngRNBNRBsNFFBgfgbLLLnqdSLvLTcbLbd
|
||||||
|
GWtlChlVMllcZSDWSLbdZL
|
||||||
|
lljjGlhMGrGJpsFdRJfsfzfz
|
||||||
|
jVTdrnGQcQtTTTFQqBqsgHHFgsqf
|
||||||
|
ZZLbPLzDzPZCmsgqsBHt
|
||||||
|
wDzDlPblRDPLPvhvwtdnnhdrnrMGWMVGMThj
|
||||||
|
spjjpjvjpjmQjrpCMfSlfzrPBl
|
||||||
|
dHFntHWnnbRVFtnbcqHFzBCCCPzfPMlcCSlgllzc
|
||||||
|
RLbVWHnnSWtnHFbdbVRdNNtQsjsQTjDLwmGTmTssQwmLGJ
|
||||||
|
JbJJSLMhRMSLhNqqwFDwFNcFqL
|
||||||
|
GcpnGnznnpzpzGpffNTNTwTfwdDNNdTFdD
|
||||||
|
nllnlPGWQWHcGpzzQGGzGvHGJbVVtJSChQVbmtmVJrmrmbRm
|
||||||
|
GFsFrzwrflmtdtbltG
|
||||||
|
ggLPDngCJncNLJRDwgnllmJqjWMjhjhjWWmWjj
|
||||||
|
nBNRNPgpRgDLTgNwfsSHVBQHVHwsZr
|
||||||
|
WwvnvWvcFtwtSFSF
|
||||||
|
zBZZZRQSzMBSgSVJGjGTPTGFzCzmmj
|
||||||
|
fZDrpZZfRfMgSQDDBhgQghDHsnbrcNlWnnLWHLrHsWnllc
|
||||||
|
ZVncdPPwVPdhZngnqHWHNNvTHvlMvn
|
||||||
|
fSLjjLSGGBjTTHqvBqrMNT
|
||||||
|
RSSSDGRtSGZthTTctmtg
|
||||||
|
rtzrfJbgJHRfGRZLPR
|
||||||
|
hdVhlllmFlFPLwHmsRGGZP
|
||||||
|
nTWhRjTBTWlvNQgnJSSbrJtz
|
||||||
|
JgVTpBpfvgpTDDJFJvTgggtlFlNNMRLNNzNNZRNHMRCLlF
|
||||||
|
wbPWcSGbGqWDlnNWMMMCLMWZ
|
||||||
|
wrsGcbrcbcqwDwbcmGvQBQgTTsdVJgJsVdQf
|
||||||
|
mztrhgJtDrhgcrZmnhbnzbhcMTMPlBCPBGVGTMVGslCCPGDs
|
||||||
|
FLRQmjjFSQpQwLlPsMsCpvslvPCB
|
||||||
|
fNLLwSdSwWSWjwmrtczZhhrJzdzh
|
||||||
|
HHwCwJFmHZttZCfCSffSMHcVDMcPBRPcPRDhPghM
|
||||||
|
nvQLsTnLslnLvpzGTssnsRPDMhPgVPVgtcVMRPgVQQ
|
||||||
|
vnsTGWlTLsWTLLvNsGWlsZrwmZCJddjFmtJJNZFftj
|
||||||
|
hbjSTvSJTfcSwcPSPfTbfHszVVFpGnpJpsHFnHVVls
|
||||||
|
rtZrcQrRZZQrmZBQlCGppnppHzpVFCGR
|
||||||
|
WmLqmgNtcLNQWTbPvfPwbbdb
|
||||||
|
HzZgsdHglHlzdHsFtsNNJSlNcSpjcjlrrNVv
|
||||||
|
wqqWRPPqwmbcqPjQVvSPJJrVpv
|
||||||
|
qqBBqmWRhqRLqcBnhzzztgnTdDHnHsFsHn
|
||||||
|
rJPFVwwsrJwmdVrLWJvvRBWBvbzWlb
|
||||||
|
nDZcNGNpjTpHncvpZCDnTNZGhlWzQhWbpRRQlQhpWWSWLlQb
|
||||||
|
CDNntnCCHnvmqPfwtFdVqd
|
||||||
|
gqBwgBjCswwgqNBNCVDDTVdhlSDTDcZc
|
||||||
|
HvRRFMzRRRRMpHrtTllfhZHHSShHTf
|
||||||
|
PmlGLPrppMrrmFFmLMWRjbsjnsjwQNJWnbQjWgBN
|
||||||
|
pDggpFgRghZjBFPPnPPFrt
|
||||||
|
cwTfLwBVwCWbLcVTVVvrdndGjMHrnGJtnttdMC
|
||||||
|
NTVcWNvcBSpgNqspRQlN
|
||||||
|
DLDgFlDmNZfjfnJZSF
|
||||||
|
tctvttzvGGzvrHqtVVdwnJGSSnnjjZdWTdwW
|
||||||
|
zvpcrbpHpqJJsPbPlLlhmhglPQ
|
||||||
|
pvHHvssFCFZQNCftttdQdd
|
||||||
|
VgTGTTVGgLjDjlLGzgPVMTNwmcwQmMQfQtmdcmwMJwNm
|
||||||
|
TPjTDjfGWTLLljgzrWpZZbsqrFqhqbps
|
||||||
|
ppVLcfcwSLgpSLVLgWwtfshDNDqvWvGvlQZvDNHQHjqq
|
||||||
|
MPrzmdRrPPrCJFnMnMRRFRPdqqZQNQvjvZDGDlHhQvGNDG
|
||||||
|
BmBMBBJTMmPBJMMFCCFJRmrsTlVpVbpwLSVwLsgcwTVlVc
|
||||||
|
SSGzmFRzmRGLgSSmGMJFnvfvJnJVnJQnMl
|
||||||
|
cBpjHtjwNfcpNZtppHtCMlMPMlJBVlVQlvJPvJ
|
||||||
|
dNtNZwqWfqtqZWtHttsqHqrRrrdRTLbmmzSLmTGGmbrg
|
||||||
|
RrrddnrgnRbbgWdGrfnwgQwjDjDpvTpBQTwBPP
|
||||||
|
MHCStZJzSwvPjWQD
|
||||||
|
mcJWVHCCLcGLbdcn
|
||||||
|
PlMsdjPdGMjdPSrSjgddbLbmHHTszHZzpHmsTFvmpzZzmN
|
||||||
|
ntRJQVRfcQhcQWhnchBJWntTFTTTNTSpFtztmZFDTpDZ
|
||||||
|
hQfcfCBSwCccVJhSJnrPPGLqPlbPLCrqldgb
|
||||||
|
vgvWDMZvGpcqgqsP
|
||||||
|
tSdtjLHLQLHjdFdDddQSQhwlsGqwQlqqqhQsPhGc
|
||||||
|
tbRjtTLFRvTZDBrMrV
|
6
day3/sample_input.txt
Normal file
6
day3/sample_input.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
vJrwpWtwJgWrhcsFMMfFFhFp
|
||||||
|
jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
|
||||||
|
PmmdzqPrVvPwwTWBwg
|
||||||
|
wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
|
||||||
|
ttgJtRGJQctTZtZT
|
||||||
|
CrZsJsPPZsGzwwsLwLmpwMDw
|
76
day3/src/main.rs
Normal file
76
day3/src/main.rs
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
fn char_to_prio(c: char) -> u64 {
|
||||||
|
if c.is_ascii_uppercase() {
|
||||||
|
let ci = c as u8;
|
||||||
|
return u64::from(ci - b'A' + 27);
|
||||||
|
} else if c.is_ascii_lowercase() {
|
||||||
|
let ci = c as u8;
|
||||||
|
return u64::from(ci - b'a' + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
0
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
const INPUT: &str = include_str!("../input.txt");
|
||||||
|
|
||||||
|
let input = INPUT.lines();
|
||||||
|
let mut priority_sum: u64 = 0;
|
||||||
|
for line in input {
|
||||||
|
let compartments = line.clone().split_at(line.len() / 2);
|
||||||
|
|
||||||
|
let items: HashSet<char> = HashSet::from_iter(compartments.0.chars());
|
||||||
|
let mut new_items: HashSet<char> = HashSet::new();
|
||||||
|
|
||||||
|
for c in compartments.1.chars() {
|
||||||
|
if new_items.insert(c) && items.contains(&c) {
|
||||||
|
priority_sum += char_to_prio(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Priority sum: {}", priority_sum);
|
||||||
|
|
||||||
|
let mut input = INPUT.lines().peekable();
|
||||||
|
priority_sum = 0;
|
||||||
|
while input.peek().is_some() {
|
||||||
|
let lines = [
|
||||||
|
input.next().unwrap().clone(),
|
||||||
|
input.next().unwrap().clone(),
|
||||||
|
input.next().unwrap().clone(),
|
||||||
|
];
|
||||||
|
|
||||||
|
for c in b'A'..=b'Z' {
|
||||||
|
let c = c as char;
|
||||||
|
let mut count: u8 = 0;
|
||||||
|
|
||||||
|
for line in lines {
|
||||||
|
if line.chars().any(|x| x == c) {
|
||||||
|
count += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if count == 3 {
|
||||||
|
priority_sum += char_to_prio(c);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
count = 0;
|
||||||
|
let c = c.to_lowercase().next().unwrap();
|
||||||
|
|
||||||
|
for line in lines {
|
||||||
|
if line.chars().any(|x| x == c) {
|
||||||
|
count += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if count == 3 {
|
||||||
|
priority_sum += char_to_prio(c);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Priority sum: {}", priority_sum);
|
||||||
|
}
|
8
day4/Cargo.toml
Normal file
8
day4/Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "day4"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
1000
day4/input.txt
Normal file
1000
day4/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
6
day4/sample_input.txt
Normal file
6
day4/sample_input.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
2-4,6-8
|
||||||
|
2-3,4-5
|
||||||
|
5-7,7-9
|
||||||
|
2-8,3-7
|
||||||
|
6-6,4-6
|
||||||
|
2-6,4-8
|
40
day4/src/main.rs
Normal file
40
day4/src/main.rs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
use std::{cmp::min, collections::HashSet};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
const INPUT: &str = include_str!("../input.txt");
|
||||||
|
let input = INPUT.lines();
|
||||||
|
|
||||||
|
let mut count_complete: u64 = 0;
|
||||||
|
let mut count_partial: u64 = 0;
|
||||||
|
for line in input {
|
||||||
|
let (first, second) = line.split_once(',').unwrap();
|
||||||
|
|
||||||
|
let first: (&str, &str) = first.split_once('-').unwrap();
|
||||||
|
let first: (u64, u64) = (
|
||||||
|
first.0.parse::<u64>().unwrap(),
|
||||||
|
first.1.parse::<u64>().unwrap(),
|
||||||
|
);
|
||||||
|
|
||||||
|
let second: (&str, &str) = second.split_once('-').unwrap();
|
||||||
|
let second: (u64, u64) = (
|
||||||
|
second.0.parse::<u64>().unwrap(),
|
||||||
|
second.1.parse::<u64>().unwrap(),
|
||||||
|
);
|
||||||
|
|
||||||
|
let first_set: HashSet<u64> = HashSet::from_iter(first.0..=first.1);
|
||||||
|
let second_set: HashSet<u64> = HashSet::from_iter(second.0..=second.1);
|
||||||
|
|
||||||
|
let smallest_len = min(first_set.len(), second_set.len());
|
||||||
|
let intersection_len = first_set.intersection(&second_set).count();
|
||||||
|
|
||||||
|
if intersection_len == smallest_len {
|
||||||
|
count_complete += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if intersection_len > 0 {
|
||||||
|
count_partial += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Partial: {count_partial}, Complete: {count_complete}");
|
||||||
|
}
|
8
day5/Cargo.toml
Normal file
8
day5/Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "day5"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
511
day5/input.txt
Normal file
511
day5/input.txt
Normal file
@ -0,0 +1,511 @@
|
|||||||
|
[Q] [J] [H]
|
||||||
|
[G] [S] [Q] [Z] [P]
|
||||||
|
[P] [F] [M] [F] [F] [S]
|
||||||
|
[R] [R] [P] [F] [V] [D] [L]
|
||||||
|
[L] [W] [W] [D] [W] [S] [V] [G]
|
||||||
|
[C] [H] [H] [T] [D] [L] [M] [B] [B]
|
||||||
|
[T] [Q] [B] [S] [L] [C] [B] [J] [N]
|
||||||
|
[F] [N] [F] [V] [Q] [Z] [Z] [T] [Q]
|
||||||
|
1 2 3 4 5 6 7 8 9
|
||||||
|
|
||||||
|
move 1 from 8 to 1
|
||||||
|
move 1 from 6 to 1
|
||||||
|
move 3 from 7 to 4
|
||||||
|
move 3 from 2 to 9
|
||||||
|
move 11 from 9 to 3
|
||||||
|
move 1 from 6 to 9
|
||||||
|
move 15 from 3 to 9
|
||||||
|
move 5 from 2 to 3
|
||||||
|
move 3 from 7 to 5
|
||||||
|
move 6 from 9 to 3
|
||||||
|
move 6 from 1 to 6
|
||||||
|
move 2 from 3 to 7
|
||||||
|
move 5 from 4 to 5
|
||||||
|
move 7 from 9 to 4
|
||||||
|
move 2 from 9 to 5
|
||||||
|
move 10 from 4 to 2
|
||||||
|
move 6 from 5 to 4
|
||||||
|
move 2 from 7 to 6
|
||||||
|
move 10 from 2 to 3
|
||||||
|
move 21 from 3 to 5
|
||||||
|
move 1 from 3 to 6
|
||||||
|
move 3 from 6 to 9
|
||||||
|
move 1 from 8 to 9
|
||||||
|
move 5 from 4 to 5
|
||||||
|
move 4 from 9 to 3
|
||||||
|
move 17 from 5 to 1
|
||||||
|
move 1 from 6 to 2
|
||||||
|
move 16 from 5 to 1
|
||||||
|
move 3 from 3 to 6
|
||||||
|
move 6 from 6 to 4
|
||||||
|
move 1 from 2 to 4
|
||||||
|
move 4 from 1 to 2
|
||||||
|
move 2 from 6 to 2
|
||||||
|
move 28 from 1 to 3
|
||||||
|
move 1 from 9 to 7
|
||||||
|
move 1 from 8 to 7
|
||||||
|
move 1 from 5 to 4
|
||||||
|
move 1 from 2 to 6
|
||||||
|
move 1 from 3 to 1
|
||||||
|
move 3 from 2 to 5
|
||||||
|
move 1 from 6 to 3
|
||||||
|
move 4 from 4 to 7
|
||||||
|
move 5 from 5 to 2
|
||||||
|
move 1 from 5 to 6
|
||||||
|
move 6 from 1 to 3
|
||||||
|
move 1 from 6 to 2
|
||||||
|
move 26 from 3 to 6
|
||||||
|
move 2 from 7 to 9
|
||||||
|
move 4 from 7 to 3
|
||||||
|
move 19 from 6 to 3
|
||||||
|
move 6 from 2 to 4
|
||||||
|
move 5 from 3 to 2
|
||||||
|
move 1 from 9 to 7
|
||||||
|
move 26 from 3 to 8
|
||||||
|
move 6 from 4 to 3
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 1 from 6 to 7
|
||||||
|
move 6 from 3 to 6
|
||||||
|
move 6 from 6 to 4
|
||||||
|
move 1 from 9 to 2
|
||||||
|
move 2 from 4 to 9
|
||||||
|
move 22 from 8 to 2
|
||||||
|
move 2 from 6 to 5
|
||||||
|
move 1 from 9 to 1
|
||||||
|
move 1 from 6 to 5
|
||||||
|
move 1 from 7 to 5
|
||||||
|
move 3 from 6 to 7
|
||||||
|
move 2 from 6 to 1
|
||||||
|
move 1 from 1 to 5
|
||||||
|
move 3 from 5 to 9
|
||||||
|
move 4 from 8 to 4
|
||||||
|
move 2 from 1 to 4
|
||||||
|
move 18 from 2 to 1
|
||||||
|
move 2 from 7 to 8
|
||||||
|
move 3 from 9 to 5
|
||||||
|
move 8 from 1 to 9
|
||||||
|
move 5 from 9 to 3
|
||||||
|
move 1 from 9 to 8
|
||||||
|
move 2 from 9 to 4
|
||||||
|
move 2 from 7 to 8
|
||||||
|
move 5 from 5 to 7
|
||||||
|
move 1 from 9 to 3
|
||||||
|
move 4 from 8 to 4
|
||||||
|
move 1 from 7 to 8
|
||||||
|
move 4 from 4 to 3
|
||||||
|
move 2 from 8 to 3
|
||||||
|
move 1 from 8 to 9
|
||||||
|
move 2 from 1 to 8
|
||||||
|
move 3 from 4 to 5
|
||||||
|
move 1 from 8 to 4
|
||||||
|
move 1 from 9 to 3
|
||||||
|
move 1 from 8 to 5
|
||||||
|
move 8 from 1 to 8
|
||||||
|
move 11 from 2 to 9
|
||||||
|
move 12 from 3 to 5
|
||||||
|
move 1 from 3 to 9
|
||||||
|
move 1 from 8 to 5
|
||||||
|
move 11 from 9 to 3
|
||||||
|
move 4 from 5 to 9
|
||||||
|
move 3 from 8 to 7
|
||||||
|
move 3 from 7 to 8
|
||||||
|
move 1 from 5 to 8
|
||||||
|
move 7 from 4 to 3
|
||||||
|
move 1 from 4 to 5
|
||||||
|
move 1 from 2 to 8
|
||||||
|
move 3 from 7 to 6
|
||||||
|
move 3 from 4 to 8
|
||||||
|
move 1 from 7 to 9
|
||||||
|
move 2 from 4 to 7
|
||||||
|
move 5 from 8 to 1
|
||||||
|
move 3 from 6 to 5
|
||||||
|
move 2 from 4 to 2
|
||||||
|
move 1 from 9 to 4
|
||||||
|
move 1 from 8 to 6
|
||||||
|
move 1 from 2 to 9
|
||||||
|
move 1 from 8 to 5
|
||||||
|
move 3 from 8 to 4
|
||||||
|
move 3 from 4 to 2
|
||||||
|
move 4 from 3 to 9
|
||||||
|
move 17 from 5 to 9
|
||||||
|
move 9 from 9 to 6
|
||||||
|
move 1 from 9 to 3
|
||||||
|
move 5 from 6 to 3
|
||||||
|
move 3 from 6 to 3
|
||||||
|
move 8 from 9 to 5
|
||||||
|
move 2 from 8 to 5
|
||||||
|
move 1 from 4 to 8
|
||||||
|
move 1 from 5 to 3
|
||||||
|
move 1 from 8 to 5
|
||||||
|
move 3 from 2 to 6
|
||||||
|
move 3 from 1 to 4
|
||||||
|
move 7 from 5 to 1
|
||||||
|
move 1 from 2 to 6
|
||||||
|
move 13 from 3 to 6
|
||||||
|
move 2 from 7 to 8
|
||||||
|
move 13 from 6 to 5
|
||||||
|
move 3 from 5 to 7
|
||||||
|
move 6 from 5 to 6
|
||||||
|
move 1 from 7 to 6
|
||||||
|
move 2 from 7 to 3
|
||||||
|
move 1 from 6 to 8
|
||||||
|
move 13 from 3 to 5
|
||||||
|
move 9 from 5 to 9
|
||||||
|
move 7 from 5 to 7
|
||||||
|
move 17 from 9 to 2
|
||||||
|
move 3 from 4 to 7
|
||||||
|
move 9 from 2 to 9
|
||||||
|
move 10 from 9 to 3
|
||||||
|
move 8 from 7 to 8
|
||||||
|
move 2 from 5 to 3
|
||||||
|
move 4 from 2 to 6
|
||||||
|
move 11 from 3 to 9
|
||||||
|
move 9 from 6 to 5
|
||||||
|
move 5 from 9 to 8
|
||||||
|
move 1 from 3 to 1
|
||||||
|
move 3 from 9 to 1
|
||||||
|
move 2 from 5 to 2
|
||||||
|
move 1 from 7 to 9
|
||||||
|
move 2 from 9 to 4
|
||||||
|
move 2 from 9 to 8
|
||||||
|
move 13 from 1 to 8
|
||||||
|
move 3 from 8 to 5
|
||||||
|
move 27 from 8 to 1
|
||||||
|
move 10 from 5 to 9
|
||||||
|
move 1 from 7 to 2
|
||||||
|
move 2 from 4 to 3
|
||||||
|
move 10 from 9 to 6
|
||||||
|
move 1 from 8 to 7
|
||||||
|
move 15 from 1 to 9
|
||||||
|
move 13 from 9 to 5
|
||||||
|
move 15 from 5 to 7
|
||||||
|
move 5 from 1 to 3
|
||||||
|
move 8 from 7 to 1
|
||||||
|
move 7 from 7 to 1
|
||||||
|
move 16 from 1 to 8
|
||||||
|
move 4 from 3 to 9
|
||||||
|
move 4 from 1 to 7
|
||||||
|
move 4 from 9 to 6
|
||||||
|
move 5 from 2 to 7
|
||||||
|
move 15 from 8 to 6
|
||||||
|
move 1 from 9 to 1
|
||||||
|
move 3 from 3 to 4
|
||||||
|
move 1 from 9 to 7
|
||||||
|
move 1 from 2 to 7
|
||||||
|
move 1 from 2 to 7
|
||||||
|
move 1 from 8 to 1
|
||||||
|
move 3 from 4 to 8
|
||||||
|
move 3 from 8 to 1
|
||||||
|
move 8 from 6 to 8
|
||||||
|
move 7 from 1 to 4
|
||||||
|
move 11 from 6 to 8
|
||||||
|
move 14 from 6 to 5
|
||||||
|
move 13 from 8 to 7
|
||||||
|
move 4 from 7 to 5
|
||||||
|
move 15 from 7 to 4
|
||||||
|
move 6 from 5 to 4
|
||||||
|
move 2 from 5 to 9
|
||||||
|
move 1 from 5 to 2
|
||||||
|
move 3 from 8 to 5
|
||||||
|
move 19 from 4 to 7
|
||||||
|
move 10 from 5 to 8
|
||||||
|
move 2 from 6 to 8
|
||||||
|
move 1 from 4 to 8
|
||||||
|
move 2 from 7 to 9
|
||||||
|
move 9 from 7 to 4
|
||||||
|
move 6 from 4 to 6
|
||||||
|
move 11 from 4 to 8
|
||||||
|
move 2 from 5 to 4
|
||||||
|
move 5 from 6 to 4
|
||||||
|
move 1 from 6 to 7
|
||||||
|
move 3 from 9 to 5
|
||||||
|
move 3 from 8 to 5
|
||||||
|
move 3 from 7 to 6
|
||||||
|
move 11 from 8 to 7
|
||||||
|
move 1 from 9 to 5
|
||||||
|
move 1 from 6 to 8
|
||||||
|
move 1 from 2 to 1
|
||||||
|
move 5 from 4 to 9
|
||||||
|
move 2 from 4 to 1
|
||||||
|
move 2 from 1 to 4
|
||||||
|
move 1 from 1 to 9
|
||||||
|
move 4 from 5 to 1
|
||||||
|
move 1 from 4 to 6
|
||||||
|
move 17 from 7 to 5
|
||||||
|
move 9 from 8 to 7
|
||||||
|
move 6 from 9 to 7
|
||||||
|
move 3 from 1 to 9
|
||||||
|
move 12 from 7 to 9
|
||||||
|
move 12 from 9 to 5
|
||||||
|
move 5 from 7 to 9
|
||||||
|
move 17 from 5 to 3
|
||||||
|
move 7 from 3 to 1
|
||||||
|
move 5 from 1 to 5
|
||||||
|
move 5 from 9 to 2
|
||||||
|
move 4 from 3 to 5
|
||||||
|
move 1 from 4 to 8
|
||||||
|
move 5 from 2 to 1
|
||||||
|
move 22 from 5 to 9
|
||||||
|
move 3 from 7 to 6
|
||||||
|
move 6 from 6 to 9
|
||||||
|
move 2 from 5 to 4
|
||||||
|
move 1 from 6 to 3
|
||||||
|
move 2 from 4 to 1
|
||||||
|
move 3 from 8 to 2
|
||||||
|
move 1 from 3 to 4
|
||||||
|
move 24 from 9 to 1
|
||||||
|
move 4 from 3 to 9
|
||||||
|
move 2 from 2 to 9
|
||||||
|
move 2 from 3 to 1
|
||||||
|
move 1 from 8 to 6
|
||||||
|
move 1 from 6 to 9
|
||||||
|
move 1 from 8 to 9
|
||||||
|
move 2 from 7 to 4
|
||||||
|
move 1 from 8 to 3
|
||||||
|
move 1 from 4 to 7
|
||||||
|
move 3 from 9 to 8
|
||||||
|
move 1 from 2 to 1
|
||||||
|
move 9 from 9 to 3
|
||||||
|
move 1 from 8 to 7
|
||||||
|
move 1 from 4 to 3
|
||||||
|
move 2 from 9 to 7
|
||||||
|
move 1 from 9 to 3
|
||||||
|
move 2 from 8 to 4
|
||||||
|
move 12 from 3 to 8
|
||||||
|
move 2 from 1 to 7
|
||||||
|
move 1 from 4 to 3
|
||||||
|
move 30 from 1 to 5
|
||||||
|
move 6 from 5 to 7
|
||||||
|
move 12 from 7 to 2
|
||||||
|
move 1 from 3 to 4
|
||||||
|
move 2 from 1 to 3
|
||||||
|
move 1 from 4 to 9
|
||||||
|
move 10 from 5 to 7
|
||||||
|
move 10 from 2 to 6
|
||||||
|
move 8 from 8 to 3
|
||||||
|
move 3 from 1 to 3
|
||||||
|
move 5 from 6 to 3
|
||||||
|
move 2 from 8 to 5
|
||||||
|
move 1 from 9 to 2
|
||||||
|
move 2 from 8 to 6
|
||||||
|
move 4 from 7 to 2
|
||||||
|
move 3 from 2 to 7
|
||||||
|
move 2 from 7 to 5
|
||||||
|
move 1 from 4 to 9
|
||||||
|
move 11 from 3 to 1
|
||||||
|
move 7 from 6 to 9
|
||||||
|
move 3 from 2 to 3
|
||||||
|
move 10 from 1 to 7
|
||||||
|
move 14 from 7 to 5
|
||||||
|
move 3 from 7 to 6
|
||||||
|
move 5 from 9 to 7
|
||||||
|
move 29 from 5 to 7
|
||||||
|
move 6 from 3 to 9
|
||||||
|
move 2 from 9 to 7
|
||||||
|
move 15 from 7 to 5
|
||||||
|
move 11 from 5 to 6
|
||||||
|
move 5 from 9 to 5
|
||||||
|
move 10 from 5 to 8
|
||||||
|
move 1 from 2 to 4
|
||||||
|
move 1 from 8 to 2
|
||||||
|
move 2 from 4 to 3
|
||||||
|
move 2 from 5 to 9
|
||||||
|
move 8 from 8 to 9
|
||||||
|
move 11 from 9 to 3
|
||||||
|
move 1 from 1 to 8
|
||||||
|
move 18 from 7 to 3
|
||||||
|
move 1 from 9 to 3
|
||||||
|
move 28 from 3 to 5
|
||||||
|
move 12 from 6 to 7
|
||||||
|
move 1 from 2 to 9
|
||||||
|
move 15 from 7 to 2
|
||||||
|
move 1 from 8 to 1
|
||||||
|
move 10 from 2 to 9
|
||||||
|
move 10 from 5 to 3
|
||||||
|
move 2 from 2 to 3
|
||||||
|
move 18 from 3 to 4
|
||||||
|
move 6 from 9 to 4
|
||||||
|
move 1 from 1 to 7
|
||||||
|
move 1 from 6 to 4
|
||||||
|
move 1 from 8 to 2
|
||||||
|
move 1 from 9 to 4
|
||||||
|
move 2 from 9 to 4
|
||||||
|
move 19 from 4 to 3
|
||||||
|
move 1 from 7 to 9
|
||||||
|
move 1 from 9 to 7
|
||||||
|
move 1 from 6 to 8
|
||||||
|
move 3 from 2 to 8
|
||||||
|
move 2 from 9 to 5
|
||||||
|
move 15 from 3 to 1
|
||||||
|
move 7 from 5 to 1
|
||||||
|
move 3 from 4 to 9
|
||||||
|
move 1 from 7 to 2
|
||||||
|
move 3 from 3 to 1
|
||||||
|
move 6 from 5 to 2
|
||||||
|
move 3 from 3 to 9
|
||||||
|
move 4 from 9 to 2
|
||||||
|
move 5 from 5 to 3
|
||||||
|
move 1 from 3 to 5
|
||||||
|
move 3 from 5 to 7
|
||||||
|
move 3 from 8 to 5
|
||||||
|
move 1 from 7 to 5
|
||||||
|
move 4 from 5 to 1
|
||||||
|
move 4 from 4 to 2
|
||||||
|
move 2 from 7 to 8
|
||||||
|
move 12 from 1 to 6
|
||||||
|
move 1 from 8 to 6
|
||||||
|
move 6 from 2 to 3
|
||||||
|
move 9 from 3 to 8
|
||||||
|
move 1 from 3 to 4
|
||||||
|
move 3 from 6 to 1
|
||||||
|
move 2 from 9 to 2
|
||||||
|
move 1 from 4 to 5
|
||||||
|
move 2 from 8 to 3
|
||||||
|
move 10 from 2 to 1
|
||||||
|
move 2 from 4 to 7
|
||||||
|
move 12 from 1 to 4
|
||||||
|
move 1 from 5 to 1
|
||||||
|
move 7 from 4 to 9
|
||||||
|
move 2 from 3 to 2
|
||||||
|
move 6 from 9 to 2
|
||||||
|
move 1 from 9 to 1
|
||||||
|
move 1 from 7 to 8
|
||||||
|
move 5 from 6 to 7
|
||||||
|
move 3 from 6 to 1
|
||||||
|
move 6 from 2 to 3
|
||||||
|
move 2 from 4 to 3
|
||||||
|
move 1 from 6 to 8
|
||||||
|
move 1 from 6 to 7
|
||||||
|
move 8 from 3 to 9
|
||||||
|
move 2 from 4 to 5
|
||||||
|
move 3 from 2 to 4
|
||||||
|
move 10 from 8 to 2
|
||||||
|
move 22 from 1 to 9
|
||||||
|
move 9 from 2 to 4
|
||||||
|
move 1 from 1 to 3
|
||||||
|
move 1 from 3 to 2
|
||||||
|
move 3 from 2 to 4
|
||||||
|
move 2 from 7 to 1
|
||||||
|
move 14 from 4 to 2
|
||||||
|
move 2 from 1 to 8
|
||||||
|
move 2 from 4 to 5
|
||||||
|
move 4 from 7 to 8
|
||||||
|
move 24 from 9 to 6
|
||||||
|
move 3 from 5 to 9
|
||||||
|
move 1 from 9 to 8
|
||||||
|
move 1 from 5 to 2
|
||||||
|
move 1 from 6 to 7
|
||||||
|
move 6 from 9 to 1
|
||||||
|
move 1 from 7 to 3
|
||||||
|
move 5 from 8 to 6
|
||||||
|
move 9 from 6 to 3
|
||||||
|
move 4 from 1 to 4
|
||||||
|
move 2 from 1 to 2
|
||||||
|
move 11 from 6 to 3
|
||||||
|
move 13 from 3 to 2
|
||||||
|
move 2 from 9 to 8
|
||||||
|
move 8 from 3 to 8
|
||||||
|
move 2 from 8 to 5
|
||||||
|
move 1 from 7 to 5
|
||||||
|
move 3 from 6 to 3
|
||||||
|
move 11 from 8 to 5
|
||||||
|
move 13 from 2 to 4
|
||||||
|
move 10 from 5 to 2
|
||||||
|
move 2 from 3 to 4
|
||||||
|
move 2 from 5 to 7
|
||||||
|
move 15 from 4 to 9
|
||||||
|
move 2 from 7 to 4
|
||||||
|
move 2 from 4 to 2
|
||||||
|
move 2 from 4 to 9
|
||||||
|
move 2 from 4 to 2
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 1 from 8 to 1
|
||||||
|
move 1 from 1 to 2
|
||||||
|
move 1 from 6 to 3
|
||||||
|
move 7 from 2 to 4
|
||||||
|
move 1 from 5 to 3
|
||||||
|
move 7 from 9 to 1
|
||||||
|
move 7 from 1 to 2
|
||||||
|
move 4 from 6 to 9
|
||||||
|
move 12 from 9 to 7
|
||||||
|
move 6 from 7 to 5
|
||||||
|
move 1 from 3 to 5
|
||||||
|
move 7 from 4 to 7
|
||||||
|
move 3 from 7 to 8
|
||||||
|
move 3 from 8 to 6
|
||||||
|
move 18 from 2 to 9
|
||||||
|
move 7 from 2 to 3
|
||||||
|
move 15 from 9 to 4
|
||||||
|
move 3 from 3 to 9
|
||||||
|
move 1 from 3 to 1
|
||||||
|
move 3 from 5 to 4
|
||||||
|
move 1 from 1 to 2
|
||||||
|
move 1 from 9 to 2
|
||||||
|
move 2 from 6 to 2
|
||||||
|
move 5 from 7 to 6
|
||||||
|
move 5 from 2 to 7
|
||||||
|
move 3 from 3 to 4
|
||||||
|
move 5 from 5 to 3
|
||||||
|
move 6 from 7 to 4
|
||||||
|
move 9 from 4 to 2
|
||||||
|
move 18 from 4 to 9
|
||||||
|
move 6 from 2 to 1
|
||||||
|
move 1 from 1 to 9
|
||||||
|
move 4 from 7 to 4
|
||||||
|
move 7 from 2 to 4
|
||||||
|
move 1 from 2 to 8
|
||||||
|
move 1 from 4 to 2
|
||||||
|
move 4 from 3 to 4
|
||||||
|
move 16 from 9 to 5
|
||||||
|
move 9 from 9 to 8
|
||||||
|
move 1 from 9 to 7
|
||||||
|
move 4 from 1 to 2
|
||||||
|
move 2 from 5 to 4
|
||||||
|
move 10 from 5 to 4
|
||||||
|
move 4 from 2 to 1
|
||||||
|
move 5 from 1 to 2
|
||||||
|
move 1 from 8 to 5
|
||||||
|
move 1 from 6 to 5
|
||||||
|
move 4 from 8 to 5
|
||||||
|
move 2 from 6 to 9
|
||||||
|
move 3 from 6 to 2
|
||||||
|
move 2 from 9 to 1
|
||||||
|
move 1 from 7 to 6
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 9 from 5 to 9
|
||||||
|
move 4 from 8 to 1
|
||||||
|
move 2 from 8 to 2
|
||||||
|
move 1 from 5 to 7
|
||||||
|
move 9 from 9 to 8
|
||||||
|
move 1 from 7 to 5
|
||||||
|
move 9 from 8 to 2
|
||||||
|
move 6 from 1 to 6
|
||||||
|
move 6 from 2 to 6
|
||||||
|
move 10 from 2 to 5
|
||||||
|
move 5 from 2 to 1
|
||||||
|
move 1 from 3 to 5
|
||||||
|
move 8 from 5 to 4
|
||||||
|
move 5 from 1 to 3
|
||||||
|
move 10 from 6 to 8
|
||||||
|
move 3 from 6 to 9
|
||||||
|
move 4 from 3 to 1
|
||||||
|
move 5 from 8 to 2
|
||||||
|
move 4 from 5 to 9
|
||||||
|
move 1 from 3 to 7
|
||||||
|
move 1 from 7 to 3
|
||||||
|
move 1 from 8 to 6
|
||||||
|
move 1 from 6 to 1
|
||||||
|
move 15 from 4 to 8
|
||||||
|
move 5 from 9 to 2
|
||||||
|
move 1 from 9 to 1
|
||||||
|
move 1 from 1 to 3
|
||||||
|
move 6 from 4 to 8
|
||||||
|
move 12 from 8 to 7
|
||||||
|
move 1 from 3 to 5
|
||||||
|
move 3 from 1 to 9
|
||||||
|
move 13 from 4 to 9
|
||||||
|
move 5 from 7 to 2
|
||||||
|
move 1 from 5 to 4
|
||||||
|
move 8 from 9 to 5
|
||||||
|
move 6 from 2 to 5
|
||||||
|
move 2 from 5 to 6
|
9
day5/sample_input.txt
Normal file
9
day5/sample_input.txt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[D]
|
||||||
|
[N] [C]
|
||||||
|
[Z] [M] [P]
|
||||||
|
1 2 3
|
||||||
|
|
||||||
|
move 1 from 2 to 1
|
||||||
|
move 3 from 1 to 3
|
||||||
|
move 2 from 2 to 1
|
||||||
|
move 1 from 1 to 2
|
78
day5/src/main.rs
Normal file
78
day5/src/main.rs
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
fn print_stacks(stacks: &Vec<Vec<char>>) {
|
||||||
|
for stack in stacks {
|
||||||
|
println!("{:?}", stack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn stacks_message(stacks: &Vec<Vec<char>>) -> String {
|
||||||
|
stacks
|
||||||
|
.iter()
|
||||||
|
.map(|v| v[v.len() - 1])
|
||||||
|
.fold(String::new(), |mut s, c| {
|
||||||
|
s.push(c);
|
||||||
|
s
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
const INPUT: &str = include_str!("../input.txt");
|
||||||
|
let chunks = INPUT.split_once("\n\n").unwrap();
|
||||||
|
|
||||||
|
let mut stack_lines: Vec<String> = chunks
|
||||||
|
.0
|
||||||
|
.lines()
|
||||||
|
.map(|x| -> String { x.to_string() + " " })
|
||||||
|
.collect();
|
||||||
|
stack_lines.pop();
|
||||||
|
let num_stacks = (stack_lines[0].len() + 1) / 4;
|
||||||
|
|
||||||
|
let mut stacks: Vec<Vec<char>> = vec![Vec::<char>::new(); num_stacks];
|
||||||
|
|
||||||
|
for line in stack_lines.iter().rev() {
|
||||||
|
let mut line = line.to_string();
|
||||||
|
line += " ";
|
||||||
|
|
||||||
|
for i in 0..num_stacks {
|
||||||
|
let c = line.chars().nth(i * 4 + 1).unwrap();
|
||||||
|
if c.is_whitespace() {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
stacks[i].push(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let stacks_copy = stacks.clone();
|
||||||
|
|
||||||
|
let move_lines = chunks.1.lines();
|
||||||
|
for line in move_lines {
|
||||||
|
let split: Vec<&str> = line.split(" ").collect();
|
||||||
|
let n: usize = split[1].parse().unwrap();
|
||||||
|
let from = split[3].parse::<usize>().unwrap() - 1;
|
||||||
|
let to = split[5].parse::<usize>().unwrap() - 1;
|
||||||
|
|
||||||
|
for _ in 0..n {
|
||||||
|
let x = stacks[from].pop().unwrap();
|
||||||
|
stacks[to].push(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print_stacks(&stacks);
|
||||||
|
println!("Message: {}\n", stacks_message(&stacks));
|
||||||
|
|
||||||
|
let mut stacks = stacks_copy;
|
||||||
|
let move_lines = chunks.1.lines();
|
||||||
|
for line in move_lines {
|
||||||
|
let split: Vec<&str> = line.split(" ").collect();
|
||||||
|
let n: usize = split[1].parse().unwrap();
|
||||||
|
let from = split[3].parse::<usize>().unwrap() - 1;
|
||||||
|
let to = split[5].parse::<usize>().unwrap() - 1;
|
||||||
|
|
||||||
|
let len = stacks[from].len();
|
||||||
|
let mut x: Vec<char> = stacks[from].drain(len - n..len).collect();
|
||||||
|
stacks[to].append(x.as_mut());
|
||||||
|
}
|
||||||
|
|
||||||
|
print_stacks(&stacks);
|
||||||
|
println!("Message: {}", stacks_message(&stacks));
|
||||||
|
}
|
7
day6/Cargo.toml
Normal file
7
day6/Cargo.toml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[package]
|
||||||
|
name = "day6"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
queue = "0.3.1"
|
1
day6/sample_input.txt
Normal file
1
day6/sample_input.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
stftmtvvtvqqczqqnjnwwlqqdzdnnsvnsswbbwsstvvssfjsjbjfjmjpjzpplpppjzjqqdzzhqqqqtcccbzzzwzrrrdqdldpdsppmqmmnwwjddnqqscclncllvhllqpllchhbccfcbcgbcgcfcncsnstsddldzldlmljjfbjbzbccmrmrppqmqsswbwqwdwwcnwwhrhppfsfvsvrrfllhglhlggjpggzjgzggnvvqfvvhffpwpmwpmmwvmvrmrbmbzmzbbvgbbcfbcfbfppnzpzrrszzqgzgjgddmdwmwrmwmzznqzqhqhvvsslppsrrljjfpfcpfpbbrjjwjmjpmpfmfzfvzfftptzzbmzmddpvdddqmmzjzbbhmmwqmmmbgmmttrhrqrvqvzvdvzdvvmsvmmqlmmtddvlvttrtvtvcttvssnwwbccqmmgbbqrqlqjllmslsmslltrtffzfpfzpffvwvffsllgvgtgwtwnttfzznzqzztfzfvzznnwzzcvcqvvdwwsnsvnnthhnphpssmjmfmhfmhmgmllmsmrsrrmmhsswjwqqdbbghhpsptsswvsvfvcffqcchlhfhvhjhdjhddvjjpmmsrsqrrngrrmvmsvsllrmlrlprpggqzqmmvlvvwrwnrwwzztrzrbrdbrdbbhlhchjchhtthpthphplhhlphpjjsddtppvbpbbmnmgnmmqbbrhhfrfpfjpjgjljcctwtmwtwvvvmsvmmnjmnjmnmqmvvggtzzctzttszsvvjwjqjmjbjvbbshbhghlghhpvpnvvqmmgjmmggqvqtvqtvqtvvmlljbbhdhshnnwqwbbrnnwswmwfmfttjztjzjsjzjdjbdjjzfzdzgzhghgpgqqdzdhhnwnjnnhrnrqqjsqsllbzzzcnzzmjmvmrvrgrfgrrqmrmpmpzmzqqfwqfwfjjhphgpptzzwmmfjjvbjvbbqsbsbcbppjzpjjzpjpvjjzdjjgcgppvrvjrjpjspjppntpnnjlnlrnrdndjnnsbnnppvspprbrddjrdrmrfmmtmtbtntftjjsscvcbvvcnccnbnrbbmlmddhpdptddmrmmjddnjjtztctqqhhttqctqtbbnfnwnmndnzzljlgltgltljtjllwjjbrjbrbpbgppmzpmpggdnnmznnhhmfhhssgtgvvlsljltlppdqqbtbvbsvsswbsbhsbsmmwswbbbbhvbvcbvvsvcsvvmfmlmgmjgmmbqbrbsrrgrsggldlmlttpbpmmtptctqcqvccnhnmnssmvsmmddlclpccfwfdfqfvqfvfqqwmmwrmmbzznpnllfttgcttnbtnnsswttfppnddpdpsphhpttnrtrlrsrmrnmmzhmhnmnwwddmhdhqqhbqqdcclnlfnnzfnzzqfqddczcqcrrjsrrswslltfltffjhhqqfcchqcqpplbltbblbcbncnpccdffcwwqzwqqlwwtjjpbbjvvljvjgvvrsszfsfcssqsvvwsvvdfvdfdpffztzrtzthzhhmwmzwzssjlsldsldsldlvvjdvvnbvnvmvmccvfcvcfcbchhzqqhgqqcbbhdbdpddwcdwwzszsfszzgbgdgzgvgsgnssfqsqjssrppsgppmmpzmppglgqlqqpzpqqfzzzrnzrnrqqzzfwzzffjfzzmnznpznpprhhvcvvvfddcrdrsscnnsznzszbznntwntnrnbnzzrnnlwlggnzzwppmbmrrncnlclzltlblhhlvhvphhsdhsdsqddgzgvvshvvzzbvbrrlplqpptplljcljlvjlvlqvvndnsdddmvddzhzjjgpjpddppzllwtwfwgfgpffmhhzllsttmqqhjhhpvpgpfjsgscnwjmwmtmptwlpfjljwgpgntrlpjfgbjqmcpzgfhrwmznqnsbpptbdrzmdtvvtdqjgrjzlphndhmlchvddglqnqsjqrfqslprsvlqjwqnsmsznptsstpvdntpttslpmqqbsdlqwpjqnzmpblgqmjrvqwsncnzdszgfsghddlnwhwzpgtddgstttvrjfjwwfrgsdjjngljqlqcrzlgsmwngbzvmjwtnqdqcgwmfhsztgrtvvfzbtstmdbqpntdpsszjthqvpbdwswfzvmrcpbgbgdmldfhvdpfsmdzfhwsrpcglsztdwqgbqszcqtqjhgntzvttldqsffftzmllptzhmhpmfsgcchfrnrchnsgcfjbgrqmvrmmhnmlnwtgwhznqfgwnlrqlpjrvfrgzcjwncvlwhpclfzngbgvmrmlzngmqlvvwhbpjzlclgrcnnvnlppqhvlrnpzvmtsbdpfbwgffgzfwvltcfvfdcnfhwvcvclwwbmshhmpgrzgltwjmqczpqzdwfjpqhmwqhvvgnpgtwrjrgwvhthtdrdpnwpbmwstgblwmbfvlwflqmfbcsgwstwvncwfcsmrpcfrrvmlbqhdtdswswfnzhgzlngwsrtlzfcgdppmjnghfrgbdqhqmslhcqddjvsslsjwqqznttqjzdlghnsvqqtwrpfbzjgwnrhhvlnbqmnvcpblzgbzltnrhzpdwvbqbtmctbzgsdjfzswrbqbzgvwjlwtmgcllnmnwcljbhbplpvtgpgjftfrbgpgmhghnjcgjfqmsbqhbgtzbfzgwmfdsgfgmgzsbgdrszfhjttbvcqjzjgbqfgswlmrrhnmnfrptvjtlnvplgznsljzfzmhghlsccnqzflfnmbhshfprhclmtfptcmtnhrjgnngnqnczvcgzzlntftjsbgpgwzbnrhzzfqmznqnzfrvjzsmtpjbswzjlbgpfftzrzbfgdblpwscbqjfrfmfnhhlhjprtlzzvwnwzsnqhnmgwsdprnrblgbclzhthftqzdljspwdzwmwhfmdzmlvqsngppdfsjdprbrhffcvcvzztjjqcffwbrvpzvzfzhjvsfvsnrmjvqmjtrjbmbqsdtjgvtbbzzfmnmrrflgcdtljpmpvqvdbzgbmhjgccgdtplllctzqpfqnsztbwdbmqgfzrcddtmwrgmwsghcfpgqssdjrtqhtjfbpjvjdnzgvpzrhbrhrhcmpbglbbrvdltdpsrwjbjzftccwgnqmnlqlpjwrfdvmlgvgqznlvsmpzsmgjstvqbqpprzlsdndpfbmqcrfgvcfvlfhmpfnnqlcqlnbbgcrrrhbtzwnwmfrnrzvgmqlmqnmnzbwflwzcmncphjqztlrzvpztqhptmfsrppvvlzcfnlrwptgccsjjjscjcwnzssmbcvtzhnscgsbrchbqbrtdzllfvmqfwznfzpzmbfwcdsfhdlddnfbdgqbqjqzdtppshwcvvcjqstdgtgbhmlqlrfrhbvfsszsmbldmwfnfgnjptdslnzwcjgmvbnqcfzjmrslrlllplbhpjcnvzmvrfzwqhmbnrvpqnvcfncgfwqlvcwpwwljssfmswctcmhgtphvjdpfnnzznfbdjcsndrczlgdjhrnrltsgbtqmqcbwlthwcgsbvqbnntcznczpmlmblwdrlmzqdztwsgjthjwtfcpgwbczmdmhttzcwvdzhdfldmwnbnfdcjgvjhrfltjnjhqhzmzrlbncwdnlgshmqhpgsdwbvmvjsfgvgqzqjqdzqzmfmrncfdgrqfrnstvpqwtltnhgrmhgmmnwvlnsfmmbjrdmrnlgfgpqncdpqgvjltpghbgffdppdcfhdqhtvrdnfvcttlrqppfnqtmzpfgsnmjqfrgtbbdzzrccsrzgfjndlrnzqmjjtgldglcpzcrhwfplvdndjtzbpfbbbpfljqnlvrdzbrvczzwdrvzlmslbjsqgqdrltmhwcdpldqldlpctcbjmsvdwlfspzlpgrhdrvjtprcwrmszvzwmmjgvsbfcztmrdgrgshgtggpzszgqhwmhdzjmzsgqsfmqvcgqqwgprgvvqlbfhpwsfbjdqtcfnfhsgzthzhbpwggbnscqbnvcdprsbgllsrdcclqggfgfdrpqlqljfwpmzdhthpczcsqrrm
|
31
day6/src/main.rs
Normal file
31
day6/src/main.rs
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
extern crate queue;
|
||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
use queue::Queue;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
const INPUT: &str = include_str!("../sample_input.txt");
|
||||||
|
|
||||||
|
let mut buf: Queue<char> = Queue::with_capacity(4);
|
||||||
|
let mut msg_buf: Queue<char> = Queue::with_capacity(14);
|
||||||
|
|
||||||
|
let mut found_start = false;
|
||||||
|
|
||||||
|
for (i, c) in INPUT.chars().enumerate() {
|
||||||
|
if buf.force_queue(c) == 4 && !found_start {
|
||||||
|
let x = HashSet::<&char>::from_iter(buf.vec().iter()).len();
|
||||||
|
if x == 4 {
|
||||||
|
println!("{} {:?}", i + 1, buf);
|
||||||
|
found_start = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg_buf.force_queue(c) == 14 {
|
||||||
|
let x = HashSet::<&char>::from_iter(msg_buf.vec().iter()).len();
|
||||||
|
if x == 14 {
|
||||||
|
println!("{} {:?}", i + 1, msg_buf);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
9
day7/Cargo.toml
Normal file
9
day7/Cargo.toml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[package]
|
||||||
|
name = "day7"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
petgraph = "0.6.2"
|
1020
day7/input.txt
Normal file
1020
day7/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
23
day7/sample_input.txt
Normal file
23
day7/sample_input.txt
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
$ cd /
|
||||||
|
$ ls
|
||||||
|
dir a
|
||||||
|
14848514 b.txt
|
||||||
|
8504156 c.dat
|
||||||
|
dir d
|
||||||
|
$ cd a
|
||||||
|
$ ls
|
||||||
|
dir e
|
||||||
|
29116 f
|
||||||
|
2557 g
|
||||||
|
62596 h.lst
|
||||||
|
$ cd e
|
||||||
|
$ ls
|
||||||
|
584 i
|
||||||
|
$ cd ..
|
||||||
|
$ cd ..
|
||||||
|
$ cd d
|
||||||
|
$ ls
|
||||||
|
4060174 j
|
||||||
|
8033020 d.log
|
||||||
|
5626152 d.ext
|
||||||
|
7214296 ks
|
83
day7/src/main.rs
Normal file
83
day7/src/main.rs
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
use std::borrow::BorrowMut;
|
||||||
|
|
||||||
|
use petgraph::dot::*;
|
||||||
|
use petgraph::prelude::*;
|
||||||
|
use petgraph::*;
|
||||||
|
|
||||||
|
fn do_weights(g: &mut Graph<(String, u64), ()>, root_dir: NodeIndex<u32>) {
|
||||||
|
for edge in g.clone().edges_directed(root_dir, Outgoing) {
|
||||||
|
let mut target_weight = g.node_weight(edge.target()).unwrap();
|
||||||
|
if target_weight.1 == 0 {
|
||||||
|
do_weights(g, edge.target());
|
||||||
|
target_weight = g.node_weight(edge.target()).unwrap();
|
||||||
|
}
|
||||||
|
g.node_weight_mut(root_dir).unwrap().1 += target_weight.1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
const INPUT: &str = include_str!("../input.txt");
|
||||||
|
|
||||||
|
let mut g = DiGraph::<(String, u64), (), u32>::new();
|
||||||
|
|
||||||
|
let invalid_index: NodeIndex<u32> = NodeIndex::from(u32::MAX);
|
||||||
|
let mut curr_dir: NodeIndex<u32> = invalid_index;
|
||||||
|
let mut root_dir: NodeIndex<u32> = invalid_index;
|
||||||
|
|
||||||
|
for line in INPUT.lines() {
|
||||||
|
if line.starts_with("$ cd") {
|
||||||
|
let new_dir = &line[5..];
|
||||||
|
|
||||||
|
if new_dir == ".." {
|
||||||
|
curr_dir = g
|
||||||
|
.edges_directed(curr_dir, Incoming)
|
||||||
|
.next()
|
||||||
|
.unwrap()
|
||||||
|
.source();
|
||||||
|
} else {
|
||||||
|
let prev_dir = curr_dir;
|
||||||
|
curr_dir = g.add_node((new_dir.to_string() + "/", 0));
|
||||||
|
if prev_dir == invalid_index {
|
||||||
|
root_dir = curr_dir;
|
||||||
|
} else {
|
||||||
|
g.add_edge(prev_dir, curr_dir, ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if line.starts_with("$ ls") {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
let (size, name) = line.split_once(' ').unwrap();
|
||||||
|
if size == "dir" {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let size: u64 = size.parse().unwrap();
|
||||||
|
|
||||||
|
let n = g.add_node((name.to_string(), size));
|
||||||
|
g.add_edge(curr_dir, n, ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
do_weights(g.borrow_mut(), root_dir);
|
||||||
|
|
||||||
|
println!("{:?}\n\n", Dot::with_config(&g, &[Config::EdgeNoLabel]));
|
||||||
|
|
||||||
|
let total = g
|
||||||
|
.node_weights()
|
||||||
|
.filter(|(n, w)| n.ends_with("/") && *w <= 100000)
|
||||||
|
.map(|(_, w)| w)
|
||||||
|
.sum::<u64>();
|
||||||
|
println!("total: {total}");
|
||||||
|
|
||||||
|
let used_space = g.node_weight(root_dir).unwrap().1;
|
||||||
|
let free_space = 70000000 - used_space;
|
||||||
|
let need_to_free = 30000000 - free_space;
|
||||||
|
|
||||||
|
let delete = g
|
||||||
|
.node_weights()
|
||||||
|
.filter(|(n, w)| n.ends_with("/") && *w > need_to_free)
|
||||||
|
.map(|(_, w)| w)
|
||||||
|
.min()
|
||||||
|
.unwrap();
|
||||||
|
println!("delete size: {delete}");
|
||||||
|
}
|
8
day8/Cargo.toml
Normal file
8
day8/Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "day8"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
99
day8/input.txt
Normal file
99
day8/input.txt
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
112121202020313300020340412130241443213110212555412551412441344012102310202342110301131001201210222
|
||||||
|
002220000133232333300400324440200340331442222154322435351134115104433131022400301210231103320120102
|
||||||
|
002111110023312202140422121302301411425412143121451113531553512221212012141140202223332010130102121
|
||||||
|
200121112032232121304410232442313124341433152252314544515325125233341244332012020324021110233002001
|
||||||
|
201022212100303122230042110420411144235142233535353242115241433555244414021310121244221013322222121
|
||||||
|
011133013013221340022444040034222334222333233513241314324332525223122512421234021412140011030323220
|
||||||
|
210300120303001122232014221422523555232331235422254211412225214325215241553042040303041423101011002
|
||||||
|
003120002332341304133020544511125535535541345465624233512532523153125344553310344313112440310203011
|
||||||
|
131130201012400142322154551413323211211264453362355545322422255141341455331312144311201120100013210
|
||||||
|
231231113320032112042452344144421222532325455233246353364224262633314514222114310222010411123020310
|
||||||
|
130132323324003111222144335255232253526222366424453236522644225645542113443452221300403213402211010
|
||||||
|
113120324042321002433123114511424246663652545323562652666642343346224141215312351154031420431123313
|
||||||
|
322103103420203222134243312435226546235454342354423362646633563243445363453321134444313221424211210
|
||||||
|
222002200102244012425542311135622554533554536552565362325262535422342364211432245513321404214403103
|
||||||
|
020312030211000311145233135522425335364263235236633766423525523653365556233412434131421431421413032
|
||||||
|
210200210122104332244324435223345455654634767746775377345346266325246256554325112245151433442112120
|
||||||
|
122021103003325452113155263653362555455536744343555667465337737332644556355541512314415321432122010
|
||||||
|
302130331324344154351152233526435626553676357536566754666777544543643553226655255322235341014410100
|
||||||
|
314012231321215344153565545233452474545654556345434346477343637634766266254223421545221444103004003
|
||||||
|
203142142342444551513532553564436657337357765377547636675373434576744336526346456543411441023143110
|
||||||
|
012342201025331211122452444533576366457663645436375557334447647673566472636623645223251551503132201
|
||||||
|
242040141354332534632526224223663666376753663766575676333754654644753446365223356333455541211334020
|
||||||
|
304212105422512243642223324443434437444774475647656876467367634464365546355325563651434541552020333
|
||||||
|
411420043555145455366465334765477455434665856478775445748748844536643753776566362432434143454420144
|
||||||
|
401414045521554536566434665734634475568447478784884574576588667675763475753664255466323144315114340
|
||||||
|
403203444553445263226363636763747365744764846865845556768875448846334555367546232343531522434303222
|
||||||
|
320101251535223652234326457665537657586786457478765885578775686476536463546335334642346321452233131
|
||||||
|
101012145413152534234557444577344864876885844857544755664447444658566665757343254462522531514251101
|
||||||
|
340341152532244444232667437647346678855466568676685668454547775878787354745333434364264512332351234
|
||||||
|
034022314552563333466574354365446884777648857896869775765876486687448874547744636623356245124411300
|
||||||
|
434115222252325233267546336767445666887887795778879879888964665878876674757366746353365644321332143
|
||||||
|
312035533543623363556753755356877487485687695957956976755556874674844755665746737526623244522514143
|
||||||
|
420252322135326524253347754684544485747997555758865876756898776645768885645667637664454254124241132
|
||||||
|
042551521433445422576644675485868857686859585876589677967989879564666758475665333623554365252143351
|
||||||
|
404455122524562436436545777675857467559889565668857859685895859976758774886545433533522546412531113
|
||||||
|
402414213444443632667535548848565847669657785977756989557799965677887465558473374753636263414433431
|
||||||
|
022221152324544456367356377556875457665895668676988667859858876695687554757534736365524353324555445
|
||||||
|
344111222625453364363635787885744595658769866898866968696568596595864444764473337656423523432142535
|
||||||
|
225434342232366345537763675578769565995877778767697786787965759585779855884865343633323444422312351
|
||||||
|
035315413543653543334365848874759855766697967679779767999679566665785768858653734543735645643221454
|
||||||
|
023235144645352563656735676476699588575688669887679986967789786578779847658656675663653453233341153
|
||||||
|
142225254342433566337738656784888579869898976766696886867989878587588888556744335476656546565134514
|
||||||
|
332531546644465434575456856855557977598878768976688677796996689765566874765455375433552656652141222
|
||||||
|
245115244422246534474538846486987698857687868676878977996687768986655856867454644744464462545223145
|
||||||
|
534255233266234565357356454786989999898896977688879977977896669857699764786566736463343326443154122
|
||||||
|
454354332542262477736688458567665797769979688789788788987866776769877696655848467435475444463335241
|
||||||
|
512543144352562655357675475585978965976868699798788899789679876985786899685774865763673624244331431
|
||||||
|
324412256535565334657448674688895886877986668889799998798889878866685759475645457456546355544251525
|
||||||
|
115513233345333374765468446775577596767887988887878879877777968697669577748775734356333445243551434
|
||||||
|
415151565352224735474558556859799577886898999998979889789968896887667799778755865475767222365331232
|
||||||
|
341542233524534557363486747546566765697666978897898998779776898687767558456588645347447452326635211
|
||||||
|
141352533235633637755547684876556558796988688897999988799797887989695558885678545676777233242514541
|
||||||
|
521224242633256545773565667556868787766779689977797878779776688978856968445584875373474655564453414
|
||||||
|
212223344626635634464468564667887899889688667779987877977666888978896755878447456437466626246242154
|
||||||
|
234115532222663767644584477756969899977977999989879987999976887779867996588585775466444223626514313
|
||||||
|
135352514355535475547475454586885687868789797787897877999696989878678658675857877374766244666335415
|
||||||
|
245312112534242364465384488548568678767769779778898997999876767795755964548464847565732454524524223
|
||||||
|
021525515246626734753566444568597959566979986967678896977989678777787774766445653374342254643512525
|
||||||
|
154333554224543664547576668488558779569899998698676696676768688689695868756558334756732443435414211
|
||||||
|
241121123663636476553777547778679898575887899887676677898688967655685877474554463766356464665314411
|
||||||
|
042314546263224256647665654464888598856776787699868899986977858568579785688458575346453652462152344
|
||||||
|
123331145253442347344577548844655756795759896669869969898669978977675445684486336563564633463521424
|
||||||
|
441245214645233266655474685847446687769676869796966869876898656576557445456865677774743333555121233
|
||||||
|
125144145355562535553453348876854556596588579796889867979959976599967847546665344765436664421452124
|
||||||
|
005214145522463625374665767445668477766757899558986688996855569799556464475877546663265544522533142
|
||||||
|
424213534345444245575767446587747766879868999866679969656557796695754688786576454364542222333552433
|
||||||
|
340123443165235626753533465668444668759977876797965776795859756987877778467766435676633663325451242
|
||||||
|
003233434214334366657377335845776467875798576979767697579687977648857565845364473624435244552521232
|
||||||
|
424135233343456444347333753548856886767998675667957686789866998677467875563746577654546663332345512
|
||||||
|
142144412143652453363555366356464857764776776669865675576766767657655474454367647255355333454132411
|
||||||
|
114044434535536365647343757563768767554848877759975798758895468485667587677463336535634542315521124
|
||||||
|
243044411234356654655645476665375787765667655868887868786658648788875454747665334553525245122313313
|
||||||
|
223005135155362266463337346655467578858875455446758445778678456564555447754654655642444335244151100
|
||||||
|
441031313535133543536645563565447868478877557885475885785484588664864367437333352334646552545540434
|
||||||
|
230403434533122325663365655775564467566764578557546875654785658764434354637753535553443132323132432
|
||||||
|
231103055415354435244636576576467643575457665666647886566848556463753663346723326243525141135130424
|
||||||
|
234240311433354434253255264577573744567747565865655865884455858675735663776644624454624322251114322
|
||||||
|
001140425351442116425436424534333635755754445857766654848476464365374745573246334553145131221240002
|
||||||
|
423442125121142242554242262463344446436337646568454446465366647477574476743566434562422322213241112
|
||||||
|
041120244223522424262622532426564364336575645645643473455773734743736536462532635531424223442140002
|
||||||
|
333213342044141312256465444645743463747737775353476574446663366477433766453534634424144243324342330
|
||||||
|
123301211302132311214446544655333545346646756574364363763577337443636433244534466131243245142313041
|
||||||
|
333302233005545533332445234232634365637756745756665533337455656536362324645335641322232425441330441
|
||||||
|
210101031320143231223346443232362353735643457655456457447337655745423533326242244322432513011341141
|
||||||
|
103110441134453455534214566635432365634456656643365735556363677266633236436433421143354400234124322
|
||||||
|
210103104441245232113425543552436226532532734735737666776674646353226636524623254312414101401413013
|
||||||
|
020024442231000453252454154546643563663622535463445755356246553442265263346551444421542422240011133
|
||||||
|
031020232402201014325415255432463233224332466352332362464633465245446636555422514435430143120003112
|
||||||
|
310302320413232125411435155524536333442626366353663655223253243262552253454113353253031242202102210
|
||||||
|
221201232400342023452154554354353535536252463345626432342652363255555242425543353242440134432103103
|
||||||
|
210032311140434341431423452253535242446256556466223466635264232223251545121524142114121403343313003
|
||||||
|
120033031102121020314222514435233222253442525525522546426665636231521441532113451340400133032210231
|
||||||
|
210023013101112320231215311434153455555125335452263535435665554254354533423243412221004001101231111
|
||||||
|
221223223131114201030343552243332413432225514566333324653532145252122232542252133334211422030222312
|
||||||
|
222331111212014202022011214444443411412221134525134425141412252142514152354243232311422120203312310
|
||||||
|
110131122101302404410231242111542122454123223331222324435451342542314134420104111021220102332003000
|
||||||
|
201221202213022021032201013424223253221544343453433115235543553513232252242121443333323311020103222
|
||||||
|
001200323302010132410244321011414224212135145444322543324442532241244022442341044312322333033210110
|
||||||
|
012221120210002201233041204141124034134123443133233422423453224352410321301023102020300131022311221
|
5
day8/sample_input.txt
Normal file
5
day8/sample_input.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
30373
|
||||||
|
25512
|
||||||
|
65332
|
||||||
|
33549
|
||||||
|
35390
|
85
day8/src/main.rs
Normal file
85
day8/src/main.rs
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
use std::borrow::BorrowMut;
|
||||||
|
|
||||||
|
fn directional_scenic_score(seen: &Vec<i16>, height: i16) -> u32 {
|
||||||
|
(match seen.iter().rev().position(|x| *x >= height) {
|
||||||
|
None => seen.len(),
|
||||||
|
Some(x) => x + 1,
|
||||||
|
}) as u32
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
const INPUT: &str = include_str!("../input.txt");
|
||||||
|
|
||||||
|
let mut grid: Vec<Vec<(i16, bool, u32)>> = Vec::new();
|
||||||
|
|
||||||
|
for row in INPUT.lines() {
|
||||||
|
grid.push(Vec::new());
|
||||||
|
let r = grid.last_mut().unwrap();
|
||||||
|
for col in row.chars() {
|
||||||
|
r.push((col.to_digit(10).unwrap().try_into().unwrap(), false, 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for row in grid.iter_mut() {
|
||||||
|
let mut max_seen: i16 = -1;
|
||||||
|
let mut seen: Vec<i16> = Vec::new();
|
||||||
|
for tree in row.iter_mut() {
|
||||||
|
tree.2 *= directional_scenic_score(&seen, tree.0);
|
||||||
|
seen.push(tree.0);
|
||||||
|
if tree.0 > max_seen {
|
||||||
|
max_seen = tree.0;
|
||||||
|
tree.1 = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
max_seen = -1;
|
||||||
|
seen.clear();
|
||||||
|
for tree in row.iter_mut().rev() {
|
||||||
|
tree.2 *= directional_scenic_score(&seen, tree.0);
|
||||||
|
seen.push(tree.0);
|
||||||
|
if tree.0 > max_seen {
|
||||||
|
max_seen = tree.0;
|
||||||
|
tree.1 = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in 0..grid[0].len() {
|
||||||
|
let mut max_seen: i16 = -1;
|
||||||
|
let mut seen: Vec<i16> = Vec::new();
|
||||||
|
for j in 0..grid.len() {
|
||||||
|
let tree = grid[j][i].borrow_mut();
|
||||||
|
tree.2 *= directional_scenic_score(&seen, tree.0);
|
||||||
|
seen.push(tree.0);
|
||||||
|
if tree.0 > max_seen {
|
||||||
|
max_seen = tree.0;
|
||||||
|
tree.1 = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
max_seen = -1;
|
||||||
|
seen.clear();
|
||||||
|
for j in (0..grid.len()).rev() {
|
||||||
|
let tree = grid[j][i].borrow_mut();
|
||||||
|
tree.2 *= directional_scenic_score(&seen, tree.0);
|
||||||
|
seen.push(tree.0);
|
||||||
|
if tree.0 > max_seen {
|
||||||
|
max_seen = tree.0;
|
||||||
|
tree.1 = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let n_trees_visible = grid
|
||||||
|
.iter()
|
||||||
|
.map(|v| -> usize { v.iter().filter(|(_, vis, _)| *vis).count() })
|
||||||
|
.sum::<usize>();
|
||||||
|
println!("{n_trees_visible}");
|
||||||
|
|
||||||
|
let max_scenic_score = grid
|
||||||
|
.iter()
|
||||||
|
.map(|v| v.iter().map(|(_, _, score)| score).max().unwrap())
|
||||||
|
.max()
|
||||||
|
.unwrap();
|
||||||
|
println!("{max_scenic_score}");
|
||||||
|
}
|
9
day9/Cargo.toml
Normal file
9
day9/Cargo.toml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[package]
|
||||||
|
name = "day9"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
nalgebra = "0.31.4"
|
2000
day9/input.txt
Normal file
2000
day9/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
8
day9/sample_input.txt
Normal file
8
day9/sample_input.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
R 5
|
||||||
|
U 8
|
||||||
|
L 8
|
||||||
|
D 3
|
||||||
|
R 17
|
||||||
|
D 10
|
||||||
|
L 25
|
||||||
|
U 20
|
64
day9/src/main.rs
Normal file
64
day9/src/main.rs
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
use nalgebra::base::Vector2;
|
||||||
|
|
||||||
|
type IVec2 = Vector2<i32>;
|
||||||
|
|
||||||
|
const RIGHT: IVec2 = IVec2::new(1, 0);
|
||||||
|
const LEFT: IVec2 = IVec2::new(-1, 0);
|
||||||
|
const UP: IVec2 = IVec2::new(0, 1);
|
||||||
|
const DOWN: IVec2 = IVec2::new(0, -1);
|
||||||
|
|
||||||
|
const ZERO: IVec2 = IVec2::new(0, 0);
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
const INPUT: &str = include_str!("../input.txt");
|
||||||
|
|
||||||
|
let mut visited: HashSet<IVec2> = HashSet::new();
|
||||||
|
|
||||||
|
let mut knots: [IVec2; 10] = [ZERO; 10];
|
||||||
|
|
||||||
|
for line in INPUT.lines() {
|
||||||
|
let (dir, steps) = line.split_once(' ').unwrap();
|
||||||
|
let dir: IVec2 = match dir.chars().next().unwrap() {
|
||||||
|
'R' => RIGHT,
|
||||||
|
'L' => LEFT,
|
||||||
|
'U' => UP,
|
||||||
|
'D' => DOWN,
|
||||||
|
_ => ZERO,
|
||||||
|
};
|
||||||
|
let steps: u32 = steps.parse().unwrap();
|
||||||
|
|
||||||
|
for _ in 0..steps {
|
||||||
|
*knots.get_mut(0).unwrap() += dir;
|
||||||
|
|
||||||
|
for i in 1..knots.len() {
|
||||||
|
let diff: IVec2;
|
||||||
|
{
|
||||||
|
let knot = knots.get(i).unwrap();
|
||||||
|
let prev = knots.get(i - 1).unwrap();
|
||||||
|
diff = *prev - *knot;
|
||||||
|
}
|
||||||
|
|
||||||
|
let knot = knots.get_mut(i).unwrap();
|
||||||
|
if diff.x.abs() > 1 || diff.y.abs() > 1 {
|
||||||
|
// need to move
|
||||||
|
if diff.x == 0 {
|
||||||
|
knot.y += diff.y.signum();
|
||||||
|
} else if diff.y == 0 {
|
||||||
|
knot.x += diff.x.signum();
|
||||||
|
} else {
|
||||||
|
knot.x += diff.x.signum();
|
||||||
|
knot.y += diff.y.signum();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if i == 9 {
|
||||||
|
visited.insert(*knot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("{}", visited.len());
|
||||||
|
}
|
Reference in New Issue
Block a user