Move 2022 and 2021 into place

This commit is contained in:
Tyrel Souza 2022-12-09 11:43:00 -05:00
parent 713c681a22
commit 2c8e8eecb8
No known key found for this signature in database
GPG Key ID: F6582CF1308A2360
97 changed files with 19792 additions and 0 deletions

174
.gitignore vendored Normal file
View File

@ -0,0 +1,174 @@
# Created by https://www.toptal.com/developers/gitignore/api/python
# Edit at https://www.toptal.com/developers/gitignore?templates=python
### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
### Python Patch ###
# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
poetry.toml
# End of https://www.toptal.com/developers/gitignore/api/python
tags

24
2021/README.md Normal file
View File

@ -0,0 +1,24 @@
Advent of Code 2021
to run any day:
- make a virualenv `python3 -m venv env`
- source it `souce env/bin/activate`
- install deps `pip install -r requirements.txt`
- run the day `python day01.py`
- to run sample code pass `--sample` as the argument. `python day01.py --sample`, (nothing special just checks sys.argv[-1])
python day01.py --sample
python day02.py --sample
python day03.py --sample
python day04.py --sample
python day05.py --sample
python day06.py --sample
python day07.py --sample
python day08.py --sample
python day09.py --sample
python day10.py --sample

2000
2021/full/day01.txt Normal file

File diff suppressed because it is too large Load Diff

1000
2021/full/day02.txt Normal file

File diff suppressed because it is too large Load Diff

1000
2021/full/day03.txt Normal file

File diff suppressed because it is too large Load Diff

601
2021/full/day04.txt Normal file
View File

@ -0,0 +1,601 @@
6,69,28,50,36,84,49,13,48,90,1,33,71,0,94,59,53,58,60,96,30,34,29,91,11,41,77,95,17,80,85,93,7,9,74,89,18,25,26,8,87,38,68,5,12,43,27,46,62,73,16,55,22,4,65,76,54,52,83,10,21,67,15,47,45,40,35,66,79,51,75,39,64,24,37,72,3,44,82,32,78,63,57,2,86,31,19,92,14,97,20,56,88,81,70,61,42,99,23,98
22 59 7 10 6
33 36 96 55 23
13 85 18 29 28
75 46 83 73 58
34 40 87 56 98
73 96 47 14 10
28 11 79 84 20
74 30 0 59 71
80 93 42 22 17
44 2 81 29 15
73 32 37 93 39
2 87 38 99 97
15 12 42 49 33
9 23 25 94 19
57 4 18 70 79
43 79 59 71 78
51 97 37 28 26
46 21 84 8 86
96 30 17 34 49
55 90 99 75 61
43 86 35 51 24
16 25 29 21 3
2 13 4 36 54
89 27 8 85 34
96 59 65 14 56
5 57 43 4 1
86 80 67 30 20
22 16 99 0 14
40 25 59 91 54
82 95 96 37 24
97 20 87 66 21
25 40 9 78 89
52 75 95 63 62
32 43 13 47 69
53 48 56 29 4
24 4 65 12 8
76 3 81 99 49
45 33 31 66 34
17 94 75 35 88
64 10 7 93 95
88 20 99 15 83
81 40 5 6 98
49 74 18 27 9
43 69 28 37 71
87 82 90 14 47
21 97 92 42 60
11 65 98 95 29
2 49 75 20 74
56 40 78 66 81
68 4 46 77 61
26 14 39 76 11
41 74 34 91 4
51 9 97 29 75
83 86 23 35 77
90 2 49 30 89
34 97 0 22 15
65 60 82 66 47
30 9 49 95 48
54 73 67 17 78
33 96 44 1 32
90 29 10 49 63
8 26 95 61 0
54 13 51 12 44
32 48 16 47 84
55 46 93 14 3
68 55 46 16 54
97 59 49 6 21
52 32 15 96 70
57 56 61 51 0
40 31 62 24 48
75 56 70 42 14
77 9 23 62 25
29 27 54 17 2
55 72 43 15 96
45 30 88 86 1
65 12 22 6 51
77 81 15 91 19
80 71 27 89 52
75 92 41 83 57
40 44 66 84 98
89 80 73 59 18
74 55 67 71 10
78 27 37 57 3
92 26 17 5 72
52 83 28 76 51
64 0 87 4 13
14 43 42 62 31
17 84 72 91 83
53 80 59 61 74
47 22 38 28 77
65 49 91 94 19
25 81 64 57 9
50 95 82 12 66
53 54 85 36 11
31 56 83 18 60
6 12 76 37 33
14 96 16 31 40
17 82 27 94 83
1 50 49 9 54
29 70 59 91 77
85 0 33 41 16
7 86 80 53 65
94 19 28 35 32
4 55 93 97 63
83 22 67 56 36
28 70 65 17 19
88 51 15 73 12
11 49 80 23 42
26 54 90 75 29
74 77 91 86 66
88 22 83 10 43
57 34 15 23 8
94 42 68 67 37
84 3 6 71 62
89 45 72 55 38
68 27 93 7 15
85 96 1 56 6
32 2 30 55 17
99 90 37 80 50
77 78 58 98 57
5 95 22 13 97
19 2 52 92 20
75 49 86 31 41
51 63 56 33 10
82 27 79 94 57
15 44 91 26 4
41 78 53 95 86
90 92 46 56 33
80 93 68 66 70
36 10 38 0 6
11 47 52 64 17
16 60 39 55 78
46 18 33 83 35
13 92 4 23 50
40 5 29 6 90
20 60 2 23 74
43 39 91 75 12
58 67 50 29 79
10 40 92 95 25
13 24 53 72 36
69 64 15 53 86
61 11 48 71 27
26 93 38 70 73
96 29 30 98 45
13 7 31 59 84
13 55 50 54 57
32 24 45 5 77
82 86 0 4 99
75 72 14 40 56
76 94 89 17 30
66 71 86 41 0
80 64 3 29 78
23 21 42 99 87
96 60 75 61 49
2 83 85 12 1
78 96 4 82 6
73 36 57 99 8
11 83 15 35 30
85 87 25 22 66
32 64 16 50 43
6 39 55 2 4
1 61 99 71 80
46 88 22 31 60
62 66 37 97 76
74 34 10 52 24
42 38 13 65 12
4 39 60 62 21
81 99 1 69 40
59 15 11 95 53
91 78 72 30 73
43 68 82 72 2
34 92 33 97 89
63 70 9 0 45
69 10 12 65 21
40 20 55 57 49
41 22 8 16 49
71 64 19 65 92
17 10 26 36 29
30 88 7 54 11
77 55 70 72 47
15 94 90 6 39
99 55 16 54 91
18 7 82 44 51
25 34 83 14 12
30 2 77 27 66
44 50 74 97 58
87 42 56 92 28
49 82 52 17 78
54 89 63 77 27
83 14 24 16 84
47 32 8 55 22
19 14 24 82 4
76 73 9 10 64
40 6 92 67 17
68 44 43 3 54
26 10 9 92 81
46 98 13 0 14
68 99 35 18 72
74 33 22 61 93
80 38 71 6 75
17 23 54 55 22
10 8 60 76 24
71 28 16 62 82
13 12 21 78 39
26 66 89 64 79
72 12 91 79 99
84 18 37 98 41
10 71 88 23 24
11 34 26 83 74
58 27 77 5 8
9 90 13 0 46
6 58 74 92 8
75 77 56 76 80
55 60 44 68 91
67 28 96 66 18
14 26 54 21 35
69 67 16 76 62
78 45 87 44 94
27 89 39 85 28
3 81 93 64 74
10 28 35 84 76
40 11 95 59 57
53 4 24 50 45
7 43 78 17 81
1 74 82 16 27
6 26 72 53 52
51 91 80 11 18
20 63 74 25 33
79 4 8 59 67
3 13 55 81 83
98 85 27 84 42
90 15 17 61 34
40 64 86 96 45
59 47 53 5 35
11 7 41 80 13
47 48 54 31 76
99 32 98 20 15
61 41 30 94 37
34 59 86 55 45
9 83 92 53 3
3 80 24 94 25
17 23 64 76 71
20 97 0 56 72
95 73 28 59 21
14 81 46 67 88
2 95 5 38 90
63 62 11 24 34
19 31 57 84 80
47 86 36 85 74
13 39 73 94 42
28 6 60 34 15
63 36 51 30 92
43 10 7 88 49
78 76 31 19 66
22 20 35 45 79
19 42 49 57 73
99 50 97 93 43
67 52 40 16 33
2 55 0 71 46
21 75 59 66 83
19 86 30 25 3
32 39 65 54 29
38 6 85 52 13
43 95 18 44 15
53 70 16 31 71
68 73 74 83 70
56 15 12 78 4
43 87 63 90 86
41 16 23 17 77
80 14 61 30 50
88 28 45 80 65
64 11 68 33 27
29 70 44 82 37
42 66 9 32 87
10 24 15 3 46
99 81 5 62 97
4 36 23 38 35
42 16 37 98 54
34 41 25 30 48
8 60 63 89 72
25 33 94 23 14
45 10 79 30 3
22 28 95 27 11
74 13 39 84 83
72 88 56 53 97
31 92 91 84 71
54 90 89 80 0
98 96 65 66 68
35 39 70 11 82
15 34 42 52 2
68 71 86 82 37
28 48 12 34 54
62 55 10 25 89
60 4 50 21 22
3 2 18 40 84
18 96 95 47 45
14 51 2 88 43
94 56 19 15 8
48 65 62 6 75
35 28 25 72 30
43 85 69 92 26
61 75 5 73 66
16 87 4 99 48
18 19 79 23 83
37 88 31 38 40
23 10 89 84 76
45 39 62 55 66
25 73 79 43 60
12 69 36 93 71
9 77 14 58 49
9 24 26 53 79
99 15 30 50 16
14 95 12 25 33
54 40 58 46 66
5 23 39 29 48
64 67 11 10 92
59 99 80 97 66
45 51 88 47 82
35 27 72 85 16
54 58 2 1 52
10 97 27 54 66
89 85 39 99 98
8 68 95 51 19
4 17 79 87 3
72 43 76 58 33
95 72 0 18 17
3 42 24 86 34
52 79 46 58 98
76 77 78 19 10
81 61 88 85 54
74 70 15 80 72
77 89 11 19 22
34 59 56 65 91
58 6 50 40 16
93 30 95 26 85
47 62 57 6 25
40 79 22 95 29
42 11 70 10 92
60 53 84 96 17
75 86 74 89 18
30 42 4 19 92
40 58 72 7 70
17 98 45 76 50
93 57 65 79 2
56 94 73 84 62
51 0 14 7 53
63 36 48 81 84
50 22 11 88 6
83 99 21 31 91
86 17 72 42 94
83 0 20 26 7
42 24 37 86 65
73 82 63 21 27
30 35 9 47 80
79 53 3 14 84
50 99 83 86 42
81 36 24 4 76
0 71 66 41 57
7 54 94 78 97
12 8 82 45 31
4 91 57 50 37
22 46 86 24 26
39 54 48 7 42
2 45 95 29 12
38 25 52 0 72
51 94 46 44 62
95 60 0 48 61
38 13 85 32 8
22 56 53 30 80
43 65 58 68 88
49 76 41 43 51
57 46 45 82 90
48 33 36 5 23
81 30 3 61 75
56 70 29 91 59
58 74 50 47 84
2 1 62 36 60
32 16 95 43 27
79 12 39 56 11
9 33 4 25 61
23 84 16 51 39
72 19 53 64 43
9 44 10 52 26
45 68 29 56 74
62 42 46 95 0
16 83 27 85 56
13 41 49 79 53
18 63 7 60 3
45 15 48 69 29
46 86 35 34 32
85 2 96 15 43
33 30 29 53 98
21 55 61 73 40
31 4 66 75 59
26 32 91 38 80
69 81 65 30 77
82 22 83 0 38
2 3 29 47 94
42 55 9 18 97
53 45 90 31 44
23 86 0 35 84
27 80 3 64 12
1 96 48 93 85
69 24 61 15 22
91 72 62 13 76
81 51 67 60 16
65 48 86 39 97
92 93 49 77 59
15 94 88 52 19
80 83 23 61 4
47 84 46 79 55
92 38 65 42 76
9 58 26 95 86
30 49 56 69 59
94 4 25 89 44
73 10 29 0 48
56 40 19 84 61
52 31 25 86 21
79 55 53 51 5
81 9 35 72 15
41 95 30 58 73
26 80 4 21 96
61 92 76 93 74
2 69 60 8 20
46 98 70 72 83
1 99 31 4 86
93 64 8 43 61
33 36 75 90 50
52 13 3 42 34
22 65 60 18 76
17 63 6 66 92
51 67 86 88 18
82 83 32 74 30
5 33 9 28 61
72 75 25 23 60
43 28 40 53 52
54 12 77 10 83
21 44 63 0 1
15 22 33 49 2
80 41 3 46 55
1 97 75 37 4
47 33 13 21 40
27 62 15 90 30
11 83 63 36 35
0 12 60 91 42
0 45 17 88 18
66 10 63 62 8
36 5 47 39 67
21 3 61 29 19
82 58 33 6 59
37 92 69 56 52
46 66 20 78 13
83 99 16 31 0
36 35 2 68 9
70 82 94 96 29
62 65 85 37 3
74 95 34 96 58
15 33 49 21 93
19 83 66 6 25
81 84 23 0 76
95 84 71 92 52
54 36 66 59 82
0 76 32 45 83
69 27 25 88 38
81 96 63 4 61
73 51 28 48 40
3 38 11 14 35
66 91 86 20 81
53 39 46 71 1
97 60 21 93 23
92 70 4 60 95
58 49 20 15 25
55 68 21 84 80
56 41 82 23 19
30 74 65 27 29
81 97 68 46 75
62 73 63 36 41
1 5 91 84 37
45 92 20 49 7
25 26 3 88 56
25 9 94 37 26
44 58 84 91 38
39 46 57 98 50
96 42 73 24 70
71 32 53 48 13
98 72 25 96 77
80 64 88 53 23
21 37 45 24 18
41 86 59 68 5
76 50 36 26 12
77 79 88 74 12
21 9 85 26 68
11 62 64 4 5
47 33 76 63 87
55 19 2 60 95
74 79 30 14 35
90 52 17 29 63
18 69 78 34 26
92 42 85 71 56
12 2 5 0 98

500
2021/full/day05.txt Normal file
View File

@ -0,0 +1,500 @@
456,846 -> 221,846
980,926 -> 73,19
682,930 -> 562,930
766,592 -> 274,100
247,685 -> 247,21
106,800 -> 635,800
953,340 -> 135,340
293,223 -> 293,12
454,196 -> 454,463
886,766 -> 164,766
592,590 -> 192,590
436,982 -> 436,545
731,571 -> 420,260
741,11 -> 466,11
727,541 -> 579,541
341,553 -> 25,553
942,470 -> 942,196
203,600 -> 203,647
965,595 -> 949,611
554,306 -> 554,401
902,438 -> 902,728
864,609 -> 525,270
187,790 -> 187,323
956,950 -> 427,950
847,554 -> 422,554
935,900 -> 701,900
192,854 -> 866,180
512,946 -> 543,915
978,979 -> 491,979
708,61 -> 708,878
738,508 -> 282,52
23,25 -> 841,843
204,750 -> 204,797
703,500 -> 703,419
14,311 -> 694,311
646,301 -> 785,301
397,168 -> 439,168
680,931 -> 561,812
540,448 -> 90,448
706,668 -> 91,53
848,319 -> 318,319
198,948 -> 198,307
686,58 -> 686,541
867,234 -> 867,498
134,125 -> 134,688
824,566 -> 53,566
437,167 -> 276,167
94,65 -> 638,609
36,971 -> 971,36
494,330 -> 494,197
920,438 -> 920,364
698,84 -> 49,733
59,842 -> 59,876
328,577 -> 328,677
757,701 -> 134,78
466,274 -> 135,605
81,925 -> 988,18
40,142 -> 882,984
50,96 -> 882,928
782,47 -> 782,427
247,599 -> 24,599
112,812 -> 191,733
487,198 -> 144,198
327,663 -> 327,756
117,76 -> 688,76
530,71 -> 530,958
558,602 -> 671,489
677,830 -> 677,556
529,669 -> 349,669
336,966 -> 341,971
20,31 -> 851,862
423,880 -> 423,573
521,657 -> 552,657
412,822 -> 18,428
423,311 -> 423,105
381,614 -> 705,614
521,248 -> 394,121
286,47 -> 286,403
286,27 -> 711,452
347,61 -> 489,61
760,454 -> 760,954
746,573 -> 911,573
839,933 -> 839,776
124,815 -> 290,649
577,848 -> 419,848
393,206 -> 410,206
364,755 -> 881,755
788,68 -> 788,215
94,798 -> 192,798
292,250 -> 453,250
601,545 -> 293,237
438,923 -> 438,655
70,757 -> 887,757
184,402 -> 818,402
586,49 -> 103,49
202,315 -> 735,315
534,504 -> 534,523
367,236 -> 367,736
24,163 -> 24,240
185,426 -> 634,875
485,189 -> 39,189
556,30 -> 374,30
969,821 -> 676,528
254,435 -> 254,43
290,615 -> 741,164
345,601 -> 120,826
224,641 -> 887,641
190,716 -> 581,325
552,646 -> 552,393
413,177 -> 413,103
397,900 -> 360,900
138,980 -> 138,55
909,891 -> 909,593
926,986 -> 79,139
954,67 -> 53,968
180,30 -> 595,30
823,165 -> 823,660
285,176 -> 375,176
915,826 -> 184,95
735,230 -> 667,230
934,865 -> 917,865
48,602 -> 737,602
477,319 -> 385,411
981,17 -> 11,987
458,401 -> 24,401
118,415 -> 849,415
176,678 -> 176,852
567,753 -> 567,37
285,868 -> 830,323
555,623 -> 822,623
522,546 -> 674,546
880,21 -> 23,878
591,103 -> 591,407
434,64 -> 434,401
245,968 -> 275,968
726,510 -> 450,786
768,366 -> 768,738
488,745 -> 488,94
675,674 -> 675,705
618,237 -> 265,237
802,709 -> 802,59
144,696 -> 144,542
547,381 -> 547,799
78,667 -> 78,916
409,271 -> 302,271
294,694 -> 938,50
140,571 -> 97,571
682,875 -> 682,534
748,816 -> 748,183
84,622 -> 84,258
485,696 -> 582,599
909,233 -> 954,233
203,711 -> 203,350
335,904 -> 455,904
578,778 -> 578,21
830,954 -> 902,954
78,252 -> 78,682
920,220 -> 684,220
309,301 -> 104,301
270,795 -> 270,919
906,479 -> 304,479
627,164 -> 627,986
122,960 -> 915,167
664,916 -> 770,810
692,810 -> 826,810
981,951 -> 192,162
183,423 -> 809,423
632,464 -> 567,464
94,266 -> 94,587
261,770 -> 569,770
51,403 -> 466,818
631,645 -> 187,645
141,238 -> 141,145
357,21 -> 173,21
138,248 -> 839,949
889,957 -> 807,957
399,431 -> 105,725
548,331 -> 548,821
790,844 -> 43,97
675,671 -> 221,671
874,143 -> 620,397
205,435 -> 205,546
521,434 -> 822,133
141,86 -> 257,86
427,28 -> 290,165
49,694 -> 567,694
846,344 -> 266,924
425,910 -> 433,918
956,498 -> 485,27
798,498 -> 798,634
879,13 -> 766,126
737,475 -> 737,425
338,473 -> 425,386
510,615 -> 214,319
758,415 -> 758,490
969,208 -> 239,938
917,188 -> 917,528
34,820 -> 806,820
85,633 -> 857,633
262,355 -> 262,748
373,784 -> 971,186
146,577 -> 60,663
613,570 -> 613,199
300,319 -> 300,108
764,171 -> 764,17
555,921 -> 555,825
241,197 -> 770,197
600,832 -> 600,807
934,987 -> 20,73
960,730 -> 837,730
976,50 -> 46,980
829,834 -> 153,158
785,835 -> 785,58
586,633 -> 689,736
804,250 -> 348,706
226,539 -> 16,539
411,940 -> 98,940
289,589 -> 893,589
738,616 -> 738,55
225,54 -> 542,54
793,246 -> 303,736
332,752 -> 984,100
413,18 -> 839,444
840,122 -> 840,233
989,970 -> 215,196
329,361 -> 573,605
242,537 -> 242,619
943,898 -> 943,535
469,865 -> 501,833
226,717 -> 196,687
819,803 -> 712,803
532,663 -> 532,672
61,931 -> 940,52
623,218 -> 274,567
281,326 -> 281,790
815,176 -> 679,176
790,862 -> 942,710
18,771 -> 18,514
479,377 -> 309,377
704,402 -> 704,150
961,335 -> 492,335
745,829 -> 745,477
556,543 -> 771,543
832,336 -> 917,251
742,755 -> 742,174
206,735 -> 493,735
151,216 -> 312,55
445,157 -> 615,157
781,143 -> 781,76
833,717 -> 514,398
357,14 -> 357,36
771,405 -> 771,422
662,886 -> 169,886
689,990 -> 22,990
680,445 -> 379,445
92,369 -> 502,779
64,948 -> 64,363
295,957 -> 976,276
113,920 -> 634,399
542,662 -> 305,899
566,514 -> 566,645
528,106 -> 549,106
205,367 -> 821,367
313,105 -> 313,928
532,177 -> 532,664
862,773 -> 905,816
800,796 -> 911,796
870,80 -> 11,939
188,900 -> 154,900
420,509 -> 520,609
540,863 -> 28,863
31,72 -> 78,72
823,648 -> 503,648
879,252 -> 606,252
677,117 -> 677,507
743,303 -> 196,850
220,491 -> 220,891
216,815 -> 577,815
540,819 -> 745,819
152,721 -> 382,721
280,745 -> 985,745
479,367 -> 358,488
913,413 -> 649,413
40,678 -> 817,678
467,533 -> 467,214
132,68 -> 843,779
519,109 -> 669,259
619,791 -> 221,791
114,622 -> 628,622
951,636 -> 866,636
172,569 -> 775,569
244,972 -> 173,972
283,64 -> 739,520
68,604 -> 68,156
529,30 -> 529,925
813,883 -> 137,883
893,231 -> 629,231
673,658 -> 673,389
725,899 -> 218,899
317,318 -> 105,318
82,706 -> 100,688
222,227 -> 440,227
810,371 -> 810,985
414,321 -> 289,446
901,158 -> 260,799
198,967 -> 717,448
928,454 -> 875,454
974,437 -> 974,764
657,13 -> 760,13
498,966 -> 976,966
66,104 -> 66,15
773,569 -> 980,362
420,496 -> 403,513
57,920 -> 85,920
879,551 -> 879,662
98,395 -> 98,398
483,685 -> 483,55
222,935 -> 586,935
89,926 -> 807,208
744,160 -> 744,462
588,973 -> 588,548
312,572 -> 38,298
27,131 -> 552,656
591,935 -> 591,86
907,478 -> 907,279
981,75 -> 981,972
316,947 -> 935,947
906,38 -> 906,216
374,521 -> 345,550
579,29 -> 579,107
444,636 -> 444,557
458,608 -> 830,980
479,839 -> 155,515
766,600 -> 766,71
976,965 -> 31,20
928,49 -> 269,708
787,238 -> 787,983
583,742 -> 112,742
966,268 -> 554,680
671,354 -> 671,966
274,340 -> 274,894
673,185 -> 607,185
73,171 -> 874,171
861,526 -> 861,410
739,591 -> 739,138
209,355 -> 209,146
286,501 -> 887,501
495,902 -> 700,902
192,889 -> 821,260
400,21 -> 154,21
861,301 -> 325,301
552,990 -> 511,990
908,21 -> 11,918
127,724 -> 821,30
935,46 -> 170,811
947,91 -> 374,91
625,420 -> 265,60
214,228 -> 546,228
375,547 -> 715,887
516,350 -> 870,350
610,138 -> 665,193
214,621 -> 678,621
497,248 -> 600,145
549,558 -> 576,558
364,537 -> 364,312
840,324 -> 310,854
441,945 -> 441,458
459,531 -> 459,100
937,113 -> 150,900
277,405 -> 259,405
409,527 -> 409,359
534,766 -> 534,740
534,934 -> 681,934
456,419 -> 83,419
871,986 -> 873,986
14,59 -> 916,961
911,963 -> 971,963
25,325 -> 139,211
937,184 -> 354,767
460,416 -> 289,245
193,171 -> 861,839
840,299 -> 840,911
531,45 -> 531,619
599,315 -> 455,315
455,97 -> 455,811
38,748 -> 392,748
841,79 -> 841,88
105,571 -> 105,545
801,458 -> 344,458
491,535 -> 558,535
835,814 -> 223,202
563,85 -> 405,85
410,396 -> 600,396
273,670 -> 818,125
671,647 -> 817,647
46,892 -> 678,260
456,736 -> 110,736
962,941 -> 619,598
388,406 -> 53,71
558,895 -> 227,564
944,182 -> 807,319
484,898 -> 59,473
808,214 -> 488,534
451,679 -> 155,383
858,931 -> 381,931
723,377 -> 723,281
694,283 -> 182,795
385,191 -> 320,256
33,380 -> 584,931
480,91 -> 817,91
677,91 -> 677,126
291,651 -> 760,182
832,962 -> 153,283
38,60 -> 479,501
249,350 -> 789,350
603,341 -> 266,678
52,303 -> 52,102
911,201 -> 559,201
46,210 -> 46,275
960,212 -> 554,212
375,374 -> 169,580
10,10 -> 989,989
844,140 -> 40,944
916,408 -> 916,815
834,401 -> 834,169
553,479 -> 784,248
543,452 -> 543,848
854,910 -> 334,390
685,491 -> 793,491
552,943 -> 709,943
723,367 -> 124,367
95,55 -> 881,841
155,267 -> 573,267
59,357 -> 84,357
218,435 -> 218,344
491,584 -> 491,649
676,445 -> 676,333
361,618 -> 783,618
220,295 -> 220,267
668,758 -> 299,389
965,845 -> 674,845
285,603 -> 47,603
853,417 -> 853,757
859,906 -> 856,906
55,364 -> 753,364
893,474 -> 978,474
602,32 -> 58,576
171,445 -> 96,370
214,592 -> 214,286
400,946 -> 745,946
559,37 -> 112,484
624,510 -> 90,510
329,714 -> 329,850
458,287 -> 657,287
99,385 -> 99,949
50,736 -> 719,67
273,195 -> 273,306
490,902 -> 490,798
619,131 -> 921,131
266,652 -> 266,730
745,661 -> 745,555
311,878 -> 311,679
491,982 -> 643,830
735,875 -> 816,875
936,353 -> 936,529
792,467 -> 565,467
141,140 -> 141,988
98,171 -> 414,487
257,259 -> 257,484
24,41 -> 969,986
302,453 -> 223,453
807,363 -> 492,678
823,22 -> 835,10
301,94 -> 399,94
946,110 -> 248,808
983,985 -> 21,23
510,145 -> 510,58
13,661 -> 13,639
218,260 -> 218,54
475,846 -> 475,770
458,644 -> 458,529
912,934 -> 912,136
152,823 -> 550,823
136,470 -> 443,470
253,871 -> 905,219
765,212 -> 793,240
11,402 -> 11,42
348,813 -> 348,768
368,321 -> 823,776
343,495 -> 343,809
117,616 -> 117,273
92,92 -> 732,92
914,31 -> 28,917
259,944 -> 214,944
630,759 -> 462,759
134,653 -> 134,610
14,989 -> 988,15
139,181 -> 139,451
598,636 -> 598,442
263,42 -> 686,465

1
2021/full/day06.txt Normal file
View File

@ -0,0 +1 @@
3,1,4,2,1,1,1,1,1,1,1,4,1,4,1,2,1,1,2,1,3,4,5,1,1,4,1,3,3,1,1,1,1,3,3,1,3,3,1,5,5,1,1,3,1,1,2,1,1,1,3,1,4,3,2,1,4,3,3,1,1,1,1,5,1,4,1,1,1,4,1,4,4,1,5,1,1,4,5,1,1,2,1,1,1,4,1,2,1,1,1,1,1,1,5,1,3,1,1,4,4,1,1,5,1,2,1,1,1,1,5,1,3,1,1,1,2,2,1,4,1,3,1,4,1,2,1,1,1,1,1,3,2,5,4,4,1,3,2,1,4,1,3,1,1,1,2,1,1,5,1,2,1,1,1,2,1,4,3,1,1,1,4,1,1,1,1,1,2,2,1,1,5,1,1,3,1,2,5,5,1,4,1,1,1,1,1,2,1,1,1,1,4,5,1,1,1,1,1,1,1,1,1,3,4,4,1,1,4,1,3,4,1,5,4,2,5,1,2,1,1,1,1,1,1,4,3,2,1,1,3,2,5,2,5,5,1,3,1,2,1,1,1,1,1,1,1,1,1,3,1,1,1,3,1,4,1,4,2,1,3,4,1,1,1,2,3,1,1,1,4,1,2,5,1,2,1,5,1,1,2,1,2,1,1,1,1,4,3,4,1,5,5,4,1,1,5,2,1,3

1
2021/full/day07.txt Normal file
View File

@ -0,0 +1 @@
1101,1,29,67,1102,0,1,65,1008,65,35,66,1005,66,28,1,67,65,20,4,0,1001,65,1,65,1106,0,8,99,35,67,101,99,105,32,110,39,101,115,116,32,112,97,115,32,117,110,101,32,105,110,116,99,111,100,101,32,112,114,111,103,114,97,109,10,82,1266,26,290,428,9,676,880,16,340,1578,839,23,32,721,88,837,118,543,198,836,870,105,44,214,184,52,330,213,1224,1211,481,1707,409,78,1096,995,420,808,50,65,635,1186,228,5,359,290,1241,757,323,11,447,522,8,170,265,632,321,9,1707,1005,1194,466,137,982,905,373,158,601,247,373,202,432,168,694,785,568,144,576,1006,143,1506,298,1790,146,182,535,895,42,296,278,469,118,292,1375,206,235,1545,63,81,49,1405,660,41,1009,226,133,324,1250,113,10,687,223,78,10,745,21,55,1041,149,519,57,589,123,901,416,200,112,35,6,873,353,539,665,75,207,80,787,322,1026,178,19,630,12,263,1136,71,220,143,688,101,88,1600,16,141,55,64,436,19,889,267,470,884,31,546,846,601,15,84,399,83,1054,4,1417,766,525,162,640,73,2,110,189,494,85,44,263,618,583,263,591,1139,21,1593,187,115,520,142,887,3,12,565,78,88,114,803,157,307,1007,1365,1063,1481,431,410,125,19,1123,3,433,73,273,25,438,314,111,369,1188,526,516,509,1,186,143,1335,689,436,1002,260,791,12,36,380,80,306,173,45,24,856,1892,255,11,12,1221,422,8,1214,327,851,85,375,115,325,213,725,720,669,465,577,1,28,331,123,297,267,1586,478,259,572,204,365,461,618,364,5,630,377,26,259,331,956,164,89,115,1328,823,48,625,922,236,577,1113,251,156,846,261,500,73,1607,281,267,64,2,392,115,682,1833,861,1093,1165,52,1643,59,180,787,298,274,304,381,196,511,352,793,1043,984,30,85,190,109,276,303,251,1601,939,726,5,213,915,235,780,43,1212,1466,353,364,507,129,1109,1307,113,109,342,756,898,1015,63,949,127,887,175,91,409,1069,88,600,101,434,1021,477,1073,22,549,145,712,730,160,7,123,27,566,689,172,1496,543,154,345,442,3,860,47,69,319,487,17,1086,1305,329,788,738,688,421,139,1629,499,824,276,13,1033,885,522,140,328,113,311,297,252,33,168,1059,94,469,1816,2,107,149,652,350,200,173,367,100,229,219,400,43,283,1551,752,278,99,648,190,190,337,44,191,462,454,544,261,142,1204,231,924,209,858,768,211,223,186,1452,687,320,343,444,94,1231,285,324,431,36,309,705,672,69,1082,83,269,515,369,117,951,489,117,249,47,350,1408,93,203,800,1151,526,785,721,240,74,605,501,533,512,337,12,720,787,1521,894,112,187,170,1020,339,77,565,691,1141,129,1020,60,505,1383,178,1262,1302,750,743,1108,43,634,135,738,810,628,1807,938,530,61,1384,42,79,276,336,1434,1286,393,145,9,94,945,113,76,88,856,78,1750,499,994,527,1102,266,1164,796,143,726,480,357,577,910,460,448,379,402,1576,1353,257,1044,651,1206,44,126,353,1099,934,892,379,710,988,1041,367,116,377,546,1222,830,259,10,6,385,856,343,793,490,165,367,1022,1065,95,135,426,184,270,227,456,673,90,1363,1127,387,93,138,202,184,1071,134,15,813,134,200,80,144,128,1502,574,868,487,118,42,48,1135,1107,57,418,1093,1508,229,26,154,652,94,1254,171,502,407,276,1098,18,1000,345,150,123,211,1517,1005,590,1413,63,80,510,502,76,476,47,405,186,143,344,286,1277,934,64,512,12,1026,264,68,1420,10,245,10,352,6,585,567,48,428,816,1525,180,346,350,34,100,42,1354,699,265,445,1719,425,8,604,129,111,71,110,1170,703,36,317,198,104,655,95,1046,327,161,853,400,224,797,1221,794,684,321,1279,1,95,1253,671,203,43,220,55,90,1606,359,52,775,76,422,403,305,614,196,244,102,519,122,451,1610,79,709,336,1374,735,478,1123,658,906,615,688,561,518,39,1084,608,54,739,416,1648,1838,1280,1039,35,552,299,142,56,1217,1356,30,12,102,731,1343,224,452,304,1808,546,583,710,33,149,1126,565,314,745,22,115,263,813,113,52,308,944,981,441,544,129,1258,299,885,717,536,253,3,612,29,130,1099,1455,38,501,578,13,347,729,166,772,230,518,488,430,1093,140,16,120,1603,794,174,1361,1657,825,444,176,815,1353,469,264,191,988,12,104,11,1518,1096,347,606,350,18,1376,430,182,1229,131,111,731,174,111,304,715,35,410,701,78,46,390,291,1008,1779,620,2,1378,199,331,334,708,446,1141,773,159,702,716,13,582,161,259,90,180,607,539,611,312,622,151,522,921,150,522,273,421,842,111,21,159,148

200
2021/full/day08.txt Normal file
View File

@ -0,0 +1,200 @@
fdeba beagfd gbafe dagb dbf ecfad bd dgcaefb fbecgd abfecg | dgba dfb ecadf bdf
dgfc egdbaf afgcbe eafdbcg bcgad bdg fdbacg gd ecabd bafgc | gd gbd dg febgac
dfebc bceadf ebacf gdceb fd dfea cdgfba afbgec dfb fdaecbg | cgafbde efbagc faed gecdb
dbaef fabgd fcaedb cgadf aefbgd cabefg gfb bceagdf bg ebdg | gdbfae geafdbc bafgdce dbgfa
aebgd adg dg dgcabef facedg cfaebd dfbega begca bfgd dbafe | abdecf eafbd fdgb ebdfgca
bae febac abcgf eabfgd cbagfd gefcba abedfcg efcda eb becg | fcgab gafbed aedcfbg eb
edbcg ba afcdeg gbaedf gcabdf eabf bagde bga deabgcf edfga | aebf ab bdfecag abfe
dbae dgfec egfbd fbgaed feb fcabdg be bfgda facebgd baefcg | bagecf efb eb fbcgad
cdagbef cd bdgcf efcbg adbgf cdga egdabf acbdfg cdf caebfd | fbdga fcd fcd adcg
abceg dbgca acfd ebagfdc dbecfg gdfbea dc dcg abfdcg gfbad | cdg dbcagf acdf gbcdef
bcdag acdgbef ebcdag facd dfgbe cfg bfagdc fc fbcgd bgfaec | fc dafbcg fc cbdgae
ca feacgb cedfgb bgaed gbaec acefdgb bfcge eafgcd acg fbac | ca cag gac becga
gbdcfa afdcb cebd fadce cbgfdea aec cdebfa ce caegfb daegf | aedfbgc eca eca cebd
cb dcb fdbegc bgaed fcba dacgfe efcadb dceaf eacgfbd dbaec | cbd cb bagde dcb
debgf gaecdfb gcbef cbgaf fbecag bce bgfcda ce aefc ebdgca | ebcfgad ec gefcba bec
cdbfega ae cedaf bedgcf ebac efadbg afcedb afe fgadc cdfbe | fabedcg cafbed efa badgcef
aceg bcafgde deacgb fdcgab dacgb eafbcd dgcbe bdfge bce ce | dbfge bdcafg fbdcga ebdfg
efcbda fcgbe efdgc efgdcab cagbe cbf bagf ecagdb bacefg fb | fgab aecgb acfgbe agecfbd
bcgd egafb adgbcf cafged cegadfb gd dgf dbfag dfeacb dcabf | adbcf dg gd dgf
bgeca fgcbe fcgd egfbd bcgdfe fc agbdef ecf dafgecb bdafec | fc febdag cgfd dfcbgae
agb dbfa gbafcde afgcbe edfgb bagde cfdegb gbdefa ba caged | bdfa bafd cfdgeba agb
bdf baefcdg df cafbgd bdcgef bcdeag bcgad cadf gfbad fbeag | ebacfgd facd cdgfbe df
edagc egbcfad bcfdge agbdcf fbdage dcabg bga bgfdc fbca ba | cebgfda gdcfabe gfcdba bag
bgaf af bcdfge ecfagd fgcdb beacd gdecbfa bcafd fac bfdgac | bagcedf fbedgc ebfgdc gbfa
fagbdc fagdeb cebgf cbd ecagdb cade dagcebf dc becdg geabd | gfbadec cdae dbc bcefg
dgfbeac abfge dcefag cga cgbd baced gc adfebc ecbag aedgbc | bfcaged gac gebaf egdafc
cfdbe afge fa gdfbeca agfcbd abedgc fac cafbe ecfgab acgeb | adcfgeb bcadfg ebfac cfa
gebdcf cdbga eag ae dagecbf bgdfe ebgfad gabed dagfec feab | fadgecb fgbced dgcab ega
gf gcbaf gfdc agf eafcb cadebfg cgfabd dbagc agdcbe egfbda | gf beafc fga fcgd
cbed ebgad gadbfe bc bcfgea gebacd gceadfb cgfad cbg abcgd | bacdg afbegdc bgc bcagdfe
fdg dg acgfdbe gafdec cfbdg ebfgc gdeb bdcgef fbegca fbdca | fdg edbg edbg cgfbe
gfcbaed gfceda cadbg gafdb ca adc fbca dfcabg cedbg aegfdb | ca becadfg dcefga ca
agfcbd edcabg cdf cdgfabe debgcf fdgca bfac gdcab cf gedaf | fc cdf cf bcagdef
cdagb bae ea cdfebg febacd egdfb gdacfbe feag aedfbg gdabe | ea gefa agbde afge
dab cgaedb cafbg faced bdfe bd gfdeca dafgbec fcbda cadbef | db edfb bd dcafe
bde cbaed dcbf ecbag fcbdae acgfde dgafebc db fbdgea dacfe | cadbe bcdf afebdg dcgfea
ag fgaecd egcbdaf ebacd gad dagbfe cfga fcegd dcbgfe gaced | dag ag gda gacf
fdaegb dcgefa bfdec geca ge fge cdbafg decbgaf ecdfg cagdf | gdefc cgea dfacgb gedbaf
ecgfab cgbdea dgabf dcfb bd dgcabf fgdeacb dba efagd cfabg | dab adb bfdc fcdbag
dfcae cfegbd ade cdeabg egacdf gcfde da becfadg agfd efcba | ade aed dfga ade
fdgeab adcbgfe edfca cebad gdbace dgcb beafgc bac cb gdeba | bdcea bgdc dagcfeb abc
cabdge fdgae fbgc fedgcb gfebacd dfbeg bf bdf ecgbd adecfb | fb aegfbcd bdf fbacged
dfbgec feacgdb ca adgec cda ecba gdaef degbc abfdgc gdceab | ca dabfegc ca acdeg
abd fbagec gfdbea dagc ad fcdbega bafcdg facbg ecbdf fbcad | edfagb bcedf dba fbdcag
abf ebfdcg fgcdbae faegc bdgacf bfdec bade ceafdb ba eacbf | fab fbdaecg dcabfg ba
ebcgf aedcb gbaecfd gd cgdeb cadfeb edga bdfgca cbgead cdg | adge fgbec cgd dgbcfa
gdcaef dcgbe fbcdage bacge aec ea bfea bcafg aegbcf cfdgab | bfea gfecadb gbafc gedafcb
facg aebfg ecfba bfaecd fbdge badcfeg cfgeba ega cadebg ag | fgca bdgef gafc acgf
dacefg eb bdecf acbfge ecb bfcda decgf cgdebaf cbfgde gbde | bdge ecbfgd feacbgd efdabcg
bd fbd bfcgde egbaf dafgceb cefgda fcbdae dfgeb gcdb cgfde | dfbceag bd fgbdec gdbfec
gbdacf dacebf adgfbe aedfb acgbedf eacf ca dac aedcb bedgc | ca cad fcbdaeg bdagcf
cbd egdba ebfdga efadc gcdfabe bc decbga dbaec gfbecd bcag | cdb egdba acbg acgb
eacb fdeab fgcade cbdaf dea cfebgda ae bdegf cebdaf fgdcab | ae facbdg bdfecga baec
cfd adbce cf bcdafg fcedb cbedfag fdgbe faegdb fceg gdcbef | fegc cf gfdabe adbcgf
gfbdeac efdgac gcfb edbagf cebda cafeb abf cgfeab bf gacfe | abfce cadefgb abf abfce
dcfge fabgec beg abdg gbaedcf gcdbe bg ebcad cfdaeb ebagcd | bgdaec gbe gb gb
aecb daefbg ebdfc aedfcg efbad cdgabfe cfgdb fdbeca ce cfe | fce ce aceb ec
gadebf fg fga acbgfe agbcd deabf bdagf cedbfa dbafceg dfeg | fg afg gaf fg
afed cdbge dag gabfe fagbde gadbcf adebg ad agfecb gedfabc | da geabf fgcbad gad
de gcdeaf agbcedf efacg gdcea efgacb edc fegd adcgb daecbf | edc ecd de dgceaf
becadgf edagfc fcg edbagf cg adfgcb dfega acgfe gecd bfeca | cgf cg gcde cg
cfaed agcedf db dfcbe bcd dbefca dcbgfa gbecf dcaegfb bdea | dagbcef bcd fegcb eabd
fcdagb ca aedfcgb fca gafbd abegfd afbcg fbgce aefcbd acdg | acf adcg efbgc ca
da dcefgba cdgef egcabf baed fagbcd fadbge dag faebg agedf | fcegab abde gad dbgfae
fbdec cdaeb dac dbage egca ecbdgaf debcga ca abdgfe dagcbf | efbcd adgefbc gbefacd ca
bfdecg dbaecg fcd bedaf fc dcbafg cegf fcdeb cbdfage bcdeg | egcf fbade cfd dbafgec
cg cadegb badfce gfdc agfbc cadbf egafb dbecfag cbg dagcbf | bagdcf fgcbda cbg dgcf
acgbf afbged fcadgb dcefg gebcaf ad adcb acdefbg cdgfa daf | dgcefab egbfacd gabefc cdab
dgb ecfbd fbgcd aegdbcf adcfg gfba gbaced acfgde fcabgd bg | dbg gb efdcb dbgcae
febg bcfaed efagdc fba ebafgc aecbgdf fegca bcgad bf acfbg | febgacd bfeg afb fb
adc ebdfacg ad badec efbdcg fade bcgdaf faedbc baecg cbfde | da edgbcf da edfa
afbgd agdcef dc cda bedcag cgaefb fdec cgfae fgadc deabgfc | cd cfage cedf fecd
facbe edcbf ebdgac fa dfgeac gaebc acf cfaegb dcfegba bfag | ebfac gcebad fac fa
cfebdag daecfb bg gecbdf ebagc ecagd gbe abfgec gabf ebfac | gbe afcbe gecdabf gb
bgefdca fecbgd ec bce cedab ecaf bdeafg cgbda dbaef bcfdae | bfecgd cefa fdeabc ce
gedbac cbade edfgbac gabfe cfaeb caf fc dcbf cdfbea cdefga | acf dafcbe cdfb dfabceg
cfgaed cbda abgfde cea abcdfeg adcgbe ac fcbge egdab eagbc | bcda ac ac ac
cbfaged afdgec ed fdea edcfg dce fdgac bfdagc fecbg ebcdga | fcabgd bfegc fcedag gfdabc
gafec afegb bgafed bafd fb egbda edbgac cedgfb ebf bedgfca | cgefbd bef edcgfb fb
cf gfc fecgd cebf dgecbaf faedgb afbgcd dcaeg efbdg dbcefg | fecb edfgcb ebgafd bfadgc
ea gafecd fbgac fcedb defcab fbeca bfdcge baed dabfceg fae | gbefcd ebda beda fae
afdgb acg aefdgc cebgd ac begdfac dacbfg gbcad abgfde cfab | abgdc abcf bacf ca
cdbga acedbg gefcd abdf fac af bfgaec ecfagdb gfdac bcdfag | caf bfad fa caf
edcagf feadg dab adgeb gceab dgfabc fdbe befcadg fagbed bd | dab dgabef dgebcaf bd
bga baedg abdc ab gefdb gadceb gcdae aedgcbf gcebaf cfdega | gab cdab dagcfeb dafebgc
afb eabdgf eafgcb gcdabe ecfa edbgfac fbdgc fa bacfg ceagb | cefa fab baf aebcgfd
da gdbcef facdeg dafbc efdcb adc edba gbcfa acdbef deafcbg | da ad defbgc ad
acbg ecbdg ecbgfda gdabec bg daefbc cefgd dceba dgb afebdg | bg edfcg gb efcgdab
dgbeca befcd gcfaed edgac agefcbd ceadb ba abe gcba daebgf | aeb acbg efgadc becgda
cgbafde ed bdce gde bdaegc eagbfd cgbad eadgc facbgd cgfae | gfdacbe fdegacb de deg
deacfbg afc dfcea cgaed gdbcea cf dcfg fbeacg gdfcae baedf | dbcaefg fdcg acgdebf gdfc
gca fagdbe cedbgaf dgbc gdaec badeg edafc gc abedcg afbgec | gac dgbae gdcb bgdc
cdfeab dbcfa bdg bg fgbc adcgb gdfeab ecgbdfa gdeca cfadgb | bedgacf acbdfg gdb bg
gbfec bgfde gacedb fcgea cb cgeafd bcg aebgcf gdaebcf afbc | cafbge abfc adbgfec bcg
edgf bcgef edcgfb gfcabd fbdcae ef efc acebg gcbdfea fgcdb | fdge fe dabcfg aefdcb
cdbafge agdebc bcg dfbgac cged ebagd degafb bfcea gc caegb | bcg edbga fcgdab debga
ea dagfbe fae fcdgbe gfaecbd decfb dacbfe abec gdafc caedf | defcba ebgdafc ceab gbcafde
dg cefga bfaed fdecgb bdag bdaecfg fgedab edg adfecb efdag | dgab gfcae bedgfc cgfdeab
degcfb bdcfg edgb cdfab bcadgef fgcdea gdf becfg dg egfbca | gd ceabgfd efcbagd bedg
dfbg bcgeda faecdg dab bfaec dbegacf geafd eabfd agbfde db | dab adfegbc db bd
ecfagdb db gadecb dagfb caefgb gbd fbeag facgd bdfe efadgb | bfedagc db dgb cagfd
edbcga fcdgbe ebcdg bcfage fb bfcgd bgf gcdaf bgfcdea fbde | dgcbf fbg gbf fdgcb
efagd eb dafcgb ebfad eabdgcf cbed aecfbd egbcfa feb adcbf | be eb eb bfe
bdge fdabce begfcd gcbdf bd ebfgc fadcg dagecbf dfb bcafge | gfacd dbf bgcaedf dgfca
geacf cfb gbfcde dfbga bc fbadgce fgdcba cabgf fdaegb dacb | dfagcb cafdebg acfbdg fcdgeba
fecdbg gbcaf ebgacfd acgfed gbad gb fbaec afcgd bafdcg fgb | gcbefd egfdbc fgb fgb
fdce ebagf fdcegb fgacbd dcbeg geadbc cf gebcf gabefdc cbf | edfc cfdgab decbg fc
adcfeg cfgad efgcdba fecda fec gabcdf ef bacde bfdceg gefa | ef edafc ef fgcdab
afeb fbegd daefg agdbcfe agdcf ega adbegc dbgafe efcdbg ae | abedcg efbgcd fgcad cdegba
fdegbca gefbda egbf dbagc gfd bgdaf adgfec fg bfead dfceab | fdg abcdegf gadebf decfgba
dbcaef debfgc gfebdca bcaed ad baceg dca deaf edfbc dagcfb | acd dafe fbdecg adef
beadc fc faedc dbafeg gdfea gafc fegcad cgebadf dfgbec fcd | cdf deacgf gefda cf
fdaceg edgacb dbcg cda cd ebfad acbeg gdfbace dbaec bcfeag | deabf bcgd cdgb defgca
fgcebd dgbcae bfcgad ga bga bfcgd gbfda acfg dbafe fbcgead | bedcgf dbfgc gfac acfbgd
cfaebdg dcg gedbfc gefdba egafcd dc cbde bedfg bcgdf cabgf | dbacfeg feadgb dcbgf fbgdae
fagcbd fedbg fcabge ebgad cbfdg cfedgab feb fdce dfcgeb ef | cfde fgedb bdgecf ef
becgdf efcbda cgbd gdcfe gc gaedf efbcd cfg fbegcad gbfcae | fcg cdefbg gafed efadg
da adbcgef dacf eadfcb bfcage eafbc ceabd begfda bdceg bda | da da acbedf bagcfe
agebf adfb fabedg cgafde dga beadfcg cdbeg egbad cfabeg da | dfegba dafgbce egdbc fecbdga
eac fcdabeg gdabc ebadc bcge gfecad deafb bdgfac dgaecb ce | cea ec cegabdf gadcb
gfedbc gcdfb ecdfga df cfegba defb dbcga gdf cgfbead ecgbf | facbged dfg bfed cfbedag
agbde bgdfca deacgb agbef aebcgdf afg fbecg aedbfg afed af | daef fga fga gdefab
gfbac gaecdb baefc fdebgca fgbadc ec adbef efgc fabegc cea | cae eac gfdcbea fceg
ec dagbc cagfbd adbecg bfdge gebcdaf ced gdebc fagced bcea | gdbeca dec agcdb aebc
geab ebgdfa eafbd dafbc efdgb aed ae bgcaefd dcegfb aegdcf | ebga ade ebfdg dgafceb
bdaeg aebcd cgebad dbc cb fecbgd dafce bcgfdea gcab gfdbae | cbga cbag cdb bagc
dfb egfbdc ceabdfg cfbae fgbade fdbec bd gedfc deafgc cbdg | ebfgdca fdgbec caebdgf db
dfcaeg bagcefd fceab ad dae faedb fcabed ebfgd fcabeg adcb | dea ad ebgfd da
afgcd acgebf da agbdfc cad gcdfe dagb dafbec dagbefc abcgf | fgcde beagcfd cebafg da
cabd bce cb cfbdea adbef agcfbe aebcdfg fabdeg dgcfe fbdec | ebc gfcabe egcfd fedab
efcbga cgfbaed bcfga ecgbf egdbc deabfc fdgcba fage fce ef | ecgbdaf gdecabf bdceg febcga
gbcda ad gacfb dba gfacbd fbgdeca aecbfg fdac gfabde bdgce | dab bdgafce bcegd abegdfc
fcaegb baegdf gfaced gedfa dcebg dbgea agedcbf abdf bga ba | bag fabd bgfcea bga
ebafg gdebafc gedacb gcdefb agbdfc cf gebcd gcf cfde cgbfe | fdgaecb dfbcega cfg fc
fce cbaedf cgbaedf ec bfega dcea agbdfc bfdegc dacbf cefab | ce efabg faebcd gdecbaf
dcfbg fd egcdba efcgb bfad cefagd abegdfc gcafdb cabgd fdg | bafd egfbc cdgabf gfebc
abfegc gecdabf cedb bdg dgcbf gaebdf db fgacd ecfgb egcfdb | bdegaf gfaebd gcefb cdbe
bafeg febdac ged bfcedg gd cbafedg edcaf gafdce cagd fadge | fgcdae daebgcf dagc fadeg
cfdegb efdc gcadbe gdbaf ebadgfc fc gdebc dfcgb fgc egcbaf | fc cf cfed cf
aecfgd efgab bdagfc cedf cge agfce afcdg cdeabg dgbaefc ec | gce gce ec cegfadb
eagdbc ga fecbda ecdaf fdgbc abgdcef afdcg fega cag eafgdc | cga ag ag ag
fabedg cedg cbefga dga gacedf gd fdcga afecg bfdac gabfedc | fgeca gdec fdacg gda
begadc gcfeab dgcba defbac gc fbdag agdebcf degc cag abecd | gcde gca cdge cg
fd dcgba gdbfca afedcgb gbadef cagfe fad dfcb acgfd dacgeb | cbgdea fd cfdb afegbdc
fb fceab fdeb bgfaced acdfbe gbcafd cdabe abf agcef baecdg | bf fb gdebac bf
df fdb egcbd gfed bcaegd abcfg ceadbf egcdbf aegfdcb dbgfc | begdac fdb acefbd dgbec
bgedfa dg bdcgeaf cbfad decg efcdga aecgfb aegcf cgdfa gad | egfac dg gedc dga
gadfe cfgead cdgbae cfage de dbceagf ecgafb cfed dea fgbad | ade fecag aefgc fcagbed
dfab gaecbd degfc bcegfa dgebfa edb ebdfg dbceagf gafeb bd | gbaef bafd agcfbe bfcadeg
edcbg dgbfc bdfecag cfegbd eg gebfda dcaeb afcdgb cgef ebg | fceabdg gdfbec beg fdbgc
ba gfbdec gacfd bfcdae caeb egbfacd cbedf edabgf bad cadbf | becfdg aecb bad efgcdb
gba dabgfec ga fbadc dafgcb fdabg dbecaf agfceb cdag bfegd | dfeabc gab gfabd abg
abgdf gcabfd cgabde agedfcb ab cegfda dbfeg afcgd acfb gba | bcfa dgefca dfcagb ba
bdecf dgebfc bgcd fdgae gec cg gbacef bacefd cgedf afbecgd | abegfc egfcd cg gbedafc
gdecbfa cd bfcagd fagec dfcae dcf adgcfe eabfd cdge gcbeaf | cd dfc dcf gcfbae
fdecb adfce bc ecagbd bdc facgedb bfac fbged egdacf fcadbe | daefc efcgda bcd dagcfeb
fgdba fbae bcafedg dfgebc fag cbgad gedacf gdfeb fbdage fa | dbfag fdbeacg bgedaf bfae
dafbg abfed fe eaf degbca fegabc bafdec dcef aedbc afdcegb | fe fe ebfcag dacgefb
adcegb cf dceab caef ebgadfc dcabfe cbdfe fbc degbf gbdfca | cf afce aecgdb cf
cebdfag acfgbd gcbef bcf dfegc bf egacfd bfde gbfdec abceg | dbef cbf cfgde cbf
bgfaedc gcdfb cadbge fdac bgfdac cf eabfgc bfc acdbg fgbed | cafd fbdagc bdgac cf
fgdc fgceab edf feadg beadfc bdgae egdcfba efagc fd cdagef | fed gfdcaeb cgaef fedgca
bfg ecabg cabdgfe fdgc fgbac dafbge gf fcdbag fadcbe fdcab | bdagecf fgbdaec fdcgeab fg
aefdgb agcfe dfeca dgecfa feg deabgfc ge gacfb defabc dceg | efg edfca egf aefcdg
afbeg fagd adgfbe abefcdg bdefca ga gab ecdgab abefd bgfce | fgad fdag dgcbeaf ga
fbgea ebfgdca badegc bac cb gceba eadcgf daegc gcdafb bedc | cgbdefa bc bc dabecgf
cfbega dgba gb fbegd gdeabf bfcadeg egdcf fgb badef fdbaec | gadb facbdge cfgdbae eadbf
gdecaf fabed bdgcae dcgfba ce bdfegca dcaeb gbcda cae ebgc | afdgce dcbegfa egdcfba bgfcad
bcgdfa cda agecfdb cedba cafdeb caefbg abfec edcf debag cd | cda cda dc ecabd
fdbagce abfc cageb cagfe eba gadefc dgcbe adebgf geafbc ab | ab edbagf afbc facb
gcdfa cadeg dcaeb adcegf gfcdba fcabgde ge gfed gea gfeacb | cadgf gae dagfbc gfed
bfegdac gcabf fdg adgfb gefdcb gd abfed gdae dfgbae befacd | dega bfgdec dfg daefbg
acebgd ceg gcabd afcbgde ebcd afbdcg cbgea ec gbfae gdfeac | gce afbeg adcgb abedcgf
degfab fbade ac acdf feacb dgcbea cfbge abc dgfaecb bdecfa | adfc cdaebg ca acb
adegcfb gf acfdbe ecfdb dgceaf dgfbe dgbae feg fcbg dfcbge | gf fg fg gf
fbacde gfacbe eg dcge fdbga beg bedgcf dcbef fcbaedg bgfde | cged edcg bgedf ge
dgafc dfbegc fagbed cfba adfbcg cfg cf dabfg gafcdbe dgaec | dgbface fcgad cfg fadgc
defcga gdfc afc cadebf bceag degaf fc gaedfb dabcgfe eagfc | adfge dgfc edcfab fgcd
dcefb feb gcdeb efdg fcagbe becgad bfcda gabfdec fe ebfdgc | ecbagf ef dfge decbf
fgebac faegb gcebfad fb fecga bgf ecbf abged gcefad fbgacd | fb fbeag fbega bfg
cbdgfae fbe gdfbce egbda abedf cdfea badcge agfb edbafg fb | ebfad afbg edafbg efb
gbdc gb cfdegba bdgae gab gcafbe fadeb ecfgda gbdace cgaed | abg dbgc dcbg gb
db dgefb eafdbgc ecfbg bcegdf bdg fbcd gefad ecfbag adbgce | db cabedgf dbg fgead
ab bcfa bacfed dba befad fadeg bcdaeg abcgdfe bdecfg bcfde | ba debacfg fdcbe abd
baecfg edgba cdgae fced cd egfdca cgd acedfgb dbfgca feagc | adceg dcaeg efdc dc
cdb bgfeda acdeb becfda fedba dfca gbeca dbgecf dc aedcfbg | bdc egabfd cd eadbc
efgcadb dgebf baedf gcedfa bfg gb eacgbf dgefc bdcg cgbfde | dfgbe gb gbdefca dbcg
afebdgc gbfdc gbca defgb cdb bc bcfagd bcdfae edfgca fdacg | cbd cgab dfbgc cb
bgfade cdgabef cfebd ce febad dgafce dce abce cgbdf edcafb | bfeadg gdfbea cabe ce
gefbcd de dgfce gfdaecb gafec bfdcg bdge abdfgc edf dfbcea | ed fcdgab dfe edgb
cgafeb egadbc bagce gedcafb afcbd fgae bfeac fdegbc feb fe | egcba bfe bef bcdaf
bcdea dgbfc gdae dabcg ecdfab gca ag dcebgaf gadecb beafcg | eagd eadg bfgcd gac
gafcb eba acbfeg cagbfd ecaf fcbedag bdcge ea cagbe fdeabg | bea aeb ae eab
cdegfb cdagef bgf dfgcaeb eadgb fegac febga bf bfcaeg cfba | caefdgb gfb fb ebafgcd
bgedfa dfbca ebdgcf fbgcd dfcega cgf gfbcead degfb ecbg gc | gecb cfg cg aegdfb
agebd bcegda aeg fedabc bdgafce acgd fbgde ag caegbf cbdae | agcd egabfc dacg dgca
cbdfe feacd geacfd dbaefg cbgfd aedfbc ceba eb bde egacfdb | bed ceba adbefgc ebd
egd ge afcbedg bfgeda bdgefc gbce bcgdf fdacbg aecfd dcgfe | cefgbd afcbgd ge cebg
bg gacbe cefgad cbgf cbead gba fcedagb ebdafg gcfbae gacfe | gabec cedfgab acgefb dgecabf
afedg edabg fcdg bfcega ebfdca decaf gf gfa acegfbd afedcg | dgcf efacgdb dcgf ebdfcag

100
2021/full/day09.txt Normal file
View File

@ -0,0 +1,100 @@
3498899019878754677899876434987898910234679986778932468999412767899921249978987543456799987899987876
4597678929765833445943989759976567891465798765869893459997323459999890198767898792347899876999876645
9986567898654421237891094998765347976587987663656789598986537568998789397646999989499998765899865434
8763456799543210948942123999654236897799876542345699987987656789987658989534789879987899986789996323
9852165987654399899653439899954345679899988651234799895698967899896547678965698767996789498896987534
7541034598765989789864598789865466789998798742398986744569878998765432567896789459875489699954598976
5432123459879875678975798677976567997897659876567895432979999549898543456789992359876578976543239987
6543334599989954567896987556988678956798543987678986759898989921987676567893210123987799989876136799
8654456789999843456789875445999989239987562398989099898787678899898797688954321254599893498964345689
9875598899988732347898654333878992198765421239699124987685457789759899789875434675679901987895496793
2986789999876521456987543212668943019843210134568949986545345697545999899986545786789929876789989932
1987998798765435587896432101457892198767521235679998697632158789434589999987656799999899965396879321
0299899659876656678987545232345793899899432349789876598794377895323478998798867988989789654245568910
1298778943987887889998654353476965789976545498990997469876456789212567896569879877875678965123457891
2979667892398999998998765467987899896989769987991984367989767994346789965456998766434789996534968932
9867458943489023457899976699798999935799898956789875457999879976557898654356789954321246789649899543
7654347895678934668901989789559789424589987645698989598989991397968997655246699865310137898659797665
9765236896789549789542999896445696537679896435787897699678992989899876442123469954323245998798679789
9896144589899998997659898991234589648998765323676798789567989878789989321012398767454356899897598999
6941023478999867898798787889945678959899994212545699895429876767679998992534569898768769986996456789
5432124567989756789898656667896789998789789301234589997698765654598977989645678999899978975987867899
6553734679876545899997543556789893987674679912547678998987654423987865678959889996945989964598998998
7696545989997656789987632345899932398543467894758989899876543319876434567896999985436799893239989987
8987656899998967893098641012799541987656878976769998767987432109965323458945678977321298789549878966
9399897978999878932159892323678992399787989497878999654597644298764212969434767965410989678959769345
1298969459986989543246993934568989459898991298989899543459756789872101894325457894329877567897657239
2987654349895498754347989896679678967999432989796798432349897999989237789212399965698765435689642128
9899765459679999899499876789894569999998999876655987321234998999994345678924987897987654323899951037
9765989998567899998989924678943456987897978965434595210123489998765456789434976789999766445999872156
9834599887456789887978913459652349876566467899323984321235678999876867896559875689999878576789653245
8945798765387898765459904589101259865454348678919876533546789999998978997997654677895989687999877656
7896999643228999876246895678912346965321234589323989854689899987799989989876543456964598798934988767
6989898954019987542134989789924956987540455695456798765789999875689997878987651348976799899127699978
5876797892123498431013778999875789998432567897978899979897899954578986768998910256899987977934569989
4345676889234599545124567898976990976545778989899999989956598768678965456789321345698786556899698792
3257345678945987656234579976999891987657889679789998797643459879789874345895432566987675345998976543
2101234689656998764346889345789799998768996598699987698764769998999985456976543456989554234767897794
3212345699987899885456793219897678899889865487589997569879898987999876869899676579975433123456789999
5333459999898989876567899398923456789999654396467895456989987986789989998798987898754321012345998798
7569998789799876989688998987934567994598763212356789347597896565678998987677898989865432124456789697
8698889676689999898799987756895678979999854323767892123456998424799986976545799979879753234578994556
9987674565578998769899976548789789459889876434789943254569876534999875568925689769998764345699543434
9876543234467899656998767434678999398768976545678954565879987695789954321014578957889885456989432323
1987652102345678943239654323489988999544987796789765776989698986898766535123489945679976769978921012
0199863243458999453198765464599767898432098989899879887993569997909877645234567896798989998767892523
9239954867567954321099986765678956987643129878901991998921345998912998784345678989987698765452679434
8998767898689765692987987876789545698754298767899892359210167899439999895567899778996579876321567999
7899878998799876989875598999899959798767987656789789459321379997698987987678965656889456985432345678
6895989469902997976753459899999898999879876545345678998932998999987696799889654345678999976569496789
5694398979899889765442356789398787899996999631234789877899887899876565679998767976789988997998989994
3789457898798678954321467892197676789975698742649895756798796796543434568999898987899967989987879893
4567967987656567965435698989986545678954987653458954247986545965432123457998989298989855679875658789
7689878998943456896546789679876434589543398954567932123965437896543437689986679019876744598654345696
8789989999732345989687894598764323678932198768799899439876545987859549898775568999865432987643256795
9991099987621265778998943569843212367893349879898798945987687899998956798654348789886540198732134894
9989129876540124567979964579976301456789459989989667896798789945987897899886234598765431469543456902
9878939986521569879769875798765412348996598998976456789899893239896689998765495679986562359876587893
8769898765432478989654986969876523657899987697654367896934991098765568999886788797987679767989698954
7659769876546599697923999853987798769998765498765478945795989139954457899997899896598899898999899995
7649853987658943466899899764799899878909964349876567899979878998732356789998945997439934959789996986
6534954599767892355998798765679934989219875656987978998968967789540245699999659986321012345698785497
5429765679878910234597659878794325299924998787898989997956545678954357999898798765432129596987654329
3212987794989321296789543989943210199895989899959799976844234569765456789789999976573298989898843212
3101498943495433387997642396794321989789875935345679865432143568976789997657989899954987879789943209
4212349932398544499896521345689439778678954321236789987545012379899899754349879767899896768678999998
4363457893987659598789432467896598653578965432447892399653123456792998965598765456789765454579988787
9456789954598998987679943598987989432345696643456890198764334569891987897899894323898754323459879656
8769899866789997656567894789998976545456789754567899239895456678999865679999989219989843212398765545
9997998988999876543456789898789998666567999765679978945976578989987654567979678998765432101987654234
9886797999498765432326678987678899898678978976789669957897689999876543568964569999986954312398765101
9765656789319854321014567896566789979989767897893459898998797999998662789543467892199875429459893212
7654545678998765432123459975445698654393456789912399789019896798987653497651498993246976598999954343
8943234567929876543275678954323459543212767893201988689323987987798765689320239789345987976789876458
9895395678912989654586789995445668986543468954329876578939999876549876795432445678967899875345987967
8796989989101292986797899987856899997854578965934985467898898765432998997544556789878986543234599898
7679979893212391097898968998967899998765678979899876328246789986521019789678967898999598632123498799
6598767789324989998929459999998999879876899998798765410135690198745123678989878967965439643245987689
5432545689939878899102399898789998965987999987659876721248791987656234567899989656896019865459976578
4321234567899767789293989765698987894299689998743987533367989998754345678999991347992139876798765469
3210355879999645678989978974987876989103569879651987544569878999876556799778930456789246998999864345
4323796789878924567977567895986645879212398765510198656789969899987667894569321367894356979987543234
6435697896567895979865457989995434567923999864323498767899656789798798923498936568965469865698965676
9876789923456896893974345678976312459899898765434569898998767896679899014567899689876598754349876789
9987895312345797954985657789875401346789799877555678999439898934599984323678998796998789743210989896
7899986453456998969876767893986212468998678988669899878924999623459876544567929965349899655439898965
6432097568967899978987889901297326579765459599778965767895989510569998697678909893234987996598767464
6593198789898945899899997892398438989899679499989954655689879431458798789789998789399656789679955353
9989349999769236798789486899459549992998792987699893244588968942345679899899857678988745898798843212
8878959898954126797678365678998757891369990996548789123467957793459798910998743569976324999987654523
7967899767893235986543234769999898990156789875437678965678945689598987892987632457895436789998787634
5456998656994467897652123456893969789245698765323569896789234579987696789765421346789597899869898745
4349876545989578999653245767892345679367899972103456789892124569876554998653210145699989997654949856
3234987439878989398769356978901956789878999864212389899943434598765432359986321234899878976543234987
2136796545967893219898967899899897991989789974363478999854545998654321239875434345998767975432124598
6545987659878999423987998999776799890195698765455569298765669899766510129876589456789656896594234599
7659899867999988939876789988645698799234589876566689129879898769854321234987676567899545699989995678
9998654978989877898765899876434789678945678987679791012989987655987642345698987899998732488979789789
9876543989876865789996999995321234567896889798789895423497896543499873486789999978987521267965678990
2995432598765934456789398765452345689997897659892986434986987632198764678999876569876410149894569521
1986543497654321345891239976563456893198976543901296549765498743459876789101983469865321235789789433

98
2021/full/day10.txt Normal file
View File

@ -0,0 +1,98 @@
[[{[<{{<<{<[<{<>[]}([][])>{{<>()}<()>}](({{}<>}[[]<>])<([]<>){[]()}>)>[<{{<>}<[]()>}[{[][]}<{}{}>]><{<
{[<[({([[(<<(([]{}))<[{}()]>>>)]])<([<{[{({}{})[[]()]}[(()[])<{}()]]]{{[[][]]<<>[]>}}}{([([
{<{<{(({[[([{<<><>>([]())}[{()[]}({}())]}<{{{}}{[]<>}}({<>{}})>){<(([]())([]<>))(<<>[]><[]<>>)>({[[]
{[([<{<([{{(({()<>}({}<>)))(<{<>{}}](<<>[]><()()>))}{[{{[]()}(<>[])}{{[][]}{<>{}}}]}}{[{{{{}[]}<<>()>}}<{([]
[({[{[(<<<[((<{}<>><{}{}>)({[]<>}((){}))){{[{}<>]{{}<>}}})[<[<<>>[<>{}]]{{<>[]}}>]>>[[([<{<><>}
<[{[{[[<{[[{<<[]()>[{}<>]>}]<([{{}}({}{})])>]{<[[<<><>><()[]>]([[]<>]{[]<>})]{(([][]){()[]})
((<(<(<[(<([(<{}<>>(()()))](<{{}[]}{()[]}>))<<<(<>[]){()()}>([<>{}]{{}})>({{[][]}(()())}(<
{{([(<{<([([[[<><>][()<>]]{(()[])}])]({<[<<>>[()<>]]({()[]}[{}()])>]))>({<<[<{[]()}<<>[]>>{<[]
([<{{((<({<[<({}<>)[[]()]>]([(<>)<(){}>](([][]){{}{}}))>{(({<>[]}<()()>){(()[])})[{{[][]}((){})}[([]<>)({}{})
<<<{<{<([<[((<()<>]<[]()>)[(<>[])[{}<>]])]><[<[(()())[()()]]{[{}{}][()()]}>]{<<(<>())[<>[]]>>[<(()())<[]
{<[[({<[{[{[({{}<>}<<>{}>){<{}[]><{}{}>}]{{<<>>}<(<>()){()<>}>}}]}{{<[({{}()})([()<>]{[]})
(((([[(((<(<<(<>())[(){}]>([[][]]{()()})>{<[<>[]][()<>]>(([]{})[<>{}])})[({{()<>}({}())})]>([[[(()<>)][[<>()
[<({([[[<<([<<<>()>>{[<>()](<>{})}]){<[[{}<>]]<{{}<>}([]{})>>}>[<<<{{}()}>>[[([][])<<><>>]({<>
{<(<<{{<<[({{({}<>)[[][]]}(<()[]>[<>])}<{<()>{{}()}}>){{<[(){}][(){}>><{{}<>}[[]{}]>}}]<{<{
{(<{<[<(<<(<[([][])<[]{}>]><{([]())(<>{})}{<(){}><[][]>}>><({({}[]){<>()}}{<{}>(())})>>{({{(<><>)[{}()]}
[(<{[<<[{((({[{}<>][[]<>]}){(<{}<>>({}<>))<(<><>)[<>]>})<({{<>[]}}}>)}]>([{{<<{{[][]}(<>())}<{{}
<<<[[{[<<{[{<(()[])<[]()>>}[(({}[]))(({}<>){<>})]](([{(){}}[<>]]<[{}{}]<{}<>>>))}>{{[(((()[]){(){}})(<(){}>{
[{{<<([[[[<<[{(){}}{(){}}]{<{}()>(()())}>{{<{}()>}<[<><>][()()]>)>([{{()<>}<()[]>}[[<><>]{[]<>}]]{[{
<[[{[{<[(({({[<>{}]}([<>[]]))<<[<><>]([]<>)>([{}()][()()))>}[((<{}>{[]{}}))[[{{}}[<><>]]]])(([{{[]()}<[]
{{{<{([[[<[<{{(){}}({}{})}>[[{()[]}<[]{}>]<<()<>>[()[]]>]}<{[[[]()]<<><>>]({<><>}<[][]>)}{(<[]()><{}<>>)}>>
([<<[(([{{[([{<>{}}])<[(()){<>{}}]>](<{([][])[<>()]}<{{}()}>>)}>{[{{(<()()>[<><>])((<><>){()()})}{([[][]])[[{
[{((({<([{(<{(<>)[[]()]}({{}<>}<[]<>>)>)}(<<[({}{})]{({}<>)[<>()]}>>[<[[()<>]{<>()}][<[][]><<>{}>]>[<([][])[(
(<[{<[<((<{<[{<>[]}{{}<>}]([[][]]{{}[]})>[<[(){}]{[]()}>({<>}{<><>}}]}>[[(<{()[]}<()[]>>[{{}()}<<>[]>
({{<([{<<<<<{{()}({}())}<[()]{[]{}}>>[([()<>]([][]))<{()<>}>]>>>>}<{[[[<<<<>()>{[]{}}>[({}()){(){}}]
<[{([<<(<(<[(({}()){[][]})[[(){}][[]()]]][<[{}]([][])>]>}>(<{[({[]<>}{(){}})<(<>)({}())>]<[({}<>)<{
(({[{<({<<[<{{[]<>}[<><>]}{{{}}<()[]>}>]<<<{()()}{{}<>}>([[]()][<>()])>>><[([(<><>)<()[]>]
{([<<[{[(({[{{()<>}({}{})}<[{}[]]<(){}>>]<{<[]<>>}<[()()][()()]>>}<<[[(){}](<><>)]><(<{}[]>
{([<{<([(<(<(<[]{}>{<>()}){{<>{}}}>({<[][]>(<>{})}))<[<[{}{}]<{}{}>>{(<>[])(<>())}][<{{}<>}(()[]
[{[(<(({{(<{(<[][]>){[<>{}]}}{<{(){}}{<><>}>({[]{}}{[]{}})}>)(<[(([]<>))[[[]()]<[]<>>]]<{({}[])<{}<>>}[
[{<{({((<{[{[<<>{}>[[]]]{<{}()>[<>]}>]}>[{([(<[][]>{[]()}){<(){}>[<>[]]}][[([]<>)<[]{}>]{{{}}[{}]}])([
{<(<({[{[(({((<>[])<{}{}>)({[]<>>[{}[]])}([{(){}}([])]{<<>[]>[{}()]}))[[<[<><>]<<><>>>{[()()]<
{{{<[<<{(<(([({}<>)<()>]{<()()><[]<>>})(<[()[]]{[]{}}>{{{}{}}(<>())}))({([[]()]{()[]}){{{}<>}[
(<({{[{<{[<[[{[]()}]([[]()][<>{}])][[[<>]{<>}]<([]{})<{}[]>>]>{[{{<><>}[[][]]}<{[]{}}({}())>](<[[]()]({
<<[{[<{<[[(<[<(){}>(<>)](<[]<>>[[]()])>{<<{}[]><{}()>>[(()[])(<>{})]})({({{}<>}[<>{}])}{({[][]}<<><>>)})]({<[
[[([<{{(<({[{([][])(()<>)}]{{{[]<>}[()()]}[({}{})[()[]]]}}>><[[{{[()()]({}())}}({(()[])[[]()]}{
<<{(<(([{((<([()()]){{[]<>}{{}()}}>)<<<({}<>)[<>{}]><({}[])<[]<>>>>(<[[]]{(){}}>(([][])([])))>)[{[{([]<>)[<>{
[(<(<<{{[([[[({}{})<()())]({[]}{{}[]})]({[()()]([]{})}{({}[])[[]()]})]<[[{<><>}<[][]>][[[]()]{(){}}]]>){(([<(
[[<[<{<[{({{{{<>{}}<[]()>}<<(){}>>}<{{{}{}}{()<>}}[([]{}){<>{}})>})[[((<<><>>[{}[]])<{()<>}<()
((<(<<[[{{{(<<{}()>[()()]><((){})>)[[[[][]][()[]]][{[]<>}<{}{}>]])((([[]{}]<[]{}>))([{<>{}}(<
{{(({[{[({({<<<>[]><<>[]>>{{()[]}[{}()]}})[{(<{}<>><[]>)(({}[]){{}[]})}<<<[]()><[]{}>><{<><>}<()<>>>>]})
[(<[{[<({{[{<[<>()]([]{})><{(){})[()[]]>}<(<()()>(()()))(<{}[]>({}[]))>]([([[]()]({}{}))({(){}}([](
{({(({[<{<[<<{<><>}(<>[])>[<{}{}><[]<>>]><<{<>}>>](<<<()<>>(()<>)>{<{}[]>([]<>)>>)>}<{<{{<<
<([[[(({[{<(({<>[]}<<>[]>){<{}[]>([]()))){<({}<>)<[][]>>{<{}{}>{()[]}}}>{((({}{})[{}[]]))({[<><>]}<<<>{}
[{[[[{<<(({[({[][]}<[]<>>)<{{}()}{{}}>]{({[]}[<>{}]){<[][]>[{}{}]}}})[[([<<>()>(<>[])]<<<>
<({<<[(({[([{[()[]]({}{})}{{()[]}[()[]]}])[([((){}){<><>}]{<()[]>{{}{}}})]][[{<[()()]({}<>
[{<([<({{<<[((<>[])(<><>))((()[])([][]))][(([][])<<>()>)]>[<<{()<>}<{}<>>><<{}<>>{()<>}]><{[()[
[<{[<([{((({<<[]{}><{}{}>>([{}<>]<<><>>)})[[(<{}<>>([]<>))<<{}()>{{}<>}>]{[<[]<>>][[{}<>]<{}[
({<{<[<({([<{<()()>{{}[]}}({<>{}})><{[[]<>]<[]()>}<[{}()]{{}[]}>>])}([<<[{[]<>}<<><>>][<[]{
{[({<[[<<<(<{<{}<>>(()())}[{()}{()<>}]>)[<{{(){}}(()<>)}>{[([]{})(()<>)]{[(){}]{()[]}}}]>{{[<<[]()><()<>>>{
<[{{({({(<<{[(()<>){[]()}][<[]>(()())]}{<(<><>}{()[]}>}>(<<{{}()}<[][]>>[{()<>}{{}{}}]>)>)}<[(<((<(
[<{[<[{[[[([<(<>{}){{}<>}>(<<>{}>{{}{}})]{({<>[]}<{}()>)<({}<>)<{}{}>>}){<[[[]{}]{{}{}}]<<[]<>>(()[])>
{[{((<(<[(((<({}[]){[]()}>)))]([{<(<<>{}>[[]])<[[][]][(){}]>>[{[{}<>]{[]<>}}{(<>())(())}]}[{<{{}()}<<>[]>>}[[
[[[{{(<<<<((<((){}){[]<>}><<(){}><()<>>>){[<[][]>({}[])](({}{})<[][]>)})[[{(<>>}([{}()][{}()])]]>>>((<{[
[[({<[[<([<[((<>{})({}<>))({{}{}}(()[]))]<<((){})<()()>>[<[][]><{}{}>]>>({[<()()>[[][]]]})])>
([<(<{(<<[<{{([]<>)[<>[]]}<<()()>[(){}]>}><([[<>[]]](({}[])))({(()())<(){}>}<[<>>[()()]>)>]>>)
{(({([{[{(<[[((){})(<>{})]<(()())(()[]>>]{([{}]{[][]})}>)<((((()<>)[<><>])<((){})[()()]>)[[<()<>>][<{}
{{([{{<<({{<<<[]()><()[]>}{{()<>}}>[<{()<>}<[]{}>><{{}[]}[{}[]]>]}})({{({[<>{}]<(){}>}(<<>>(()<>)))(<
<[[{<(<{{<[<{({}())}({[][]}{<><>})>{[<<>{}><()[]>]<[<>[]]<<>[]]>}]>(({[{[]()}<[]<>>]{<<>><<>[]>}}))}([[<
([{<[{<({{[((<{}<>>[(){}])({()<>})){{<<>{}>}[<{}()>{()[]}]}]}[{(({()[]}(<><>))[<{}()>(<>[])])<[{()[]}[
{<[{({<((<({[{[][]}{{}[]}]{[<>()][<>{}]}}((({}())([]()))<([][])[[][]]>)}({[[[][]]({}())]}{({{}}){(<>[])
{{[{{({(<(<[[[[]{}](<><>)]([[]{}]{<>[]})]>({{{()[]}([])}[{[][]}(<><>)]](({[]}<<>[]>))))>)}({{[{{(([])
[<[{[{<<({{[{[<>{}]<(){}>}]}<{(({}()){{}<>})(<{}()>{[]<>})}{<[[]{}]>}>}[<[[([][])[[]]]]{{([]())[{}<>]}<({
([<({{[((<({(([]<>){[]<>))[({}())([]<>)]})[{{{{}<>}{{}[]}}}<<([]{})({}[])>[<()[]>]>]><([[[{}<>]<()>]([<>{}
<[<{[[[<{{[[([[]<>]{(){}))[[{}<>][[][]]]](([<>[]]<<>[]>)[(()<>){()<>}])]}[<<((())(<>{}))<{[]()}<[
[{[[{[[(<<(<({{}[])[<>()])><[[[]()](<>())]<{[]<>}({}())>>){[<{<>{}}[[]<>]>]}>{{<[<<>()>[()[]]
[(([{(([{<[<[<{}[]>[<><>]]>({[{}{}]{[]{}}})]>}{{[[<[{}{})<()()>>{{<>}{{}[]}}]{{([][])[<>{}]}{
(((<<<<[(<[<{{()()}<[]{}>}<{[][]}{<>[]}>>[[[()()]{{}{}}]]]({[<()()><[]{}>]{{[]{}}([]())}}<{<()<>>[<>]}<<{}
<([<[[<<[(({(({}())<{}>)<(()[])[{}[]]>})<<({{}}[[]{}])[({}{})((){})]><<{{}()}{[][]}>>>)]>[[(
<<<{(<{{(([{<{()[]}><<[]{}>{{}[]}>}{(<[][]>[[]<>])[{()<>}]}](<[[<><>][<>[]]]([()[]]<{}()>)>))<(
{[[([<<[[(<((<()()>(<><>))[[{}()]<()<>>]){[((){}){[]{}}][[{}[]]]}>([<((){}){(){}}>[([]{}){()[]}]]))]<[<<{<<><
([{[{([<{{{[<(()[])({}())>{[<>{}]{{}<>}}]{(([]<>){<>}){[()<>]<()[]>}}}(<<[{}<>](()[])>{[[]()]
[<((<<<[{[((([<>{}]){[(){}]})<<{<>{}}({}[])>[[[]{}]<()[]>]>){<(<<>()>(<>[]))[(()[]){[]<>}]>
<(([({[[[[<<[[[]()]]<<()[]>>>>{{<[()[]]{{}{}}>{<[]()>{()[]}}}<[({}<>)[()<>]]>}]([([[()()]<<>{}>])<{<{
<{([([((<{{[([()[]]{{}()})][(<<><>>){{{}[]}[[]<>]}]}}>[((<(<<>>[[]<>])[(()[]){()<>]]><<{{}
{<[[({{<<[<<<{()[]}<<>{}>>([[]<>]((){}))>[{[<>()]{{}<>}}[({}())]]>{[{{[]()}({}())>]({{(){}}<()<>>}{<(){}>{
{(<[{[{{[<(<({(){}}<[]()>)(<<>[]>{<>{}})>)>]({[{[({}()){<><>}]<[[]<>]{<>{}}>}(<<{}{}>([]<>)>(({}{}){(
((<((((<<({[{{{}[]}(()())}{<()()>}]<[[<>[]][(){}]][{()[]}]>}(([<[][]>][<[]()>({}[])])[<<[]()>[{}<>
[[{<[(<{{<{<[{<>()}[[]]]({{}<>})>{{{()[]}<{}<>>}}}<({{()[]}}[[<>()](()[])])<[([]<>)[{}<>]][([][]
<{{[{[{(<<({{{{}[]}{[]<>}}<[[]{}]{{}[]}>}[({{}{}}<[]()>){[[]<>]}])((<{()()}[[]{}]>({()<>}<
({{{<({{<<[<[{()<>}[[]<>]]<[{}{}][<>[]]>>({[{}()]<<>>}[(<><>)({}())])][([{<>()}{<>{}}]{(<>()){()[]
[((<({(<<({[<(<>{})<[]<>>>[([])[(){}]]][{{()<>}(<><>)]<[{}{}][{}<>]>]}{<{(<><>)[{}[]]}(([])[[]{
(([{<[<{<<{{({()[]}{<>{}})[[[]<>]<[][]>]}<{<()<>>[()()]}{<<>><()<>>}>}>>[<[[<[{}<>]{[]{}}><(<
(<<<[<<<(([{{<()<>>[<>[]]}{<()[]>([][])}}])(([{{{}{}}[<>()]}({<>()}{[]{}})]<[<<>[]>]{({}<>){[]<>}
{<<[<([[({({{<{}[]>([]{})}[<()<>>[(){}]]}{[(()<>)]{<()[]>({}[])}}){<([{}[]]({}<>))(({}{})(()<>))><([(){}]<{}
{{[[<(<({<([[{[]{}}(()[])]<(<>[])>])({[[{}[]]({}<>)]})>[(<<[{}{}]<[]<>>>>{{{[]<>}[{}()]}({<><>}<<>()])}){([<
{[[{{<(({(([[<()>{()<>}]([[]()]([][]))]<<({}[]){[][]}>([<><>]{()()})>)((<[<><>]{[]<>}>[[[][])[[]<>]
[[<<{[[{([<{({[]()}({}())){{{}<>}<()()>}}([{{}()}<{}()>][{<>}[()<>]])><{{{{}[]}(<><>)}{[[]<>]<[]<>>}}>])}
({(({(<({[{((<{}><{}>){<{}()>[{}[]]})}]{[<({<><>}({}()))>{{({}<>)(()<>)}{<{}{}>{<>[]}}}]}}({[{([[]{}])[<()
({[{<<[<<[{{{{[][]}[()[]]}<<{}()>{{}()}>}{({<><>}([]))[<{}<>>(<>{})]}}{[([<>{}][()<>])([()[]])]}]<{[(<<><>
{<{<(({[[{(({{()<>}[[]<>]}[[()<>][()()]])(<((){})[<><>]>{[[]<>][()<>}}))}<[<{{{}}[{}[]]}<(
{{<[[(<[{<<((<{}<>>{(){}}))((<[]<>><{}{}>)({<>()}<()<>>))>>({[{(()[])<{}<>}}(<()()>)][<[<>{}]{<>
<[<{((([<(<<((<>())<<>()>)>(<{<>()}{[]<>]>)>)[[{{{()[]}(()())}{({}())({}<>)}}](<[{()()}<()()>]((()){<>[]})><[
(<([{[[[[[(<(<<>{}>)<{{}{}}>>(<<[]()><[]()>>(<(){}]{()()})))]]]({(<{(<()>([]{}))[{()<>}{[][]}]}([<
(([({{{<(<{[<[<>[]](<>())>(<{}{}>)]<(([]<>>(()[]))(<()()>(<>{}))>}>({{[{[][]}][{[]<>}([]{})]}(<(()
({({<{[{{([(<(()())><{[]{}}(<>())>)(<[()()]{()()}>[[[]()](<><>)])]{<<[[]<>](<>())>(({}{})<<><>>)>
((([[{[<[{(<[{<><>}{{}<>})>{<[<>{}](<>)>[<[][]><[]{}>]}){[{{()[]}<<><>>}<(<><>)({}{})>]{<{(
[[<({([{{[<{<(()())<[]<>>>{[[]{}]}}(<[{}<>]<<>()>><(()<>)[()()]>)>>{<{<[[]<>]{[]()}>{<[]<>>{[
(({[[(([[<{([[{}<>]{()()}][[{}[]]{[]{}}]){[[()[]]<[][]>][<{}{}><{}{}>]}}[{[({}())[[]<>]]}{[({})<<>>]<{<>[]}

10
2021/full/day11.txt Normal file
View File

@ -0,0 +1,10 @@
6111821767
1763611615
3512683131
8582771473
8214813874
2325823217
2222482823
5471356782
3738671287
8675226574

22
2021/full/day12.txt Normal file
View File

@ -0,0 +1,22 @@
FK-gc
gc-start
gc-dw
sp-FN
dw-end
FK-start
dw-gn
AN-gn
yh-gn
yh-start
sp-AN
ik-dw
FK-dw
end-sp
yh-FK
gc-gn
AN-end
dw-AN
gn-sp
gn-FK
sp-FK
yh-gc

807
2021/full/day13.txt Normal file
View File

@ -0,0 +1,807 @@
1094,19
751,827
323,890
969,603
301,10
291,483
1173,92
1034,570
460,732
1222,191
986,756
430,480
1057,129
659,687
514,803
669,603
234,133
421,857
343,725
987,568
232,735
708,165
421,737
776,389
1307,655
1006,91
259,350
907,198
651,80
23,752
629,519
492,858
905,110
750,716
184,821
1103,171
1307,351
559,645
85,485
6,759
459,91
227,110
977,835
363,163
437,12
447,171
552,417
1094,215
822,28
1019,843
621,100
430,184
385,571
671,745
1046,802
16,175
659,782
907,288
1083,784
232,376
269,228
1068,82
556,572
870,403
321,59
987,288
1007,702
1062,705
661,619
1293,845
257,77
33,794
684,299
356,634
18,592
949,166
1128,893
1078,70
490,624
57,123
202,133
649,499
22,355
990,849
701,842
1077,381
649,619
758,480
997,47
363,178
972,754
370,201
171,224
328,512
298,428
8,515
1041,584
313,159
303,779
800,1
1288,539
273,588
498,135
796,803
889,157
884,546
698,123
1058,213
1299,717
648,583
691,275
425,466
815,606
144,1
1216,600
858,581
1019,483
950,5
659,344
888,742
8,360
1303,502
380,10
1121,731
25,835
291,850
1052,126
326,64
669,791
1091,709
825,100
627,255
1108,514
1062,581
671,149
273,59
258,126
291,716
1242,574
908,255
70,441
1253,571
626,695
703,835
982,74
460,221
1108,380
976,311
546,236
406,761
1190,389
651,687
1190,133
224,81
975,616
969,403
1017,166
351,219
730,255
412,812
1237,801
169,420
1077,749
1173,163
303,491
351,80
484,759
219,633
652,285
914,248
1253,123
16,623
889,737
107,204
818,624
728,235
681,375
1161,847
233,749
597,571
85,37
380,523
276,162
913,378
639,337
271,876
1295,725
291,411
1222,703
517,7
396,752
989,507
333,835
150,268
708,298
729,353
303,627
708,10
658,138
959,142
780,761
1303,54
131,635
179,333
1186,380
889,705
1305,80
547,409
577,848
94,406
636,337
969,495
674,302
455,843
582,393
619,275
1275,611
938,121
938,773
233,145
313,291
552,238
28,199
671,109
746,870
1053,77
966,847
612,123
1071,390
293,113
1298,44
233,189
1031,278
78,873
276,732
190,572
1232,425
1146,624
490,176
228,796
1091,359
487,8
754,572
1267,470
679,192
7,278
1120,572
1200,439
629,234
298,634
315,493
1178,513
1019,402
159,606
6,79
460,834
897,894
997,495
55,87
492,624
880,529
641,739
31,707
673,397
800,753
1245,297
463,205
1012,242
631,432
1275,731
77,590
157,786
855,626
826,759
855,519
492,270
1200,455
1154,31
1268,469
947,178
564,870
748,21
199,71
771,284
1158,92
50,194
455,499
672,623
484,31
218,695
581,541
251,59
952,834
1258,884
885,428
351,715
1181,501
455,338
192,800
497,100
400,758
1061,494
1260,588
1198,571
986,285
947,316
1007,779
426,572
1151,606
725,301
144,753
323,550
663,54
258,768
324,609
793,92
870,732
189,491
586,198
236,254
1168,521
708,212
8,86
676,32
1292,592
102,208
1156,645
137,851
403,288
137,802
3,799
683,255
50,28
232,824
647,54
669,644
1082,796
602,212
1275,578
846,572
517,92
199,556
137,887
117,362
170,535
323,127
363,642
826,863
398,201
1200,389
813,49
440,43
800,893
1238,235
855,44
909,801
647,840
641,644
504,268
607,835
1275,316
126,462
383,652
1004,696
647,168
28,746
321,835
251,835
972,140
987,550
120,581
623,259
1160,122
1290,696
1026,201
857,712
488,28
488,789
922,822
175,605
484,135
78,425
512,221
241,894
422,152
932,794
584,474
1277,794
1009,522
117,138
227,784
534,389
1275,163
1150,77
741,448
1091,466
1178,289
253,801
681,234
1238,841
174,719
1300,425
661,275
232,294
884,348
1275,44
331,442
619,163
542,284
189,403
258,63
326,830
1176,298
1263,840
1260,28
28,148
930,10
654,288
256,411
363,578
109,56
1297,644
363,716
65,752
910,136
1082,348
464,572
440,267
967,725
182,1
199,395
1004,449
982,512
1011,31
962,248
1019,716
35,44
497,794
94,152
253,577
542,323
281,836
452,581
1215,439
319,278
1118,800
557,204
564,864
576,530
1116,221
239,390
1215,455
313,495
1288,355
564,248
1263,507
338,754
768,571
651,799
1307,799
125,182
662,45
644,364
226,130
1009,372
197,112
154,645
88,703
401,838
505,663
1019,411
684,148
806,122
785,393
438,837
914,768
1218,40
465,611
78,537
363,130
750,178
1258,212
1304,583
264,473
1176,596
888,70
1019,178
1153,786
577,366
917,466
1004,445
1153,794
254,192
170,359
888,152
950,889
1241,369
870,715
318,85
855,395
768,324
720,572
858,761
248,581
733,366
930,371
5,338
341,119
796,91
264,802
315,45
954,260
234,761
348,646
997,26
688,889
418,198
691,619
713,310
1078,600
504,570
95,455
125,712
1068,530
1113,336
149,159
94,600
1014,386
880,365
947,700
78,672
405,110
137,731
577,304
733,528
962,646
1057,765
397,378
959,640
813,548
554,354
858,514
1215,827
669,103
1009,884
258,831
52,212
465,663
233,516
72,659
992,361
1175,689
1232,537
159,288
50,588
338,140
725,605
495,606
788,157
5,556
301,884
259,823
363,194
858,313
306,445
291,642
1063,341
858,133
430,414
952,60
445,586
585,605
1019,611
909,56
662,583
120,133
651,95
74,885
35,731
905,46
1016,5
248,189
850,732
915,350
649,570
544,10
157,868
1185,182
1057,577
388,822
224,32
393,466
658,285
321,387
50,476
706,570
460,225
1242,198
636,302
1081,128
421,378
905,784
535,694
582,640
602,596
189,439
372,121
266,865
499,549
47,840
1140,863
94,534
797,399
1307,80
167,575
542,324
413,894
1007,403
969,851
982,522
331,452
698,581
323,568
413,521
318,361
170,493
396,696
750,86
602,165
651,782
338,469
1304,759
666,364
170,759
1153,845
170,863
1238,53
884,572
940,201
661,324
641,103
1295,128
855,338
1220,248
199,268
303,563
1121,491
1069,894
504,122
741,409
435,359
889,378
552,865
542,603
865,586
402,639
460,673
1253,758
1268,771
947,163
1044,29
1078,626
820,176
330,285
663,278
709,835
975,726
72,841
109,838
1153,868
1303,392
995,493
980,609
1295,169
912,5
626,746
398,693
1153,627
847,689
959,219
1007,627
383,18
7,616
157,794
1237,93
1279,187
982,382
1007,675
135,689
1101,756
262,572
662,849
455,395
547,485
363,252
547,466
641,791
294,5
908,191
432,523
107,485
95,7
464,322
1146,36
875,466
1131,333
440,162
642,716
306,198
284,469
969,291
724,544
232,268
1128,1
483,670
422,600
68,198
1282,199
120,761
112,571
258,696
805,159
741,37
1307,528
698,805
1074,472
1111,395
1227,117
663,168
31,187
406,581
995,849
639,745
1084,764
12,850
1253,584
1297,287
328,74
42,805
979,792
878,523
734,805
947,252
703,333
1297,159
723,96
560,178
1279,707
13,71
124,380
1166,753
813,267
403,507
651,344
1307,560
95,887
370,649
530,828
1077,378
838,109
162,596
197,838
334,364
818,270
510,305
729,541
845,611
671,337
783,71
323,351
1193,362
1258,682
351,752
490,718
261,466
875,709
89,166
457,56
69,525
372,773
363,499
430,870
589,590
889,513
914,70
1092,695
576,364
1028,121
1198,851
522,605
1143,575
1111,402
426,546
1295,149
fold along x=655
fold along y=447
fold along x=327
fold along y=223
fold along x=163
fold along y=111
fold along x=81
fold along y=55
fold along x=40
fold along y=27
fold along y=13
fold along y=6

102
2021/full/day14.txt Normal file
View File

@ -0,0 +1,102 @@
SNPVPFCPPKSBNSPSPSOF
CF -> N
NK -> B
SF -> B
HV -> P
FN -> S
VV -> F
FO -> F
VN -> V
PV -> P
FF -> P
ON -> S
PB -> S
PK -> P
OO -> P
SP -> F
VF -> H
OV -> C
BN -> P
OH -> H
NC -> F
BH -> N
CS -> C
BC -> N
OF -> N
SN -> B
FP -> F
FV -> K
HP -> H
VB -> P
FH -> F
HF -> P
BB -> O
HH -> S
PC -> O
PP -> B
VS -> B
HC -> H
NS -> N
KF -> S
BO -> V
NP -> S
NF -> K
BS -> O
KK -> O
VC -> V
KP -> K
CK -> P
HN -> F
KN -> H
KH -> N
SB -> S
NO -> K
HK -> H
BF -> V
SV -> B
CV -> P
CO -> P
FC -> O
CP -> H
CC -> N
CN -> P
SK -> V
SS -> V
VH -> B
OS -> N
FB -> H
NB -> N
SC -> K
NV -> H
HO -> S
SO -> P
PH -> C
VO -> O
OB -> O
FK -> S
PN -> P
VK -> O
NH -> N
OC -> B
BP -> O
PF -> F
KB -> K
KV -> B
PO -> N
NN -> K
CH -> O
KC -> P
OP -> V
VP -> F
OK -> P
FS -> K
CB -> S
HB -> N
KS -> O
BK -> C
BV -> O
SH -> H
PS -> N
HS -> K
KO -> N

100
2021/full/day15.txt Normal file
View File

@ -0,0 +1,100 @@
8278572114793756191833561127452853426929615899116958969481427593944191389121411192127899512211639555
2495171585122426519281919685613271991924121543192937558138395964783255375528718245475125436917188379
7961821999883965642974131223415952226122149135757469151378271261942142914126999286296912626324385126
6441179418166119485338911954311735412134219517651998824469721124695113922376591228278111534398748579
8424516666869191815919915114592841194492325941357613456911196292486835511835219129622871119578589971
4934282611638317524366865197791637785138383929285174289723984228151951111983211626913556611911829937
1151621499331229211126371681389432146113111191182949449598792179919361176214191999459113112713976728
3543168652917496122811711414994886233243178481181718739884152128165181497816913243592225189281913243
8119874956918529299886117198419866996469979678721168111546811425162192142928429419213182343144695232
3715358458184981829314869115929193353913729251938123314814899961596542283596814884718213256699682795
1457749119784391733139584826119658874912622938352136991922153247283117211453981321869218151772119241
7179176958892653731299198523131231844957919593248775178121191579258731497841241367137171199591213113
4471161421339111933369587973937292894188371915184619223639743975336137681191429298916799146143115252
1931215141473344532681163495387852753769911119111496117891655513181516411521451328225794431126335749
9151689756849234387443425922933377332991858479147517224818914914425732127251965496121942295591183172
2566113547914162641599298843229739383828642848144944852282893912779288715932788642899891297329297335
9922876696896994217561793182369411198699179871259954463871913115184734221799911711326923219223276139
2411339863315612919718312194943949341228281651784525919132828782375965326712781781442989945125592185
1418841118819719419136342692253322911243214985154999627192389816921612619549481134921215629682111939
2991112471164498237119512836126148891288395561377883392312743919942937825816841441118322241659389277
2369155536658248242446196714214179784918844181199991939119268159197418739116392138931189992188846971
3139737615566929828592321519611921732953991396521141165811881293391199737587536111331331196419156798
2473192981948227987111687486532119994897341114574629339124219164536824734799478832613111816588191148
4311152779495176926527172116979937356891171332243361912427574933999759591533258454228319797436295139
4296794597642297911762612592247759519869443198118291875988399937961162212147523611425284112262745711
2919426121311135263324939726832931137973611199921321523791621141513222863567654962618137111392894422
4634915181699181572153395211661987562131211481129117478131424114241178921227517288679722328986823922
6297719121113669981592326191394834414485988819761166812197429119921315747318111218181992586126993919
3318614241139113159116719411236593772715946293531825213649325427717633162144974482959899826716597521
2383419157242919637211129811118515633215692397315115195991989124876193315459918971973489494911283217
9521529194981517981232979669792487442129597979226311938488195924436928541121214639119337935199991117
2192189971299175771117868563478533237938994962133199366951122734186711527399931794763686991514814662
7881913138114955461135924149222738381179396843291244767312291267247642317671911986256995961422161959
3843362141443222644212379314232847247972118224544224919819451911833619826719779527571929718196858145
8385162537318633361137193897832962297676464912264123117394391829196261318841959998837814919924922953
8221212119334729141984389191114483517898927112545166192711293823912553322553197819157776647516939141
3255619572231874771181619628278542957284278985715127319521445711213483781683791875823115112171161593
5128122983945275882694953934111585511282939925866973662677121821923965945796285431719542616138158188
1114714187852179791925944829277928365391625896371297229279856697273911118484711381511757931867215649
2136995112393969411115117811392578597296824186351393148827913317214177929268227343313353893923511632
4425479887766493391898627186142951193972698451215519114983911227179622146954172418992341826112167866
5111387196811253395631314459132217416234828743931596134128141969141158686811353152121616931964797891
1281981853884141491129192211466222912384397781318376518318151569516738296599922374687193924811575151
4214168945722211551589814173167426111979895615335479353741989719899321828311892898131998119379778971
1698126514489399112929175994131914431611342772121934925432344544423913839915832992371361426254688971
2611741223511697957256712677157994471229119912479116238329218159118319417112711251115741432298991675
1986199322419269948123997119141417276181122386587573999448625998979137444139118661231916299216237816
1192692299325547983953157273594191687111773574111831139919179117182211537317191492612996482125719135
2618137369191556773571949529451551811187939855121392262981116194316131959155491562182411351259963197
8291227832771244631183289512115145431921179351599239991889721749519277227819196284578312711114771933
8981962179738463579242192181563523744938932338629418123118165383629833214199619655973411258287294111
8619915743617939513929219214969281929991561391431128913883571199794329274227297771481964191959319854
9661921896148816274329413191213247721642973365721833219284864558144513363393813619978321483549692113
1221822379347999136211136218671719191161287539743533389111571921729981996951171917511894919222458338
9179814439128882333169175926635746971123349598164185736129161426323644543783696391977888446282158193
8919941115162197814112689589249939913122148387958484396667721419199788161191494147954329319451368227
1283383939189511883998654629172448151128762184636314937172618589313123848776939135383681811654471522
4715619189119739192634991921998844714396939583519299492337911136398474149811151145461933134874142828
1117481573895941939424518349392997473449671461935946881181312652591682539197685834621162263218683198
9394562899911652727388398568123241827141738357143277722124594366392682466191119988911992663238764771
2585966996818144122959341112693718175511912678919195958899282312779823311945811917412189169191914619
1848495443417266121112634424271555676396443373324838214497832614396187418192188918146284171173421749
6219895897831829379714113972317818929697612535358251896324917772691898279896669612539591147152489338
6115612912112113324242167994435148645911867787136267211781213917111546157212149287331129992317887151
6118169128927892484311512131621967642919324341529263891337911411129492162612776899121931248882139644
6884838296782692281158822326814131725184916187194546991912899824434812718735631819653791998193841264
3485227759142991956221813281664289335731621123188291134995562639531863888211751951122552236997334852
4845141111241192161537876516198782167269132581522211179712915387257181133491267199451122265499922659
2477848488634968257491171291519224412581996417371411931394372219338545611181523931293424196381115936
8911319712238921239948883419991938254319821221163746121194349641739831829966821897752722981537562291
8292478573168677999812391286993666192914511399319138945554999392894819423181966166488181891969131749
3264173311179517375193219491832914392218389931492941426132248467586919997529138838826141892437977563
8319936993882457327125991956278814829118421321922375769776436683211313756211534968729618521882226127
8638599994131461557113578449423472638334111745934214239234929925229712127897989732923483271191411596
1523419968194149815212174333853151919128599116116518413315158689181119643842371922352598214112729111
1224189161195993439421611631912867163999222335519879636723284419496865292871251261634369981276431216
7917832715864343179944317954494748181747449119129421199134193985168143693142131121189224214116129789
1995274614784214559849841188151381892312137231555881234712143592531781694159197143298119349576313288
6872676869621987263257677493158696216232141889137144892149212252643429691459127525396618722228211355
9529131312198127195146611139957169375945817199886385734424125668955254391749172287495221433939346271
1317597221324639268821956316831718923818731193924341148895319223528139911981118618392281299815415484
6311491136929625422264122934959537441311729119921619133219127391911591173775188988221145475286479247
2214669476122959718451929746211392861541917917111355149672919182998486751591424875262899741911991966
5487717296119894141568198141794929233554118134815419581752348188169498421912911863811199812577419228
3287347189899116764139996172211718221461156348196278882293319458126326275182618429176619478622567138
1217339827453222194178294713351137215119153323897976211844191311588753942221192915127591664618634566
8391229721621914838897761141891492975212126113876523932971411182631292177219192741129962223763588181
9281395981783715414967594956432849942278193925471491289523616222495169785232911414516328962999974978
7536568137284691778271641238229711141621826181987912357983119929869911582296219171189725615212124465
9595583261896818139583613922162716243317157921593921818213913993135811139511646138183273731177299744
1478335243376975293521995994234166518112945289282915476547398231571885929451238161265918286396527143
3589659231838871758533921821826411128778214875195493613897887818994186862452911921219752434728159178
1519822318615118939492581148919717226195114292383874899669291852333991742198362725995259791943333211
9795914596639922726274191923229243293291863125939211616969521549341942544782482711218467872852318217
5613289519141121739839293878959282231316192133211496939347144791959915179746671957919621313595284142
9181131731288744182367198138971923921179618862219412318217797142481389325923525313271629938185882472
5551511368118741121367417369949814314261396112791258129753271621312272649275289184568199481948313935
2241379916113999611116384261153791251196441711978721719853121261161249511335295434239192122475341439
2953391923245469371889427113838314197862363197769418641714149439123119271299765999981554921212242232
2429196117668731239983129261421913394811262338222177425225587612716828952193511255156792968133924511

1
2021/full/day16.txt Normal file
View File

@ -0,0 +1 @@
E0529D18025800ABCA6996534CB22E4C00FB48E233BAEC947A8AA010CE1249DB51A02CC7DB67EF33D4002AE6ACDC40101CF0449AE4D9E4C071802D400F84BD21CAF3C8F2C35295EF3E0A600848F77893360066C200F476841040401C88908A19B001FD35CCF0B40012992AC81E3B980553659366736653A931018027C87332011E2771FFC3CEEC0630A80126007B0152E2005280186004101060C03C0200DA66006B8018200538012C01F3300660401433801A6007380132DD993100A4DC01AB0803B1FE2343500042E24C338B33F5852C3E002749803B0422EC782004221A41A8CE600EC2F8F11FD0037196CF19A67AA926892D2C643675A0C013C00CC0401F82F1BA168803510E3942E969C389C40193CFD27C32E005F271CE4B95906C151003A7BD229300362D1802727056C00556769101921F200AC74015960E97EC3F2D03C2430046C0119A3E9A3F95FD3AFE40132CEC52F4017995D9993A90060729EFCA52D3168021223F2236600ECC874E10CC1F9802F3A71C00964EC46E6580402291FE59E0FCF2B4EC31C9C7A6860094B2C4D2E880592F1AD7782992D204A82C954EA5A52E8030064D02A6C1E4EA852FE83D49CB4AE4020CD80272D3B4AA552D3B4AA5B356F77BF1630056C0119FF16C5192901CEDFB77A200E9E65EAC01693C0BCA76FEBE73487CC64DEC804659274A00CDC401F8B51CE3F8803B05217C2E40041A72E2516A663F119AC72250A00F44A98893C453005E57415A00BCD5F1DD66F3448D2600AC66F005246500C9194039C01986B317CDB10890C94BF68E6DF950C0802B09496E8A3600BCB15CA44425279539B089EB7774DDA33642012DA6B1E15B005C0010C8C917A2B880391160944D30074401D845172180803D1AA3045F00042630C5B866200CC2A9A5091C43BBD964D7F5D8914B46F040

1
2021/full/day17.txt Normal file
View File

@ -0,0 +1 @@
target area: x=150..171, y=-129..-70

100
2021/full/day18.txt Normal file
View File

@ -0,0 +1,100 @@
[5,[7,[8,4]]]
[[[4,1],[6,[9,3]]],[[7,4],[5,[7,0]]]]
[[6,2],[[[8,6],[5,5]],0]]
[[[5,9],[3,[4,2]]],[[[1,2],0],2]]
[[[[4,3],2],0],[[[1,7],[1,2]],[[8,2],[6,7]]]]
[[[[0,1],9],3],[[4,7],[7,8]]]
[[[[8,7],4],[5,[9,2]]],[[8,[9,6]],[1,8]]]
[[[2,3],[[9,9],[7,0]]],[6,7]]
[8,[[9,9],[8,6]]]
[[[[5,7],[7,1]],[3,[7,6]]],[2,[[5,5],[8,3]]]]
[[[7,0],2],[[[2,2],7],[6,[2,9]]]]
[[6,2],[[0,8],8]]
[[[[2,9],4],9],[1,[[6,9],[7,5]]]]
[[[9,3],[[5,7],[3,1]]],[5,[6,[7,8]]]]
[0,[[8,9],1]]
[[4,[[4,3],4]],[7,[[4,0],0]]]
[[0,[[1,9],[6,1]]],[[[7,0],[5,2]],[[3,8],[0,4]]]]
[[[2,7],[7,[1,6]]],[6,[[8,7],[8,5]]]]
[[9,5],[[1,[2,5]],[8,[2,0]]]]
[6,[[8,[9,4]],[9,8]]]
[[[[2,0],[4,6]],3],[[8,0],4]]
[[[8,8],[[5,7],[5,6]]],5]
[[5,[[7,9],9]],[1,6]]
[[[[5,2],[4,9]],[[1,9],[2,9]]],[[[6,8],[7,5]],[[0,2],4]]]
[1,[5,[[5,5],[1,2]]]]
[[[1,4],[[0,3],7]],[[[9,1],9],[[2,3],7]]]
[[[[6,4],[4,0]],[[3,4],[7,0]]],[[8,7],[5,[0,6]]]]
[[3,[8,[2,8]]],[9,[0,[5,2]]]]
[[7,[[1,8],1]],[6,[6,6]]]
[[[3,[9,4]],[[3,2],[5,2]]],8]
[3,[[4,[4,3]],[5,[9,2]]]]
[[[1,8],[2,[7,5]]],[[0,[8,1]],[2,0]]]
[1,3]
[7,[[[9,6],[8,4]],9]]
[6,4]
[[[8,9],[[3,7],2]],[4,[[5,0],8]]]
[[[[1,8],[7,9]],0],[[[4,4],3],[4,[1,7]]]]
[[[[2,2],[0,9]],[1,2]],[[[9,1],[0,0]],[[1,6],4]]]
[[[[8,1],6],[[3,3],[6,7]]],[[2,3],5]]
[[[[9,0],7],6],[[[3,6],[6,7]],3]]
[[[[1,0],6],[5,[0,0]]],[[[9,7],7],5]]
[[[[5,1],4],[[7,7],[6,2]]],[[0,[6,0]],2]]
[[[[8,3],[0,4]],[[9,9],[3,7]]],[[[2,7],[2,9]],[[2,0],[4,7]]]]
[6,[[[4,8],0],8]]
[[[6,[5,9]],[[0,3],9]],[[[2,5],[9,5]],0]]
[[1,4],[6,[0,[6,2]]]]
[9,[[[3,7],1],7]]
[[[2,3],[[1,2],1]],[[[2,6],[0,1]],[0,[4,1]]]]
[[[0,1],[[0,3],[7,3]]],[[8,7],3]]
[[0,[[1,5],[5,3]]],4]
[[[5,3],[[5,8],6]],[[[6,0],3],[4,1]]]
[8,3]
[[[[5,5],[3,0]],6],[[7,5],[2,[9,4]]]]
[[[3,[3,3]],[[4,7],4]],[[2,0],1]]
[[[0,[2,8]],[4,[7,9]]],[[[5,4],2],2]]
[[3,[7,[1,8]]],[5,[[8,2],0]]]
[[1,9],[[6,[5,9]],8]]
[[5,[5,2]],5]
[[[1,1],[4,3]],1]
[[[[6,9],[4,1]],0],[[[3,0],6],7]]
[[9,[[7,3],6]],[[[7,2],0],[9,9]]]
[[5,4],[[[6,0],[5,1]],7]]
[[[4,0],0],[[[2,6],[4,4]],[[6,8],2]]]
[[[9,6],8],[[0,[9,5]],9]]
[[6,[2,5]],[[[1,8],[9,0]],[[4,0],[5,7]]]]
[5,[[8,[9,9]],[5,[6,8]]]]
[[[7,[9,0]],5],6]
[[9,[[3,7],[3,0]]],[[[7,2],[5,7]],[[0,5],[7,4]]]]
[[7,3],[[6,5],[9,4]]]
[[4,[4,3]],[9,[[2,6],0]]]
[[[6,[0,1]],9],[[7,[3,2]],[[0,1],[5,2]]]]
[[5,[0,[3,1]]],[[[1,1],[8,9]],[[6,3],[0,9]]]]
[[[[2,8],0],[[8,7],4]],[[[9,6],3],[[7,8],[2,3]]]]
[[[[1,0],1],4],[4,9]]
[[[7,8],5],[[[3,7],[5,7]],6]]
[[[8,[7,4]],[[1,6],[6,7]]],[2,4]]
[[7,8],3]
[[0,[4,[3,8]]],[[[1,0],1],6]]
[[[[6,3],7],2],[[4,5],6]]
[[[5,9],[[1,8],1]],[[[1,8],8],[[6,4],0]]]
[[3,[8,[2,8]]],[[[2,8],[4,4]],9]]
[7,[5,[[3,3],3]]]
[3,[1,[0,[3,0]]]]
[[[1,2],4],[9,[[7,1],[5,4]]]]
[[[5,8],[7,[0,7]]],[0,[[2,9],8]]]
[[[7,[2,0]],[1,[4,3]]],[0,[[1,1],[2,0]]]]
[[[2,[2,5]],[4,1]],[0,[6,0]]]
[[[8,3],9],[[[4,3],[5,8]],[[7,0],9]]]
[2,[1,4]]
[[[3,[2,6]],6],[[[3,2],[0,8]],[[3,5],[6,4]]]]
[[[1,[3,3]],[[0,8],[1,3]]],[8,[[3,8],[0,8]]]]
[[[[1,5],[0,1]],3],[[6,[1,7]],[4,7]]]
[[4,[5,7]],[6,[[6,2],7]]]
[[[[7,4],[3,1]],[5,6]],[0,[6,5]]]
[[[7,[0,0]],6],[5,[[0,0],[3,5]]]]
[[[[8,7],[5,8]],[8,[9,3]]],[[7,0],[[7,2],0]]]
[[[7,[4,2]],0],[[[4,0],1],3]]
[[[6,3],[9,[2,2]]],[[0,8],[1,2]]]
[3,[[3,1],[[7,1],1]]]
[[3,[[4,0],7]],[[[4,6],[2,3]],[[0,2],[1,8]]]]

BIN
2021/python/09/day09.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

27
2021/python/day01.py Normal file
View File

@ -0,0 +1,27 @@
import shared
def pt1(inp):
count = 0
for x in range(1, len(inp)):
if inp[x] > inp[x - 1]:
count += 1
return count
def pt2(inp):
count = 0
prev = 0
for x in range(2, len(inp)):
window = sum(inp[x - 3 : x])
if window > prev:
count += 1
prev = window
return count
if __name__ == "__main__":
with open(shared.get_fname(1), "r") as f:
inp = [int(x) for x in f.readlines()]
print(pt1(inp))
print(pt2(inp))

41
2021/python/day02.py Normal file
View File

@ -0,0 +1,41 @@
import shared
class Position:
def __init__(self):
self.horiz = 0
self.depth = 0
self.aim = 0
def parse_line(self, line: str):
direction, x = line.split(" ")
x = int(x)
if direction == "up":
self.aim -= x
elif direction == "down":
self.aim += x
elif direction == "forward":
self.horiz += x
self.depth += self.aim * x
def whereami(self):
return self.horiz * self.depth
def run(inp):
p = Position()
for i in inp:
p.parse_line(i)
return p.whereami()
def main():
with open(shared.get_fname(2), "r") as f:
inp = f.readlines()
print(run(inp))
if __name__ == "__main__":
main()

39
2021/python/day03.py Normal file
View File

@ -0,0 +1,39 @@
import shared
from pprint import pprint as pp
from collections import Counter
def run(orig):
ox = grab(orig, 1, 0)
co = grab(orig, 0, 1)
return ox * co
def grab(orig, high, low):
idx = 0
while len(orig) != 1:
matrix = _rot(orig)
c = Counter(matrix[idx])
if c[1] >= c[0]:
orig = [o for o in orig if o[idx] == high]
else:
orig = [o for o in orig if o[idx] == low]
idx += 1
return int("".join(str(x) for x in orig[0]), 2)
def _rot(m):
x = list(zip(*m[::-1]))
return [list(reversed(y)) for y in x]
def main():
spl = lambda y: [int(w) for w in y]
with open(shared.get_fname(3), "r") as f:
rows = [x.rstrip() for x in f.readlines()]
matrix = [spl(x) for x in rows]
print(run(matrix))
if __name__ == "__main__":
main()

94
2021/python/day04.py Normal file
View File

@ -0,0 +1,94 @@
import shared
from itertools import groupby
from pprint import pprint as pp
from matrix import rotate, load_matrix_file, split_line_to_int_list, get_column
from copy import deepcopy
def all_equal(iterable):
g = groupby(iterable)
return next(g, True) and not next(g, False)
class Bingo:
def __init__(self, name):
self.parse(name)
def parse(self, name):
with open(name, "r") as f:
lines = [x.rstrip() for x in f.readlines()]
self.rolls = [int(x) for x in lines.pop(0).split(",")]
lines.pop(0)
self.boards = []
current_board = []
while len(lines) > 0:
line = lines.pop(0)
if line == "":
self.boards.append(current_board)
current_board = []
continue
current_board.append(split_line_to_int_list(line))
if len(lines) == 0:
self.boards.append(current_board)
self.board_snapshot = deepcopy(self.boards)
def mark_roll(self, roll):
for idB, b in enumerate(self.boards):
breaking = False
for x, row in enumerate(b):
for y, col in enumerate(row):
if col == roll:
self.boards[idB][x][y] = -1
breaking = True
break
if breaking:
break
for idB, b in enumerate(self.boards):
winning_board = self.check_remove(idB)
if winning_board:
return winning_board
def check_remove(self, board_idx):
for row in self.boards[board_idx]:
if all_equal(row):
b = self.boards.pop(board_idx)
if len(self.boards) == 0:
return b
return
for col in zip(*self.boards[board_idx]):
if all_equal(col):
b = self.boards.pop(board_idx)
if len(self.boards) == 0:
return b
return
def roll(self):
roll = self.rolls.pop(0)
self.last_roll = roll
return self.mark_roll(roll)
def roll_all(self):
while len(self.rolls):
bingoCheck = self.roll()
if bingoCheck:
self.winner = bingoCheck
return
def total(self):
total = 0
for row in self.winner:
for col in row:
if col != -1:
total += col
return total * self.last_roll
def main():
b = Bingo(shared.get_fname(4))
b.roll_all()
print(b.total())
if __name__ == "__main__":
main()

79
2021/python/day05.py Normal file
View File

@ -0,0 +1,79 @@
import shared
from pprint import pprint as pp
from matrix import matrix_of_size
class Vents:
def __init__(self, name):
self.width = 0
self.height = 0
self.parse(name)
self.matrix = matrix_of_size(self.width + 1, self.height + 1)
def parse(self, name):
def _split_line(line):
one, two = line.split(" -> ")
coords = list(map(int, one.split(","))), list(map(int, two.split(",")))
(x1, y1), (x2, y2) = coords
# set grid size
if max(x1, x2) > self.width:
self.width = max(x1, x2)
if max(y1, y2) > self.height:
self.height = max(y1, y2)
return coords
with open(name, "r") as f:
self.coords = [_split_line(x.rstrip()) for x in f.readlines() if x.rstrip()]
def draw_lines(self):
for coords in self.coords:
self.draw_line(*coords)
def draw_line(self, pos1, pos2):
x1, y1 = pos1
x2, y2 = pos2
if x1 == x2: # Straight
self.draw_horizontal_x(x1, (y1, y2))
elif y1 == y2: # Straight
self.draw_horizontal_y((x1, x2), y1)
else: # diagonal
self.draw_diagonal((x1, x2), (y1, y2))
def draw_horizontal_x(self, x, y_coords):
coords = sorted(y_coords)
for y in range(coords[0], coords[1] + 1):
self.matrix[y][x] += 1
def draw_horizontal_y(self, x_coords, y):
coords = sorted(x_coords)
for x in range(coords[0], coords[1] + 1):
self.matrix[y][x] += 1
def draw_diagonal(self, x_coords, y_coords):
coords = self.generate_diagonal(*x_coords, *y_coords)
for x, y in coords:
self.matrix[y][x] += 1
def generate_diagonal(self, x1, x2, y1, y2):
x_dir, y_dir = 1, 1
if x2 < x1:
x_dir = -1
if y2 < y1:
y_dir = -1
new_y = range(y1 + y_dir, y2, y_dir)
new_x = range(x1 + x_dir, x2, x_dir)
return [(x1, y1), *list(zip(new_x, new_y)), (x2, y2)]
def count(self):
return len([item for sublist in self.matrix for item in sublist if item > 1])
def main():
v = Vents(shared.get_fname(5))
v.draw_lines()
pp(v.count())
if __name__ == "__main__":
main()

44
2021/python/day06.py Normal file
View File

@ -0,0 +1,44 @@
import shared
from collections import Counter, defaultdict
from pprint import pp
class Lanternfish:
def __init__(self, name):
self.load(name)
self.new = 0
def load(self, name):
with open(name, "r") as f:
self.nums = list(map(int, f.read().split(",")))
self.fish = defaultdict(int)
self.fish.update(dict(Counter(self.nums)))
def tick(self):
self.new = self.fish[0]
# could do for loop from 0-6 then handle 6 specially
self.fish[0] = self.fish[1]
self.fish[1] = self.fish[2]
self.fish[2] = self.fish[3]
self.fish[3] = self.fish[4]
self.fish[4] = self.fish[5]
self.fish[5] = self.fish[6]
self.fish[6] = self.fish[7] + self.new
self.fish[7] = self.fish[8]
self.fish[8] = self.new
def total(self):
return sum([v for k, v in self.fish.items() if k > -1])
def main():
l = Lanternfish(shared.get_fname(6))
TIMES = 256
for x in range(TIMES):
l.tick()
pp(l.total())
if __name__ == "__main__":
main()

37
2021/python/day07.py Normal file
View File

@ -0,0 +1,37 @@
import shared
from pprint import pp
from scipy import stats
import numpy as np
class Whale:
def __init__(self, name):
self.load(name)
self.set_target()
def load(self, name):
with open(name, "r") as f:
self.positions = list(map(int, f.read().split(",")))
def set_target(self):
data = np.array(self.positions)
self.target = round(np.mean(data))
def calculate(self, target=None):
return int(sum([self.sigma(abs(target - pos)) for pos in self.positions]))
def sigma(self, value):
return value * (value + 1) / 2
def main():
w = Whale(shared.get_fname(7))
if w.target in w.positions:
target = w.target
else:
target = w.target - 1
pp(w.calculate(target))
if __name__ == "__main__":
main()

96
2021/python/day08.py Normal file
View File

@ -0,0 +1,96 @@
import shared
from pprint import pp
from collections import defaultdict, Counter
ACTUAL = [
"abcefg", # 0
"cf", # 1 --- l2
"acdeg", # 2
"acdfg", # 3
"bcdf", # 4 ---l4
"abdfg", # 5
"abdefg", # 6
"acf", # 7 ---l3
"abcdefg", # 8 ---l7
"abcdfg", # 9
]
LENGTHS = list(map(len, ACTUAL))
SEGMENT_FREQ = {
"a": 8,
"b": 6,
"c": 8,
"d": 7,
"e": 4,
"f": 9,
"g": 7,
}
class Segments:
def __init__(self, name):
self.load(name)
def load(self, name):
self.lines = []
with open(name, "r") as f:
for line in f.readlines():
l = line.rstrip()
signals, output = l.split(" | ")
row = [signals.split(), output.split()]
self.lines.append(row)
def map(self, signals, output):
counts = Counter("".join(signals))
segments = {"a", "b", "c", "d", "e", "f", "g"}
segment_mapping = {}
for iw, c in SEGMENT_FREQ.items():
if c in (7, 8):
continue
for rw, rc in counts.items():
if rc == c:
segment_mapping[iw] = rw
lengths = {len(signal): set(signal) for signal in signals}
k1 = lengths[LENGTHS[1]]
k4 = lengths[LENGTHS[4]]
k7 = lengths[LENGTHS[7]]
segment_mapping["a"] = (k7 ^ k1).pop()
for wire in k1:
if wire not in segment_mapping.values():
segment_mapping["c"] = wire
for wire in k4:
if wire not in segment_mapping.values():
segment_mapping["d"] = wire
segment_mapping["g"] = (segments ^ set(segment_mapping.values())).pop()
wiring = {}
for num, ideal in enumerate(ACTUAL):
key = ""
for wire in ideal:
key += segment_mapping[wire]
key = "".join(sorted(key))
wiring[key] = str(num)
return wiring
def main():
s = Segments(shared.get_fname(8))
total = 0
for sig, out in s.lines:
wiring = s.map(sig, out)
display = ""
for digit in out:
display += wiring["".join(sorted(digit))]
total += int(display)
print(total)
if __name__ == "__main__":
main()

132
2021/python/day09.py Normal file
View File

@ -0,0 +1,132 @@
import sys
from matrix import load_matrix_file, get_neighbors, get_size
import shared
from scipy import ndimage
import imageio
from skimage.measure import euler_number, label
from skimage.morphology import flood_fill, flood
import matplotlib.pyplot as plt
import numpy as np
from math import prod
import random
class Smoke:
def __init__(self, name):
self.footprint = np.array([[0, 1, 0], [1, 1, 1], [0, 1, 0]])
self.parse(name)
def parse(self, name):
_split = lambda line: list(map(int, [l for l in line]))
self.mx = np.array(load_matrix_file(name, func=_split))
self.mx = np.pad(self.mx, pad_width=1, mode="constant", constant_values="9")
self.set_values()
self.set_coords()
def set_values(self):
self.lows = (
ndimage.generic_filter(self.mx, np.min, footprint=self.footprint) == self.mx
)
self.low_values = self.mx[self.lows][self.mx[self.lows] < 9]
self.highs = (
ndimage.generic_filter(self.mx, np.max, footprint=self.footprint) == self.mx
)
mask = self.mx != 9
self.mask = mask.astype(int)
def set_coords(self):
lc = []
for idr, row in enumerate(self.lows):
if idr == 0 or idr == len(self.lows) - 1:
continue
for idc, col in enumerate(row):
if idc == 0 or idc == len(row) - 1:
continue
if col:
lc.append((idr, idc))
self.low_coords = lc
def total_low_values(self):
return (self.low_values + 1).sum()
def find_chunks(self):
cell_sizes = []
self.cells = []
by_center = []
for x, y in self.low_coords:
current = np.zeros_like(self.mx)
m = flood_fill(self.mask, (x, y), -1, connectivity=1)
current_cell = (m == -1).astype(int)
self.cells.append(current_cell)
cells = np.argwhere(current_cell == 1)
by_center.append((len(cells), (x, y), cells))
cell_sizes.append(len(cells))
cells_sorted = list(set(sorted(cell_sizes)))
self.by_center = by_center
largest = cells_sorted[-3:]
assert len(largest) == 3
self.largest = largest
return prod(largest)
def animate(self, save=False):
largest = [x for x in self.by_center if x[0] in self.largest][-3:]
current = np.zeros_like(self.mx)
shuf = self.by_center[:]
random.shuffle(shuf)
last_file = 0
for idx, (length, xy, c) in enumerate(shuf):
last_file = idx
if length in largest:
continue
for x, y in c:
current[y][x] = 1
fig, ax = plt.subplots()
ax.imshow(current, cmap=plt.cm.gray)
ax.axis("off")
if save:
plt.savefig(f"09/{idx:03}.png")
plt.close()
lg = np.zeros_like(self.mx)
for _, _, c in largest:
for x, y in c:
lg[y][x] = 1
fig, ax = plt.subplots()
ax.imshow(lg)
ax.axis("off")
plt.savefig(f"09/largest.png")
plt.close()
with imageio.get_writer("09/day09.gif", mode="I") as writer:
names = [f"09/{x:03}.png" for x in range(334)]
for filename in names:
try:
image = imageio.imread(filename)
writer.append_data(image)
except FileNotFoundError:
pass
for x in range(15):
image = imageio.imread("09/largest.png")
for x in range(5):
writer.append_data(image)
image = imageio.imread(f"09/{last_file:03}.png")
for x in range(5):
writer.append_data(image)
def main():
s = Smoke(shared.get_fname(9))
print(s.total_low_values())
print(s.find_chunks())
if sys.argv[-1] != "--sample":
s.animate(1)
if __name__ == "__main__":
main()

67
2021/python/day10.py Normal file
View File

@ -0,0 +1,67 @@
import shared
from pprint import pprint as pp
import sys
OPEN = "([{<"
CLOSE = ")]}>"
PAIRS = dict(zip(OPEN, CLOSE))
PAIRS.update(zip(CLOSE, OPEN))
BAD_POINTS = dict(zip(CLOSE, [3, 57, 1197, 25137]))
GOOD_POINTS = dict(zip(CLOSE, [1, 2, 3, 4]))
def load_file(name):
with open(name, "r") as f:
my_file = []
for line in f:
my_file.append(line.rstrip())
return [x for x in my_file]
class Syntax:
def __init__(self, name):
self.parse(name)
def parse(self, name):
self.mx = load_file(name)
self.good_lines = []
def find_all(self):
bad_points = 0
all_points = []
for idx, line in enumerate(self.mx):
c, bad = self.find_chunks(line)
if bad:
bad_points += BAD_POINTS[c]
else:
match_points = 0
for x in c:
match_points *= 5
match_points += GOOD_POINTS[x]
all_points.append(match_points)
mp = list(sorted(all_points))
print(bad_points) # pt1
print(mp[len(mp) // 2]) # pt2
def find_chunks(self, line):
unpaired = []
for idx, char in enumerate(line):
if char in OPEN:
unpaired.append(char)
if char in CLOSE:
if unpaired[-1] != PAIRS[char]:
return char, True
unpaired.pop(-1)
# Line is good here
unpaired = list(reversed(unpaired))
return [PAIRS[u] for u in unpaired], False
def main():
s = Syntax(shared.get_fname(10))
s.find_all()
if __name__ == "__main__":
main()

90
2021/python/day11.py Normal file
View File

@ -0,0 +1,90 @@
import matrix
import shared
import sys
import numpy as np
from scipy import ndimage
from pprint import pprint as pp
class Syntax:
def __init__(self, name):
mx = shared.load_file_int_matrix(name)
self.mx = np.array(mx)
self.flash_count = 0
self.step_count = 0
def check_syncronized(self):
cpy = np.copy(self.mx)
flat = np.ravel(cpy)
if np.all(flat == 10):
return True
def step(self):
self.step_count += 1
self.increment_all()
# Get a 2darray of bools of whether it's flashing
self.flashed = (self.mx > 9).astype(int)
flash_coords = np.argwhere(self.flashed == 1) # get a list of any flashed
if len(flash_coords) == 0:
return
self.flash_count += len(flash_coords)
if flash_coords.any():
for coord in flash_coords:
self.flash({"c": coord[1], "r": coord[0]})
if self.check_syncronized():
return True
self.reset_flashes()
#matrix.pmx(self.mx, self.flashed) # Print a pretty matrix
def flash(self, coord: dict) -> np.ndarray:
neighbor_coords = matrix.get_neighbor_coords(
self.mx, c=coord["c"], r=coord["r"]
)
for c, val in neighbor_coords:
self.add_clamp(**c)
if self.flashed[c["r"]][c["c"]]:
continue
if self.mx[c["r"]][c["c"]] > 9:
self.flash_count += 1
self.flashed[c["r"]][c["c"]] = 1
self.flash(c)
def reset_flashes(self):
for r, row in enumerate(self.mx):
for c, col in enumerate(row):
if self.mx[r][c] == 10:
self.mx[r][c] = 0
def add_clamp(self, c, r):
""" Clamp to 10, but add 1 """
if self.mx[r][c] < 10:
self.mx[r][c] += 1
def increment_all(self):
for r, row in enumerate(self.mx):
for c, _ in enumerate(row):
self.add_clamp(c, r)
def main():
s = Syntax(shared.get_fname(11))
print(f"before any steps")
matrix.pmx(s.mx)
print("----")
for x in range(9999):
if s.step():
print(x)
break
matrix.pmx(s.mx)
print(s.flash_count)
print(s.step_count)
if __name__ == "__main__":
main()

51
2021/python/day12.py Normal file
View File

@ -0,0 +1,51 @@
import matrix
import shared
from collections import defaultdict
START = 'start'
END = 'end'
class Passage:
def __init__(self, name):
self.load(name)
self.parse_connections()
def load(self, name):
lines= []
with open(name, 'r') as f:
for line in f.readlines():
lines.append(line.rstrip())
self.instructions = lines
def parse_connections(self):
connections = defaultdict(list)
for edge in self.instructions:
node1, node2 = edge.split('-')
# Add bidirectional
connections[node1].append(node2)
connections[node2].append(node1)
self.connections = connections
def traverse(self, multiple_entry, enter=START, seen={START}):
if enter == END: # we're done!
yield 1
return
for node in self.connections[enter]:
if node.islower():
if node not in seen:
yield from self.traverse(multiple_entry, node, seen | {node})
elif multiple_entry and node not in {START, END}:
yield from self.traverse(False, node, seen | {node})
else:
yield from self.traverse(multiple_entry, node, seen)
def main():
p = Passage(shared.get_fname(12))
print(sum(p.traverse(multiple_entry=False)))
print(sum(p.traverse(multiple_entry=True)))
if __name__ == "__main__":
main()

89
2021/python/day13.py Normal file
View File

@ -0,0 +1,89 @@
import scanf
import itertools
import matrix
from matrix import ppmx as pmx
import numpy as np
import pandas as pd
import shared
from pprint import pprint as pp
class Oragami:
def __init__(self, name):
lines = []
with open(name, "r") as f:
for line in f.readlines():
lines.append(line.rstrip())
splitter = lines.index("")
coords, folds = lines[:splitter], lines[splitter + 1 :]
self.coords = [list(map(int, c.split(","))) for c in coords]
print(self.coords[:6])
self.parse_folds(folds)
self.max()
self.new_matrix()
def parse_folds(self, folds):
self.folds = []
for fold in folds:
axis, index = scanf.scanf("fold along %s=%d", fold)
self.folds.append({'axis':axis, 'index':index})
def max(self):
by_x = max([x['index'] for x in self.folds if x['axis'] == 'x'])
by_y = max([x['index'] for x in self.folds if x['axis'] == 'y'])
self.max_width = by_x*2+1
self.max_height = by_y*2+1
def new_matrix(self):
self.matrix = matrix.matrix_of_size(width=self.max_width, height=self.max_height)
for c, r in self.coords:
self.matrix[r][c] = 1
def process_folds(self):
for idx, fold in enumerate(self.folds):
print('---')
if fold['axis'] == 'y':
self.fold_y(fold['index'])
else:
self.fold_x(fold['index'])
self.count()
pmx(self.matrix,pad=False,space=False)
def fold_y(self, cut):
#folding on y removes the y row
bottom = self.matrix[cut+1:]
bottom = list(reversed(bottom))
self.matrix = self.matrix[:cut]
self.copy_from(bottom)
def fold_x(self, cut):
#folding on X removes the x column
left, right = [], []
removed = 0
for r, row in enumerate(self.matrix):
left.append(row[:cut])
right.append(list(reversed(row[cut+1:])))
if row[cut] == 1:
removed += 1
self.matrix = left
self.copy_from(right)
def copy_from(self, source):
for r, row in enumerate(source):
for c, col in enumerate(row):
if col == 1:
self.matrix[r][c] = 1
print("")
def count(self):
flat = np.ravel(np.array(self.matrix))
print(sum(flat))
def main():
o = Oragami(shared.get_fname(13))
o.process_folds()
if __name__ == "__main__":
main()

66
2021/python/day14.py Normal file
View File

@ -0,0 +1,66 @@
import matrix
import numpy as np
import pandas as pd
import shared
from pprint import pprint as pp
from collections import Counter
class Polymers:
def __init__(self, name):
self.load(name)
self.process()
def load(self, name):
rules = []
with open(name, "r") as f:
template = f.readline().rstrip()
f.readline()
for rule in f.readlines():
rules.append(rule.rstrip().split(" -> "))
self.template = template
self.rules = dict(rules)
def process(self):
# make a counter with letters grouped together in twos
self.pair_counter = Counter([self.template[i:i+2] for i in range(len(self.template) - 1)])
for x in range(40):
self.x = x
self.step()
self.totals()
def step(self):
# Start a new counter
step_counter = Counter()
# loop over the pairs in the old counter
for pair in self.pair_counter:
# expand a and c from the pair
a, c = pair
# get the new letter to add
b = self.rules[pair]
# increment the new pairs
step_counter[f"{a}{b}"] += self.pair_counter[pair]
step_counter[f"{b}{c}"] += self.pair_counter[pair]
# replace
self.pair_counter = step_counter
def totals(self):
# start a new letter counter
c = Counter()
# loop over the pairs
for pair in self.pair_counter:
# increment the first letter in the pair, the 2nd letter is already taken care of
c[pair[0]] += self.pair_counter[pair]
# add the final letter of the template, because it
# never gets a right pair so its silently ignored
c[self.template[-1]] += 1
print(max(c.values()) - min(c.values()), self.x)
def main():
p = Polymers(shared.get_fname(14))
if __name__ == "__main__":
main()

87
2021/python/day15.py Normal file
View File

@ -0,0 +1,87 @@
import matrix
import numpy as np
import shared
from pprint import pprint as pp
from queue import PriorityQueue
X = '.'
class Chiton:
def __init__(self, name):
self.load(name)
self.y = 0
self.x = 0
self.values = []
self.set_goal()
def load(self, name):
self.base = np.array(matrix.load_matrix_file(name))
self.mx = self.base.copy()
def walk(self):
# Dijkstra from RedBlobGames
start = (self.x,self.y)
frontier = PriorityQueue()
frontier.put(start, 0)
came_from = dict()
cost_so_far = dict()
came_from[start] = None
cost_so_far[start] = 0
while not frontier.empty():
current = frontier.get()
if current == self.goal:
break
for _nxt in self.neighbors(current):
nxt = (_nxt['x'],_nxt['y'])
new_cost = cost_so_far[current] + _nxt['value']
if nxt not in cost_so_far or new_cost < cost_so_far[nxt]:
cost_so_far[nxt] = new_cost
priority = new_cost
frontier.put(nxt, priority)
came_from[nxt] = current
print(cost_so_far[self.goal])
def neighbors(self, pos):
return matrix.get_neighbors(self.mx, x=pos[0], y=pos[1], _dict=True)
def pp(self):
matrix.ppmx(self.mx,pad=False,space=False)
print(self.x,self.y)
def grow(self, size):
ALL = [self.base.copy()]
for x in range(25):
n = ALL[-1].copy()
n = self.increment(n)
ALL.append(n)
rows = []
for x in range(5):
rows.append(np.hstack(ALL[x:x+5]))
grid = np.array(rows.pop(0))
for row in rows:
grid = np.vstack((grid,row))
self.mx = grid
self.set_goal()
def set_goal(self):
h,w = matrix.get_size(self.mx)
self.goal = (h-1,w-1)
def increment(self, row):
row += 1
row = np.where(row > 9, 1, row)
return row
def main():
c = Chiton(shared.get_fname(15))
c.walk()
c.grow(5)
c.walk()
if __name__ == "__main__":
main()

90
2021/python/day16.py Normal file
View File

@ -0,0 +1,90 @@
import shared
from functools import reduce
from pprint import pprint as pp
from math import prod
HEX = {
(str(i) if i <= 9 else chr(ord("A") + i % 10)): bin(i)[2:].zfill(4)
for i in range(16)
}
OPS_TYPES = {
0: lambda *x: sum(x),
1: lambda *x: prod(x),
2: min,
3: max,
5: lambda *x: 1 if x[0] > x[1] else 0,
6: lambda *x: 1 if x[0] < x[1] else 0,
7: lambda *x: 1 if x[0] == x[1] else 0,
}
class Packet:
def __init__(self):
with open(shared.get_fname(16), "r") as f:
val = f.read().rstrip()
self.binary = "".join([HEX[x] for x in val])
packet, _ = self.get_packet(self.binary)
self.packet = packet
def to_value(self, binary):
# print("to_value", len(binary))
value = ""
while True:
value += binary[1:5]
if binary[0] == "0":
break
binary = binary[5:]
return int(value, 2), binary[5:]
def get_subpackets(self, binary, packet, length_id_type):
# print("get_subpacket", len(binary), packet, length_id_type)
if int(length_id_type) == 0:
packet_length = int(binary[:15], 2)
checking = binary[15 : 15 + packet_length]
rem = binary[15 + packet_length :]
while checking:
subpacket, checking = self.get_packet(checking)
packet["children"].append(subpacket)
packet["version_sum"] += subpacket["version_sum"]
else:
subpacket_count = int(binary[:11], 2)
rem = binary[11:]
for _ in range(subpacket_count):
subpacket, rem = self.get_packet(rem)
packet["children"].append(subpacket)
packet["version_sum"] += subpacket["version_sum"]
return packet, rem
def get_packet(self, binary):
# print("get_packet", len(binary))
packet = {
"version": int(binary[:3], 2),
"type_id": int(binary[3:6], 2),
"version_sum": int(binary[:3], 2),
"children": list(),
}
# print(packet["type_id"], len(binary))
if packet["type_id"] == 4:
packet["value"], rem = self.to_value(binary[6:])
return packet, rem
return self.get_subpackets(binary[7:], packet, binary[6])
def calculate(self, packet):
if packet["type_id"] == 4:
return packet["value"]
return int(
reduce(
OPS_TYPES[packet["type_id"]], [self.calculate(p) for p in packet["children"]]
)
)
def main():
p = Packet()
print(p.packet['version_sum'])
print(p.calculate(p.packet))
if __name__ == "__main__":
main()

85
2021/python/day17.py Normal file
View File

@ -0,0 +1,85 @@
import shared
from scanf import scanf
from dataclasses import dataclass
@dataclass
class Probe:
x: int
y: int
x_vel: int
y_vel: int
@dataclass
class Box:
x1: int
x2: int
y1: int
y2: int
@property
def max_x(self):
return max(self.x1, self.x2)
@property
def min_y(self):
return min(self.y1, self.y2)
class TrickShot:
def __init__(self, target, x_vel, y_vel):
self.target = target
self.probe = Probe(0, 0, x_vel, y_vel)
self.y_max = -9999
def step(self):
self.probe.x += self.probe.x_vel
self.probe.y += self.probe.y_vel
if self.probe.y > self.y_max:
self.y_max = self.probe.y
self.probe.x_vel += towards_zero(self.probe.x_vel)
self.probe.y_vel -= 1
def check_in_target(self):
return (
self.target.x1 <= self.probe.x <= self.target.x2
and self.target.y1 <= self.probe.y <= self.target.y2
)
def check_out_of_bounds(self):
return self.probe.y < self.target.min_y or self.probe.x > self.target.max_x
def towards_zero(value):
if value > 0:
return -1
elif value == 0:
return 0
else:
return 1
def main():
with open(shared.get_fname(17), "r") as f:
target = Box(*scanf("target area: x=%d..%d, y=%d..%d", f.read()))
hits = []
for x in range(target.max_x + 1):
for y in range(target.min_y, -target.min_y):
t = TrickShot(target, x, y)
while True:
t.step()
if t.check_in_target():
hits.append((x, y, t.y_max))
break
elif t.check_out_of_bounds():
break
hits = sorted(hits, key=lambda x: x[-1])
highest = hits[-1][-1]
print("highest", highest)
print("hits", len(hits))
if __name__ == "__main__":
main()

104
2021/python/day18.py Normal file
View File

@ -0,0 +1,104 @@
import shared
import itertools
import json
import math
from functools import reduce
red = lambda word: f"\u001b[31m{word}\u001b[0m"
yellow = lambda word: f"\u001b[33m{word}\u001b[0m"
blue = lambda word: f"\u001b[34m{word}\u001b[0m"
green = lambda word: f"\u001b[32m{word}\u001b[0m"
class Snailfish:
def __init__(self):
self.load()
def load(self):
snailfish = []
with open(shared.get_fname(18), "r") as f:
for line in f.readlines():
snailfish.append(json.loads(line.rstrip()))
print(snailfish[-1])
self.snailfish = snailfish
def run(self):
reduced = reduce(self.add, self.snailfish)
print(green(reduced))
self.magnitude_sum = self.magnitude(reduced)
permutations = itertools.permutations(self.snailfish, 2)
self.magnitude_max = 0
for a,b in permutations:
print(red(a), yellow(b))
fish_sum = self.add(a,b)
print("\t", blue(fish_sum))
mag = self.magnitude(fish_sum)
if mag > self.magnitude_max:
self.magnitude_max = mag
print()
def add_left(self, fish, value):
if value is None:
return fish
if isinstance(fish, int):
return fish + value
return [self.add_left(fish[0], value), fish[1]]
def add_right(self, fish, value):
if value is None:
return fish
if isinstance(fish, int):
return fish + value
return [fish[0], self.add_right(fish[1], value)]
def explode(self, fish, depth=4):
if isinstance(fish, int):
return False, None, fish, None
if depth == 0:
return True, fish[0], 0, fish[1]
x, y = fish
exploded, left, x, right = self.explode(x, depth - 1)
if exploded:
return True, left, [x, self.add_left(y, right)], None
exploded, left, y, right = self.explode(y, depth - 1)
if exploded:
return True, None, [self.add_right(x, left), y], right
return False, None, fish, None
def split(self, fish):
if isinstance(fish, int):
if fish >= 10:
return True, [fish // 2, math.ceil(fish / 2)]
return False, fish
x, y = fish
split, x = self.split(x)
if split:
return True, [x, y]
split, y = self.split(y)
return split, [x, y]
def add(self, x, y):
fish = [x, y]
while True:
exploded, _, fish, _ = self.explode(fish)
if exploded:
continue
split, fish = self.split(fish)
if not split:
break
return fish
def magnitude(self, fish):
if isinstance(fish, int):
return fish
return 3 * self.magnitude(fish[0]) + 2 * self.magnitude(fish[1])
def main():
s = Snailfish()
s.run()
print('part1: sum', s.magnitude_sum)
print('part2: max', s.magnitude_max)
if __name__ == "__main__":
main()

0
2021/python/day25.py Normal file
View File

147
2021/python/matrix.py Normal file
View File

@ -0,0 +1,147 @@
split_word_to_int_list = lambda y: [int(w) for w in y]
split_line_to_int_list = lambda y: [int(w) for w in y.split(" ") if w]
def rotate(m, right=True): # -90
x = list(zip(*m[::-1]))
if right:
return x
return [list(reversed(y)) for y in x]
def load_matrix_file(name, func=None):
with open(name, "r") as f:
my_file = []
for line in f:
my_file.append(line.rstrip())
if func:
return [func(x) for x in my_file]
return [split_word_to_int_list(x) for x in my_file]
def get_neighbors(matrix, x, y, _dict=False):
neighbors = []
# left
try:
if x - 1 >= 0:
if _dict:
neighbors.append({'x':x - 1,'y':y,'value':matrix[y][x - 1]})
else:
neighbors.append([(x - 1, y), matrix[y][x - 1]])
except IndexError:
pass
# right
try:
if _dict:
neighbors.append({'x':x + 1,'y':y,'value':matrix[y][x + 1]})
else:
neighbors.append([(x + 1, y), matrix[y][x + 1]])
except IndexError:
pass
# up
try:
if y - 1 >= 0:
if _dict:
neighbors.append({'x':x,'y':y-1,'value':matrix[y-1][x]})
else:
neighbors.append([(x, y - 1), matrix[y - 1][x]])
except IndexError:
pass
# down
try:
if _dict:
neighbors.append({'x':x,'y':y+1,'value':matrix[y+1][x]})
else:
neighbors.append([(x, y + 1), matrix[y + 1][x]])
except IndexError:
pass
return neighbors
def get_neighbor_coords(matrix, c, r, diagonals=True):
height = len(matrix)
width = len(matrix[0])
if diagonals:
coords = (
(-1, -1), (0, -1), (1, -1),
(-1, 0), (1, 0),
(-1, 1), (0, 1), (1, 1),
)
else:
coords = (
(0, -1),
(-1, 0), (1, 0),
(0, 1),
)
neighbors = []
for _c, _r in coords:
try:
value = matrix[r + _r][c + _c] # Try to get a value error
if (r+_r>=0 and c+_c >= 0):
neighbors.append(
[{"c": c + _c, "r": r + _r}, value]
) # woo, no error, this coord is valid
except IndexError:
pass # okay we out of bounds boizzzz
return neighbors
def get_column(matrix, col):
pass
def matrix_of_size(width, height):
return [[0] * width for x in range(height)]
def get_size(matrix):
height = len(matrix)
width = len(matrix[0])
return height, width
def pmx(*matrices, pad=True, space=True):
if len(matrices) > 1:
matrices = list(zip(*matrices))
for row in matrices:
r = []
for col in row:
r.append("".join([f"{int(x)or '.'}".rjust(3) for x in col]))
print(" ".join(r))
else:
for row in matrices:
for c in row:
if pad:
f = lambda x: f"{int(x)or '.'}".rjust(2)
if space:
f = lambda x: f"{int(x)or '.'}".rjust(3)
else:
f = lambda x: f"{int(x)or '.'}"
if space:
f = lambda x: f"{int(x)or '.'} "
print("".join([f(x) for x in c]))
def ppmx(*matrices, pad=True, space=True):
if len(matrices) > 1:
matrices = list(zip(*matrices))
for row in matrices:
r = []
for col in row:
r.append("".join([f"{x or '.'}".rjust(3) for x in col]))
print(" ".join(r))
else:
for row in matrices:
for c in row:
if pad:
f = lambda x: f"{x or '.'}".rjust(2)
if space:
f = lambda x: f"{x or '.'}".rjust(3)
else:
f = lambda x: f"{x or '.'}"
if space:
f = lambda x: f"{x or '.'} "
print("".join([f(x) for x in c]))

31
2021/python/shared.py Normal file
View File

@ -0,0 +1,31 @@
def get_fname(day: int) -> str:
import sys
if sys.argv[-1] == "--sample":
return f"../samples/day{day:02}.txt"
else:
return f"../full/day{day:02}.txt"
def load_file_char_matrix(name):
with open(name, "r") as f:
my_file = []
for line in f:
my_file.append(line.rstrip())
return [list(x) for x in my_file]
def load_file_int_matrix(name):
with open(name, "r") as f:
my_file = []
for line in f:
my_file.append(line.rstrip())
return [list(map(int, x)) for x in my_file]
def load_file_word_matrix(name):
with open(name, "r") as f:
my_file = []
for line in f:
my_file.append(line.rstrip())
return [x.split(" ") for x in my_file]

10
2021/samples/day01.txt Normal file
View File

@ -0,0 +1,10 @@
199
200
208
210
200
207
240
269
260
263

6
2021/samples/day02.txt Normal file
View File

@ -0,0 +1,6 @@
forward 5
down 5
forward 8
up 3
down 8
forward 2

12
2021/samples/day03.txt Normal file
View File

@ -0,0 +1,12 @@
00100
11110
10110
10111
10101
01111
00111
11100
10000
11001
00010
01010

19
2021/samples/day04.txt Normal file
View File

@ -0,0 +1,19 @@
7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1
22 13 17 11 0
8 2 23 4 24
21 9 14 16 7
6 10 3 18 5
1 12 20 15 19
3 15 0 2 22
9 18 13 17 5
19 8 7 25 23
20 11 10 24 4
14 21 16 12 6
14 21 17 24 4
10 16 15 9 19
18 8 23 26 20
22 11 13 6 5
2 0 12 3 7

11
2021/samples/day05.txt Normal file
View File

@ -0,0 +1,11 @@
0,9 -> 5,9
8,0 -> 0,8
9,4 -> 3,4
2,2 -> 2,1
7,0 -> 7,4
6,4 -> 2,0
0,9 -> 2,9
3,4 -> 1,4
0,0 -> 8,8
5,5 -> 8,2

1
2021/samples/day06.txt Normal file
View File

@ -0,0 +1 @@
3,4,3,1,2

1
2021/samples/day07.txt Normal file
View File

@ -0,0 +1 @@
16,1,2,0,4,2,7,1,2,14

10
2021/samples/day08.txt Normal file
View File

@ -0,0 +1,10 @@
be cfbegad cbdgef fgaecd cgeb fdcge agebfd fecdb fabcd edb | fdgacbe cefdb cefbgd gcbe
edbfga begcd cbg gc gcadebf fbgde acbgfd abcde gfcbed gfec | fcgedb cgb dgebacf gc
fgaebd cg bdaec gdafb agbcfd gdcbef bgcad gfac gcb cdgabef | cg cg fdcagb cbg
fbegcd cbd adcefb dageb afcb bc aefdc ecdab fgdeca fcdbega | efabcd cedba gadfec cb
aecbfdg fbg gf bafeg dbefa fcge gcbea fcaegb dgceab fcbdga | gecf egdcabf bgf bfgea
fgeab ca afcebg bdacfeg cfaedg gcfdb baec bfadeg bafgc acf | gebdcfa ecba ca fadegcb
dbcfg fgd bdegcaf fgec aegbdf ecdfab fbedc dacgb gdcebf gf | cefg dcbef fcge gbcadfe
bdfegc cbegaf gecbf dfcage bdacg ed bedf ced adcbefg gebcd | ed bcgafe cdgba cbgef
egadfb cdbfeg cegd fecab cgb gbdefca cg fgcdab egfdb bfceg | gbdfcae bgc cg cgb
gcafb gcf dcaebfg ecagb gf abcdeg gaef cafbge fdbac fegbdc | fgae cfgab fg bagce

5
2021/samples/day09.txt Normal file
View File

@ -0,0 +1,5 @@
2199943210
3987894921
9856789892
8767896789
9899965678

10
2021/samples/day10.txt Normal file
View File

@ -0,0 +1,10 @@
[({(<(())[]>[[{[]{<()<>>
[(()[<>])]({[<{<<[]>>(
{([(<{}[<>[]}>{[]{[(<()>
(((({<>}<{<{<>}{[]{[]{}
[[<[([]))<([[{}[[()]]]
[{[{({}]{}}([{[{{{}}([]
{<[[]]>}<{[{[{[]{()[[[]
[<(<(<(<{}))><([]([]()
<{([([[(<>()){}]>(<<{{
<{([{{}}[<[[[<>{}]]]>[]]

10
2021/samples/day11.txt Normal file
View File

@ -0,0 +1,10 @@
5483143223
2745854711
5264556173
6141336146
6357385478
4167524645
2176841721
6882881134
4846848554
5283751526

18
2021/samples/day12.txt Normal file
View File

@ -0,0 +1,18 @@
fs-end
he-DX
fs-he
start-DX
pj-DX
end-zg
zg-sl
zg-pj
pj-he
RW-he
fs-DX
pj-RW
zg-RW
start-pj
he-WI
zg-he
pj-fs
start-RW

21
2021/samples/day13.txt Normal file
View File

@ -0,0 +1,21 @@
6,10
0,14
9,10
0,3
10,4
4,11
6,0
6,12
4,1
0,13
10,12
3,4
3,0
8,4
1,10
2,14
8,10
9,0
fold along y=7
fold along x=5

18
2021/samples/day14.txt Normal file
View File

@ -0,0 +1,18 @@
NNCB
CH -> B
HH -> N
CB -> H
NH -> C
HB -> C
HC -> B
HN -> C
NN -> C
BH -> H
NC -> B
NB -> B
BN -> B
BB -> N
BC -> B
CC -> N
CN -> C

10
2021/samples/day15.txt Normal file
View File

@ -0,0 +1,10 @@
1163751742
1381373672
2136511328
3694931569
7463417111
1319128137
1359912421
3125421639
1293138521
2311944581

1
2021/samples/day16.txt Normal file
View File

@ -0,0 +1 @@
38006F45291200

1
2021/samples/day17.txt Normal file
View File

@ -0,0 +1 @@
target area: x=20..30, y=-10..-5

3
2021/samples/day18.txt Normal file
View File

@ -0,0 +1,3 @@
[[[0,[4,5]],[0,0]],[[[4,5],[2,6]],[9,5]]]
[7,[[[3,7],[4,3]],[[6,3],[8,8]]]]
[[1,2],[3,[4,5]]]

2236
2022/full/day01.txt Normal file

File diff suppressed because it is too large Load Diff

2500
2022/full/day02.txt Normal file

File diff suppressed because it is too large Load Diff

300
2022/full/day03.txt Normal file
View File

@ -0,0 +1,300 @@
QJRBMDMtRDCtJzBtJMfjNjhwvmNDvwjLVVgh
TPSNNPZGTjgmSmvfjL
bPlpZZbpsTlTsWprpGFCJtRtzMNdMMBBcWnJQB
tppvbQBhpQQdrzMMcLwhMc
gZnWRccRNgFGRGRFRNNgZgJMddddLLLMCPqwLCNPwqPJ
nRRmFSnWmlgZlTlTllSlSWWWTsfvfDQpBfBcpQvpVQpTfQQf
lRlsVFgTlMgRNsSNTlFgmbWnMPppPnMqWZMWPPWW
fDjgBJdCfCHHBnfLWpqnmnpZmf
GjQHHcdvJHQBHSSNsFQFslwwRg
NPwDLDHNwjLLHWjbdSbDfJJQTZsZDS
BcFBcvgFvghnFLrBpvrgcgrJSZJpQdfSTZbCsSdfZZfbCf
VrngVFRmrVWHLGVMlL
SNBBBDlfZDLqNGmgFjjmBsQgCFtF
VPPVbhpbhMhRhncnScRncbrQtCgQQFmjjjsgtRtQHmFQ
nhWcPJVhpbvMvwvwllvSlGlD
wNlNNqtqHHHPhqCz
MMMMcQSWSpQCWFnRRPchLVvPLLzhmhLzhh
CrgRSWrnrQpppRQrCTnRTRtGtBDBfbNBllbTJlZtfNBN
QNbbNrnNnCwHmNPQmzqQNPsCCfBFFGtsBBddBDtCJDJd
gvVgpZWgTWvRvlvLPDDJjGBfdsdpDDJGdd
ZRMWWRMVgRZghTggPSMZzQwwnqwmnzhNnNwHcQHm
VmPHzBmpmQHbVHSpNHBVQCtRPPCPvFFMqqntZCZqMR
dWlDcfcfcjcfDWjlsZfjJhdGvFLGnLsLqsRnvRvRGGRttC
wfJhZTllcfdZdfjJfjdmQzHVSzHzgHQTpHpmpV
qNnqmzmCBfvmDvBm
HcdhtQdttbbhtVcrVVDMfZvdMBTqsWZMBsWZ
HQGtctRblwqpNwRN
SBtBLBMZzPDDNFFDQnVVVnnDmf
dgCjblRdgRvrbwjJGzQQQzwJVJ
WpWbCWWvlgrcCHdvvCdvWbSLZzhhZhtLBPPStSPhMSpM
PlPnGGGzCqqlrqTRsbTmFRWgDPmR
wwpLtjwpzjDwFWRsWTWW
NZtJjHNNhHfnCBcJMBlCSz
wSrwggPrhJhCdddw
tLMNvMTFhDZdhTBh
LtMvFttGbNcWRsLFLsccRRgfnSrPjPnfljSfPWlnPhrS
TSZlwZSSccSHZLHVcllSvmDLmJhjDDffJmGjQjgQQJ
sdBdzsNnBMBstNNMFhNPNbPzgGfDgJrtrfjCjDrCfJmmDQJf
BnnBznRsFRFBsspzzbZpSTqVTpHVhpTvlqVW
VtVjjhdFmCCfhRRzzSDbDzpmgzmvgb
CHJqrswsWvbvJbpD
CqCPcZHGHTcsCBQsBrTGHMFnLVQjMjLVVhdhnFQVRL
tvlPSrlNNvtglTtPccldQdhbQbZdcqqZ
mRmBGHWmDFRsZqHrfbdhqhZZ
jjMGjWrJpttNjtgg
HPtCMJNjvJLMDZRdBgLSBSfsWBgG
VmnrhwwqhbbzrwnDrqpdWBgfdSdfBGgffGWRdh
qmnTFbVnpqVzpnvlDFJZDClNZPZN
NNRFQfzbNWhLHTVh
dGjptnrPqgvqjccvndnnPPhlHrVVTHLWMHlwmrlHMmVTWm
tDggGnPqDcPPpPpddjGhggtJCCSssfJbQsDfbZsbsbRZFQ
bqZWhbvvvqfvhqvQCChhZlllGwlwGjNRrNGrwGwNRQ
PmspSscJVJStzSVzWJlgwlwNlGRLDGrPgNwN
pdHmWMVStWJWFBBCCbMhCfbC
wtwbctGLwGWhGwfWwhNrnLrlrQFNmPNNVrrl
CSdqZRsMStdJMMSZqPnFmVqPQlnjNjqj
TMtsTBSSRZBCJStMJSZTHtfvpgvzzWwhbpwhggbzHpbW
HncMbCwCncHlcbMDMnMFGsNsJVFJGchVTTcmcG
RRfBRNjRLLJTLTThsq
zpBRjWRrRvBpNtRWrgwbrwQPDPMDwCnn
TDcPLTVRjntFwDwDnb
SJJhffHqHZZgHGSFFbdrGTGnGv
NQHWZgJQHNHgHQhlLLLBjpRTjLjMNNLM
sMNnNRNrlGlsZBrGsrFQpclWlWLfpWjtzTfDtpzj
gvhPgwTgdSHtHDtpDPLp
gwhSwdvTSTbSgRrZNrrNFFNBGb
rtZnDHJrrDtGtGHvGHDWfdfwCjcBhjBCffwwLv
lzVlzsTRsmzVNTspVsMMsmwCLcmjmcdbBBChwfBbCW
sVTMpTpppsVMsPRPVzMNFqMFwZtQrHZDGqgHZrSQQrQQJDGn
wGQQMMQvCTPPQnHPBS
FsWdJddszWrrRRJRTmRmpppRHBNPBppNHp
rWdFWlFJzbzzMTwcvvMbGMgc
WTnnTpqSnCLmjGgSgjztgg
rQRHQvbNLwrgtGtrmDglJt
PwHRNvQPsvHvPTTpLTcCLVnq
qTsqJDJHjjfMCSDj
RnGGNFGznzGVnBCWmfSMSLwWRwSj
NnBbVQFVCClctHQc
BHzmfDHfJLGcQBGgQLDcstNttlZgdlltldshgZZg
PwPPSJwPvSNZlvSl
CJwwjnJFFnWRMcMzcHMHRzGL
rmZpvcZcqccsqmqzzzcBRLBZbBBRLBlRGVdfZR
PwjFggwMDgNFwPgTwNFgtFJjfGLhBLsGRGbfBfBLbbTVLbdf
DWJwgDWMJJDWCCNHmrnscmqqcnpWSQ
bsRlVgMhtzHvhRvpzcLSZcTWLGzTTrGc
QJnDjmqjJdmDqqrGWWsZsZTc
nQPsnwCJdBDJDDJvhHhpMRCVlhlgRV
NBNwMCtNgqCHClHClq
JpQmFrQQfHfWjJTfLTjfLRRFRvnvhvnDGDcRcvVGGV
HTzzpzzdHgbBZZtdMB
SWcVvBFBVBjShWhGQtZnHFDHRGGQsR
pMZpmmJPbwbTTQttrDrRrttT
mZflqdlbMVcNjdWLSj
tvjdccdbLjhvhlcjRMvRTCQJmBPBCFRG
qgnqZfHpZDVnCpZzZJQFQBgmmPFJBmRQJQ
SHDZDDzpNVpfsNsHqpDSjLwCbbWLChwtwjtCWc
FsWTbcwmGfFFFrpl
LMhzdfqjLdHQQnSvldGvnS
VZjVNzfNLtjzDMhVDNtqDqwJwRmmmZJgmgcbWgRRwCbJ
ZJbPwwfJcGlwCrrZrMMddMMMtt
pTNvvSSHmmnbpFRp
SLSjSLDSQNLHNDbJbcfJclBzjGsz
WSQCWQWstCWCCgNNsDCZMZDBjjlLPnHMMLPrHlcrcLHHTjTh
bVFJFwfdRFFgjTPgnc
GmzRRqvRddbdRRdfJRJfsqsSSsZDsDBQZtCSgpgt
FPjprPpPCCFpFPHWsWvqnnllQsdLQMMlLtslLQMc
wmzJgzRSRRJghBbwGBBSbtGfLfGlcNnlltdddQtrMd
zDmRBmwDrpVFDTVDVp
FPGqjsZGlDJmzsHcTcTMMs
SQNLSvdbvVbrSbHcftGcrpHGfMmf
CNNGSCCdSCZqjqljZF
GvqpqrpqdqdsdGshSMhhRsSMhhlSlJ
DLCzzjzBwCbQWtQlRRFRRJFptfffgM
WzpLbLDbBcLPjWQWDBzzmnvNndHNqZqZNZNvcrNT
scHCGfWHsvWHVfGsggHfgvVcSLwLLPRwwDLPLllRPDzlPr
tbjqqNNTlPDTTSrD
QntmNbNnnddqJqqbFJHZWWHWJWvZHGVJsSsp
WZjpjwwGBGZQsqBLBHLHSRLP
mJhtdfVtDVJtvVLSmNRSccPPPlNHcH
JJLCFDhLCfVGGwbGGCwrGC
nBnsGSCrptmsLWGhWRvVRJVJ
rllMZZbcWWLJvhTl
MHwzczHwwHqZcdzMdbqSmwsssmtNCrBmtrnQNB
LzwrZNrNzBMrJBzJsfqqntMlVlSfhnhb
HTDPWDHPTgGHWTGcPFRgFpPPtfqmsfqlccmlSmnblbshqnmm
jWGgpRGPFRHjzdBBsrBJvj
hjNghjlwqjzGhwhGwLrMMrsMdsMfczPfsr
ZJQSFZFZpCTQSZHTTFbcWWPbWsWrdLVmrMWMfr
tttHSCpFQBQQpJZSJLgBNNDhqhBqvBvvRq
hLLJJJLcLPLfLwcJDchfhpSmqGbmdQGmGSdbqdbmqGGGdG
zgCCVVvVCNVssdbqmtMWvbnndD
rCCZZCVTjVZNzFZJBlflBLccDhBFFB
wwPPHfCMHQsrcwPbMPMcvQFJvqWgFTZgDFJltgZt
jRBVLhpNqpBmRhhRdNJZJgWTBBtgZWltZJJJ
mSjndhSzphjLRVqmhphNShrGMGrcbGbnGCHGwrwGfbbG
PVBRhBdlwRtRhRBwtBlVzDcGpVcZnggGzGMMsg
fFFWQqbFbLWCWvvFbTjjGnsZMfgsZcZzSZGMpSgD
QJTCCLFFLjFqFbHTbbltmhBNwwcNmthNhlHr
qwPJJsJdbPdwJddQCRCgCTMTRGGwMG
cLFcFBZNWWQLSQRfZjpljTGRCgGR
cFvrcNBFJDhzdQzv
zTsVTqDqQNtNwwMVmN
pHpSzPbRrvbRrGzGMwZwlBJmNtclwJpB
SjHRPfRbffPHqzCCCdTsTzqj
jnbMBnPjjjFtBtMjFPRtGfvvfzgWWHMfWHTlGgHH
dCpdqrVrmdpHfTJTCWGJgG
qVdrppqSTddqNwZcDPPPhZRBPBLBRLjF
VbHqLlGQlgjLjjQsNvCZTsNjMtCZvT
SJtttppwwpwBwdPvsvCvBZrvNrTrvM
JDnWJpDSSpmSwmpPzSwznhDlqGqqtqqHGHLlhblGbR
RqRJJVMPdRVVpqMdFwmvnSMwZcfCGfDSZc
CssQgjssvZvjffmS
zNlbbWTBLWCbCPPFPbVH
nvQsHSsGvNvnQghTRMrrjpjM
ttlLDlzPtGDcRRtpZTFjtgMj
PBLBwPPDzzLwblzffzLlVHHsCCHqsfvCCSsGSNWC
jHrTrThrtHgttThgHTtfgTgsmZZmBSZGSGsSGfZBZFFmQs
qCCPdbcCJddbRcsQSGhFzmZqZGmq
VVNNdVvclDcPbMWMwnnlwhphjp
ZdBgJqFWNNNqnZZNGsBCCCRvrCwCjCssCB
htDPMSPtMPzPTLMzMTMbRRbTbvwRCjfRfsbWWs
LhMmtMDWmHlpppplJZJgNd
mhtsjtbChcpLqmpmzL
DPlPprrfBrpGHHVGNVHRqcNvvLLqLcvJzzTvLc
VFfVPrrBQFPlDDwDwBpBtSgQjnghMhCdbSnnhtMM
DPDMpbsHPDPNtdtrgMtdnQ
WShWlSCJVlzccSBvBvhVZZWlgTNTrNrrQTjQjjjjgDSgSdNt
cvmCDvCJCcsRbmpFmqms
sSfFssmLnLwPtrrmttsFbDvWgCvddVgfgWdRDWlChD
nnGnHBzqHjqBJGChlRClhvghJWDd
jNzNcczMcGntPMwwSsSr
GGPCThCCvCTVWBCBGMVMsTgZJsrZtHNNtrsHJrgH
zjRwcwwfvSjmwznfzQSHDJtgrNrRNrLDsRrHtD
fjvzmcfSlSznwcnmnSQnhdlhWBpGpdBqhGhqhVPd
sHGGqpRqfNRVbDDtVwwzWf
CCLQZllTQLTcSShTQvjhQLnnWrDzVpwtDDwVDnczwMwM
vggZLZTldlhpCTlZlZCRRPNRmqdmGBHPFqsGqN
wwFDFLMDjjCNgNwNlwwgvR
frPbSJMSSPBqrfppSqrBZqMQhHlmNsRZmmslvghsmhsgggtZ
TPSPfBQrdJSfTTqSbbBfTfdcGWjFWWFDWnGMjLjGVFCj
LZRZbHtqnVztHTTTjMBQjQHH
rJcDGpwwgDwCCWFGSFMSffVWfF
cNNNgvhNglDnhdzsbLbmVs
RwmrGVPmNLzdmVpmrVtHDjjgDHHRqjFtngFt
CBlWhQWlTWshsblFGntjHtGbHG
WsTSGZSTQZZJpPNdzSrzwvpr
CVsggSgdwSwghVSTCgVZjJlRvlQNJHJGZVvjvj
qrrnzrrpDFMzbDbbzrMbBcNjRBHHQHGRRllHHPBNBljl
rnFppcpWcqnWMLDNsggSmWmsWfggdg
wjQzPjJcplwmDDBL
vghWhhnfWqzhftWtfnbFBmnGDnLGDbDmmC
zZNvZrNsWfgVftNZhQcSdPHPTcPHQQTTJV
WjvPVbWnbbFvjfLlcplQvLQvCwCl
sJhmrrTRTDDJHhhsmJhmrNDdQwLQQlHllHwwLpCLclBBlcPC
RJTRDdmPmmzNTDhnWtzMfMWtqjqqWM
vvpjqtllDMlHDtDBsPSSfBJFlSffNS
gwTmJrTcJWrNSmsNBBPfmf
VzzJzgTnddzWrwngnWqbHqbtLqjqvpvqhbMd
TlpzwGZGGFmZJdPpRtpHPrpcPs
CMJCMgQjMQvrfMHtMfHv
DjnNjCBqCCNnWWgDBQQDnCZwFJwmwwTznmFVwFmzTJJm
CcDPppDCFdDrFcFsMsdlLVjjLsMHvM
fqSmmtNGqLNffhHHbsMsbjbjNjbv
SthSGmLnmfwfWGWhSQGSQRnGpDpJPCDJrBPTcPrDwPzFcpFT
FdqjDtPWzqPdnPPtPFbssllqLJlqNppsJGppLp
TwfrcvwRgvfTBWRgBssJhspHfffJHlHNGh
MMZCQrrRBwQCCZMQwcTMwPztnFZSDWVWPttPSZzdzd
prHlrpJbdccllrrPbFdrgPzZfZhZVhRZVScNRNWtSZjWRW
LmwCCnvqwGCLMnsWtGRZWVfbfbftRW
bwnvBnLBvbsBvszHzpgBlPzHHlzg
grSJNTSgBHgpqhvCGbbZddGCGbbT
nDLMssQMRLwMtMWRWCZdQfqjfGvZQfCjCc
PqsDWPMLnwlRllJzghmgmSNhpgrl
TQGcWQBDnSzzsBSL
mJJlqJwVJdbSrhlrlhhsLL
JPtwMtdPbJbVqVNpPtmbpwZcQDFFcCccFjCQjpQWSWZg
JfbfpZJmzffmpZnZZwsrwDFvwHPP
RDdQtWTWQQSTGNRhsFsjnvjwrhPjtH
QccddTVQQldcGGRdGlgmVmBzfVpDmbgggmpL
HVnhVcHvpVFWDpmP
QswNZblTTwmqlntDPdqD
sGZzNwsGNThhMrhBBhzn
fQllBlVQncgwLlfWwWDvppZZggZqGpZgpGdvGG
shPTRsFbNFJmvqpGjrpvPDdr
RNFDtRRRssRTStRmTlnzwSVQlVVWfWzcQc
WmCpPCWTjQPCWWSjSTmrqRLGDRFGrTFDRFDLDD
gJnVcnVzdfnZgchvrslMDZGlRRDZLR
fdHhfncwfbfzJbnJzJfcczhhSmLCCNBjSpjmpjHjBQjpmpNW
BDvDPGRwRvCmLssGLmsL
frRjjlldrqtNspLWpqFcCmzm
ndSnVNtllldrdfSjfNvgVRHBwbbVMRbVPJgH
PpgjhpVLghPZhSgZVVzzcJWccPNCrcJzrFsJ
BdBNNMqMdfDnDNTFHHJCqHrJHzrFzF
wfMNtMndlBTlmTBndRpgghhjZRjvSZVjRw
ZQnQMWMcjHDHrWNF
TvtCvvBVgdRdmvBVNzDHlGFjFHjfRfDD
dvtCCbdJmhvhhhhbhVBPMwqZswnZqZjjMccsZJ
DDMzRBBSzRDTMQRZsbvssCbhZtCDtP
dLmwNplnmmwjGvPVCRtVVvVd
NNmjLmqWJjFRwFSrgcrSHBzcTz
TwTwTMBWcWBJJBtTWHddCmfgzlCzClsvmfsM
PPLDnNqPRLQNVnGNVsDQnNmzdhvdddlvdlqgqmdlrfvv
SQQsjPPLGLbDSnGLLNnWTFZJHbcpFctHZpwJWB
FzMltgtMzFpZtmzdjPpnvRTQTvRWTDfnnTlvwW
JcbVcBrqLCVJHJSNCcZVqVqqTRQRWWfNsTfTvDfsWvwTsnwv
rcZqVJVhmhgPmhmd
ttvSnlWvWWgcScMDsHHMPMjPmH
pzLGLfNRpJsvmmfvMDfs
GhpzRqqpZppNrhvFgwSlWnnBFn
sbQcDJQJJDbQhwchSctVnVnqTMvMWSqTMPSMlP
jtjCtNRLNCRgRnlTPPWg
pzpHdLtFNdJbDhJHsQhs
pSqnfqDnWPHNPCCHCp
GdJZQdgZbBvgQLcCZZCCZlPLRH
PzBgQggbvBthtMdMvbzvVfFfzTWqDmWDqzqWrfff
nnJdrfgfrdMCMdgrqMnWdgwNTTTzFhPSSHfSHhllzjzNFT
vBRvmvGZsLZZsHFNFFzTNPzb
LZVRmcDRvpQLmvvVGDGmpntJJwCWCnCPJwgJDrPDqM
QddMvdzlVfvdSQmGhmwLbGbmzbns
JtCCWqqZDsLpGhbGjD
FNrhqCTWMSRSrQQg
ZsBZJFsZSmmJsJSmrJrJrvsrdGdCQGQphMGwRMGQRGdbBChM
FlgfqNNNWnNnHfVnnHdbGwpwGWQhGdRMMdRM
LFnggHlDqDLvjDmZPcPmvP
CRHJWfvJvrQfrCsDlGGBszQBjjGB
LmPHVnMmpLlPssBPlDtd
MmMSZmVnncMFcmSVHvfSrffCwSvfbHWv
wsrJrpdJLsMCZDWL
BbLtGGbNmLQggqgQQtGgMmDCTnWZCZWZTmMmCZnT
qNBGNNgQcbbtGbbFBLVjfcfwHvrHHJHJcr
pCZCpdjBljhjBlpVccCpbDDwRWDsLhLbwDsDwsDw
HNgFSSNvSmdqwsFLFWLGttbw
gMMndNrzNHnzJZVlMCMCTcpc
CfsFNszCrrGzrsggsPfPVNVlqTdSjSqMTdSVTdLL
vRhcHllwJDmnJmDMMdhqSqpVMhdjdp
cvHRvwQBPZZlrQgz
TsFhCtQtQsBBLtBLPvgz
jjWZZjZSMNlNNjljNnlmjjfJLMBGGLvBdzPQpggJJLQzpg
wjbcmmlnQZmlrTsCFVwshwTr
nRGFnFjcdlwLSHSpNNnBfWHN
TgQvPbCMPRhbMPQvtQPvMCRBSHNQHBrQSNfWqpHHrWNWSf
PCgMbPvTZVDgtPRggtCCbgmmFJJLmcGFLjdmJFcDwJmm
dgWPssfdvQCLPLhL
pMtSMtpSmpMpFSMMFZjQCLbLQZZbVbVhNTLblZ
mpqcpzncfWwhzfRf
vntvVnRCsvpBpMjCpTpj
rQdZfhzczNzWcNLTpWgSvjjjpGpMSB
ZqNDQhfcNchLchQqcDqRHJtHVwnwbtvHsbVs
qtJGQgTrqtqQdQDgbGjPzZHWWzVjslPZlG
vBShwRRvvSRSvFvwLSvfcnfBWmHZHVWWHPzlNPWVWjZsWnWV
cLBFBFhCBLlwpFccFBFftqJDQdgdTDJJCbJgCCdg
wfmsPvPwNfvmfLNFvzzJbRMnllhlnLhRLC
gjtqDDTtjgpJcbnMTzCRnCCWhC
SDqtpGSStVtdqpgBVjBGZmFPJNJmffvfPsHZPZQd
HQMBBWrQQmPBvmBWnvrTnMSsbFfcfwgfCgscsmGgwgcJGg
NzzlJLthtlgswGFcwGst
JqNNRqpzhVRWTSQrrvSQ
mFpDZjvmtPPGvFjmmGTzTcFRbHczHTbzQgRS
fNdqhJsNrnnVNhwNVdrdsVczQCcwCMHSTCHgHCRzHgcM
JlgnNhsqVqNqNpPlvZvDDDGlZZ

1000
2022/full/day04.txt Normal file

File diff suppressed because it is too large Load Diff

512
2022/full/day05.txt Normal file
View File

@ -0,0 +1,512 @@
[V] [C] [M]
[V] [J] [N] [H] [V]
[R] [F] [N] [W] [Z] [N]
[H] [R] [D] [Q] [M] [L] [B]
[B] [C] [H] [V] [R] [C] [G] [R]
[G] [G] [F] [S] [D] [H] [B] [R] [S]
[D] [N] [S] [D] [H] [G] [J] [J] [G]
[W] [J] [L] [J] [S] [P] [F] [S] [L]
1 2 3 4 5 6 7 8 9
move 2 from 2 to 7
move 8 from 5 to 6
move 2 from 4 to 5
move 1 from 4 to 5
move 1 from 5 to 8
move 5 from 9 to 2
move 7 from 1 to 6
move 7 from 3 to 8
move 1 from 4 to 6
move 2 from 5 to 6
move 6 from 7 to 5
move 2 from 2 to 4
move 4 from 5 to 2
move 10 from 8 to 1
move 2 from 7 to 4
move 4 from 2 to 8
move 2 from 9 to 8
move 1 from 8 to 4
move 2 from 4 to 9
move 5 from 8 to 2
move 1 from 4 to 6
move 1 from 8 to 9
move 1 from 7 to 2
move 2 from 4 to 2
move 1 from 7 to 3
move 13 from 2 to 1
move 1 from 2 to 4
move 1 from 2 to 3
move 2 from 5 to 4
move 17 from 6 to 4
move 3 from 4 to 9
move 14 from 1 to 4
move 4 from 6 to 8
move 1 from 9 to 8
move 23 from 4 to 8
move 6 from 1 to 7
move 3 from 1 to 5
move 1 from 3 to 8
move 5 from 7 to 8
move 1 from 3 to 4
move 1 from 5 to 3
move 1 from 5 to 1
move 1 from 3 to 2
move 1 from 9 to 4
move 9 from 4 to 9
move 1 from 1 to 2
move 11 from 8 to 2
move 1 from 4 to 5
move 13 from 2 to 3
move 7 from 9 to 6
move 1 from 5 to 6
move 1 from 5 to 2
move 1 from 9 to 4
move 1 from 4 to 9
move 2 from 8 to 9
move 1 from 7 to 8
move 8 from 9 to 1
move 8 from 1 to 4
move 4 from 6 to 7
move 1 from 9 to 4
move 2 from 3 to 9
move 1 from 9 to 1
move 6 from 4 to 1
move 2 from 1 to 3
move 22 from 8 to 6
move 1 from 2 to 5
move 3 from 7 to 8
move 15 from 6 to 4
move 7 from 3 to 7
move 4 from 6 to 9
move 2 from 9 to 2
move 6 from 3 to 5
move 3 from 9 to 5
move 5 from 5 to 8
move 1 from 2 to 1
move 6 from 8 to 2
move 1 from 1 to 2
move 3 from 5 to 3
move 1 from 7 to 2
move 4 from 7 to 8
move 4 from 6 to 1
move 1 from 5 to 1
move 4 from 8 to 7
move 2 from 3 to 2
move 1 from 1 to 3
move 15 from 4 to 2
move 3 from 7 to 3
move 4 from 7 to 2
move 1 from 4 to 9
move 5 from 3 to 8
move 29 from 2 to 1
move 1 from 9 to 5
move 1 from 2 to 1
move 11 from 1 to 5
move 1 from 4 to 5
move 2 from 6 to 3
move 1 from 3 to 4
move 16 from 1 to 9
move 4 from 8 to 4
move 3 from 6 to 9
move 1 from 3 to 7
move 1 from 7 to 3
move 6 from 1 to 6
move 3 from 4 to 3
move 3 from 8 to 5
move 3 from 1 to 8
move 3 from 1 to 4
move 2 from 4 to 9
move 3 from 6 to 3
move 15 from 5 to 2
move 3 from 2 to 3
move 4 from 2 to 7
move 2 from 5 to 9
move 10 from 3 to 6
move 11 from 9 to 5
move 2 from 4 to 9
move 8 from 9 to 4
move 1 from 9 to 6
move 7 from 4 to 6
move 3 from 5 to 8
move 22 from 6 to 9
move 4 from 7 to 8
move 8 from 5 to 8
move 2 from 4 to 3
move 1 from 8 to 1
move 17 from 8 to 3
move 3 from 3 to 4
move 13 from 3 to 9
move 20 from 9 to 7
move 2 from 2 to 9
move 19 from 9 to 5
move 1 from 1 to 4
move 3 from 2 to 7
move 4 from 4 to 3
move 1 from 9 to 8
move 18 from 5 to 1
move 1 from 9 to 4
move 1 from 9 to 7
move 2 from 4 to 8
move 1 from 5 to 4
move 3 from 2 to 7
move 3 from 3 to 1
move 2 from 1 to 3
move 3 from 3 to 8
move 1 from 4 to 8
move 6 from 8 to 2
move 1 from 3 to 9
move 1 from 3 to 9
move 10 from 1 to 9
move 7 from 1 to 7
move 4 from 7 to 4
move 29 from 7 to 3
move 6 from 2 to 9
move 25 from 3 to 6
move 5 from 3 to 9
move 13 from 6 to 9
move 12 from 6 to 2
move 1 from 8 to 9
move 10 from 2 to 6
move 7 from 6 to 5
move 20 from 9 to 3
move 11 from 3 to 6
move 1 from 7 to 9
move 2 from 2 to 9
move 19 from 9 to 2
move 14 from 6 to 8
move 4 from 5 to 2
move 2 from 4 to 6
move 3 from 5 to 1
move 13 from 8 to 5
move 1 from 6 to 1
move 2 from 4 to 2
move 8 from 2 to 4
move 6 from 4 to 7
move 1 from 9 to 8
move 2 from 4 to 7
move 5 from 2 to 4
move 4 from 4 to 2
move 10 from 5 to 6
move 1 from 1 to 7
move 1 from 5 to 4
move 1 from 4 to 9
move 4 from 7 to 8
move 5 from 1 to 7
move 1 from 9 to 7
move 7 from 3 to 2
move 2 from 5 to 2
move 8 from 6 to 9
move 1 from 4 to 6
move 3 from 7 to 4
move 5 from 9 to 7
move 2 from 4 to 3
move 20 from 2 to 4
move 2 from 4 to 8
move 14 from 4 to 2
move 12 from 7 to 4
move 8 from 2 to 1
move 10 from 2 to 4
move 6 from 8 to 5
move 1 from 7 to 8
move 4 from 4 to 3
move 1 from 3 to 9
move 1 from 2 to 7
move 1 from 6 to 8
move 5 from 3 to 5
move 1 from 3 to 2
move 7 from 4 to 5
move 6 from 1 to 7
move 5 from 7 to 6
move 1 from 6 to 5
move 2 from 7 to 8
move 1 from 2 to 6
move 2 from 8 to 2
move 5 from 5 to 7
move 6 from 6 to 8
move 16 from 4 to 9
move 16 from 9 to 4
move 11 from 5 to 4
move 5 from 8 to 3
move 2 from 5 to 2
move 14 from 4 to 2
move 1 from 6 to 3
move 1 from 6 to 9
move 1 from 5 to 3
move 3 from 8 to 2
move 10 from 4 to 7
move 5 from 9 to 2
move 3 from 4 to 7
move 1 from 1 to 4
move 3 from 2 to 5
move 2 from 3 to 7
move 1 from 4 to 2
move 18 from 2 to 8
move 3 from 8 to 4
move 5 from 3 to 1
move 1 from 3 to 9
move 1 from 9 to 3
move 8 from 8 to 7
move 2 from 5 to 4
move 1 from 5 to 6
move 1 from 2 to 5
move 1 from 5 to 8
move 1 from 6 to 9
move 3 from 2 to 7
move 27 from 7 to 4
move 2 from 2 to 4
move 4 from 8 to 4
move 1 from 9 to 8
move 3 from 1 to 6
move 1 from 3 to 5
move 3 from 8 to 3
move 1 from 1 to 4
move 1 from 8 to 1
move 3 from 1 to 4
move 2 from 8 to 2
move 2 from 6 to 2
move 8 from 4 to 9
move 1 from 7 to 1
move 1 from 5 to 4
move 1 from 7 to 3
move 4 from 2 to 7
move 1 from 8 to 6
move 8 from 9 to 7
move 1 from 6 to 3
move 3 from 3 to 4
move 37 from 4 to 1
move 1 from 4 to 5
move 13 from 7 to 8
move 6 from 8 to 4
move 5 from 8 to 3
move 1 from 7 to 6
move 4 from 1 to 5
move 1 from 6 to 5
move 2 from 8 to 4
move 32 from 1 to 5
move 1 from 1 to 4
move 5 from 3 to 5
move 1 from 3 to 2
move 1 from 2 to 9
move 19 from 5 to 2
move 1 from 9 to 1
move 16 from 5 to 1
move 7 from 5 to 6
move 1 from 3 to 1
move 11 from 1 to 2
move 18 from 2 to 4
move 1 from 5 to 9
move 8 from 6 to 1
move 10 from 2 to 6
move 7 from 4 to 9
move 2 from 2 to 1
move 7 from 4 to 2
move 5 from 4 to 5
move 2 from 9 to 6
move 9 from 6 to 3
move 5 from 5 to 3
move 8 from 4 to 9
move 7 from 9 to 8
move 4 from 2 to 9
move 10 from 3 to 1
move 6 from 8 to 1
move 2 from 6 to 3
move 5 from 3 to 8
move 3 from 2 to 7
move 1 from 9 to 5
move 1 from 3 to 5
move 2 from 7 to 8
move 1 from 8 to 9
move 1 from 6 to 1
move 23 from 1 to 4
move 2 from 5 to 3
move 1 from 8 to 2
move 2 from 8 to 5
move 2 from 5 to 6
move 1 from 2 to 7
move 1 from 7 to 5
move 4 from 9 to 7
move 1 from 7 to 5
move 1 from 3 to 6
move 3 from 7 to 4
move 1 from 3 to 8
move 1 from 4 to 6
move 6 from 1 to 8
move 4 from 6 to 4
move 2 from 9 to 1
move 1 from 5 to 1
move 19 from 4 to 2
move 2 from 9 to 3
move 1 from 9 to 3
move 9 from 1 to 8
move 1 from 5 to 8
move 1 from 9 to 3
move 2 from 3 to 9
move 3 from 8 to 4
move 1 from 4 to 9
move 1 from 9 to 5
move 2 from 3 to 4
move 6 from 4 to 7
move 3 from 9 to 5
move 4 from 4 to 7
move 1 from 5 to 6
move 18 from 2 to 7
move 13 from 7 to 9
move 3 from 5 to 1
move 1 from 2 to 1
move 1 from 6 to 5
move 3 from 1 to 7
move 1 from 1 to 5
move 7 from 9 to 6
move 8 from 7 to 4
move 11 from 7 to 6
move 5 from 9 to 2
move 17 from 6 to 1
move 2 from 5 to 1
move 11 from 8 to 1
move 20 from 1 to 2
move 3 from 8 to 1
move 1 from 9 to 8
move 1 from 6 to 1
move 11 from 1 to 7
move 18 from 2 to 3
move 12 from 4 to 8
move 11 from 7 to 3
move 7 from 2 to 3
move 2 from 1 to 5
move 1 from 1 to 3
move 1 from 8 to 1
move 1 from 5 to 9
move 1 from 9 to 6
move 1 from 8 to 7
move 1 from 5 to 3
move 1 from 6 to 7
move 2 from 8 to 1
move 8 from 3 to 2
move 7 from 2 to 9
move 6 from 8 to 6
move 1 from 9 to 3
move 2 from 6 to 4
move 5 from 9 to 6
move 7 from 6 to 2
move 8 from 2 to 9
move 2 from 1 to 9
move 2 from 7 to 2
move 2 from 4 to 8
move 1 from 2 to 7
move 25 from 3 to 7
move 7 from 9 to 7
move 1 from 2 to 5
move 1 from 1 to 4
move 3 from 8 to 1
move 3 from 1 to 8
move 3 from 7 to 8
move 15 from 7 to 3
move 10 from 8 to 3
move 1 from 5 to 7
move 1 from 8 to 5
move 3 from 9 to 2
move 1 from 6 to 4
move 2 from 2 to 7
move 1 from 2 to 5
move 14 from 7 to 9
move 1 from 6 to 2
move 1 from 7 to 1
move 1 from 5 to 4
move 3 from 4 to 3
move 1 from 7 to 6
move 1 from 2 to 7
move 1 from 1 to 2
move 3 from 9 to 1
move 1 from 6 to 2
move 2 from 2 to 6
move 17 from 3 to 6
move 1 from 8 to 3
move 1 from 5 to 4
move 2 from 7 to 2
move 9 from 9 to 8
move 1 from 9 to 3
move 16 from 3 to 2
move 1 from 7 to 5
move 5 from 6 to 5
move 1 from 1 to 6
move 1 from 4 to 1
move 1 from 9 to 3
move 9 from 8 to 6
move 3 from 1 to 5
move 1 from 9 to 1
move 16 from 2 to 1
move 2 from 2 to 7
move 2 from 3 to 9
move 2 from 7 to 4
move 2 from 9 to 3
move 3 from 3 to 5
move 1 from 4 to 5
move 1 from 4 to 2
move 1 from 1 to 7
move 1 from 7 to 1
move 1 from 3 to 6
move 2 from 5 to 1
move 3 from 6 to 2
move 2 from 5 to 8
move 8 from 5 to 4
move 1 from 5 to 3
move 1 from 3 to 2
move 1 from 8 to 3
move 1 from 3 to 8
move 4 from 1 to 7
move 9 from 1 to 7
move 6 from 1 to 8
move 3 from 7 to 4
move 7 from 6 to 7
move 11 from 4 to 3
move 2 from 3 to 8
move 8 from 3 to 8
move 4 from 6 to 1
move 1 from 7 to 4
move 2 from 1 to 2
move 8 from 7 to 2
move 1 from 4 to 8
move 10 from 8 to 2
move 2 from 6 to 1
move 1 from 1 to 4
move 1 from 4 to 8
move 2 from 1 to 4
move 6 from 6 to 5
move 1 from 1 to 9
move 2 from 6 to 8
move 1 from 4 to 5
move 1 from 6 to 9
move 4 from 8 to 9
move 1 from 7 to 1
move 6 from 8 to 6
move 1 from 6 to 1
move 1 from 4 to 9
move 2 from 9 to 5
move 5 from 5 to 9
move 8 from 9 to 5
move 2 from 8 to 5
move 3 from 6 to 9
move 8 from 5 to 7
move 5 from 5 to 6
move 1 from 9 to 2
move 1 from 3 to 1
move 1 from 6 to 7
move 1 from 5 to 6
move 24 from 2 to 4
move 3 from 9 to 7
move 16 from 4 to 5
move 2 from 1 to 3
move 12 from 5 to 6
move 1 from 9 to 5
move 4 from 5 to 9
move 1 from 1 to 6
move 1 from 5 to 2
move 2 from 9 to 8
move 1 from 8 to 1
move 5 from 4 to 5
move 2 from 3 to 5
move 1 from 8 to 3
move 1 from 1 to 6
move 3 from 5 to 7
move 1 from 9 to 1
move 1 from 2 to 8

1
2022/full/day06.txt Normal file
View File

@ -0,0 +1 @@
wzsspbssbhshchmmrmprmrfrsfrrjhjphjjtppbfflqfqppdhdbhdhbbjgghgzgsgfsfhfhvvwcwhwwnppsbsggqnnvvtffpssjfjnnltntdtdddptprppjmmqssrlrplllfrrzggbmmlmnmtnnzddfdgfdfsstbstbbzcbbcjcvvfwwwzlzssglsgllnbnmbnmbbgmmppmwwsrrzqqvgqgnqnmmswwrnnbsnnbdbwwqnwqnwwzzqwzqzjqqwbqbccjcwwjlwjwppqfqjffwddrzrjzrjzzzhchjjlqqrggzvvnlvnvjvhvnvjvbbvdvldldbbwddtsscbbhccmbmbppbmmgjggcjjlrrwjwtjwwmffgddwvdvbdbvvhchmhmdmwwbjbjcbbcmbmmslmlslsjjrnrjrjpjcjgcjcjbbwsbsbfssjzsjsggcmcsswgssbbqpbqqdsdqqztzmzpmpbmbvbjjtrjtthwhbhnbhnbnssvpvsppgrrcwrrmqqhpphrpphchvhphqhbqbtttllsrlsrshrrmhmvvrmrnngbgnbnpbprrrftfjtjwwmrmvmcmvmrmwmssrccfbbhppjbpbwbqwbqbzzfmzmtttjbbvcvppmwwrbbzsbzbfzfdzzhrhzhvvsqvsqsnslljwllqlwllvccnttzhtzzpspqspqsqgsssvnsvshvsvqvnvlldbbfdfmmpbpgphhpqhpppchhbfbrfrllntnznrrhdrdhhdhjjgwwqhhfssjbjwjqqbffvvcrchccwmcwcllljtjrrqgrrdcrddvfvwvzzjqqcffgjgzzdhdwdssffjjhccggmtmltlhtthzhvhlvlddsfsbbtjbjcbjcjzcjjpfjfzzpnnbtbqtbqtqptpnplllbzbllhbllnqnttpddqvdqvqmmjnjggnnnhqqfcqcffqppdgpddvqddmhmrhrtrmrzmzhzpzlzqlqpqhphrpppjqqppzbzmmjgggqtggtjthhlclnclcnccmcppdcpddqrrfgrgbbhwhdhrrqtqpqjpqjpqjqqmcqmccnngqqqmtqtssnvnzvvpcpwcwwqcqqqfcqffsvsmvmttttmrrzssghgssjmsmbmvvwggggzhhfvdpgjmmvzbfjghqhrfbpmbvjzwvfmcthrqwdhghpwsspmhpqnmwhjzpnlzfnvhdnnrqwnvctbmjqzhqrpjlwrssdlwqzmsfrfzmgjhnwwnwczswnhsdbvqbmdlvntsdrhrjjcjjhpbblgwhjwdcdjtpvtmslwvncwdjbwzvbpzbvddvssnrhtshrcvnhqnpmjzfswqbbrztnwjcpflfbhnphfwmjvnvtswgfttgjcqcngmmwjlfsprwfcfwcmgrgbnqmzbtzbtbztngvrzpsnrzvhbsdjnzpwwzllgnfdrlwpmnrznqsqcmvnfbnhqjddvcjmtgbpbmsgqdqzflmlmqncmhwltrmdmgnwpfwddrdpfhsgsnggchzjhgpwrsmdzgjtrgmnprhbwbcbpzbdvvstfqcnqzbdjqpmrdbtgcthtclftghhmnrzrjqqsbndhpvmdpfpwdlhvmczvdfgvpqclssvlhqnhlcfnfbvtspdzmgzdctvpdcwchtqhpsgmmblspjdlvgblbpgrfrgnqqsphcsrgfsdmpqscbjmnqrfbcwfthdtswbzthpnvsfbntnbmmgpfzlqwhppvvdrmwbqzbgppbgsqmjfqtmntgwpnccthftwdmvwmnchlbjhsnmbhndczbrhhjpbvnjdzrcndbbmfwfwsjwfgbqhwhrsvlngsbhhlrdjzzbmjpsqhlpzwcsntjhlmngblspmsjrjwsjsrqwnrcwsmcsbmpjwrthbqhrschrmrppnnbmjbvjzlmzsrfdwqlfnfjljftjvzsqdwlhbblqcdlqjbprpcllhlhmwrbrlgfrcqshrtjpnmhljttdvpfnhdjqvjhhfczwvbzqgnzgljcfrbpgwnfhfchwzqmqqzpbcdpqmnbrppzblnnzqrfnmgtljwnfgzwvnjppdbdhbznvpgwhbdjjvlspgwgjsmfsvllpgwlfnnptmwnfsshjjvqzjwrqpvmsphpmftqdllqqdzcjwfvpftgvspprdwvvcnglmbpntghntdwpjvvsppgjvnbjgvtzchtqtwbddncsbrfcvrnvlggvwgmmnfzrswnzjrwthzmdsmzqmzsnrqsnslnhmfqljnnnzshqfqshrhhjmnhdgphctswdbhnrcgnzmmzqpjqbtdfhhltsmvvtntbgsznshhsghblhlhqpmdcfhmnfzvhgnfsfflcfwbfqzmccrjdpfvphtqbrdnzjfmfhbzqcpdnjdcgwprvchlzrcvrghgjqncjvnndbcshntrfsbsnmjlhclnzpfdgztflcpwqpnvlscfndwqzfvcmpgfncszpmwcsrdbrrhdjvmthslfvmlgpqhlgwhqnjljcvhswbsbqfrfhvzwjvdmhzsgbmbmfnbpclqdwhvrlpppszptjvwtvdmfltfqqgjttdggcvllblnnhjqnjzhvpgpzzpzwbpjqbthnjjlmsjgjzqwnjlqrcdmmvsldtcrzqdrcmwqhnhfghdlmzwcspgmlpzhbdsmlwlqnhhvcvdfzmvfwpbfmjtdllprfqzzjpbrshdzgspsrlrwrhdpmznzzqngwrzqpmtwgbsswrnnnfctjhbcftnslsqwjvmfwfdvfqcnsvfsvgstgbzpmljjtlvtnfsdzpvcgbjqwgbgzqbjfgltqvnhffflsbjzfqfrfbssrvvwqvqptmhrbgllqjwptrzgvqgccsrvbgtvmzfzlmtqrgfwhzddsptclbhjlwqfntvjqdvcddnffmbtqrnsvtmlvljcqdsrpggcmqvmmlzwwbgznhblwzjdppvtqzjvcmtfzhdzjplrdbrfrgzpldvnsgqlbwbmfvrbgwzmjmmqdfgwtbgtzmdqnvqbwvcfjhddqvnjtjlhhjnltbtqqvblwlmglrqcrcfjvdntrnqzzbmrjqglmrdcjgnshcghtprjqqsdrmgdnzmzcfqqdtjtrqgtqtgrpmmgzjtcrznmqccjbdpbvrnnbmbzvgdcnrczbctbrsrrqrjnfcdpzlnngwvcdtbbgssvhpptntqdzhcqtlpvzjbfgzggrgrcgtdfjbwdcrpztnfcdbscnlmqmwcbmtnddgbmhwsgvcfdcmhlsvtnqtmrnsjzhppgwvzlmhwwmpfjzrfbhsgntzrdhwswrnfmmmczqrvdrqnhgrvqbdddhglwsftsljvgbnjqfwfzsspdqvgsnlgfsfpvdrjhzcldtrmjjrmdhvvfrjldhhtqnvsvlldjpjbpwstfsmrpmbqbnnpvqtbgjvblthbmwqtfcfgnjscvtbvlqcmlhffpzgjzfscsqwnhrjhvbrrzwqvbjwtwhtqsdbssfgncppnsfgfltdcbjqjzqqtprsbvjzhmchnltvmbsvpvhgzhfhbrnttsqbcmwpdnwqqgdrjrdwdhtzwsmcdffqgsddvbzfjhtfhtnfdbfrwmdtcqshfjrcpswzcptgwgmctpmzjdbqlmqwthmnfplmctpsslcsdtqpqhjtmjdnmnqnjgchwstsmtpvsmgpsbfgwqnzhrdgdvcdlcldfcmjvsdldgbmhltjhczffwmzqssnhfnwftfgpshntjbpjdffjpcmcpwhclrrwqcqzmntjglzgcfrplfpvprtpvpjdlcrfwrtrzdzmhsrsmdcpqqrqgvfpdbmzbzqdfhpplmgfrdghclbclgswvwhhdvcpmpzflpffmptcrwglftztccrpbrvmpnqmqdgjgrrlbtqtvgcjpljttwtdslqjqlsdpblgrqbrtbmtblfbqtbvsqhpqzpqfhjqpmjrmcvqmsbbpjpdncgnjftclbltwszrrfzqbjcdtphcvpmbhppvwjwlprgmghrjzzgnvzlvghnjbzqjpdgzfsnjchpbzqdzpsjmsrvvqwjcpwznlpbjldlrdfqtrzhqzcnpjqbbbf

1318
2022/full/day07.txt Normal file

File diff suppressed because it is too large Load Diff

99
2022/full/day08.txt Normal file
View File

@ -0,0 +1,99 @@
313213123212200312011243203120214010202554420335045116203101005212525131015305511140012431022113113
222021333112322244231542054023354511304431216312534453560105660253445311020244233130144313440030322
200012220300132310233100025524032003355144536126232161330106115213441450552235514000243120210031130
102111124044033113241415155401056014506203413216651520206613342353052505445000321043121021430440021
221134021010031320101542213340113552161113350123516154134654046250223033000413443321231233142213010
112241233114245202523201433013460320664034202602144006022621253536213222400131120345151014014131133
132211130114141401325141212460540656525106651152012063404633651340223361443201520054113541144043031
323140320024314005210155316202152552621415660063112177564603241212312025036551350313225504314404112
014013242041230510442265205625331115540222744516266167254216354043533020346502032534231121044441220
233414030101315255335126055263144512111777464611565216157441673706100506241423030403420343112342030
133144314412553330012446404244433465434666762135116677765213463444460612511131340332552424201204120
010320402332512110363213044530335655613562223756572424746437567672262256431540210005310544243444101
324403411232230200215144254550257275144535323452276762234354361552536153612012260502425410505314212
044143021304533036524115200363122146144443357746134567133417572143572217253466665420004544002052304
031301205442313664253200353721523337451137554555385833341715227554331566151244334446363035232422032
412021132254126340642250212415471513377143653545744364662761514364426436251422450305502445230351142
423013525424334650512351242132544127615655738268233852527877887577454317715373566210510633013145020
314013042244622602006117664713652263528475833433263846468763678447134716635345050225504112315124312
210530032555051320514661111414734263472852682724485772623266565822423365264512541061226540103142223
202523210140346233027372362557125436368725536228624865344774378537888747171665564143331101501212340
312102150200503360534132445517484678583587678756766763747725475724228724317675166660536246102044404
014501150514404506226424155762432386227846258625478334768375862827476433553651311460116133631440213
145345025402132601222234271268834838244287765994936689397836424284644676342577451356463132062234232
030520533600060465674743543832435622275594666933473957864637427284284528866426734257033413611153542
111125222126126664625217555874224623337857863456948836785373353757744683247375632677514312554402024
454344234313551645731724622525365832657894545768964536939387863978465673442253722125752553236132004
141351656653224237252122854224855258938593946648537669944575478986734723225856761571634036114323202
301354130411223555466416844555847677853855433636774857897563386873392265447728545634555234214003555
324351500351156142554654722557458488698547355994463766454687489898485753473777574124613414652504004
000202526603566624271288867428799685358698759656849978553895836996388433252545546266753551322305123
142140450656776227714466585833798874975635767795445874946645465477849772464684527525213236023524220
324262353505673315724236445748536388973668654588599896854469535494838643744387872721615221063235321
552206463167666154577658258569744567339446596474586868848866645743399869362886626547344767533546153
352323434663437355725427826449799477395999565764668865854945787936654594832633678767541225131001503
440166362233562667478335763956389857755767497475848959778498799895595785387844464757513162265652640
104122124642766642664452283555537376598457767558647554969995685645795999475473687336165523560052001
255352243015641217534667849769975859955778464876555786747474774794864778373768452562637255330444232
456220432747476336866782246873698697677699688678997975678548856759743777979632262638565415133210633
354641641663166247236463863687744889449497969668886767686756898498698544578857834482516366746042103
125201564115437683566423743488648645944969969766988857659599646944656843556585768447477145122536100
565166453317161563746425435958546648857589858689866779576599554476785965354884443284615264253254316
121246126671552573824643637663796768749697876859599686798755755668478994537789677336675255111501306
360355134677155672632437676667797548778989878956585555755888869798448799556895227877387243567410342
201045427623176635776469999883749944896899977995889968875595559556975886998744463243563112165201326
352250115546124536536769454447786744475757988989886986985776968688899563536676844455461472345336201
444012305276547277522595375654994558855859877987996678887769879954854599865599846623773465534004160
003621673437674224248486547979885878957565757686996887766986595599447858644667462254244517674205046
045265132276456334554365893935749649965989576778789869677576755756899986563778785582684657425224532
256151375615717542563666894835779554876779596976976699887778577957456866545674477228666746346403631
161152464371764263643334333389748956969597666797767878866755966565484647664843525828682412373755454
502011544714165463843278447485479797867666888668797796768977767569575788836334565474627531473704246
151460364232447443233565968759985868786557997798976867676959589967898874545836432537554441566122314
325354014323767722264889584534897666569996596668678778968696799996649764974489874252576563221244356
300165663442414468382638967476995984959988868887699967676597986577798947648889527728225341345144126
523044146537227284236854867884546566896896589678689877799567996884747789569869374746443236356121631
623520016256236672238393557665746588457977578897867867689877778857948885353767526367472655634211324
513112323743777428355697564974758755988785986568979868979685685997847967586943842248473255451053311
450020506764535784366644976997588757498856779786876686775868855996746554394579645638756632417635430
333302106653766675873339799535474646879996789788987875587977755587884588498366525263657241244563411
021603345313213632267754575346995947848565695878969885767869775868759846376874235783854235221066060
451051105676415353834239879477689664878678578559658579558858859685656646333643282578751361221450043
323133151167312457234657559765757999468467698869969666865897797857485499569838464565771443341433624
351226435216677645378442636393858569688464696659679658777559879978765539986842833528347477142364355
312522015134552576843564246393479975856585945659576986575979678487794748787843877358147735663364153
436221405132742616333723774335457748498747869445768557777496645469557694497322763335217424704452516
531453464276746646458848784658447874499485559877948986585644748765566863496685884585514544145343261
124004035175455643547236885494794479865464946999998568586788689967343377758845738571672264321061003
200155306351543777457257657968974568856495865454798449784799858884637386375422526864243565062364102
445601414321444235648773664866559437996644487476459565964785659539635568456223755627145663416360463
450034302502443262354377457789598776596746648495968457946465588399656898646426472411777146341644150
023146264504256441756645634487555664987468946766784647877558359936934483654774826324735714633603030
333342045300642417421427522458538378785933374679488696549488964673985948667688553344343522163201010
455545402043235615564685485576228935958544883643955984493945756635487843653852747147246556553523510
521503005555124536565566284723484688885348465998948435535997783785742684873228712152117622054235215
312504066020457274731625463858577544637764966338466339435677364997568623562286441516367015430243140
205031053461063473777474186844553532897797357638539497889554739476455778658267742121765420506102155
234254241452503617412556672484735427269749864873783849964559983463526474536714377341620430652445005
005122256601541121767617243673775345873688335643477574686454362545566824655271216641353663405312143
433412443503526366274346321587248483458325774873734889987843368227357425636513234740304061623033442
150425005143315445343366357776572258884478742563678357783845862235758564513525337622046146253440425
225155323264631456635462325511885764326675428846268646575225734474437376612544667111053406332354205
035014011000365630427277363261244836668367562448734772533252234588746775752633154601553624254020455
012332415442566650666617225747354638747746384682743326746678826728355131225614470132623462424342514
013524113311511615516563562155256314453777643324383464236254565752742637247411046651633511302344051
212122212430404140032134131564756752725322885466434352224875446515552517267614410524244004301240143
311400235445132520254065617566464245641623888587556667385287735312776421161334445544251524420400232
440215452341344043062300567544524332733611636552822742567416277354477557756312354353622415135520342
212430430313114143406656305336551452762327233736172563224242725162751616161102623013055041203553040
321010353433305435042151016603142762425754273737777221111751751754217734105034366116400050235001301
141012030043441152515110066520525231112547624256173331346341451761472053411546323404310404443302411
133133034522454043232213312145664546126452755453724144154261454733124054403605004150535010413000334
331412441152240551104612131344064131112564126362561532523311462604061151623121543003234021543312303
010301442302500534021525552205536466144454523741535255444641345430402356234514221410435324321440211
222301014410242404221240250563134040056104626021173454550103400400616550340400310015454450242211021
233412422204111420244300456264320032401430366334634641441411125102262216452333414201235210001133200
132244430320123233143125240232350142156620032556633233042303530460352401020133104323414224314240333
003213243020203044035550441012322051645661162162123160565554312321050133555533333123214002014231123
000032030402033315113220225514041611664662663525144303562161423513133325130431534323303033322212313
101211324120322333355055001035515221630532526633042003421442155144120444232152535003241233413001002

2000
2022/full/day09.txt Normal file

File diff suppressed because it is too large Load Diff

14
2022/python/_sample.py Normal file
View File

@ -0,0 +1,14 @@
import shared
from pprint import pprint as pp
def run(SOMETHING):
pp(SOMETHING)
def main():
spl = lambda y: [int(w) for w in y]
rows = [row.rstrip().split() for row in shared.load(3)]
print(run(rows))
if __name__ == "__main__":
main()

33
2022/python/day01.py Normal file
View File

@ -0,0 +1,33 @@
import shared
from pprint import pprint as pp
def run(rows):
elves = []
current_elf = 0
for row in rows:
if row == '':
elves.append(current_elf)
current_elf = 0
continue
current_elf += int(row)
three = 0
for x in range(3):
most = max(elves)
idx = elves.index(most)
elves.pop(idx)
three += most
print(three)
def main():
with open(shared.get_fname(1), "r") as f:
rows = [x.rstrip() for x in f.readlines()]
run(rows)
if __name__ == "__main__":
main()

75
2022/python/day02.py Normal file
View File

@ -0,0 +1,75 @@
import shared
from pprint import pprint as pp
rock = "rock"
paper = "paper"
scissors = "scissors"
lose = "X"
tie = "Y"
win = "Z"
Moves = {
"A":rock,
"B":paper,
"C":scissors,
"X":rock,
"Y":paper,
"Z":scissors,
}
Scores = {
rock: 1,
paper: 2,
scissors: 3
}
LosesTo = {
rock: paper,
paper: scissors,
scissors: rock
}
WinsTo = {
paper: rock,
scissors: paper,
rock: scissors
}
def winner(opponent, me):
if opponent == me:
return 3 + Scores[me]
# wins
if (opponent == rock and me == paper) or (opponent == paper and me == scissors) or (opponent == scissors and me == rock):
return 6 + Scores[me]
return 0 + Scores[me]
def which_move(opponent, me):
if me == lose:
return WinsTo[Moves[opponent]]
if me == win:
return LosesTo[Moves[opponent]]
if me == tie:
return Moves[opponent]
def run(moves):
score = 0
for move in moves:
opponent, me = move
my_move = which_move(opponent, me)
o_move = Moves[opponent]
pts = winner(o_move, my_move)
score += pts
print(score)
def main():
rows = [row.rstrip().split() for row in shared.load(2)]
run(rows)
if __name__ == "__main__":
main()

33
2022/python/day02_golf.py Normal file
View File

@ -0,0 +1,33 @@
import shared
R = "A"
P = "B"
S = "C"
X = "X" # lose
Y = "Y" # tie
Z = "Z" # win
Moves = {
R: {X:S, Y:R, Z:P},
P: {X:R, Y:P, Z:S},
S: {X:P, Y:S, Z:R},
}
Scores = {
R: 1, P: 2, S: 3, X: 0, Y: 3, Z: 6,
}
def run(moves):
score = 0
for o, a in moves:
score += Scores[Moves[o][a]] + Scores[a]
print(score)
def main():
rows = [row.rstrip().split() for row in shared.load(2)]
run(rows)
if __name__ == "__main__":
main()

32
2022/python/day03.py Normal file
View File

@ -0,0 +1,32 @@
import shared
import string
def part1(rucksacks):
total = 0
for comp1,comp2 in [(r[:len(r)//2], r[len(r)//2:]) for r in rucksacks]:
c1 = set(x for x in comp1)
c2 = set(x for x in comp2)
match = list(c1.intersection(c2))[0]
total += string.ascii_letters.index(match) + 1
print(total)
def part2(rucksacks):
total = 0
for idx in range(0, len(rucksacks), 3):
r1,r2,r3 = rucksacks[idx:idx+3]
c1 = set(x for x in r1)
c2 = set(x for x in r2)
c3 = set(x for x in r3)
match = list(c1.intersection(c2).intersection(c3))[0]
total += string.ascii_letters.index(match) + 1
print(total)
def main():
rows = [row for row in shared.load(3)]
part1(rows)
part2(rows)
if __name__ == "__main__":
main()

38
2022/python/day04.py Normal file
View File

@ -0,0 +1,38 @@
import shared
def part1(x):
internal = 0
for pair in x:
l,r = pair.split(",")
l1,l2 = map(int, l.split("-"))
r1,r2 = map(int, r.split("-"))
if l1 <= r1 and l2 >= r2:
internal += 1
elif r1 <= l1 and r2 >= l2:
internal += 1
print(internal)
def part2(x):
internal = 0
for pair in x:
l,r = pair.split(",")
ll = list(sorted(map(int, l.split("-"))))
rl = list(sorted(map(int, r.split("-"))))
set1 = set(range(ll[0], ll[1]+1))
set2 = set(range(rl[0], rl[1]+1))
if bool(set1 & set2):
internal +=1
print(internal)
def main():
rows = [row for row in shared.load(4)]
part1(rows)
part2(rows)
if __name__ == "__main__":
main()

82
2022/python/day05.py Normal file
View File

@ -0,0 +1,82 @@
from pprint import pprint as pp
from shared import load_rows
from scanf import scanf
from string import ascii_letters
import re
def load_crates(x):
done_crates = False
crates = []
instructions = []
for row in x:
if done_crates:
instructions.append(row)
else:
if row == '':
done_crates = True
else:
crates.append(row)
crates.pop()
return crates, instructions
def to_lists(crates):
parsed = []
reg = re.compile(r"[\([{})\]]")
for row in crates:
parsed.append([x for x in reg.sub(" ",row)])
parsed = list(zip(*parsed[::-1]))
parsed = list(zip(*parsed[::-1]))
parsed = list(zip(*parsed[::-1]))
cleaned1 = [[x for x in y if x.strip()] for y in parsed if y]
cleaned2 = [x for x in cleaned1 if x != []][::-1]
return cleaned2
def parse_instructions(crates, instructions):
for instruction in instructions:
count,_from,_to = scanf("move %d from %d to %d", instruction)
print(count,_from,_to)
_from -=1 # 1 based yo
_to -=1
for x in range(count):
value = crates[_from].pop(0)
crates[_to].insert(0, value)
return crates
def parse_instructions_pt2(crates, instructions):
for instruction in instructions:
count,_from,_to = scanf("move %d from %d to %d", instruction)
_from -=1 # 1 based yo
_to -=1
moving = crates[_from][:count]
print(instruction, moving)
for x in range(count):
crates[_from].pop(0)
for x in reversed(moving):
crates[_to].insert(0, x)
return crates
def part1(x):
crates, instructions = load_crates(x)
crates = to_lists(crates)
crates = parse_instructions(crates, instructions)
print([c[0] for c in crates])
def part2(x):
crates, instructions = load_crates(x)
crates = to_lists(crates)
crates = parse_instructions_pt2(crates, instructions)
print("".join([c[0] for c in crates]))
def main():
rows = load_rows(5)
#part1(rows)
part2(rows)
if __name__ == "__main__":
main()

20
2022/python/day06.py Normal file
View File

@ -0,0 +1,20 @@
from shared import load_rows
def part1(row, group_size=4):
for x in range(len(row)):
if (len(set(row[x:x+group_size])) == group_size):
print(x+group_size)
break
def part2(row):
part1(row, 14)
def main():
rows = load_rows(6)
for row in rows:
part1(row)
part2(row)
if __name__ == "__main__":
main()

153
2022/python/day07.py Normal file
View File

@ -0,0 +1,153 @@
from pprint import pprint as pp
from pathlib import Path
import json
from shared import load_rows
import re
from functools import reduce
import operator
PWD = []
FS = { "/": {".":{"size":0, "files":[]}} }
def get_keys(input_dict):
for key, value in input_dict.items():
if isinstance(value, dict):
for subkey in get_keys(value):
yield key + ',' + subkey
else:
if key in ("files"):
continue
yield f"{value}"
def getFromDict(mapList):
return reduce(operator.getitem, mapList, FS)
def setInDict(mapList, value):
getFromDict(mapList[:-1])[mapList[-1]] = value
def addInDict(mapList, filename, value):
try:
v = getFromDict(mapList[:-1])[mapList[-1]]
v += value
getFromDict(mapList[:-1])[mapList[-1]] = v
except KeyError:
getFromDict(mapList[:-1])["."] = {"size": 0, "files":[]}
v = getFromDict(mapList[:-1])[mapList[-1]]
v["size"] += 0 # Value
v["files"].append(f"{filename}:{value}")
getFromDict(mapList[:-1])[mapList[-1]] = v
except TypeError:
v = getFromDict(mapList[:-1])["."]
v["size"] += 0 # value
v["files"].append(f"{filename}:{value}")
getFromDict(mapList[:-1])[mapList[-1]] = v
def part1(rows):
build_fs(rows)
#calculate_directories()
def calculate_directories():
keys = list(get_keys(FS))
new_FS = {}
for key in keys:
pwd = key.split(",")
size = int(pwd.pop()) # split out size
pwd.pop() # remove .
pwd_key = ",".join(pwd)
parent = ",".join(pwd[:-1])
new_FS[pwd_key] = {"size":size, "full_size":size, "parent":parent}
print("made")
#pp(new_FS)
#print("----")
#for pwd, directory in new_FS.items():
# print(pwd, "\t", directory['parent'])
print(new_FS.keys())
print("keys^")
for pwd, directory in new_FS.items():
parent = directory['parent']
if parent:
print(parent)
#print(f"{pwd}:{parent} Adding {directory['size']} to fullsize {new_FS[parent]['full_size']}")
new_FS[parent]["size"] += directory["size"]
print("added sizes")
sizes = []
for k,v in new_FS.items():
sizes.append(v['size'])
total = 0
for size in sizes:
if size <= 100000:
print("+", size)
total += size
print("=" ,total)
def build_fs(rows):
LS_ING = False
for row in rows:
parts = row.split(" ")
if parts[0] == "$":
if LS_ING:
LS_ING = False
# Action
if parts[1] == "cd":
if parts[2] == "..":
PWD.pop()
else:
PWD.append(parts[2])
#print(PWD)
elif parts[1] == "ls":
LS_ING = True
continue
if LS_ING:
if parts[0] == "dir":
add_directory(parts[1])
else:
add_file(parts[1], int(parts[0]))
jp(FS)
def jp(d):
output = json.dumps(FS, indent=4)
output2 = re.sub(r'": \[\s+', '": [', output)
output3 = re.sub(r'",\s+', '", ', output2)
output4 = re.sub(r'"\s+\]', '"]', output3)
print(output4)
def add_directory(dirname):
temp_new_path = PWD + [dirname]
setInDict(temp_new_path, {".":{"size":0, "files":[]}})
def add_file(filename, size):
#print(".", PWD, filename, size)
mapList = PWD + ["."]
addInDict(mapList, filename, size)
curr = getFromDict(mapList[:-1])
print(curr)
#print(curr)
s = curr["."]
s["size"] += size
print(size,s)
tmp = mapList + ["size"]
setInDict(mapList, s)
print("-----")
def part2(row):
pass
def main():
rows = load_rows(7)
part1(rows)
part2(rows)
if __name__ == "__main__":
main()

136
2022/python/day08.py Normal file
View File

@ -0,0 +1,136 @@
from pprint import pprint as pp
from shared import get_fname
import matrix
def part1(mx):
SIZE=len(mx)
MAX_IDX = SIZE -1
data = matrix.matrix_of_size(SIZE, SIZE)
data = matrix.set_matrix_dict(data)
for row in range(SIZE):
for col in range(SIZE):
data[row][col] = { "l": True, "r": True, "u": True, "d": True }
for row, _row in enumerate(mx):
# Skip outer edges
if row == 0 or row == MAX_IDX:
continue
for col, _val in enumerate(mx[row]):
# Skip outer edges
if col == 0 or col == MAX_IDX:
continue
# TODO: slice
# Get a list of indexes in the current direction to check
trees_u_indexes = list(range(0, row))
trees_l_indexes = list(range(0, col))
trees_d_indexes = list(range(MAX_IDX, row, -1))
trees_r_indexes = list(range(col+1, SIZE))
# Get the trees in the line
trees_u = [mx[y][col] for y in trees_u_indexes]
trees_l = [mx[row][x] for x in trees_l_indexes]
trees_d = [mx[y][col] for y in trees_d_indexes]
trees_r = [mx[row][x] for x in trees_r_indexes]
# find tallest tree in line
highest_u = max(trees_u)
highest_l = max(trees_l)
highest_d = max(trees_d)
highest_r = max(trees_r)
# if there's anything as tall, or taller than this tree in that line
# then it's not visible
if highest_u >= _val:
data[row][col]["u"] = False
if highest_l >= _val:
data[row][col]["l"] = False
if highest_d >= _val:
data[row][col]["d"] = False
if highest_r >= _val:
data[row][col]["r"] = False
# count visible
count = 0
for row in range(SIZE):
for col in range(SIZE):
u = data[row][col]["u"]
l = data[row][col]["l"]
d = data[row][col]["d"]
r = data[row][col]["r"]
if any((r,l,u,d)):
count += 1
print(count)
def part2(mx):
SIZE=len(mx)
MAX_IDX = SIZE -1
data = matrix.matrix_of_size(SIZE, SIZE)
data = matrix.set_matrix_dict(data)
high_score = 0
for row in range(SIZE):
for col in range(SIZE):
data[row][col] = { "value": mx[row][col]}
for row, _row in enumerate(mx):
for col, _val in enumerate(mx[row]):
# Get a list of indexes in the current direction to check
# TODO: slice
trees_u_indexes = list(range(0, row))
trees_l_indexes = list(range(0,col))
trees_d_indexes = list(range(MAX_IDX, row, -1))
trees_r_indexes = list(range(col+1, SIZE))
# Grab the trees potentially in sight
trees_u = [mx[y][col] for y in trees_u_indexes]
trees_l = [mx[row][x] for x in trees_l_indexes]
trees_d = [mx[y][col] for y in trees_d_indexes]
trees_r = [mx[row][x] for x in trees_r_indexes]
# Reverse everything but r, as everything is "away" from the tree
data[row][col]["u"] = list(reversed(trees_u))
data[row][col]["l"] = list(reversed(trees_l))
data[row][col]["d"] = list(reversed(trees_d))
data[row][col]["r"] = trees_r
# Calculate score
score = 1 # identity yoooo
cell = data[row][col]
val = cell['value']
# Get the score of visible trees in each direction
for direction in ("u","l","d","r"):
in_line = cell[direction]
if not in_line:
# we're on an edge
score = 0
break
line_score = 0
for idx, tree in enumerate(in_line):
# for every tree, check if its as tall or taller,
# stop countig after that
line_score += 1
if tree >= val:
break
score = score * line_score
if score > high_score:
high_score = score
print(high_score)
def main():
mx = matrix.load_matrix_file(get_fname(8))
part1(mx)
part2(mx)
if __name__ == "__main__":
main()

152
2022/python/day09.py Normal file
View File

@ -0,0 +1,152 @@
from pprint import pprint as pp
import shared
import matrix
MATRIX_SIZE = 500
#MATRIX_SIZE = 40 # sample
HALF = MATRIX_SIZE // 2
H = [HALF,HALF]
T = [HALF,HALF]
# returns (x,y) - so remember to take dx,dy lower
DIRS = {
'U': matrix.M_U, # (0, -1)
'D': matrix.M_D,
'L': matrix.M_L,
'R': matrix.M_R,
'UR': matrix.M_UR, # (+1, -1)
'DR': matrix.M_DR,
'UL': matrix.M_UL,
'DL': matrix.M_DL,
}
def part1(steps):
field = matrix.matrix_of_size(MATRIX_SIZE,MATRIX_SIZE)
for direction, amount in steps:
# move HEAD
amount = int(amount)
for x in range(amount):
dx,dy = DIRS[direction]
H[0] += dy
H[1] += dx
HY,bX = H
# head is in new position
kY,kX = T
field[kY][kX] = 1 # 'T'
# Check if same
if kY == HY and kX == bX:
continue
touching = False
for _, d in DIRS.items():
dx,dy = d
t_y, t_x = H[0]+dy, H[1]+dx
if kY == t_y and kX == t_x:
touching = True
break
if touching:
continue
# assume the same row/column, no movement needed
tY = 0
tX = 0
# if Head X is less than Tail X, move Tail X 1 left
if bX < kX:
tX = -1
# if Head X is greater than Tail X, move Tail X 1 left
elif bX > kX:
tX = 1
# if Head Y is less than Tail Y, move Tail Y 1 up
if HY < kY:
tY = -1
# if Head Y is greater than Tail Y, move Tail Y 1 down
elif HY > kY:
tY = 1
T[0] += tY
T[1] += tX
field[T[0]][T[1]] = 1 # mark visited tails
print(matrix.sum_matrix(field))
def part2(steps):
field = matrix.matrix_of_size(MATRIX_SIZE,MATRIX_SIZE)
S = [[HALF,HALF],] # HEAD ONLY
for x in range(9):
S.append([HALF,HALF])
for direction, amount in steps:
# move HEAD
amount = int(amount)
for x in range(amount):
HEAD_dx,HEAD_dy = DIRS[direction]
S[0][0] += HEAD_dy
S[0][1] += HEAD_dx
#print(HEAD_dy,HEAD_dx, S)
# HEAD MOVED one step
for knot_idx, _ in enumerate(S):
if knot_idx == 0:
# Skip Head
continue
knot = S[knot_idx]
kY,kX = knot
bY,bX = S[knot_idx-1]
# Check if same
if kY == bY and kX == bX:
continue
touching = False
for _, d in DIRS.items():
dx,dy = d
t_y, t_x = S[knot_idx-1][0]+dy, S[knot_idx-1][1]+dx
if kY == t_y and kX == t_x:
touching = True
break
if touching:
continue
# assume the same row/column, no movement needed
tY, tX = 0,0
# if Head X is less than Tail X, move Tail X 1 left
if bX < kX:
tX = -1
# if Head X is greater than Tail X, move Tail X 1 left
elif bX > kX:
tX = 1
# if Head Y is less than Tail Y, move Tail Y 1 up
if bY < kY:
tY = -1
# if Head Y is greater than Tail Y, move Tail Y 1 down
elif bY > kY:
tY = 1
S[knot_idx][0] += tY
S[knot_idx][1] += tX
field[S[-1][0]][S[-1][1]] = 1 # mark visited tails
print(matrix.sum_matrix(field))
def main():
rows = [x.split(" ") for x in shared.load_rows(9)]
part1(rows)
part2(rows)
if __name__ == "__main__":
main()

163
2022/python/matrix.py Normal file
View File

@ -0,0 +1,163 @@
split_word_to_int_list = lambda y: [int(w) for w in y]
split_line_to_int_list = lambda y: [int(w) for w in y.split(" ") if w]
def rotate(m, right=True): # -90
x = list(zip(*m[::-1]))
if right:
return x
return [list(reversed(y)) for y in x]
def load_matrix_file(name, func=None):
with open(name, "r") as f:
my_file = []
for line in f:
my_file.append(line.rstrip())
if func:
return [func(x) for x in my_file]
return [split_word_to_int_list(x) for x in my_file]
def get_neighbors(matrix, x, y, _dict=False):
neighbors = []
# left
try:
if x - 1 >= 0:
if _dict:
neighbors.append({'x':x - 1,'y':y,'value':matrix[y][x - 1]})
else:
neighbors.append([(x - 1, y), matrix[y][x - 1]])
except IndexError:
pass
# right
try:
if _dict:
neighbors.append({'x':x + 1,'y':y,'value':matrix[y][x + 1]})
else:
neighbors.append([(x + 1, y), matrix[y][x + 1]])
except IndexError:
pass
# up
try:
if y - 1 >= 0:
if _dict:
neighbors.append({'x':x,'y':y-1,'value':matrix[y-1][x]})
else:
neighbors.append([(x, y - 1), matrix[y - 1][x]])
except IndexError:
pass
# down
try:
if _dict:
neighbors.append({'x':x,'y':y+1,'value':matrix[y+1][x]})
else:
neighbors.append([(x, y + 1), matrix[y + 1][x]])
except IndexError:
pass
return neighbors
def sum_matrix(mtx):
total = 0
for row in mtx:
total += sum(row)
return total
M_UL, M_U, M_UR = (-1, -1), (0, -1), (1, -1)
M_L, M_R = (-1, 0), (1, 0)
M_DL, M_D, M_DR = (-1, 1), (0, 1), (1, 1)
def get_neighbor_coords(matrix, c, r, diagonals=True):
height = len(matrix)
width = len(matrix[0])
if diagonals:
coords = (
M_UL, M_U, M_UR,
M_L, M_R,
M_DL, M_D, M_DR
)
else:
coords = (
M_U,
M_L,M_R,
M_D
)
neighbors = []
for _c, _r in coords:
try:
value = matrix[r + _r][c + _c] # Try to get a value error
if (r+_r>=0 and c+_c >= 0):
neighbors.append(
[{"c": c + _c, "r": r + _r}, value]
) # woo, no error, this coord is valid
except IndexError:
pass # okay we out of bounds boizzzz
return neighbors
def get_column(matrix, col):
pass
def matrix_of_size(width, height, default=0):
return [[default] * width for x in range(height)]
def set_matrix_dict(m):
for x in range(len(m)):
for y in range(len(m[x])):
m[x][y] = {}
return m
def get_size(matrix):
height = len(matrix)
width = len(matrix[0])
return height, width
def pmx(*matrices, pad=True, space=True):
if len(matrices) > 1:
matrices = list(zip(*matrices))
for row in matrices:
r = []
for col in row:
r.append("".join([f"{int(x)or '.'}".rjust(3) for x in col]))
print(" ".join(r))
else:
for row in matrices:
for c in row:
if pad:
f = lambda x: f"{int(x)or '.'}".rjust(2)
if space:
f = lambda x: f"{int(x)or '.'}".rjust(3)
else:
f = lambda x: f"{int(x)or '.'}"
if space:
f = lambda x: f"{int(x)or '.'} "
print("".join([f(x) for x in c]))
def ppmx(*matrices, pad=True, space=True):
if len(matrices) > 1:
matrices = list(zip(*matrices))
for row in matrices:
r = []
for col in row:
r.append("".join([f"{x or '.'}".rjust(3) for x in col]))
print(" ".join(r))
else:
for row in matrices:
for c in row:
if pad:
f = lambda x: f"{x or '.'}".rjust(2)
if space:
f = lambda x: f"{x or '.'}".rjust(3)
else:
f = lambda x: f"{x or '.'}"
if space:
f = lambda x: f"{x or '.'} "
print("".join([f(x) for x in c]))

58
2022/python/shared.py Normal file
View File

@ -0,0 +1,58 @@
from pathlib import Path
spl = lambda y: [int(w) for w in y]
def load_rows(day):
return [row for row in load(day)]
def load(day):
path = Path(get_fname(day))
return path.read_text().rstrip().split("\n")
def get_fname(day: int) -> str:
import sys
if sys.argv[-1] == "--sample":
return f"../samples/day{day:02}.txt"
else:
return f"../full/day{day:02}.txt"
#############
def load_char_matrix(f):
my_file = []
for line in f:
my_file.append(line.rstrip())
return [list(x) for x in my_file]
def load_file_char_matrix(name):
with open(name, "r") as f:
return load_char_matrix(f)
def load_int_matrix(f):
my_file = []
for line in f:
my_file.append(line.rstrip())
return [list(map(int, x)) for x in my_file]
def load_file_int_matrix(name):
with open(name, "r") as f:
return load_int_matrix(f)
def load_word_matrix(f):
my_file = []
for line in f:
my_file.append(line.rstrip())
return [x.split(" ") for x in my_file]
def load_file_word_matrix(name):
with open(name, "r") as f:
return load_word_matrix(f)
#############
def rotate(WHAT, times=1):
what = WHAT
for x in range(times):
what = list(zip(*what[::-1]))
return what

BIN
2022/rust/day01 Executable file

Binary file not shown.

53
2022/rust/day01.rs Normal file
View File

@ -0,0 +1,53 @@
use std::{
fs::File,
io::{prelude::*, BufReader},
path::Path,
};
fn lines_from_file(filename: impl AsRef<Path>) -> Vec<String> {
let file = File::open(filename).expect("no such file");
let buf = BufReader::new(file);
buf.lines()
.map(|l| l.expect("Could not parse line"))
.collect()
}
// ---
fn main() {
let lines = lines_from_file("../full/day01.txt");
part1(&lines);
part2(&lines);
}
fn part1(lines: &Vec<String>) {
let mut totals: Vec<i32> = Vec::new();
let mut total = 0;
for line in lines {
if line.is_empty(){
totals.push(total);
total = 0;
} else {
total += line.parse::<i32>().unwrap();
}
}
totals.sort_by(|a, b| a.partial_cmp(b).unwrap());
println!("{:?}", totals[totals.len()-1]);
}
fn part2(lines: &Vec<String>) {
let mut totals: Vec<i32> = Vec::new();
let mut total = 0;
for line in lines {
if line.is_empty(){
totals.push(total);
total = 0;
} else {
total += line.parse::<i32>().unwrap();
}
}
totals.sort_by(|a, b| a.partial_cmp(b).unwrap());
let last3 = &totals[totals.len()-3..];
let total: i32 = last3.iter().sum();
println!("{:?}", total);
}

BIN
2022/rust/day02 Executable file

Binary file not shown.

159
2022/rust/day02.rs Normal file
View File

@ -0,0 +1,159 @@
use std::collections::HashMap;
use std::{
fs::File,
io::{prelude::*, BufReader},
path::Path,
};
fn lines_from_file(filename: impl AsRef<Path>) -> Vec<String> {
let file = File::open(filename).expect("no such file");
let buf = BufReader::new(file);
buf.lines()
.map(|l| l.expect("Could not parse line"))
.collect()
}
// ---
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
enum Move {
Rock,
Paper,
Scissors,
INVALID,
Win,
Lose,
Tie,
}
fn main() {
let lines = lines_from_file("../full/day02.txt");
part1(&lines);
part2(&lines);
}
fn to_enum(s: &str, part: i32) -> Move {
if s == "A" {
return Move::Rock;
} else if s == "B" {
return Move::Paper;
} else if s == "C" {
return Move::Scissors;
} else if s == "X" {
if part == 1 {
return Move::Rock;
} else {
return Move::Lose;
}
} else if s == "Y" {
if part == 1 {
return Move::Paper;
} else {
return Move::Tie;
}
} else if s == "Z" {
if part == 1 {
return Move::Scissors;
} else {
return Move::Win;
}
}
return Move::INVALID;
}
fn parse(lines: &Vec<String>, part: i32) -> (Vec<Move>, Vec<Move>) {
let mut oppt: Vec<Move> = Vec::new();
let mut mine: Vec<Move> = Vec::new();
for line in lines {
let split = line.split_whitespace().collect::<Vec<_>>();
oppt.push(to_enum(split[0], part));
mine.push(to_enum(split[1], part));
}
return (oppt, mine);
}
fn score_1(o: &Move, m: Move) -> i32 {
let mut score: i32 = 0;
let scores: HashMap<Move, i32> = HashMap::from([
(Move::Rock, 1),
(Move::Paper, 2),
(Move::Scissors, 3),
(Move::Win, 6),
(Move::Tie, 3),
(Move::Lose, 0),
]);
// For my choice
score += scores[&m];
// for which outcome
if o == &m {
//println!("Tie");
score += scores[&Move::Tie];
} else if (m == Move::Paper && o == &Move::Rock)
|| (m == Move::Rock && o == &Move::Scissors)
|| (m == Move::Scissors && o == &Move::Paper)
{
//println!("Win");
score += scores[&Move::Win];
} else {
//println!("Lose");
score += scores[&Move::Lose];
}
return score;
}
fn part1(lines: &Vec<String>) {
let (oppt, mine) = parse(lines, 1);
let mut score: i32 = 0;
for (idx, el) in oppt.iter().enumerate() {
score += score_1(el, mine[idx]);
}
println!("{}", score);
}
fn score_2(o: &Move, m: Move) -> i32 {
let mut new_move: &Move = &Move::INVALID;
let mut score: i32 = 0;
let scores: HashMap<Move, i32> = HashMap::from([
(Move::Rock, 1),
(Move::Paper, 2),
(Move::Scissors, 3),
(Move::Win, 6),
(Move::Tie, 3),
(Move::Lose, 0),
]);
// For my choice
if m == Move::Tie {
new_move = o;
} else if m == Move::Lose {
if o == &Move::Rock {
new_move = &Move::Scissors;
} else if o == &Move::Paper {
new_move = &Move::Rock;
} else {
new_move = &Move::Paper;
}
} else if m == Move::Win {
if o == &Move::Rock {
new_move = &Move::Paper;
} else if o == &Move::Paper {
new_move = &Move::Scissors;
} else {
new_move = &Move::Rock;
}
}
score += scores[new_move];
score += scores[&m];
return score;
}
fn part2(lines: &Vec<String>) {
let (oppt, mine) = parse(lines, 2);
let mut score: i32 = 0;
for (idx, el) in oppt.iter().enumerate() {
score += score_2(el, mine[idx]);
}
println!("{}", score);
}

34
2022/rust/day03.rs Normal file
View File

@ -0,0 +1,34 @@
use std::collections::HashMap;
use std::{
fs::File,
io::{prelude::*, BufReader},
path::Path,
};
fn lines_from_file(filename: impl AsRef<Path>) -> Vec<String> {
let file = File::open(filename).expect("no such file");
let buf = BufReader::new(file);
buf.lines()
.map(|l| l.expect("Could not parse line"))
.collect()
}
// ---
fn main() {
let lines = lines_from_file("../full/day02.txt");
part1(&lines);
part2(&lines);
}
fn part1(lines: &Vec<String>) {
println!("{:?}", lines);
}
fn part2(lines: &Vec<String>) {
println!("{:?}", lines);
}

14
2022/samples/day01.txt Normal file
View File

@ -0,0 +1,14 @@
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000

3
2022/samples/day02.txt Normal file
View File

@ -0,0 +1,3 @@
A Y
B X
C Z

6
2022/samples/day03.txt Normal file
View File

@ -0,0 +1,6 @@
vJrwpWtwJgWrhcsFMMfFFhFp
jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
PmmdzqPrVvPwwTWBwg
wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
ttgJtRGJQctTZtZT
CrZsJsPPZsGzwwsLwLmpwMDw

6
2022/samples/day04.txt Normal file
View File

@ -0,0 +1,6 @@
2-4,6-8
2-3,4-5
5-7,7-9
2-8,3-7
6-6,4-6
2-6,4-8

9
2022/samples/day05.txt Normal file
View File

@ -0,0 +1,9 @@
[D]
[N] [C]
[Z] [M] [P]
1 2 3
move 1 from 2 to 1
move 3 from 1 to 3
move 2 from 2 to 1
move 1 from 1 to 2

5
2022/samples/day06.txt Normal file
View File

@ -0,0 +1,5 @@
mjqjpqmgbljsphdztnvjfqwrcgsmlb
bvwbjplbgvbhsrlpgdmjqwftvncz
nppdvjthqldpwncqszvftbrmjlhg
nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg
zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw

23
2022/samples/day07.txt Normal file
View File

@ -0,0 +1,23 @@
$ cd /
$ ls
dir a
14848514 b.txt
8504156 c.dat
dir d
$ cd a
$ ls
dir e
29116 f
2557 g
62596 h.lst
$ cd e
$ ls
584 i
$ cd ..
$ cd ..
$ cd d
$ ls
4060174 j
8033020 d.log
5626152 d.ext
7214296 k

5
2022/samples/day08.txt Normal file
View File

@ -0,0 +1,5 @@
30373
25512
65332
33549
35390

8
2022/samples/day09.txt Normal file
View File

@ -0,0 +1,8 @@
R 4
U 4
L 3
D 1
R 4
D 1
L 5
R 2

7
requirements.txt Normal file
View File

@ -0,0 +1,7 @@
black
imageio
matplotlib
numpy
pandas
scanf
scikit-image