Day 7 part 2
This commit is contained in:
		
							parent
							
								
									0ba84fbee5
								
							
						
					
					
						commit
						d46d11ce76
					
				
					 1 changed files with 36 additions and 0 deletions
				
			
		
							
								
								
									
										36
									
								
								7/7_2.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										36
									
								
								7/7_2.py
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,36 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env python
 | 
				
			||||||
 | 
					# 2021 - Advent Of Code - 7 part 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def parse_file(file):
 | 
				
			||||||
 | 
					    with open(file) as f:
 | 
				
			||||||
 | 
					        line = f.readline()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    list_state = [int(x) for x in line.split(',')]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return list_state
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def sum_n(n):
 | 
				
			||||||
 | 
					    return int(n*(n+1) / 2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# init_state = parse_file('input_example.txt')
 | 
				
			||||||
 | 
					init_state = parse_file('input.txt')
 | 
				
			||||||
 | 
					nb_crabs = len(init_state)
 | 
				
			||||||
 | 
					print(f'Initial state with {nb_crabs} crabs: {init_state}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					max_h = max(init_state)
 | 
				
			||||||
 | 
					print(f'maximum horizontal position is {max_h}')
 | 
				
			||||||
 | 
					all_diff = [0] * max_h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					min_fuel = sum_n(max_h) * nb_crabs
 | 
				
			||||||
 | 
					min_fuel_pos = 0
 | 
				
			||||||
 | 
					for m in range(max_h):
 | 
				
			||||||
 | 
					    list_diff = [sum_n(abs(m-x)) for x in init_state]
 | 
				
			||||||
 | 
					    if sum(list_diff) < min_fuel:
 | 
				
			||||||
 | 
					        min_fuel = sum(list_diff)
 | 
				
			||||||
 | 
					        min_fuel_pos = m
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    all_diff[m] = list_diff
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print(f'min fuel {min_fuel} for position {min_fuel_pos}')
 | 
				
			||||||
		Loading…
	
		Reference in a new issue