diff --git a/day08/sol.ivy b/day08/sol.ivy index 7e3f0ae..ea374ed 100644 --- a/day08/sol.ivy +++ b/day08/sol.ivy @@ -15,3 +15,94 @@ sample +/, vis4 sample +/, vis4 input + + +op pady a = -1, a, -1 +op padx a = transp pady transp a +op pad a = pady padx a + +A = pad sample + + +i = 3 3 +d = 1 0 + +op i slice d = + t = A[i[1];i[2]] + t < 0: 0 rho 0 + t, (i+d) slice d + +A +A[3;3] +i slice d +i slice -d + +op empty v = 0 == rho v + +# takes from v while v[i] is less than v[0] +op shorter v = + empty v: v + x = v[1] + v = 1 flip v + (and\ x > v) sel v + +# returns 1 if any v[i] blocks v +op blocked v = + empty v: 0 + or/ v[1] <= 1 drop v + +v = 5 1 2 3 4 3 2 5 6 1 2 3 + +shorter v +shorter 1 2 3 + +# takes from v while v[i] is less than v[0] +op shorter2 v = + x = v[1] + v = 1 flip v + v, +/ (and\ transp x > v) + +#shorter2 transp (1, rho v) rho v +#shorter2 3 3 rho flip iota 9 + +"" +sample +"-" + +op viewDistance v = (blocked v) + rho shorter v + +viewDistance 1 2 3 +viewDistance 5 1 2 3 +viewDistance 5 5 + +op p score A = + x = p[1] + y = p[2] + e = A[y;x] + row = A[y] + col = A[;x] + n = 1 + n = n * viewDistance flip x take row + n = n * viewDistance e, x drop row + n = n * viewDistance flip y take col + n = n * viewDistance e, y drop col + n + +op i loopY A = + i[2] > (rho A)[2]: 0 + (i score A) max (i + 0 1) loopY A + +op i loopX A = + i[1] > (rho A)[1]: 0 + (i loopY A) max (i + 1 0) loopX A + +op solve A = 5 5 loopY A + + +1 1 score sample +2 2 score sample +3 4 score sample +#solve sample + +#1 1 score sample; 1 2 score sample; 1 3 score sample; 1 4 score sample; 1 5 score sample +#2 1 score sample; 2 2 score sample; 2 3 score sample; 2 4 score sample; 2 5 score sample