day 13 cleanup
This commit is contained in:
		
							parent
							
								
									4000af8bf3
								
							
						
					
					
						commit
						1c7035d433
					
				
							
								
								
									
										36
									
								
								day13/sol.py
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								day13/sol.py
									
									
									
									
									
								
							| @ -22,10 +22,14 @@ import numpy | |||||||
| def solve(file): | def solve(file): | ||||||
|     total = 0 |     total = 0 | ||||||
|     total2 = 0 |     total2 = 0 | ||||||
|     for record in parse(file): |     records = list(parse(file)) | ||||||
|  |     for record in records: | ||||||
|         #print(record) |         #print(record) | ||||||
|         ax, ay, bx, by, px, py = record |         ax, ay, bx, by, px, py = record | ||||||
| 
 | 
 | ||||||
|  |         # Part 1 | ||||||
|  | 
 | ||||||
|  |         # Solve the linear equation: | ||||||
|         # k_a ax + k_b * bx = px |         # k_a ax + k_b * bx = px | ||||||
|         # k_a ay + k_b * by = py |         # k_a ay + k_b * by = py | ||||||
|          |          | ||||||
| @ -38,34 +42,50 @@ def solve(file): | |||||||
|             print("yes", k1, k2) |             print("yes", k1, k2) | ||||||
|             total += 3*k1 + k2 |             total += 3*k1 + k2 | ||||||
| 
 | 
 | ||||||
|  |     for record in records: | ||||||
|  |         ax, ay, bx, by, px, py = record | ||||||
| 
 | 
 | ||||||
|         m00 = ax |         # Part 2 | ||||||
|         m01 = bx |         # | ||||||
|         m10 = ay |         # Can't use numpy because the values are too large for floats | ||||||
|         m11 = by |         # So here's an ad-hoc solver | ||||||
|         v1 = px+ 10000000000000 | 
 | ||||||
|         v2 = py+ 10000000000000 |         px += 10000000000000 | ||||||
|  |         py += 10000000000000 | ||||||
|  | 
 | ||||||
|  |         m00, m01 = ax, bx | ||||||
|  |         m10, m11 = ay, by | ||||||
|  |         v1 = px | ||||||
|  |         v2 = py | ||||||
|          |          | ||||||
|  |         # subtract c*eq1 from eq2 to cancel first coefficient | ||||||
|         c = F(m10,m00) |         c = F(m10,m00) | ||||||
|         m10 -= c*m00 |         m10 -= c*m00 | ||||||
|         m11 -= c*m01 |         m11 -= c*m01 | ||||||
|         v2  -= c*v1 |         v2  -= c*v1 | ||||||
| 
 | 
 | ||||||
|  |         # scale eq2 | ||||||
|         c = F(1,m11) |         c = F(1,m11) | ||||||
|         v2 *= c |         v2 *= c | ||||||
|         m11 *= c |         m11 *= c | ||||||
| 
 | 
 | ||||||
|  |         # subtract c*eq2 from eq1 to cancel second coefficient | ||||||
|         c = F(m01,m11) |         c = F(m01,m11) | ||||||
|         m01 -= c*m11 |         m01 -= c*m11 | ||||||
|         v1  -= c*v2 |         v1  -= c*v2 | ||||||
| 
 | 
 | ||||||
|  |         # scale eq1 | ||||||
|         c = F(1,m00) |         c = F(1,m00) | ||||||
|         v1  *= c |         v1  *= c | ||||||
|         m00 *= c |         m00 *= c | ||||||
| 
 | 
 | ||||||
|  |         # we now have | ||||||
|  |         # 1*k_a + 0     = v1 | ||||||
|  |         # 0     + 1*k_b = v2 | ||||||
|  | 
 | ||||||
|         print(m00, m01, m10, m11, v1, v2) |         print(m00, m01, m10, m11, v1, v2) | ||||||
|         if v1.denominator == 1 and v2.denominator == 1 and v1 > 0 and v2 > 0: |         if v1.denominator == 1 and v2.denominator == 1 and v1 > 0 and v2 > 0: | ||||||
|             #if v1*ax + v2*bx == px and v1*ay + v2*by == py: |             if v1*ax + v2*bx == px and v1*ay + v2*by == py: | ||||||
|                 print("yes2", v1, v2) |                 print("yes2", v1, v2) | ||||||
|                 total2 += 3*v1 + v2 |                 total2 += 3*v1 + v2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user