Advent of Code solutions

2021 day 15, probably but very slow so idk yet

+55
+17
2021/15/p1.tri
··· 1 + import "trilogy:io" use readall 2 + import "trilogy:debug" use dbg 3 + import "trilogy:core" use length 4 + import "trilogy:parsec" as p use parse, per_line, many_1, digit 5 + import "trilogy:number" use from_digit 6 + import "trilogy:grid" as grid 7 + 8 + proc main!() { 9 + let input = parse (per_line (many_1 <| p::map from_digit digit)) readall!() 10 + let h = length input 11 + let w = length <| input.0 12 + 13 + let goal = grid::coord (w - 1) (h - 1) 14 + let input_grid = grid::from input 15 + let risk = grid::shortest_path_length!(input_grid, 0, goal) 16 + dbg!(risk) 17 + }
+38
2021/15/p2.tri
··· 1 + import "trilogy:io" use readall 2 + import "trilogy:debug" use dbg 3 + import "trilogy:core" use length 4 + import "trilogy:parsec" as p use parse, per_line, many_1, digit 5 + import "trilogy:number" use from_digit 6 + import "trilogy:compare" use max 7 + import "trilogy:grid" as grid 8 + import "trilogy:array" as array 9 + import "trilogy:iterator" as it 10 + import "trilogy:algorithm" use shortest_path_length 11 + 12 + proc main!() { 13 + let input = parse (per_line (many_1 <| p::map from_digit digit)) readall!() 14 + 15 + let tile_h = length input 16 + let tile_w = length <| input.0 17 + let h = 5 * tile_h 18 + let w = 5 * tile_w 19 + 20 + let goal = grid::coord (w - 1) (h - 1) 21 + let input_grid = grid::from input 22 + 23 + let risk = with shortest_path_length!(0, goal) 24 + when 'neighbours(from_pos) resume 25 + grid::adjacent from_pos 26 + |> it::from 27 + |> it::filter (fn p. grid::x p >= 0 && grid::y p >= 0 && grid::x p < w && grid::y p < h) 28 + |> it::map (fn p. 29 + let offset_weight = (grid::x p // tile_w) + (grid::y p // tile_h), 30 + let mod_pos = grid::coord (grid::x p % tile_w) (grid::y p % tile_h), 31 + let pos_weight = input_grid.mod_pos, 32 + let total_weight = offset_weight + pos_weight, 33 + p:if total_weight < 10 then total_weight else total_weight - 9 34 + ) 35 + |> array::collect 36 + else yield 37 + dbg!(risk) 38 + }