my solutions to advent of code
aoc advent-of-code
1import gleam/bit_array 2import gleam/int 3import gleam/io.{println} 4import gleam/list 5import gleam/result.{unwrap} 6import gleam/string.{trim} 7import simplifile.{read} 8 9fn look_and_say( 10 input, 11 output: List(BitArray), 12 last_char: BitArray, 13 last_char_count, 14 i, 15) { 16 let char = bit_array.slice(input, i, 1) 17 case char |> unwrap(<<>>) == last_char { 18 True -> look_and_say(input, output, last_char, last_char_count + 1, i + 1) 19 False -> { 20 let output = 21 output 22 |> list.prepend(<<int.to_string(last_char_count):utf8>>) 23 |> list.prepend(last_char) 24 case char { 25 Ok(char) -> look_and_say(input, output, char, 1, i + 1) 26 Error(_) -> output 27 } 28 } 29 } 30} 31 32fn look_and_say_helper(input) { 33 let char = bit_array.slice(<<input:utf8>>, 0, 1) |> unwrap(<<>>) 34 look_and_say(<<input:utf8>>, [], char, 1, 1) 35 |> list.reverse 36 |> bit_array.concat 37 |> bit_array.to_string 38 |> unwrap("") 39} 40 41pub fn main() { 42 let input = read(from: "../input.txt") |> unwrap("") |> trim() 43 44 let res = 45 list.range(1, 50) 46 |> list.fold(input, fn(acc, i) { 47 case i == 41 { 48 True -> println(string.length(acc) |> int.to_string) 49 False -> Nil 50 } 51 look_and_say_helper(acc) 52 }) 53 println(string.length(res) |> int.to_string) 54}