day 8 ivy part 2 cleanup
still don't love this, but i can't think of a better approach
This commit is contained in:
		
							parent
							
								
									aeaf4f524c
								
							
						
					
					
						commit
						f15e68e65e
					
				@ -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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user