my solutions to advent of code
aoc advent-of-code

ugly - day 8 2015

aylac.top 5bd9f564 e1d74769

verified
Changed files
+88
2015
+20
2015/8/gleam/gleam.toml
···
··· 1 + name = "main" 2 + version = "1.0.0" 3 + 4 + # Fill out these fields if you intend to generate HTML documentation or publish 5 + # your project to the Hex package manager. 6 + # 7 + # description = "" 8 + # licences = ["Apache-2.0"] 9 + # repository = { type = "github", user = "", repo = "" } 10 + # links = [{ title = "Website", href = "" }] 11 + # 12 + # For a full reference of all the available options, you can have a look at 13 + # https://gleam.run/writing-gleam/gleam-toml/. 14 + 15 + [dependencies] 16 + gleam_stdlib = ">= 0.44.0 and < 2.0.0" 17 + simplifile = ">= 2.3.0 and < 3.0.0" 18 + 19 + [dev-dependencies] 20 + gleeunit = ">= 1.0.0 and < 2.0.0"
+14
2015/8/gleam/manifest.toml
···
··· 1 + # This file was generated by Gleam 2 + # You typically do not need to edit this file 3 + 4 + packages = [ 5 + { name = "filepath", version = "1.1.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "filepath", source = "hex", outer_checksum = "B06A9AF0BF10E51401D64B98E4B627F1D2E48C154967DA7AF4D0914780A6D40A" }, 6 + { name = "gleam_stdlib", version = "0.65.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "7C69C71D8C493AE11A5184828A77110EB05A7786EBF8B25B36A72F879C3EE107" }, 7 + { name = "gleeunit", version = "1.7.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "CD701726CBCE5588B375D157B4391CFD0F2F134CD12D9B6998A395484DE05C58" }, 8 + { name = "simplifile", version = "2.3.0", build_tools = ["gleam"], requirements = ["filepath", "gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "0A868DAC6063D9E983477981839810DC2E553285AB4588B87E3E9C96A7FB4CB4" }, 9 + ] 10 + 11 + [requirements] 12 + gleam_stdlib = { version = ">= 0.44.0 and < 2.0.0" } 13 + gleeunit = { version = ">= 1.0.0 and < 2.0.0" } 14 + simplifile = { version = ">= 2.3.0 and < 3.0.0" }
+54
2015/8/gleam/src/main.gleam
···
··· 1 + import gleam/int.{to_string} 2 + import gleam/io.{println} 3 + import gleam/list 4 + import gleam/result.{unwrap} 5 + import gleam/string.{split, trim} 6 + import simplifile.{read} 7 + 8 + pub fn get_mem_size(str, cur_size, i) { 9 + let rec = fn(i, extend) { get_mem_size(str, cur_size + 1, i + extend) } 10 + 11 + case string.slice(str, i, 2) { 12 + "" -> cur_size 13 + "\\\\" | "\\\"" -> rec(i + 1, 1) 14 + "\\x" -> rec(i + 1, 3) 15 + _ -> rec(i, 1) 16 + } 17 + } 18 + 19 + pub fn get_mem_size_helper(str: String) { 20 + get_mem_size(string.slice(str, 1, string.length(str) - 2), 0, 0) 21 + } 22 + 23 + pub fn get_encoded_size(str, cur_size, i) { 24 + let rec = fn(next_size) { get_encoded_size(str, next_size, i + 1) } 25 + 26 + let char = string.slice(str, i, 1) 27 + case char { 28 + "" -> cur_size + 2 29 + "\\" | "\"" -> rec(cur_size + 2) 30 + _ -> rec(cur_size + 1) 31 + } 32 + } 33 + 34 + pub fn main() { 35 + let input = 36 + read(from: "../input.txt") 37 + |> unwrap("") 38 + |> trim() 39 + |> split("\n") 40 + 41 + let result_part_1 = 42 + input 43 + |> list.fold(0, fn(total, str) { 44 + total + { string.length(str) - get_mem_size_helper(str) } 45 + }) 46 + println(result_part_1 |> to_string) 47 + 48 + let result_part_2 = 49 + input 50 + |> list.fold(0, fn(total, str) { 51 + total + { get_encoded_size(str, 0, 0) - string.length(str) } 52 + }) 53 + println(result_part_2 |> to_string) 54 + }