my solutions to advent of code
aoc advent-of-code
at test 1.1 kB view raw
1import gleam/int.{add, min, multiply, to_string} 2import gleam/io.{println} 3import gleam/list.{combinations, fold, map, reduce} 4import gleam/result.{unwrap} 5import gleam/string.{split, trim} 6import simplifile.{read} 7 8pub fn main() { 9 let input = 10 read(from: "../input.txt") 11 |> unwrap("") 12 |> trim() 13 |> split("\n") 14 |> map(fn(str) { 15 split(str, "x") 16 |> map(fn(str) { int.base_parse(str, 10) |> unwrap(0) }) 17 }) 18 19 // part 1 20 println( 21 input 22 |> fold(0, fn(prev, cur) { 23 let sides = 24 cur 25 |> combinations(2) 26 |> map(fn(v) { fold(v, 1, multiply) }) 27 28 prev 29 + fold(sides, 0, fn(prev, cur) { prev + 2 * cur }) 30 + { reduce(sides, min) |> unwrap(0) } 31 }) 32 |> to_string, 33 ) 34 35 // part 2 36 println( 37 input 38 |> fold(0, fn(prev, cur) { 39 let smallest_perimeter = 40 reduce( 41 cur 42 |> map(fn(v) { multiply(v, 2) }) 43 |> combinations(2) 44 |> map(fn(v) { fold(v, 0, add) }), 45 min, 46 ) 47 |> unwrap(0) 48 49 prev + smallest_perimeter + fold(cur, 1, multiply) 50 }) 51 |> to_string, 52 ) 53}