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

day 17 2015 - ugly

aylac.top a28a79b2 fed6bc57

verified
Changed files
+116
2015
+20
2015/17/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/17/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" }
+82
2015/17/gleam/src/main.gleam
··· 1 + import gleam/dict 2 + import gleam/int 3 + import gleam/io 4 + import gleam/list 5 + import gleam/result 6 + import gleam/string 7 + import simplifile as file 8 + 9 + fn check_containers_part1(input, remaining, right_options) { 10 + case remaining { 11 + 0 -> right_options + 1 12 + r if r < 0 -> right_options 13 + _ -> { 14 + let #(_, right_options) = 15 + input 16 + |> dict.fold(#(input, right_options), fn(acc, cid, cv) { 17 + let #(input, right_options) = acc 18 + let input = input |> dict.delete(cid) 19 + #(input, check_containers_part1(input, remaining - cv, right_options)) 20 + }) 21 + right_options 22 + } 23 + } 24 + } 25 + 26 + fn check_containers_part2(input, remaining, right_options, jars_used) { 27 + case remaining { 28 + 0 -> 29 + right_options 30 + |> dict.insert( 31 + jars_used, 32 + { dict.get(right_options, jars_used) |> result.unwrap(0) } + 1, 33 + ) 34 + r if r < 0 -> right_options 35 + _ -> { 36 + let #(_, right_options) = 37 + input 38 + |> dict.fold(#(input, right_options), fn(acc, cid, cv) { 39 + let #(input, right_options) = acc 40 + let input = input |> dict.delete(cid) 41 + #( 42 + input, 43 + check_containers_part2( 44 + input, 45 + remaining - cv, 46 + right_options, 47 + jars_used + 1, 48 + ), 49 + ) 50 + }) 51 + right_options 52 + } 53 + } 54 + } 55 + 56 + pub fn main() { 57 + let assert Ok(input) = file.read(from: "../input.txt") 58 + as "Input file not found" 59 + let #(input, _) = 60 + input 61 + |> string.trim 62 + |> string.split("\n") 63 + |> list.fold(#(dict.new(), 1), fn(l, v) { 64 + #(dict.insert(l.0, l.1, int.parse(v) |> result.unwrap(0)), l.1 + 1) 65 + }) 66 + 67 + check_containers_part1(input, 150, 0) 68 + |> int.to_string 69 + |> io.println 70 + 71 + let #(_number_of_jars, possibilities) = 72 + check_containers_part2(input, 150, dict.new(), 0) 73 + |> dict.fold(#(999_999, 0), fn(last, number_of_jars, possibilities) { 74 + case last.0 > number_of_jars { 75 + True -> #(number_of_jars, possibilities) 76 + False -> last 77 + } 78 + }) 79 + possibilities 80 + |> int.to_string 81 + |> io.println 82 + }