From 5e987c201b4b20d4034b2f72edd528e75939ffcd Mon Sep 17 00:00:00 2001 From: ache Date: Wed, 29 Dec 2021 04:42:44 +0100 Subject: Remplacement des secrets par des ressources externes --- articles/res/code1_j03_aoc.py | 20 ++++++++ articles/res/code2_j03_aoc.py | 38 ++++++++++++++++ articles/retour-sur-laoc-2021-semaine-1.md | 73 ++---------------------------- 3 files changed, 62 insertions(+), 69 deletions(-) create mode 100644 articles/res/code1_j03_aoc.py create mode 100644 articles/res/code2_j03_aoc.py diff --git a/articles/res/code1_j03_aoc.py b/articles/res/code1_j03_aoc.py new file mode 100644 index 0000000..f4c36e7 --- /dev/null +++ b/articles/res/code1_j03_aoc.py @@ -0,0 +1,20 @@ +gamma, epsi = 0, 0 +total = 1 + +with open("input") as f: + final = f.readline().strip() + final = list(map(lambda x: 1 if x == '1' else 0, final)) + print(final) + + for line in f: + for i, c in enumerate(line): + if c == '1': + final[i] += 1 + total += 1 + +gamma = int("".join(list(map(lambda x: '1' if total - x > x else '0', final))), 2) +epsi = int("".join(list(map(lambda x: '0' if total - x > x else '1', final))), 2) + + +print(epsi, gamma, gamma * epsi) + diff --git a/articles/res/code2_j03_aoc.py b/articles/res/code2_j03_aoc.py new file mode 100644 index 0000000..c373465 --- /dev/null +++ b/articles/res/code2_j03_aoc.py @@ -0,0 +1,38 @@ +total = 1 +number = [] + +with open("input") as f: + for line in f: + number.append(line.strip()) + +number_oxy = list(number) +number_co2 = list(number) + + +i = 0 +while len(number_oxy) > 1 and i < len(number_oxy[0]): + number_1 = len(list(filter(lambda x: x[i] == '1', number_oxy))) + total = len(number_oxy) + if number_1 >= total - number_1 : + keep = '1' + else: + keep = '0' + number_oxy = [ number for number in number_oxy if number[i] == keep] + i += 1 + +i = 0 +while len(number_co2) > 1 and i < len(number_co2[0]): + number_0 = len(list(filter(lambda x: x[i] == '0', number_co2))) + total = len(number_co2) + if number_0 > total - number_0 : + keep = '1' + else: + keep = '0' + number_co2 = [ number for number in number_co2 if number[i] == keep] + i += 1 + +oxy_rate = int("".join(number_oxy[0]), 2) +CO2_rate = int("".join(number_co2[0]), 2) + +print(oxy_rate * CO2_rate) + diff --git a/articles/retour-sur-laoc-2021-semaine-1.md b/articles/retour-sur-laoc-2021-semaine-1.md index 1dbbebf..b4faa7b 100644 --- a/articles/retour-sur-laoc-2021-semaine-1.md +++ b/articles/retour-sur-laoc-2021-semaine-1.md @@ -91,7 +91,7 @@ Le but est donc de simuler la course d'un sous-marin en fonction des instruction Exemple d'entrée : -~~~ +~~~shell forward 5 down 5 forward 8 @@ -149,7 +149,7 @@ Ici, il n'y a pas de difficulté mais ça reste un puzzle peu optimisable. Un pe Vous avez pour ça une suite de nombre binaire : -~~~ +~~~shell 00100 11110 10110 @@ -166,30 +166,7 @@ Vous avez pour ça une suite de nombre binaire : On doit chercher le bit le plus courant pour chiffre de cette liste de nombre binaire. Dans la première colonne cela nous donne `1` car c'est le nombre le plus courant. Pour chacun des indices ça donne `10110` soit 22 en décimal, cette valeur est le taux *gamma*. Le taux epsilon est similaire mais avec le bit le moins courant. -Bon ben c'est parti pour coder ça. J'ai d'abord fait un truc bien moche dont je suis pas fière : - -[[secret]] -| ~~~py -| gamma, epsi = 0, 0 -| total = 1 -| -| with open("input") as f: -| final = f.readline().strip() -| final = list(map(lambda x: 1 if x == '1' else 0, final)) -| print(final) -| -| for line in f: -| for i, c in enumerate(line): -| if c == '1': -| final[i] += 1 -| total += 1 -| -| gamma = int("".join(list(map(lambda x: '1' if total - x > x else '0', final))), 2) -| epsi = int("".join(list(map(lambda x: '0' if total - x > x else '1', final))), 2) -| -| -| print(epsi, gamma, gamma * epsi) -| ~~~ +Bon ben c'est parti pour coder ça. J'ai d'abord fait [un truc bien moche dont je suis pas fière](articles/res/code1_j03_aoc.py). Si je devais le ré-écrire ça donnerait plutôt ça : @@ -220,49 +197,7 @@ En avant pour la partie 2 ! Cette fois-ci on doit itérer plusieurs fois sur les valeurs (c'est la première fois que l'on doit faire ça) et à chaque fois ne garder que les valeurs qui ont le plus n^ième^ bit le plus (le moins pour l'autre donnée) courant. On continue jusqu'à ce qu'il n'y en ait plus qu'un. -Bon ben là, j'ai dû tout refaire mon code. Mais j'ai quand même fait un code pas super propre : - -[[secret]] -| ~~~py -| total = 1 -| number = [] -| -| with open("input") as f: -| for line in f: -| number.append(line.strip()) -| -| number_oxy = list(number) -| number_co2 = list(number) -| -| -| i = 0 -| while len(number_oxy) > 1 and i < len(number_oxy[0]): -| number_1 = len(list(filter(lambda x: x[i] == '1', number_oxy))) -| total = len(number_oxy) -| if number_1 >= total - number_1 : -| keep = '1' -| else: -| keep = '0' -| number_oxy = [ number for number in number_oxy if number[i] == keep] -| i += 1 -| -| i = 0 -| while len(number_co2) > 1 and i < len(number_co2[0]): -| number_0 = len(list(filter(lambda x: x[i] == '0', number_co2))) -| total = len(number_co2) -| if number_0 > total - number_0 : -| keep = '1' -| else: -| keep = '0' -| number_co2 = [ number for number in number_co2 if number[i] == keep] -| i += 1 -| -| oxy_rate = int("".join(number_oxy[0]), 2) -| CO2_rate = int("".join(number_co2[0]), 2) -| -| print(oxy_rate * CO2_rate) -| ~~~ - +Bon ben là, j'ai dû tout refaire mon code. Mais j'ai quand même fait [un code pas super propre](articles/res/code2_j03_aoc.py). Ouais, y a un bon gros copier/coller. Bon si je devais le recoder j'aurais fait ça : ~~~py -- cgit v1.2.3