Skip to content

Advent of Code 2022, I'm going to try to use Excel. First with LAMBDA, then maybe VBA or OfficeScripts.

Notifications You must be signed in to change notification settings

pyRobShrk/AoC.2022

Repository files navigation

AoC.2022

Advent of Code 2022

I'm going to try to use Excel this year. First with LAMBDA and helpers, then maybe VBA or Office Scripts if needed. If I manage to refactor and solve Part 1 and 2 with a single formula, I'll put it here.

      --------Part 1--------   --------Part 2--------
Day       Time   Rank  Score       Time   Rank  Score
 21   12:09:30  14437      0   12:14:13  11169      0
 17   01:39:45   2539      0   16:49:38   7818      0
 15   14:21:42  22720      0          -      -      -
 14   22:23:44  30296      0   23:02:55  29350      0
 10   00:14:22   2244      0   00:29:27   2127      0
  9   00:32:18   4451      0   22:51:22  44520      0
  8   00:16:51   2329      0   15:03:57  49582      0
  7   18:01:20  58751      0   18:06:41  56545      0
  6   00:05:12   2177      0   00:06:31   2157      0
  5   00:20:42   2947      0   00:21:51   2246      0
  4   00:08:35   3682      0   00:10:12   2555      0
  3   00:08:28   2036      0   00:36:03   8055      0
  2   00:22:32   9144      0   00:48:22  12329      0
  1   00:07:26   4163      0   00:09:14   3371      0

Day 1:

=LET(blankrows,FILTER(ROW(A1:A2238),ISBLANK(A1:A2238)),
    lengths,TAKE(blankrows-VSTACK({0},blankrows),COUNT(blankrows))-1,
    offsets,blankrows-lengths-1,
    sums,MAP(offsets,lengths,LAMBDA(OFS,HT,
        SUM(OFFSET(A1,OFS,,HT)))),
    VSTACK(MAX(sums),SUM(LARGE(sums,{3,2,1}))))

Day 2:

=LET(input,A1:A2500,
    part1,SWITCH(input,"A X",4,"A Y",8,"A Z",3,"B X",1,"B Y",5,"B Z",9,"C X",7,"C Y",2,"C Z",6),
    part2,SWITCH(input,"A X",3,"A Y",4,"A Z",8,"B X",1,"B Y",5,"B Z",9,"C X",2,"C Y",6,"C Z",7),
    VSTACK(SUM(part1),SUM(part2)))

Day 3:

=LET(input,A1:A300,
    chars,LAMBDA(str,MID(str,SEQUENCE(LEN(str)),1)),
    matches,LAMBDA(one,two,CONCAT(IFERROR(MID(two,FIND(chars(one),two),1),""))),
    pos,CODE(MAP(LEFT(input,LEN(input)/2),RIGHT(input,LEN(input)/2),LAMBDA(a,b,matches(a,b)))),
    groups,CODE(BYROW(WRAPROWS(input,3),LAMBDA(r,
        matches(matches(INDEX(r,1),INDEX(r,2)),INDEX(r,3))))),
    score,LAMBDA(p,SUM(IF(p>96,p-96,p-38))),
    VSTACK(score(pos),score(groups)))

Day 4:

=LET(input,A1:A1000,c,FIND(",",input),
    rng,LAMBDA(s,HSTACK(VALUE(TEXTBEFORE(s,"-")),VALUE(TEXTAFTER(s,"-")))),
    data,HSTACK(rng(MID(input,1,c-1)),rng(MID(input,c+1,LEN(input)-c))),
    overlaps,BYROW(data,LAMBDA(rw,LET(a,INDEX(rw,1),b,INDEX(rw,2),c,INDEX(rw,3),d,INDEX(rw,4),
        1*OR(AND(c>=a,d<=b),AND(b<=d,a>=c))+1*NOT(OR(b<c,d<a))))),
    VSTACK(SUM(IF(overlaps=2,1)),SUM(IF(overlaps>0,1))))

Day 6:

=LET(input,A1,length,LEN(input),
    fours,MID(input,SEQUENCE(length-3),4),
    fourteens,MID(input,SEQUENCE(length-13),14),
    chars,LAMBDA(str,MID(str,SEQUENCE(LEN(str)),1)),
    matchct,LAMBDA(s,SUM(1*(EXACT(TRANSPOSE(chars(s)),chars(s))))),
    matches,MAP(fours,matchct),matches2,MAP(fourteens,matchct),
    VSTACK(MIN(IF(matches=4,SEQUENCE(length-3,,4))),
        MIN(IF(matches2=14,SEQUENCE(length-13,,14)))))

Day 8:

=LET(chars,LAMBDA(str,MID(str,SEQUENCE(LEN(str)),1)),
    forest,INT(WRAPROWS(chars(A1),100)),
    sightDist,LAMBDA(val,rng,asc,
        LET(d,XMATCH(SEQUENCE(,10-val,9,-1),rng,1,asc),mx,COUNT(rng),IF(asc=1,MIN(IFERROR(d,mx)),mx-MAX(IFERROR(d,1))+1))),
    trees,MAKEARRAY(97,97,LAMBDA(r,c,
        LET(cl,INDEX(forest,r+1,c+1),
        up,INDEX(forest,SEQUENCE(r),c+1),down,INDEX(forest,SEQUENCE(98-r,,r+2),c+1),
        left,INDEX(forest,r+1,SEQUENCE(,c)),right,INDEX(forest,r+1,SEQUENCE(,98-c,c+2)),
        score,PRODUCT(sightDist(cl,right,1),sightDist(cl,down,1),sightDist(cl,left,-1),sightDist(cl,up,-1)),
        score*IF(OR(cl>MAX(up),cl>MAX(down),cl>MAX(right),cl>MAX(left)),1,-1)))),
    VSTACK(SUM(1*(trees>0))+98*4,MAX(ABS(trees))))

Day 10:

=LET(vals,IFERROR(VALUE(MID(A1:A146,5,5)),0),
    clock,SCAN(0.1,vals,LAMBDA(a,v,IF(v,a+2,a+1))),
    x,SCAN(1,vals,LAMBDA(a,v,a+v)),
    signal,{20,60,100,140,180,220}, strength,LOOKUP(signal,clock,x),
    grid,SEQUENCE(6,40), sprite,LOOKUP(grid,clock,x),
    VSTACK(SUM(signal*strength),IF(ABS(MOD(grid-1,40)-sprite)<2,"📱","")))

About

Advent of Code 2022, I'm going to try to use Excel. First with LAMBDA, then maybe VBA or OfficeScripts.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages