Bringing some days up to speed after a short break
This commit is contained in:
		
							parent
							
								
									9fac5539f0
								
							
						
					
					
						commit
						c63736752b
					
				
							
								
								
									
										2
									
								
								1/2.py
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								1/2.py
									
									
									
									
									
								
							| @ -18,7 +18,7 @@ if __name__ == '__main__': | ||||
|             right.append(r) | ||||
|     # how many times does each number apear in each list | ||||
|     right = counts(right) | ||||
|     score = 0 | ||||
|     score = sum([0 if n in right else n * right[n]  for n in left]) | ||||
|     for n in left: | ||||
|         if n not in right: continue | ||||
|         score += n * right[n] | ||||
|  | ||||
							
								
								
									
										57
									
								
								6/1.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								6/1.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | ||||
| def get_start(grid: list[str]) -> [int, int]: | ||||
|     x, y = 0, 0 | ||||
|     for row, line in enumerate(grid): | ||||
|         if '^' in line: | ||||
|             y = row | ||||
|             break | ||||
|     x = grid[y].find('^') | ||||
|     return [x, y] | ||||
| 
 | ||||
| def peek(grid: list[str], x: int, y: int) -> str: | ||||
|     try: | ||||
|         if y < 0 or x < 0: | ||||
|             return '' | ||||
|         return grid[y][x] | ||||
|     except IndexError: | ||||
|         return '' | ||||
| 
 | ||||
| def rotate(vel: [int, int]) -> [int, int]: | ||||
|     # going up? -> go right | ||||
|     if vel == [0,-1]: | ||||
|         return [1,0] | ||||
|     # going right? -> go down | ||||
|     elif vel == [1,0]: | ||||
|         return [0,1] | ||||
|     # going down? -> go left | ||||
|     elif vel == [0,1]: | ||||
|         return [-1,0] | ||||
|     # goign left? -> go up | ||||
|     elif vel == [-1,0]: | ||||
|         return [0,-1] | ||||
|     else: | ||||
|         raise ValueError('brother wtf') | ||||
| 
 | ||||
| def crawl(grid: list[str], x: int, y: int) -> set[(int, int)]: | ||||
|     # non -unique set that we'll have to clean up | ||||
|     visited = set() | ||||
|     visited.add((x,y)) | ||||
|     vel = [0,-1] | ||||
|     while val := peek(grid, x+vel[0], y+vel[1]): | ||||
|         # Record where we go | ||||
|         print((x,y), 'vel ->', vel) | ||||
|         if val == '.' or val == '^': | ||||
|             x += vel[0] | ||||
|             y += vel[1] | ||||
|             visited.add((x,y)) | ||||
|         # Don't record the walls  | ||||
|         if val == '#': | ||||
|             vel = rotate(vel) | ||||
|     return visited | ||||
|      | ||||
| if __name__ == '__main__': | ||||
|     with open('input.data') as raw: | ||||
|         grid = [ line.strip() for line in raw ] | ||||
|     start_x, start_y = get_start(grid) | ||||
|     print(len(grid), len(grid[0])) | ||||
|     places = crawl(grid, start_x, start_y) | ||||
|     print(len(places)) | ||||
							
								
								
									
										48
									
								
								7/1.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								7/1.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | ||||
| import random | ||||
| 
 | ||||
| def test(expression: list[str|int]) -> int: | ||||
|     while len(expression) >= 3: | ||||
|         left, op, right = expression[0], expression[1], expression[2] | ||||
|         if len(expression) > 3: | ||||
|             expression = expression[3:] | ||||
|         else: | ||||
|             expression = [] | ||||
|         if op == '*': | ||||
|             expression.insert(0, left * right) | ||||
|         else: | ||||
|             expression.insert(0, left + right) | ||||
|     return expression[0] | ||||
| 
 | ||||
| def genrate_expression(vals: list[int]) -> list[str|int]: | ||||
|     ops  = [random.choice('*+') for _ in range(len(vals) - 1)] | ||||
|     expr = [] | ||||
|     for item in zip(vals, ops): | ||||
|         expr.extend(item) | ||||
|     expr.append(vals[-1]) | ||||
|     return expr | ||||
| 
 | ||||
| 
 | ||||
| with open('input.data') as file: | ||||
|     inputs = [] | ||||
|     for line in file: | ||||
|         vals = [int(val) for val in line.replace(':', '').split()] | ||||
|         inputs.append([vals[0], vals[1:]]) | ||||
|     s = 0 | ||||
|     for case in inputs: | ||||
|         answer, vals = case[0], case[1] | ||||
|         expr = genrate_expression(vals) | ||||
|         for i in range(20000): | ||||
|             expr = genrate_expression(vals) | ||||
|             result = test(expr) | ||||
|             if result == answer: | ||||
|                 #print(expr) | ||||
|                 s += answer | ||||
|                 break | ||||
|     print(s) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|      | ||||
|      | ||||
|      | ||||
							
								
								
									
										9
									
								
								7/sample.data
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								7/sample.data
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| 190: 10 19 | ||||
| 3267: 81 40 27 | ||||
| 83: 17 5 | ||||
| 156: 15 6 | ||||
| 7290: 6 8 6 15 | ||||
| 161011: 16 10 13 | ||||
| 192: 17 8 14 | ||||
| 21037: 9 7 18 13 | ||||
| 292: 11 6 16 20 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user