Advent of Code 2025 solutions in Gleam

Code improvements

+1
.gitignore
··· 3 3 /build 4 4 erl_crash.dump 5 5 .DS_Store 6 + /inputs
+15 -22
src/days/day01.gleam
··· 1 1 import gleam/int 2 2 import gleam/io 3 3 import gleam/list 4 + import gleam/result 4 5 import gleam/string 5 6 6 7 pub fn part1(input: String) -> String { 7 - int.to_string(solve_claude(input)) 8 - } 9 - 10 - pub fn part2(input: String) -> String { 11 - // TODO: Implement part 2 12 - "Not implemented" 13 - } 14 - 15 - pub fn solve(input: String) -> Nil { 16 - io.println("Day 1:") 17 - io.println("Part 1: " <> part1(input)) 18 - io.println("Part 2: " <> part2(input)) 19 - } 20 - 21 - pub fn solve_claude(input: String) -> Int { 22 8 let rotations = parse_input(input) 23 9 let #(_, zero_count) = 24 10 list.fold(rotations, #(50, 0), fn(state, rotation) { ··· 30 16 } 31 17 #(new_position, new_count) 32 18 }) 33 - zero_count 19 + int.to_string(zero_count) 20 + } 21 + 22 + pub fn part2(_input: String) -> String { 23 + // TODO: Implement part 2 24 + "Not implemented" 25 + } 26 + 27 + pub fn solve(input: String) -> Nil { 28 + io.println("Day 1:") 29 + io.println("Part 1: " <> part1(input)) 30 + io.println("Part 2: " <> part2(input)) 34 31 } 35 32 36 33 fn parse_input(input: String) -> List(#(String, Int)) { ··· 59 56 "R" -> position + distance 60 57 _ -> position 61 58 } 62 - // Handle wrapping around 0-99 63 - let wrapped = new_position % 100 64 - case wrapped < 0 { 65 - True -> wrapped + 100 66 - False -> wrapped 67 - } 59 + 60 + int.modulo(new_position, 100) |> result.unwrap(new_position) 68 61 }
+2 -3
src/days/day02.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day03.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day04.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day05.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day06.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day07.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day08.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day09.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day10.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day11.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day12.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day13.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day14.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day15.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day16.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day17.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day18.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day19.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day20.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day21.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day22.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day23.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day24.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -3
src/days/day25.gleam
··· 1 1 import gleam/io 2 - import gleam/string 3 2 4 - pub fn part1(input: String) -> String { 3 + pub fn part1(_input: String) -> String { 5 4 // TODO: Implement part 1 6 5 "Not implemented" 7 6 } 8 7 9 - pub fn part2(input: String) -> String { 8 + pub fn part2(_input: String) -> String { 10 9 // TODO: Implement part 2 11 10 "Not implemented" 12 11 }
+2 -4
test/aoc2025_gleam_test.gleam
··· 1 - import days/day01 2 - import days/day02 3 1 import gleeunit 4 2 5 3 pub fn main() -> Nil { ··· 8 6 9 7 // Example test for day01 10 8 pub fn day01_part1_test() { 11 - let example_input = "" 9 + let _example_input = "" 12 10 // Add your example input here 13 11 // assert day01.part1(example_input) == "expected_result" 14 12 } 15 13 16 14 // Example test for day01 part 2 17 15 pub fn day01_part2_test() { 18 - let example_input = "" 16 + let _example_input = "" 19 17 // Add your example input here 20 18 // assert day01.part2(example_input) == "expected_result" 21 19 }