Compare commits
13 Commits
cede3289dc
...
main
Author | SHA1 | Date | |
---|---|---|---|
e871837dc6
|
|||
8fbaaa4bbc
|
|||
c7087d0921 | |||
00a67d7d3d | |||
02445824a6 | |||
2c1323095f | |||
ffd5771fc9
|
|||
64820c0251
|
|||
52a17ff632
|
|||
87f14bbf0c
|
|||
c67298eb5a
|
|||
8e55e961cb
|
|||
04490516f0
|
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
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);
|
||||
}
|
@ -3,14 +3,14 @@
|
||||
enum Move {
|
||||
ROCK = 1,
|
||||
PAPER = 2,
|
||||
SCISSORS = 3
|
||||
SCISSORS = 3,
|
||||
}
|
||||
|
||||
#[repr(u8)]
|
||||
enum Outcome {
|
||||
LOSS = 0,
|
||||
DRAW = 3,
|
||||
WIN = 6
|
||||
WIN = 6,
|
||||
}
|
||||
|
||||
impl TryFrom<char> for Move {
|
||||
@ -38,12 +38,9 @@ impl std::fmt::Display for Move {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
fn main() {
|
||||
const INPUT: &str = include_str!("../input.txt");
|
||||
|
||||
|
||||
let mut your_score: u64 = 0;
|
||||
let mut their_score: u64 = 0;
|
||||
|
||||
@ -60,15 +57,24 @@ fn main() {
|
||||
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 };
|
||||
} 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;
|
||||
|
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