Advent of Code solutions

getting all to run

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