diff --git a/day08/sol.ivy b/day08/sol.ivy index f63a4c5..3fc5d7e 100644 --- a/day08/sol.ivy +++ b/day08/sol.ivy @@ -2,6 +2,9 @@ sample = 5 5 rho 3 0 3 7 3 2 5 5 1 2 6 5 3 3 2 3 3 5 4 9 3 5 3 9 0 +######## +"part 1" + op visible r = r = -1, r r = transp max\ transp r @@ -16,63 +19,22 @@ 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 +########## +"\npart 2" op empty v = 0 == rho v -# takes from v while v[i] is less than x +# count how many elements at the start of v are less than x op x shorter v = - empty v: v - (and\ x > v) sel v + empty v: 0 + +/ (and\ x > v) # returns 1 if any v[i] blocks x op x blocked v = empty v: 0 or/ x <= v -v = 1 2 3 4 3 2 5 6 1 2 3 - -5 shorter v -0 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 x viewDistance v = (x blocked v) + rho x shorter v -op viewDistance v = v[1] viewDistance 1 drop v - -viewDistance 1 2 3 -viewDistance 5 1 2 3 -viewDistance 5 5 +op x viewDistance v = (x blocked v) + x shorter v op p score A = x = p[1] @@ -88,21 +50,17 @@ op p score A = n op i loopY A = - i[2] > (rho A)[2]: 0 - (i score A) max (i + 0 1) loopY A + x = i score A + i[2] >= (rho A)[2]: x + x , (i + 0 1) loopY A op i loopX A = - i[1] > (rho A)[1]: 0 - (i loopY A) max (i + 1 0) loopX A + x = i loopY A + i[1] >= (rho A)[1]: x + x , (i + 1 0) loopX A -op solve A = 1 1 loopX A +op solve A = max/ 1 1 loopX A - -1 1 score sample -2 2 score sample -3 4 score sample +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 solve input