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

whatever

aylac.top b4807f13 23097406

verified
Changed files
+57 -53
2025
5
gleam
+57 -53
2025/5/gleam/src/main.gleam
··· 45 45 |> int.to_string 46 46 |> io.println 47 47 48 + // nicer looking but idc 49 + // |> list.filter(fn(i) { 50 + // list.any(fresh_ranges, fn(range) { i >= range.0 && i <= range.1 }) 51 + // }) 52 + // |> list.length 53 + 54 + // this thing crashed my computer btw im stupid 48 55 // let haha = 49 56 // fresh_ranges 50 57 // |> list.fold(set.new(), fn(acc, i) { ··· 53 60 // io.println(set.size(haha) |> int.to_string) 54 61 55 62 let base_set: set.Set(#(Int, Int)) = set.new() 56 - let ranges = 57 - fresh_ranges 58 - |> list.fold(base_set, fn(prev_seen_ranges, range) { 59 - let #(range, seen_ranges) = 60 - prev_seen_ranges 61 - |> set.fold(#(range, prev_seen_ranges), fn(acc, seen_range) { 62 - let #(range, seen_ranges) = acc 63 - // echo #( 64 - // range, 65 - // seen_range, 66 - // int.compare(range.0, seen_range.0), 67 - // int.compare(range.1, seen_range.1), 68 - // int.compare(range.0, seen_range.1), 69 - // int.compare(range.1, seen_range.0), 70 - // ) 71 - // btw im refusing to ever do something better than this idc about your sorting and whatever this is the way shut the fuck up i spent three hours on this i will be using it 72 - case 73 - int.compare(range.0, seen_range.0), 74 - int.compare(range.1, seen_range.1), 75 - int.compare(range.0, seen_range.1), 76 - int.compare(range.1, seen_range.0) 77 - { 78 - // if there's no touching 79 - Gt, Gt, Gt, Gt | Lt, Lt, Lt, Lt -> #(range, seen_ranges) 80 - // if it's inside of the other one 81 - Gt, Lt, _, _ | Eq, Lt, _, _ | Gt, Eq, _, _ | Eq, Eq, _, _ -> #( 82 - #(0, 0), 83 - seen_ranges, 84 - ) 85 - // if the other one is inside it 86 - Lt, Gt, _, _ | Eq, Gt, _, _ | Lt, Eq, _, _ -> #( 87 - range, 88 - set.delete(seen_ranges, seen_range), 89 - ) 90 - // if it's touching on the left side make them touch 91 - Lt, Lt, _, _ -> #( 92 - #(range.0, seen_range.1), 93 - set.delete(seen_ranges, seen_range), 94 - ) 95 - // if it's touching on the right size make them touch 96 - Gt, Gt, _, _ -> #( 97 - #(seen_range.0, range.1), 98 - set.delete(seen_ranges, seen_range), 99 - ) 100 - } 101 - }) 63 + fresh_ranges 64 + |> list.fold(base_set, fn(prev_seen_ranges, range) { 65 + let #(range, seen_ranges) = 66 + prev_seen_ranges 67 + |> set.fold(#(range, prev_seen_ranges), fn(acc, seen_range) { 68 + let #(range, seen_ranges) = acc 69 + // echo #( 70 + // range, 71 + // seen_range, 72 + // int.compare(range.0, seen_range.0), 73 + // int.compare(range.1, seen_range.1), 74 + // int.compare(range.0, seen_range.1), 75 + // int.compare(range.1, seen_range.0), 76 + // ) 77 + // btw im refusing to ever do something better than this idc about your sorting and whatever this is the way shut the fuck up i spent three hours on this i will be using it 78 + case 79 + int.compare(range.0, seen_range.0), 80 + int.compare(range.1, seen_range.1), 81 + int.compare(range.0, seen_range.1), 82 + int.compare(range.1, seen_range.0) 83 + { 84 + // if there's no touching 85 + Gt, Gt, Gt, Gt | Lt, Lt, Lt, Lt -> #(range, seen_ranges) 86 + // if it's inside of the other one 87 + Gt, Lt, _, _ | Eq, Lt, _, _ | Gt, Eq, _, _ | Eq, Eq, _, _ -> #( 88 + #(0, 0), 89 + seen_ranges, 90 + ) 91 + // if the other one is inside it 92 + Lt, Gt, _, _ | Eq, Gt, _, _ | Lt, Eq, _, _ -> #( 93 + range, 94 + set.delete(seen_ranges, seen_range), 95 + ) 96 + // if it's touching on the left side make them touch 97 + Lt, Lt, _, _ -> #( 98 + #(range.0, seen_range.1), 99 + set.delete(seen_ranges, seen_range), 100 + ) 101 + // if it's touching on the right size make them touch 102 + Gt, Gt, _, _ -> #( 103 + #(seen_range.0, range.1), 104 + set.delete(seen_ranges, seen_range), 105 + ) 106 + } 107 + }) 102 108 103 - case range == #(0, 0) { 104 - False -> seen_ranges |> set.insert(range) 105 - True -> seen_ranges 106 - } 107 - }) 108 - // echo ranges 109 - ranges 109 + case range == #(0, 0) { 110 + False -> seen_ranges |> set.insert(range) 111 + True -> seen_ranges 112 + } 113 + }) 110 114 |> set.fold(0, fn(acc, range) { acc + range.1 - range.0 + 1 }) 111 115 |> int.to_string 112 116 |> io.println