from tqdm import tqdm with open(r'day10/input.txt', 'r') as input: lines = input.read().split('\n')[:-1] def add_joltage(config,button): return tuple(config[i]+1 if i in button else config[i] for i in range(len(config))) GLOBAL_MIN_PUSH = [10**6 for _ in lines] def find_min_tries(target,buttons,current,current_total,GLOBAL_MIN_PUSH,i): # On élimine les cas triviaux. if current==target and GLOBAL_MIN_PUSH[i] > current_total : GLOBAL_MIN_PUSH[i] = current_total return None if buttons == []: return None if current_total >= GLOBAL_MIN_PUSH[i]: return None # On compte combien de fois on peut presser le bouton en cours max_push = 99999 for pos in buttons[0]: max_push = min(max_push,target[pos]-current[pos]) # On cherche une solution pour chaque nombre de pressions pushes = 0 new = current for _ in range(max_push+1): find_min_tries(target,buttons[1:],new,current_total+pushes,GLOBAL_MIN_PUSH,i) new=add_joltage(new,buttons[0]) pushes+=1 return None joltage = [] buttons = [] for line in lines: split_line = line.split(' ') buttons.append(list(map(lambda x: set(map(int,(x[1:-1]).split(','))),split_line[1:-1]))) joltage.append(tuple(map(lambda x:int(x),split_line[-1][1:-1].split(',')))) for i in tqdm(range(len(lines))): find_min_tries(joltage[i],buttons[i],tuple(0 for _ in joltage[i]),0,GLOBAL_MIN_PUSH,i) print(sum(GLOBAL_MIN_PUSH))