Skip to content

Commit

Permalink
[Rust/2023/18] Add solution
Browse files Browse the repository at this point in the history
  • Loading branch information
Defelo committed Dec 18, 2023
1 parent eb815d4 commit 791a242
Show file tree
Hide file tree
Showing 7 changed files with 99 additions and 2 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
|[2021](https://adventofcode.com/2021/leaderboard)|**136**|438|
|[2020](https://adventofcode.com/2020/leaderboard)|**621**|46|

## [2023](https://adventofcode.com/2023) ([<img height=18 src=".assets/rs.svg"> Rust](Rust/2023): 17/25 | [<img height=18 src=".assets/ua.png"> Uiua](Uiua/2023): 11/25 | [<img height=18 src=".assets/hs.svg"> Haskell](Haskell/2023): 4/25)
## [2023](https://adventofcode.com/2023) ([<img height=18 src=".assets/rs.svg"> Rust](Rust/2023): 18/25 | [<img height=18 src=".assets/ua.png"> Uiua](Uiua/2023): 11/25 | [<img height=18 src=".assets/hs.svg"> Haskell](Haskell/2023): 4/25)
|Mo|Tu|We|Th|Fr|Sa|Su|
|-|-|-|-|-|-|-|
|||||[**1**](https://adventofcode.com/2023/day/1) [<img height=12 src=".assets/rs.svg">](Rust/2023/01.rs "Rust solution for 2023/01") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgpOdW1zIOKGkCB7Im9uZSIgInR3byIgInRocmVlIiAiZm91ciIgImZpdmUiCiAgICAgICAgInNpeCIgInNldmVuIiAiZWlnaHQiICJuaW5lIn0KRGlnaXRzIOKGkCArQDHih6E5CkZpbmQg4oaQIC8rIMOXKzHih6E5IOKJoeKKkOKMlQpFeHRyYWN0IOKGkCArw5cxMCDiiKniiqLiioPiiJjih4wg4pa94omgMC4KCsKw4oqfLysg4oqcKOKKnyDiiKlFeHRyYWN0IOKKg-KGpeKImCDiiKlGaW5kIERpZ2l0cyxOdW1zwqQp4omgQFxuLgo= "Uiua solution for 2023/01")|[**2**](https://adventofcode.com/2023/day/2) [<img height=12 src=".assets/rs.svg">](Rust/2023/02.rs "Rust solution for 2023/02") [<img height=12 src=".assets/hs.svg">](Haskell/2023/02.hs "Haskell solution for 2023/02") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgpDb2xvcnMg4oaQIHsicmVkIiAiZ3JlZW4iICJibHVlIn0KUGFyc2VDb3VudCDihpAg4oqX4oqZQ29sb3JzIOKKmeKKkOKLlSDCsOKKn-KHjCDiipzilqHiiaBAIC4KUGFyc2VSb3VuZCDihpAgLyviipwow5firJow4oavwqQzwrDiippQYXJzZUNvdW50KeKJoEAsLgpQYXJzZUdhbWUg4oaQIOKKnFBhcnNlUm91bmTiiaBAOy4g4oaYKzLiipdAOi4KCuKKnCgv4oalUGFyc2VHYW1lKeKJoEBcbi4K4oipLysg4oqDL8OXKMOXKzHih6Hip7suL8OX4omkMTJfMTNfMTQp4o2JCg== "Uiua solution for 2023/02")|[**3**](https://adventofcode.com/2023/day/3) [<img height=12 src=".assets/rs.svg">](Rust/2023/03.rs "Rust solution for 2023/03") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgpOdW1zIOKGkCAoCiAg4oiKOitAMOKHoTEwCiAgw5fCrOKsmjDihrswX8KvMS4uCiAgw5fijZzima1cKwopClN5bWJvbHMg4oaQIMOX4oqDKOKJoEAuKSg9ME51bXMpCkdlYXJzIOKGkCA9QCoKTmVpZ2hib3JzIOKGkCDiiaEow5firJow4oa7KeKYhzEtMeKHoTNfM-KIqcKkCkEg4oaQICgKICBOZWlnaGJvcnMg4oqDU3ltYm9scyBOdW1zCiAg4oqP4oqd4pmtL-KGpQopCkIg4oaQICgKICBOZWlnaGJvcnMg4oqDTnVtcyBHZWFycwogIOKYhzHijYkKICDirJow4omhKOKWvT0y4qe7LuKWveKJoDAu4oqdKQogIOKJoS_Dl-KJoeKKj-KKmcKkCikKCuKKgyjiipziiJjiiaBAXG4uKSjiioIw4omh4ouV4pmtIHJlZ2V4ICJcXGQrIikK4oipLysg4oqDQiBBCg== "Uiua solution for 2023/03")|
|[**4**](https://adventofcode.com/2023/day/4) [<img height=12 src=".assets/rs.svg">](Rust/2023/04.rs "Rust solution for 2023/04") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgpQYXJzZUNhcmQg4oaQIOKIqcKw4pahwrDiip8g4oqcKOKWoeKKnOKLleKJoEAgLiniiaBAfC4g4oaYKzLiipdAOi4KTWF0Y2hlcyDihpAg4qe74pa94oiKLApQb2ludHMg4oaQIOKMiuKBv-KKmTItMQpXaW5NYXRyaXgg4oaQIOKsmjDiiaEo4oqCMeKKguKIqeKGr-KKmSgw4oqZMSkpIOKHoeKnuy7iioIwCkEg4oaQIC8r4omhUG9pbnRzCkIg4oaQIOKKojsg4o2l4oqD4oiYKC8rw5cp4qe7LiDiioPiiJgowqziiqIpIFdpbk1hdHJpeAoK4oqDQiBBIOKKnChNYXRjaGVzIFBhcnNlQ2FyZCniiaBAXG4uCg== "Uiua solution for 2023/04")|[**5**](https://adventofcode.com/2023/day/5) [<img height=12 src=".assets/rs.svg">](Rust/2023/05.rs "Rust solution for 2023/05") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgpQYXJzZVNlZWRzIOKGkCDiiaHii5Xihpgx4oqc4pah4omgQCAuwrDilqHiiqIKUGFyc2VSYW5nZU1hcCDihpAg4o2cwrBb4oqZ4oqZ4oiYXeKKgygtOnzii4XiiJh84ouFKyniipzii5XiiaBAIC4KUGFyc2VNYXBzIOKGkCDiiaEo4pah4omh4oqQUGFyc2VSYW5nZU1hcOKGmDHiipzilqHiiaBAXG4uwrDilqEpIOKGmDEKQ29udGFpbnMg4oaQIOKJjTFfMOKJpApGaW5kUmFuZ2VNYXAg4oaQIOKKouKKmuKKguKKmTEg4omhQ29udGFpbnMg4oqZ4o2c4o2JKOKGmDEpCk1hcE51bSDihpAgK-KKoeKKg0ZpbmRSYW5nZU1hcCjiioLiipkw4oqi4o2JOikKU2VlZFJhbmdlcyDihpAg4o2cKMKw4oqf4o2JKeKKg-KImCsg4oavwq8xXzIKSW50ZXJzZWN0IOKGkCDiip_iipMv4oalL-KGp-KNnOKKn-KNiQpJc0VtcHR5IOKGkCAv4omkClNwbGl0QXQg4oaQIOKKgyjihqfiioLiiJ4pKOKGpeKKgjrCr-KInikKTWFwU2VlZFJhbmdlIOKGkCAoCiAgwqQr4oqZKOKKmeKKnyA64oqZSW50ZXJzZWN0IOKIqVNwbGl0QXQg4oqZLCkgwrBb4oqZ4oqZ4oiYXToKICDiiKko4pa9wqziiaFJc0VtcHR5LikKKQpGbGF0TWFwU2VlZFJhbmdlcyDihpAgO-KIpyjiioPii4XiiJgo4oip4oqC4oqZOjpNYXBTZWVkUmFuZ2UpKSDiipniipkoLuKGrzBfMltdKQpNYXBTZWVkUmFuZ2VzIOKGkCDiioLiiKco4oqZ4oqCRmxhdE1hcFNlZWRSYW5nZXM6KSA64oqZ4oqZKOKGrzBfMltdKQpBIOKGkCAv4oan4omhKOKIpyhNYXBOdW06wrDilqEpOikg4oqZwqQKQiDihpAgL-KGp-KKouKNiSDiiKcoTWFwU2VlZFJhbmdlczrCsOKWoSkgOlNlZWRSYW5nZXMKCuKKg0IgQSDiioNQYXJzZVNlZWRzIFBhcnNlTWFwcyDiipzilqHCrOKMlSJcblxuIi4K "Uiua solution for 2023/05")|[**6**](https://adventofcode.com/2023/day/6) [<img height=12 src=".assets/rs.svg">](Rust/2023/06.rs "Rust solution for 2023/06") [<img height=12 src=".assets/hs.svg">](Haskell/2023/06.hs "Haskell solution for 2023/06") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgpTb2x2ZSDihpAgKAogIMKw4oqf4oeMCiAgLeKKkyjDlzR84oG_Mi4pCiAg4oqD4oiYKOKMiuKImikKICA94oG_MiwKICAr4oqDLSjil78yKysrMSkKKQoK4oqcKOKKnOKLleKJoEAgLuKGmCsx4oqXQDouKeKJoEBcbi4K4oqDKFNvbHZlIOKJoS8o4ouV4oqC4oipwrDii5UpKSAoL8OX4omhU29sdmXijYkpCg== "Uiua solution for 2023/06")|[**7**](https://adventofcode.com/2023/day/7) [<img height=12 src=".assets/rs.svg">](Rust/2023/07.rs "Rust solution for 2023/07") [<img height=12 src=".assets/hs.svg">](Haskell/2023/07.hs "Haskell solution for 2023/07") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgpQYXJzZUNhcmQg4oaQICsy4oqX4oqZIjIzNDU2Nzg5VEpRS0EiClBhcnNlSGFuZCDihpAg4oqC4oqTKFBhcnNlQ2FyZMKw4pahfOKLlSnCsOKKnyDiipzilqHiiaBAIC4KQ291bnRDYXJkcyDihpAgwqTirJow4oavWzRdIOKGmDEg4oqP4o2WLiDiipXip7viipsuIOKWveKJoDAuCkhhbmRUeXBlIOKGkCAt4oqZNuKKouKKmiDiiaHiiY1bCiAgMF8wXzBfMCAxXzBfMF8wCiAgMl8wXzBfMCAxXzFfMF8wCiAgMl8xXzBfMCAxXzFfMV8wCiAgMV8xXzFfMV0gQ291bnRDYXJkcwpTb3J0IOKGkCDiio_ijY8g4omhKOKKgkhhbmRUeXBlLuKGmMKvMSkgLgpSZXBsYWNlSm9rZXJzIOKGkCDijZwo4oaYwq8xKSjDl-KJoDExLikKCuKKnFBhcnNlSGFuZOKJoEBcbi4K4omhUmVwbGFjZUpva2Vycy4K4oipKC8rw5cgKzHih6Hip7suIOKKouKHjOKNiSBTb3J0KQo= "Uiua solution for 2023/07")|[**8**](https://adventofcode.com/2023/day/8) [<img height=12 src=".assets/rs.svg">](Rust/2023/08.rs "Rust solution for 2023/08") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgpQYXJzZUluc3RydWN0aW9ucyDihpAgPUBSwrDilqHiiqIKUGFyc2VOb2RlIOKGkCDihpgx4oqicmVnZXgiKFteICxdKykgPSBcXCgoW14gLF0rKSwgKFteICxdKylcXCkiClBhcnNlTmV0d29yayDihpAg4omhUGFyc2VOb2RlIOKGmDEKUmVwbGFjZU5hbWVzIOKGkCDijZzijYko4oqX4oqDKOKGmDEp4oqiKQpGaW5kU3RhcnRBbmRHb2FsIOKGkCDiiKko4oqX4pahKSAiQUFBIiwiWlpaIuKKouKNiQpTdGFydEFuZEdvYWxNYXNrIOKGkCDiiKk9QEEsQFriiaEo4oqi4oeMKeKKouKNiQpTdGVwIOKGkCDiioMo4oqP4oqDKOKKj-KXv-Knuyzii4Xiipnii4Xii4XiiJh84oqP4oqZ4ouF4ouF4oiYKXwrMeKLheKImHzii4Xii4XiipniipniiJgpClJ1biEg4oaQIOKLheKKmeKLheKLhTsg4o2iU3RlcCjCrF4zKSDiipkwCkxDTSDihpAgw7c74oqD4o2i4oqD4pe_4oiYwrHDlwpBIOKGkCBSdW4hKD3iipnii4XiiJgpIEZpbmRTdGFydEFuZEdvYWwKQiDihpAgL0xDTSDiiaEoUnVuISjiio_iipnii4XiiJgpKSDiipMo4oqafMKkfMKkfMKkKSBTdGFydEFuZEdvYWxNYXNrCgriipzilqHiiaBAXG4uCuKKg1BhcnNlTmV0d29yayBQYXJzZUluc3RydWN0aW9ucwriioNCIEEg4oqD4oiYUmVwbGFjZU5hbWVzCg== "Uiua solution for 2023/08")|[**9**](https://adventofcode.com/2023/day/9) [<img height=12 src=".assets/rs.svg">](Rust/2023/09.rs "Rust solution for 2023/09") [<img height=12 src=".assets/hs.svg">](Haskell/2023/09.hs "Haskell solution for 2023/09") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgrijYniipwo4oqc4ouV4omgQCAuKeKJoEBcbi4K4oipKC8r4pmtWzvijaXiioMo4omhLy3il6syKSjiiqLih4wpXS0x4qe7Likg4oeMLgo= "Uiua solution for 2023/09")|[**10**](https://adventofcode.com/2023/day/10) [<img height=12 src=".assets/rs.svg">](Rust/2023/10.rs "Rust solution for 2023/10")|
|[**11**](https://adventofcode.com/2023/day/11) [<img height=12 src=".assets/rs.svg">](Rust/2023/11.rs "Rust solution for 2023/11") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgpFeHBhbmQg4oaQIOKWvTriiKko4piHwq8yKeKKnuKKn-KIqShcKysxw5ctMTovw5fCrCnijYksLCwKCj1AI-KKnOKImOKJoEBcbi4K4oqDKEV4cGFuZCAxMDAwMDAwKShFeHBhbmQgMikK4oipKMO3Mi8r4pmt4oqgKC8r4oy1LSkuKQo= "Uiua solution for 2023/11")|[**12**](https://adventofcode.com/2023/day/12) [<img height=12 src=".assets/rs.svg">](Rust/2023/12.rs "Rust solution for 2023/12")|[**13**](https://adventofcode.com/2023/day/13) [<img height=12 src=".assets/rs.svg">](Rust/2023/13.rs "Rust solution for 2023/13") [<img height=12 src=".assets/ua.png">](https://uiua.org/pad?src=JnNjCgpNaXNtYXRjaGVzIOKGkCAvK-KZreKJoCDiiKnihpksOiDihqfiiKnip7ssLCDiipnih4wg4oqD4oaY4oaZClNvbHZlISDihpAgK8OXMTAwOiDiiKkoLyvDlz1eMDog4oqZ4omhTWlzbWF0Y2hlcy4g4o2cKC0xKeKHoeKKg-Knu8KkKSDijYkuCgriipwo4pah4oqc4oiY4omgQFxuLinCrOKMlSJcblxuIi4K4oipLysg4oqQ4omh4oqDU29sdmUhMSBTb2x2ZSEwCg== "Uiua solution for 2023/13")|[**14**](https://adventofcode.com/2023/day/14) [<img height=12 src=".assets/rs.svg">](Rust/2023/14.rs "Rust solution for 2023/14")|[**15**](https://adventofcode.com/2023/day/15) [<img height=12 src=".assets/rs.svg">](Rust/2023/15.rs "Rust solution for 2023/15")|[**16**](https://adventofcode.com/2023/day/16) [<img height=12 src=".assets/rs.svg">](Rust/2023/16.rs "Rust solution for 2023/16")|[**17**](https://adventofcode.com/2023/day/17) [<img height=12 src=".assets/rs.svg">](Rust/2023/17.rs "Rust solution for 2023/17")|
|[**18**](https://adventofcode.com/2023/day/18)|[**19**](https://adventofcode.com/2023/day/19)|[**20**](https://adventofcode.com/2023/day/20)|[**21**](https://adventofcode.com/2023/day/21)|[**22**](https://adventofcode.com/2023/day/22)|[**23**](https://adventofcode.com/2023/day/23)|[**24**](https://adventofcode.com/2023/day/24)|
|[**18**](https://adventofcode.com/2023/day/18) [<img height=12 src=".assets/rs.svg">](Rust/2023/18.rs "Rust solution for 2023/18")|[**19**](https://adventofcode.com/2023/day/19)|[**20**](https://adventofcode.com/2023/day/20)|[**21**](https://adventofcode.com/2023/day/21)|[**22**](https://adventofcode.com/2023/day/22)|[**23**](https://adventofcode.com/2023/day/23)|[**24**](https://adventofcode.com/2023/day/24)|
|[**25**](https://adventofcode.com/2023/day/25)|26|27|28|29|30|31|

## [2022](https://adventofcode.com/2022) ([<img height=18 src=".assets/rs.svg"> Rust](Rust/2022): 25/25 | [<img height=18 src=".assets/py.svg"> Python](Python/2022): 18/25 | [<img height=18 src=".assets/hs.svg"> Haskell](Haskell/2022): 9/25 | [<img height=18 src=".assets/ua.png"> Uiua](Uiua/2022): 7/25)
Expand Down
69 changes: 69 additions & 0 deletions Rust/2023/18.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#![feature(test)]

use aoc::grid::Direction;
use regex::Regex;

#[derive(Debug)]
struct Input {
part1: Vec<Instruction>,
part2: Vec<Instruction>,
}

#[derive(Debug)]
struct Instruction {
direction: Direction,
steps: isize,
}

fn setup(input: &str) -> Input {
let regex = Regex::new(r"^([UDLR]) (\d+) \(#(.{5})([0123])\)$").unwrap();
let (part1, part2) = input
.lines()
.map(|line| {
let cap = regex.captures(line).unwrap();

let p1 = Instruction {
direction: Direction::from(cap[1].chars().next().unwrap()),
steps: cap[2].parse().unwrap(),
};

let p2 = Instruction {
direction: match &cap[4] {
"0" => Direction::East,
"1" => Direction::South,
"2" => Direction::West,
"3" => Direction::North,
_ => unreachable!(),
},
steps: isize::from_str_radix(&cap[3], 16).unwrap(),
};

(p1, p2)
})
.unzip();

Input { part1, part2 }
}

fn solve(instructions: &[Instruction]) -> usize {
let (_, a, b) = instructions
.iter()
.fold((0, 0, 0), |(x, a, b), i| match i.direction {
Direction::North => (x, a - i.steps * x, b + i.steps),
Direction::East => (x + i.steps, a, b + i.steps),
Direction::South => (x, a + i.steps * x, b + i.steps),
Direction::West => (x - i.steps, a, b + i.steps),
});

a.unsigned_abs() + b.unsigned_abs() / 2 + 1
}

fn part1(input: &Input) -> usize {
solve(&input.part1)
}

fn part2(input: &Input) -> usize {
solve(&input.part2)
}

aoc::main!(2023, 18, ex: 1);
3 changes: 3 additions & 0 deletions Rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -275,3 +275,6 @@ path = "2023/16.rs"
[[bin]]
name = "2023_17"
path = "2023/17.rs"
[[bin]]
name = "2023_18"
path = "2023/18.rs"
9 changes: 9 additions & 0 deletions Rust/lib/grid.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,15 @@ impl Direction {
}
}

pub fn step_signed_n(self, (x, y): (isize, isize), n: isize) -> (isize, isize) {
match self {
Direction::North => (x, y - n),
Direction::East => (x + n, y),
Direction::South => (x, y + n),
Direction::West => (x - n, y),
}
}

pub fn invert(self) -> Self {
match self {
Direction::North => Direction::South,
Expand Down
14 changes: 14 additions & 0 deletions examples/2023/18/1
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
R 6 (#70c710)
D 5 (#0dc571)
L 2 (#5713f0)
D 2 (#d2c081)
R 2 (#59c680)
D 2 (#411b91)
L 5 (#8ceee2)
U 2 (#caa173)
L 1 (#1b58a2)
U 2 (#caa171)
R 2 (#7807d2)
U 3 (#a77fa3)
L 2 (#015232)
U 2 (#7a21e3)
1 change: 1 addition & 0 deletions examples/2023/18/1.1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
62
1 change: 1 addition & 0 deletions examples/2023/18/1.2
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
952408144115

0 comments on commit 791a242

Please sign in to comment.