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

part 1

aylac.top 46604370 17310cc7

verified
Changed files
+94
2025
+20
2025/4/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
2025/4/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" }
+60
2025/4/gleam/src/main.gleam
··· 1 + import gleam/bit_array 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 solve(input, size) { 10 + let get_place = fn(x, y) { 11 + case 12 + case x, y { 13 + _, -1 | -1, _ -> <<>> 14 + s, _ | _, s if s == size -> <<>> 15 + 16 + _, _ -> bit_array.slice(input, y * size + x, 1) |> result.unwrap(<<>>) 17 + } 18 + { 19 + <<"@">> -> 1 20 + _ -> 0 21 + } 22 + } 23 + 24 + list.range(0, bit_array.byte_size(input) - 1) 25 + |> list.fold(0, fn(acc, pos) { 26 + let x = pos % size 27 + let y = pos / size 28 + 29 + let roll = get_place(x, y) 30 + 31 + let neighbours = 32 + get_place(x - 1, y - 1) 33 + + get_place(x, y - 1) 34 + + get_place(x + 1, y - 1) 35 + + get_place(x - 1, y) 36 + + get_place(x + 1, y) 37 + + get_place(x - 1, y + 1) 38 + + get_place(x, y + 1) 39 + + get_place(x + 1, y + 1) 40 + 41 + case roll, neighbours < 4 { 42 + 1, True -> acc + 1 43 + _, _ -> acc 44 + } 45 + }) 46 + } 47 + 48 + pub fn main() { 49 + let assert Ok(input) = file.read(from: "../input.txt") 50 + as "Input file not found" 51 + let input = 52 + input |> string.trim |> string.split("\n") |> list.map(fn(v) { <<v:utf8>> }) 53 + let size = list.length(input) 54 + let input = input |> list.fold(<<>>, fn(acc, l) { bit_array.append(acc, l) }) 55 + // @ and . 56 + 57 + solve(input, size) 58 + |> int.to_string 59 + |> io.println 60 + }