From 815d8ae5c2ad145890e48e9329dc8335183c1f28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20Guti=C3=A9rrez=20de=20Quevedo=20P=C3=A9?= =?UTF-8?q?rez?= Date: Tue, 22 Dec 2020 23:45:31 +0100 Subject: [PATCH] day 22 second part --- 22/2.py | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 22/2.py diff --git a/22/2.py b/22/2.py new file mode 100644 index 0000000..6872478 --- /dev/null +++ b/22/2.py @@ -0,0 +1,61 @@ +with open("input") as f: + content = [x.strip() for x in f] + +player1 = [] +player2 = [] +part = 0 +for c in content: + if not c: + part += 1 + continue + if part == 0: # reading player 2 stack + if c.startswith("Player"): + continue + player1.append(int(c)) + if part == 1: # reading player 1 stack + if c.startswith("Player"): + continue + player2.append(int(c)) + +def play(p1, p2): + hist1 = list() + hist2 = list() + while len(p1) and len(p2): + if p1 in hist1 and p2 in hist2: + return 1 + hist1.append(p1.copy()) + hist2.append(p2.copy()) + + if p1[0] <= (len(p1) - 1) and p2[0] <= (len(p2) - 1): + winner = play(p1[1:1+p1[0]], p2[1:1+p2[0]]) + else: + if p1[0] > p2[0]: + winner = 1 + else: + winner = 2 + if winner == 1: + p1.append(p1[0]) + p1.append(p2[0]) + else: + p2.append(p2[0]) + p2.append(p1[0]) + + del(p1[0]) + del(p2[0]) + + if len(p1): + return 1 + else: + return 2 + +w = play(player1, player2) +if w == 1: + winner = player1 +else: + winner = player2 +result = 0 + +for i in range(len(winner)): + result += (len(winner) - i ) * winner[i] + +print(result)