Advent of Code solutions

getting all to run

+33 -21
-4
2020/11/p2.hs
··· 14 isOccupied (Just Occupied) = True 15 isOccupied _ = False 16 17 - (!?) :: [a] -> Int -> Maybe a 18 - (!?) ls i | i >= 0 && i < length ls = Just (ls !! i) 19 - (!?) _ _ = Nothing 20 - 21 compute :: [[Maybe Seat]] -> Int 22 compute seats = if seats == nextSeats 23 then length $ filter isOccupied (join seats)
··· 14 isOccupied (Just Occupied) = True 15 isOccupied _ = False 16 17 compute :: [[Maybe Seat]] -> Int 18 compute seats = if seats == nextSeats 19 then length $ filter isOccupied (join seats)
+1 -1
2023/1/p2.tri
··· 10 func digits s = 11 match extract s 12 case 'some(d) then [d, ..digits (skip 1 s)] 13 - else digits (skip 1 s) 14 15 func extract "0" <> _ = 'some(0) 16 func extract ("1" <> _) or ("one" <> _) = 'some(1)
··· 10 func digits s = 11 match extract s 12 case 'some(d) then [d, ..digits (skip 1 s)] 13 + else _ then digits (skip 1 s) 14 15 func extract "0" <> _ = 'some(0) 16 func extract ("1" <> _) or ("one" <> _) = 'some(1)
+32 -16
Justfile
··· 2 set quiet 3 set shell := ["fish", "-c"] 4 5 - default_year := env_var_or_default("YEAR", "2024") 6 session := env_var("SESSION") 7 8 - [no-cd] 9 - default: p1 p2 10 11 - [no-cd] 12 - p1 input="input": (compile "p1") && (run "p1" input) 13 14 - [no-cd] 15 - p2 input="input": (compile "p2") && (run "p2" input) 16 17 - [no-cd] 18 - compile part: 19 #!/usr/bin/env fish 20 if test -f {{part}}.erl 21 erl -compile {{part}}.erl 22 else if test -f {{part}}.swift ··· 38 gleam build 39 end 40 41 - [no-cd] 42 - run part input="input": 43 #!/usr/bin/env fish 44 - if test -x {{part}} 45 time ./{{part}} < {{input}} 46 exit 0 47 end ··· 50 time "./$fn" < {{input}} 51 else if test -f {{part}}.pl 52 time swipl -s "$fn" -g main,halt < {{input}} 53 else if test -f {{part}}.py 54 time python3 "$fn" < {{input}} 55 else if test -f {{part}}.rb ··· 67 time erl -noshell -s {{part}} main -s init stop < {{input}} 68 else if ls | rg "\.cabal\$" -q 69 time cabal run {{part}} < {{input}} 70 - else 71 - echo "Current directory does not contain known solution configuration" 72 - exit 1 73 end 74 75 - get day year=default_year: 76 echo "Getting {{year}} day {{day}}" 77 mkdir -p {{year}}/{{day}} 78 curl https://adventofcode.com/{{year}}/day/{{day}}/input \
··· 2 set quiet 3 set shell := ["fish", "-c"] 4 5 + env_year := env_var_or_default("YEAR", "2024") 6 session := env_var("SESSION") 7 8 + relative := trim_start_match(invocation_dir(), justfile_dir()) 9 + current_year := replace_regex(relative, "^/(\\d+).*$", "$1") 10 + current_day := replace_regex(relative, "^/\\d+/(\\d+)$|.*", "$1") 11 12 + default_year := if current_year != "" { current_year } else { env_year } 13 14 + p1 input="input": (part "p1") 15 + p2 input="input": (part "p2") 16 + compile part: (_compile current_year current_day part) 17 + run part input="input": (_run current_year current_day part input) 18 19 + all: (year "2020") (year "2021") (year "2022") (year "2023") (year "2024") 20 + year year=current_year: (day "1" year) (day "2" year) (day "3" year) (day "4" year) (day "5" year) (day "6" year) (day "7" year) (day "8" year) (day "9" year) (day "10" year) (day "11" year) (day "12" year) (day "13" year) (day "14" year) (day "15" year) (day "16" year) (day "17" year) (day "18" year) (day "19" year) (day "20" year) (day "21" year) (day "22" year) (day "23" year) (day "24" year) (day "25" year) 21 + day day=current_day year=current_year: (part "p1" day year) (part "p2" day year) 22 + part part day=current_day year=current_year input="input": (get day year) (_compile year day part) && (_run year day part input) 23 + 24 + _compile year day part: 25 #!/usr/bin/env fish 26 + if test ! -d {{year}}/{{day}} 27 + exit 0 28 + end 29 + cd {{year}}/{{day}} 30 if test -f {{part}}.erl 31 erl -compile {{part}}.erl 32 else if test -f {{part}}.swift ··· 48 gleam build 49 end 50 51 + _run year day part input="input": 52 #!/usr/bin/env fish 53 + if test ! -d {{year}}/{{day}} 54 + exit 0 55 + end 56 + cd {{year}}/{{day}} 57 + if test -x {{part}} -a ! -d {{part}} 58 time ./{{part}} < {{input}} 59 exit 0 60 end ··· 63 time "./$fn" < {{input}} 64 else if test -f {{part}}.pl 65 time swipl -s "$fn" -g main,halt < {{input}} 66 + else if test -f {{part}}.tri 67 + time trilogy run "$fn" < {{input}} 68 else if test -f {{part}}.py 69 time python3 "$fn" < {{input}} 70 else if test -f {{part}}.rb ··· 82 time erl -noshell -s {{part}} main -s init stop < {{input}} 83 else if ls | rg "\.cabal\$" -q 84 time cabal run {{part}} < {{input}} 85 end 86 87 + get day=current_day year=default_year: 88 + #!/usr/bin/env fish 89 + if test -f {{year}}/{{day}}/input 90 + exit 0 91 + end 92 echo "Getting {{year}} day {{day}}" 93 mkdir -p {{year}}/{{day}} 94 curl https://adventofcode.com/{{year}}/day/{{day}}/input \