Skip to content

Instantly share code, notes, and snippets.

@neuro-sys
Last active December 2, 2022 20:13
Show Gist options
  • Save neuro-sys/346a69c9c1df4ec6ed7d403aba42f0a7 to your computer and use it in GitHub Desktop.
Save neuro-sys/346a69c9c1df4ec6ed7d403aba42f0a7 to your computer and use it in GitHub Desktop.
Advent of Code 2022 in Joy
"seqlib" libload.
DEFINE
readlines == []
"1.txt" "ro" fopen
[feof not] [fgets rolldown cons swap] while
fclose reverse;
shiftleft == 10 * +;
chartoint == ord '0 ord -;
toint == 0 [chartoint swap shiftleft] fold;
filternums == [dup '0 >= swap '9 <= and] filter;
maptonum == [filternums] map;
sum == 0 [toint +] fold;
find-max-sum == 0 [sum max] fold;
zap == unswons reverse rolldown swons reverse swons;
tuck == [] swons;
is-empty == "" =;
group-bucket == [[]] [dup is-empty [swap tuck] [swap zap] branch] fold reverse;
solve == readlines maptonum group-bucket find-max-sum;
.
solve.
"seqlib" libload.
DEFINE
readlines == []
"1.txt" "ro" fopen
[feof not] [fgets rolldown cons swap] while
fclose reverse;
shiftleft == 10 * +;
chartoint == ord '0 ord -;
toint == 0 [chartoint swap shiftleft] fold;
filternum == [dup '0 >= swap '9 <= and] filter;
maptonum == [filternum] map;
zap == unswons reverse rolldown swons reverse swons;
tuck == [] swons;
is-empty == "" =;
group-bucket == [[]] [dup is-empty [swap tuck] [swap zap] branch] fold reverse;
sum == 0 [toint +] fold;
find-max-sum == 0 [sum max] fold;
sum-last-3 == reverse 3 [uncons] times pop + +;
solve == readlines maptonum group-bucket map-sum qsort sum-last-3;
.
solve.
"seqlib" libload.
DEFINE
readlines == []
"2.txt" "ro" fopen
[feof not] [fgets rolldown cons swap] while
fclose reverse;
is-alpha == dup 'A >= swap 'Z <= and;
filteralpha == [dup is-alpha] filter;
trimfilter == [filteralpha] map;
filterempty == ["" !=] filter;
atonum == ord '@ ord -;
xtonum == ord 'W ord -;
shiftleft == 10 *;
tonum == dup first atonum shiftleft swap second xtonum +;
draw == dup first atonum swap second xtonum =;
winlose == [[12 6] [13 0] [21 0] [23 6] [31 6] [32 0] []] case;
point == dup draw [3] [tonum winlose] branch;
chosen == second xtonum;
score == dup point swap chosen +;
scores == [score] map;
sum == 0 [+] fold;
solve == readlines trimfilter filterempty scores sum;
.
solve.
"seqlib" libload.
DEFINE
readlines == []
"2.txt" "ro" fopen
[feof not] [fgets rolldown cons swap] while
fclose reverse;
is-alpha == dup 'A >= swap 'Z <= and;
filteralpha == [dup is-alpha] filter;
trimfilter == [filteralpha] map;
filterempty == ["" !=] filter;
win == [['A 2] ['B 3] ['C 1] []] case;
lose == [['A 3] ['B 1] ['C 2] []] case;
draw == [['A 1] ['B 2] ['C 3] []] case;
pair == dup first swap second;
play == pair [['X lose] ['Y draw] ['Z win] []] case;
point == second [['X 0] ['Y 3] ['Z 6] [abort]] case;
scores == [dup point swap play +] map;
sum == 0 [+] fold;
solve == readlines trimfilter filterempty scores sum;
.
solve.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment