diff --git a/FICHE.md b/FICHE.md new file mode 100644 index 0000000..2480a1b --- /dev/null +++ b/FICHE.md @@ -0,0 +1,60 @@ +# Fiche de solutions/ astuces fréquentes pour AoC + +Si on cherche à savoir quand qqchose va arriver et que ça arrive à la conjonction de plusieurs évènements +```python +math.lcm(*[_, _, ...]) +``` + +quand on calcule les mêmes choses plein de fois (mais VRAIMENT les mêmes choses, pas un chouïa différent) +```python +from functools import cache + +@cache +def ma_fonction(*args) +``` + +quand on doit calculer un truc très grand et que c'est un nb d'états finis (qui se répètent potentiellement) +détection de cycle + +quand on doit calculer un truc très grand et que c'est un nb d'états infinis: +```python +snippets.lagrange_interpolation([(x1, y1), (x2, y2), ...], x0) +``` + +quand on doit calculer l'aire d'un polygone +```python +snippets.area([(x1, y1), (x2, y2), ...], count_border=True) +``` + +trop d'éléments en entrée: les considérer par ensembles si possible (genre séquences d'entiers) +```python +a = intervals.Interval(0, 5) +b = intervals.Interval(10, 15) + +a.intersection(b) # None +a.intersect(b) # False + +a = intervals.Interval(0, 5) +b = intervals.Interval(4, 15) + +a.intersection(b) # [4, 5] +a.intersect(b) # True +``` + +quand on a un parcours de graphe, utiliser Graph, et le compresser si nécessaire (attention, que non-orienté !) + +Trouver une instance qui satisfait plein de trucs et ça paraît impossible ? z3 ! `pip install z3-solver` +```python +px, py, pz, dx, dy, dz = z3.Ints("px py pz dx dy dz") +collision = [z3.Int("t"+str(i)) for i in range(len(hailstones))] +solver = z3.Solver() +for i in range(len(hailstones)): + h = hailstones[i] + solver.add(px + dx*collision[i] == h.px + h.dx*collision[i]) + solver.add(py + dy*collision[i] == h.py + h.dy*collision[i]) + solver.add(pz + dz*collision[i] == h.pz + h.dz*collision[i]) + +solver.check() + +return solver.model().evaluate(px + py + pz) +``` \ No newline at end of file diff --git a/README.md b/README.md index a04976e..5573b1f 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ 2020: ***~..................... 2021: *******~~~............... 2022: ***************~.*..*.... -2023: **********************~.. +2023: ************************* .: nothing ~: 1 star diff --git a/requirements.txt b/requirements.txt index 0ca5b9b..e2afc05 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,4 +3,4 @@ z3-solver matplotlib networkx requests -beautifulsoup \ No newline at end of file +beautifulsoup4 \ No newline at end of file