From 1d54ac67526eafa3e96723e534cbc1e141cc7a63 Mon Sep 17 00:00:00 2001 From: timeshifter Date: Fri, 26 Jun 2026 22:49:45 +0200 Subject: [PATCH] add day 1 and 2 --- .gitignore | 1 + day01/Cargo.lock | 7 +++ day01/Cargo.toml | 6 ++ day01/input.txt | 1 + day01/src/main.rs | 137 ++++++++++++++++++++++++++++++++++++++++++++++ day02/Cargo.lock | 7 +++ day02/Cargo.toml | 6 ++ day02/example.txt | 4 ++ day02/input.txt | 5 ++ day02/src/main.rs | 130 +++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 304 insertions(+) create mode 100644 .gitignore create mode 100644 day01/Cargo.lock create mode 100644 day01/Cargo.toml create mode 100644 day01/input.txt create mode 100644 day01/src/main.rs create mode 100644 day02/Cargo.lock create mode 100644 day02/Cargo.toml create mode 100644 day02/example.txt create mode 100644 day02/input.txt create mode 100644 day02/src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b60de5b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +**/target diff --git a/day01/Cargo.lock b/day01/Cargo.lock new file mode 100644 index 0000000..2a24086 --- /dev/null +++ b/day01/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "day01" +version = "0.1.0" diff --git a/day01/Cargo.toml b/day01/Cargo.toml new file mode 100644 index 0000000..f21afc2 --- /dev/null +++ b/day01/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day01" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/day01/input.txt b/day01/input.txt new file mode 100644 index 0000000..6ebcca5 --- /dev/null +++ b/day01/input.txt @@ -0,0 +1 @@ +L3, R1, L4, L1, L2, R4, L3, L3, R2, R3, L5, R1, R3, L4, L1, L2, R2, R1, L4, L4, R2, L5, R3, R2, R1, L1, L2, R2, R2, L1, L1, R2, R1, L3, L5, R4, L3, R3, R3, L5, L190, L4, R4, R51, L4, R5, R5, R2, L1, L3, R1, R4, L3, R1, R3, L5, L4, R2, R5, R2, L1, L5, L1, L1, R78, L3, R2, L3, R5, L2, R2, R4, L1, L4, R1, R185, R3, L4, L1, L1, L3, R4, L4, L1, R5, L5, L1, R5, L1, R2, L5, L2, R4, R3, L2, R3, R1, L3, L5, L4, R3, L2, L4, L5, L4, R1, L1, R5, L2, R4, R2, R3, L1, L1, L4, L3, R4, L3, L5, R2, L5, L1, L1, R2, R3, L5, L3, L2, L1, L4, R4, R4, L2, R3, R1, L2, R1, L2, L2, R3, R3, L1, R4, L5, L3, R4, R4, R1, L2, L5, L3, R1, R4, L2, R5, R4, R2, L5, L3, R4, R1, L1, R5, L3, R1, R5, L2, R1, L5, L2, R2, L2, L3, R3, R3, R1 diff --git a/day01/src/main.rs b/day01/src/main.rs new file mode 100644 index 0000000..3e81ad5 --- /dev/null +++ b/day01/src/main.rs @@ -0,0 +1,137 @@ +use std::collections::HashSet; + +fn main() { + let data: Vec<_> = + Instruction::parse(std::fs::read_to_string("input.txt").unwrap().trim()).collect(); + + part1(&data); + part2(&data); +} + +fn part2(data: &[Instruction]) { + let mut visited = HashSet::new(); + let mut direction = Direction::North; + + let mut x: i32 = 0; + let mut y: i32 = 0; + + 'outer: for i in data { + direction = i.change(direction); + match direction { + Direction::North => { + for _ in 0..i.value() { + y += 1; + if visited.contains(&(x, y)) { + break 'outer; + } + visited.insert((x, y)); + } + } + Direction::East => { + for _ in 0..i.value() { + x += 1; + if visited.contains(&(x, y)) { + break 'outer; + } + visited.insert((x, y)); + } + } + Direction::South => { + for _ in 0..i.value() { + y -= 1; + if visited.contains(&(x, y)) { + break 'outer; + } + visited.insert((x, y)); + } + } + Direction::West => { + for _ in 0..i.value() { + x -= 1; + if visited.contains(&(x, y)) { + break 'outer; + } + visited.insert((x, y)); + } + } + } + } + + println!("{}", x.abs() + y.abs()); +} + +fn part1(data: &[Instruction]) { + let mut direction = Direction::North; + + let mut x = 0; + let mut y = 0; + + for i in data { + direction = i.change(direction); + match direction { + Direction::North => y += i.value() as i32, + Direction::East => x += i.value() as i32, + Direction::South => y -= i.value() as i32, + Direction::West => x -= i.value() as i32, + } + } + + println!("{}", x.abs() + y.abs()); +} + +#[derive(Debug, PartialEq)] +enum Instruction { + L(usize), + R(usize), +} + +#[derive(Debug)] +enum Direction { + North, + East, + South, + West, +} + +impl Instruction { + fn change(&self, d: Direction) -> Direction { + if let Instruction::R(_) = self { + match d { + Direction::North => Direction::East, + Direction::East => Direction::South, + Direction::South => Direction::West, + Direction::West => Direction::North, + } + } else { + match d { + Direction::North => Direction::West, + Direction::East => Direction::North, + Direction::South => Direction::East, + Direction::West => Direction::South, + } + } + } + + fn value(&self) -> usize { + match self { + Instruction::L(val) => *val, + Instruction::R(val) => *val, + } + } +} + +impl Instruction { + fn parse(s: &str) -> impl Iterator { + let mut result = vec![]; + for item in s.split(", ") { + let amount = item.chars().skip(1).collect::().parse().unwrap(); + let this = if item.contains('L') { + Instruction::L(amount) + } else { + Instruction::R(amount) + }; + result.push(this); + } + result.into_iter() + } +} diff --git a/day02/Cargo.lock b/day02/Cargo.lock new file mode 100644 index 0000000..2762917 --- /dev/null +++ b/day02/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "day02" +version = "0.1.0" diff --git a/day02/Cargo.toml b/day02/Cargo.toml new file mode 100644 index 0000000..3304419 --- /dev/null +++ b/day02/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day02" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/day02/example.txt b/day02/example.txt new file mode 100644 index 0000000..5139196 --- /dev/null +++ b/day02/example.txt @@ -0,0 +1,4 @@ +ULL +RRDDD +LURDL +UUUUD diff --git a/day02/input.txt b/day02/input.txt new file mode 100644 index 0000000..c35b43f --- /dev/null +++ b/day02/input.txt @@ -0,0 +1,5 @@ +LLRRLLRLDDUURLLRDUUUDULUDLUULDRDDDULLLRDDLLLRRDDRRUDDURDURLRDDULRRRLLULLULLRUULDLDDDUUURRRRURURDUDLLRRLDLLRRDRDLLLDDRRLUDDLDDLRDRDRDDRUDDRUUURLDUDRRLULLLDRDRRDLLRRLDLDRRRRLURLLURLRDLLRUDDRLRDRRURLDULURDLUUDURLDRURDRDLULLLLDUDRLLURRLRURUURDRRRULLRULLDRRDDDULDURDRDDRDUDUDRURRRRUUURRDUUDUDDDLRRUUDDUUDDDUDLDRDLRDUULLRUUDRRRDURLDDDLDLUULUDLLRDUDDDDLDURRRDRLLRUUUUDRLULLUUDRLLRDLURLURUDURULUDULUDURUDDULDLDLRRUUDRDDDRLLRRRRLDRRRD +DRRRDULLRURUDRLRDLRULRRLRLDLUDLUURUUURURULRLRUDRURRRLLUDRLLDUDULLUUDLLUUUDDRLRUDDDDLDDUUDULDRRRDULUULDULDRUUULRUDDDUDRRLRLUDDURLLDRLUDUDURUUDRLUURRLUUUDUURUDURLUUUDRDRRRDRDRULLUURURDLUULLDUULUUDULLLDURLUDRURULDLDLRDRLRLUURDDRLDDLRRURUDLUDDDLDRLULLDRLLLURULLUURLUDDURRDDLDDDDRDUUULURDLUUULRRLRDLDRDDDRLLRUDULRRRUDRRLDRRUULUDDLLDUDDRLRRDLDDULLLRDURRURLLULURRLUULULRDLULLUUULRRRLRUDLRUUDDRLLLLLLLURLDRRUURLDULDLDDRLLLRDLLLDLRUUDRURDRDLUULDDRLLRRURRDULLULURRDULRUDUDRLUUDDDDUULDDDUUDURLRUDDULDDDDRUULUUDLUDDRDRD +RRRULLRULDRDLDUDRRDULLRLUUDLULLRUULULURDDDLLLULRURLLURUDLRDLURRRLRLDLLRRURUDLDLRULDDULLLUUDLDULLDRDLRUULDRLURRRRUDDLUDLDDRUDDUULLRLUUDLUDUDRLRUULURUDULDLUUDDRLLUUURRURUDDRURDLDRRDRULRRRRUUUDRDLUUDDDUDRLRLDRRRRUDDRLLRDRLUDRURDULUUURUULLRDUUULRULRULLRULRLUDUDDULURDDLLURRRULDRULDUUDDULDULDRLRUULDRDLDUDRDUDLURLLURRDLLDULLDRULDLLRDULLRURRDULUDLULRRUDDULRLDLDLLLDUDLURURRLUDRRURLDDURULDURRDUDUURURULLLUDDLDURURRURDDDRRDRURRUURRLDDLRRLDDULRLLLDDUDRULUULLULUULDRLURRRLRRRLDRRLULRLRLURDUULDDUDLLLUURRRLDLUDRLLLRRUU +URLDDDLDRDDDURRRLURRRRLULURLDDUDRDUDDLURURLLRDURDDRLRUURLDLLRDLRUUURLRLDLDRUDDDULLDULLDUULURLDRDUDRRLRRLULRDDULUDULDULLULDLRRLRRLLULRULDLLDULRRLDURRRRDLURDLUDUUUDLURRRRRUDDUDUUDULDLURRDRLRLUDUDUUDULDDURUDDRDRUDLRRUDRULDULRDRLDRUDRLLRUUDDRLURURDRRLRURULLDUUDRDLULRUULUDURRULLRLUUUUUDULRLUUDRDUUULLULUDUDDLLRRLDURRDDDLUDLUUDULUUULDLLLLUUDURRUDUDLULDRRRULLLURDURDDLRRULURUDURULRDRULLRURURRUDUULRULUUDDUDDUURLRLURRRRDLULRRLDRRDURUDURULULLRUURLLDRDRURLLLUUURUUDDDLDURRLLUUUUURLLDUDLRURUUUDLRLRRLRLDURURRURLULDLRDLUDDULLDUDLULLUUUDLRLDUURRR +RLLDRDURRUDULLURLRLLURUDDLULUULRRRDRLULDDRLUDRDURLUULDUDDDDDUDDDDLDUDRDRRLRLRLURDURRURDLURDURRUUULULLUURDLURDUURRDLDLDDUURDDURLDDDRUURLDURRURULURLRRLUDDUDDDLLULUDUUUDRULLLLULLRDDRDLRDRRDRRDLDLDDUURRRDDULRUUURUDRDDLRLRLRRDLDRDLLDRRDLLUULUDLLUDUUDRDLURRRRULDRDRUDULRLLLLRRULDLDUUUURLDULDDLLDDRLLURLUDULURRRUULURDRUDLRLLLRDDLULLDRURDDLLDUDRUDRLRRLULLDRRDULDLRDDRDUURDRRRLRDLDUDDDLLUDURRUUULLDRLUDLDRRRRDDDLLRRDUURURLRURRDUDUURRDRRUDRLURLUDDDLUDUDRDRURRDDDDRDLRUDRDRLLDULRURULULDRLRLRRLDURRRUL diff --git a/day02/src/main.rs b/day02/src/main.rs new file mode 100644 index 0000000..e1aa71a --- /dev/null +++ b/day02/src/main.rs @@ -0,0 +1,130 @@ +fn main() { + let data: Vec> = std::fs::read_to_string("input.txt") + .unwrap() + .lines() + .map(|l| l.chars().collect()) + .collect(); + + part1(&data); + part2(&data); +} + +fn part2(data: &[Vec]) { + let mut x = 1; + let mut y = 1; + + for line in data { + for c in line { + match c { + 'U' => { + if x == 2 && y < 4 { + y += 1; + } + if [1, 3].contains(&x) && y < 3 { + y += 1; + } + } + 'L' => { + if y == 2 && x > 0 { + x -= 1; + } + if [1, 3].contains(&y) && x > 1 { + x -= 1; + } + } + 'D' => { + if x == 2 && y > 0 { + y -= 1; + } + if [1, 3].contains(&x) && y > 1 { + y -= 1; + } + } + 'R' => { + if y == 2 && x < 4 { + x += 1; + } + if [1, 3].contains(&y) && x < 3 { + x += 1; + } + } + _ => panic!(), + } + } + print!("{}", convert2(x, y)); + } + println!(); +} + +fn part1(data: &[Vec]) { + let mut x = 1; + let mut y = 1; + + for line in data { + for c in line { + match c { + 'U' => { + y += 1; + if y > 2 { + y = 2; + } + } + 'L' => { + x -= 1; + if x < 0 { + x = 0; + } + } + 'D' => { + y -= 1; + if y < 0 { + y = 0; + } + } + 'R' => { + x += 1; + if x > 2 { + x = 2; + } + } + _ => panic!(), + } + } + print!("{}", convert(x, y)); + } + println!(); +} + +fn convert(x: i32, y: i32) -> i32 { + match (x, y) { + (0, 0) => 7, + (0, 1) => 4, + (0, 2) => 1, + (1, 0) => 8, + (1, 1) => 5, + (1, 2) => 2, + (2, 0) => 9, + (2, 1) => 6, + (2, 2) => 3, + _ => panic!(), + } +} + +fn convert2(x: i32, y: i32) -> char { + match (x, y) { + (0, 2) => '5', + (1, 2) => '6', + (2, 2) => '7', + (3, 2) => '8', + (4, 2) => '9', + (1, 1) => 'A', + (2, 1) => 'B', + (3, 1) => 'C', + (2, 0) => 'D', + (1, 3) => '2', + (2, 3) => '3', + (3, 3) => '4', + (2, 4) => '1', + _ => panic!(), + } +}