Advent of Code solutions
at main 104 lines 4.0 kB view raw
1set dotenv-load 2set quiet 3set shell := ["fish", "-c"] 4 5env_year := env_var_or_default("YEAR", "2024") 6session := env_var("SESSION") 7 8relative := trim_start_match(invocation_dir(), justfile_dir()) 9current_year := replace_regex(relative, "^/(\\d+).*$", "$1") 10current_day := replace_regex(relative, "^/\\d+/(\\d+)$|.*", "$1") 11 12default_year := if current_year != "" { current_year } else { env_year } 13 14llvm_prefix := env("LLVM_SYS_191_PREFIX", "") 15clang := if llvm_prefix == "" { "clang" } else { llvm_prefix / "bin/clang" } 16 17 18p1 input="input": (part "p1" current_day current_year input) 19p2 input="input": (part "p2" current_day current_year input) 20compile part: (_compile current_year current_day part) 21run part input="input": (_run current_year current_day part input) 22 23all: (year "2020") (year "2021") (year "2022") (year "2023") (year "2024") 24year 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) 25day day=current_day year=current_year: (part "p1" day year) (part "p2" day year) 26part part day=current_day year=current_year input="input": (get day year) (_compile year day part) && (_run year day part input) 27 28_compile year day part: 29 #!/usr/bin/env fish 30 if test ! -d {{year}}/{{day}} 31 exit 0 32 end 33 cd {{year}}/{{day}} 34 if test -f {{part}}.tri 35 trilogy compile {{part}}.tri > {{part}}.ll 36 {{clang}} -O3 {{part}}.ll -o {{part}} 37 rm {{part}}.ll 38 else if test -f {{part}}.erl 39 erl -compile {{part}}.erl 40 else if test -f {{part}}.swift 41 swiftc {{part}}.swift > /dev/null 42 else if test -f {{part}}.rs 43 rustc {{part}}.rs > /dev/null 44 else if test -f {{part}}.c 45 gcc {{part}}.c -o {{part}} > /dev/null 46 else if test -f {{part}}.cpp 47 g++ -std=c++2c {{part}}.cpp -o {{part}} > /dev/null 48 else if test -f {{part}}.hs 49 ghc {{part}} -O -outputdir.{{part}} > /dev/null 50 else if ls | rg "\.cabal\$" -q 51 cabal build {{part}} > /dev/null 52 else if test -d {{part}} -a -f {{part}}/gleam.toml 53 pushd {{part}} 54 gleam build 55 end 56 57_run year day part input="input": 58 #!/usr/bin/env fish 59 if test ! -d {{year}}/{{day}} 60 exit 0 61 end 62 cd {{year}}/{{day}} 63 if test -x {{part}} -a ! -d {{part}} 64 time ./{{part}} < {{input}} 65 exit 0 66 end 67 set fn (fd -d 1 -t f {{part}}) 68 if test -n "$fn" -a -x "$fn" 69 time "./$fn" < {{input}} 70 else if test -f {{part}}.pl 71 time swipl -s "$fn" -g main,halt < {{input}} 72 else if test -f {{part}}.tri 73 time trilogy run {{part}}.tri < {{input}} 74 else if test -f {{part}}.py 75 time python3 "$fn" < {{input}} 76 else if test -f {{part}}.rb 77 time ruby "$fn" < {{input}} 78 else if test -f {{part}}.ts 79 time deno "$fn" < {{input}} 80 else if test -f {{part}}.php 81 time php "$fn" < {{input}} 82 else if test -f {{part}}.ex 83 time elixir "$fn" < {{input}} 84 else if test -d {{part}} -a -f {{part}}/gleam.toml 85 pushd {{part}} 86 time gleam run "$fn" < ../{{input}} 87 else if test -f {{part}}.erl 88 time erl -noshell -s {{part}} main -s init stop < {{input}} 89 else if ls | rg "\.cabal\$" -q 90 time cabal run {{part}} < {{input}} 91 end 92 93get day=current_day year=default_year: 94 #!/usr/bin/env fish 95 if test -f {{year}}/{{day}}/input 96 exit 0 97 end 98 echo "Getting {{year}} day {{day}}" 99 mkdir -p {{year}}/{{day}} 100 curl https://adventofcode.com/{{year}}/day/{{day}}/input \ 101 -X GET \ 102 -H "Cookie: session={{session}}" \ 103 -H "User-Agent: Cameron Eldridge <cameldridge@gmail.com>" \ 104 -o {{year}}/{{day}}/input