Retourner au contenu associé (entrée de forum : Advent of Code 2023 : Day 4)
Posté par alberic89 🐧 le 04 décembre 2023 à 20:52. En réponse au message Advent of Code 2023 : Day 4. Évalué à 1.
Une solution simple mais efficace :
#!/bin/python3 def game_number(game): return int(game.split(":")[0][5:]) def find_winning(game): game = game.split(":")[1].split("|")[0].split(" ") w = [] for n in game: if n != "": w.append(int(n)) return w def nb_winning(game, winning): game = game.split(":")[1].split("|")[1].split(" ") nb = 0 for n in game: if n != "": if int(n) in winning: nb += 1 return nb def solve1(puzzle,testing=False): s=0 for game in puzzle: if game == "": continue nb = nb_winning(game, find_winning(game)) if nb == 0: continue points = 1 * (2 ** (nb-1)) if testing: print(game,"had", points, "points beacause of", nb, "winning numbers.") s += points if testing: print(s) return s def solve2(puzzle,testing=False): s = 0 for i in range(puzzle.count("")): puzzle.remove("") wons = [1 for i in range(len(puzzle))] for game in puzzle: num = game_number(game) nb = nb_winning(game, find_winning(game)) if testing: print("You had", wons[num-1], "cards", num, "who give you", nb, "cards.") for i in range(nb): wons[num+i] += wons[num-1] s = sum(wons) if testing: print(s) return s test1 = """Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53 Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1 Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83 Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36 Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11 """ result1 = 13 test2 = test1 result2 = 30 def solve(short=False): print("----Part 1----") if short == False: if solve1(test1.split("\n"),testing=True) != result1: print("Not working.") return False else : print("Maybe working?") with open("input.txt",'r') as file: lines = file.read().split("\n") s1 = solve1(lines) print(s1) print("----Part 2----") if short == False: if solve2(test2.split("\n"),testing=True) != result2: print("Not working.") return False else : print("Maybe working?") with open("input.txt",'r') as file: lines = file.read().split("\n") s2 = solve2(lines) print(s2) return s1, s2 if __name__ == "__main__": from sys import argv try: if argv[1] == "--summary" or argv[1] == "-s": solve(short=True) except IndexError: solve()
J'ai trouvé le problème étonnamment simple, j'y suis arrivé du premier coup pour les deux parties.
Et contrairement à beaucoup de monde ce jour-là, cette solution est presque instantanée à l'exécution, de l'ordre de 0.01 sec.
L'informatique n'est pas une science exacte, on n'est jamais à l'abri d'un succès
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル
# Simple et rapide
Posté par alberic89 🐧 . En réponse au message Advent of Code 2023 : Day 4. Évalué à 1.
Une solution simple mais efficace :
J'ai trouvé le problème étonnamment simple, j'y suis arrivé du premier coup pour les deux parties.
Et contrairement à beaucoup de monde ce jour-là, cette solution est presque instantanée à l'exécution, de l'ordre de 0.01 sec.
L'informatique n'est pas une science exacte, on n'est jamais à l'abri d'un succès