Restyled README and file structure

Signed-off-by: Ettore Dreucci <ettore.dreucci@gmail.com>
This commit is contained in:
2020-12-25 23:50:29 +01:00
parent 0ba35ffae1
commit d8db2fcd5d
102 changed files with 7 additions and 32 deletions

35
2020/README.md Normal file
View File

@@ -0,0 +1,35 @@
# Advent of Code
[![GitHub](https://img.shields.io/github/license/Noettore/AdventOfCode)](../LICENSE)
[![GitHub last commit](https://img.shields.io/github/last-commit/Noettore/AdventOfCode)](https://github.com/Noettore/AdventOfCode/commit/master)
[![Python](https://github.com/Noettore/AdventOfCode/workflows/Python/badge.svg)](https://github.com/Noettore/AdventOfCode/actions?query=workflow%3APython)
## Year [2020](https://adventofcode.com/2020/) - Python
| Day | Execution time with CPython 3.8.6 | Execution time with PyPy 7.3.3 Python 3.6.12 |
| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
| [Day 1](https://adventofcode.com/2020/day/1) | [0.040ms](./2020-python/solutions/day_01.py) | [---](./2020-python/solutions/day_01.py) |
| [Day 2](https://adventofcode.com/2020/day/2) | [0.702ms](./2020-python/solutions/day_02.py) | [---](./2020-python/solutions/day_02.py) |
| [Day 3](https://adventofcode.com/2020/day/3) | [0.343ms](./2020-python/solutions/day_03.py) | [---](./2020-python/solutions/day_03.py) |
| [Day 4](https://adventofcode.com/2020/day/4) | [3.036ms](./2020-python/solutions/day_04.py) | [---](./2020-python/solutions/day_04.py) |
| [Day 5](https://adventofcode.com/2020/day/5) | [5.993ms](./2020-python/solutions/day_05.py) | [---](./2020-python/solutions/day_05.py) |
| [Day 6](https://adventofcode.com/2020/day/6) | [2.587ms](./2020-python/solutions/day_06.py) | [2.275ms](./2020-python/solutions/day_06.py) |
| [Day 7](https://adventofcode.com/2020/day/7) | [1.689ms](./2020-python/solutions/day_07.py) | [1.565ms](./2020-python/solutions/day_07.py) |
| [Day 8](https://adventofcode.com/2020/day/8) | [6.313ms](./2020-python/solutions/day_08.py) | [794.417µs](./2020-python/solutions/day_08.py) |
| [Day 9](https://adventofcode.com/2020/day/9) | [7.220ms](./2020-python/solutions/day_09.py) | [4.783ms](./2020-python/solutions/day_09.py) |
| [Day 10](https://adventofcode.com/2020/day/10) | [139.110µs](./2020-python/solutions/day_10.py) | [98.594µs](./2020-python/solutions/day_10.py) |
| [Day 11](https://adventofcode.com/2020/day/11) | [2.879s](./2020-python/solutions/day_11.py) | [419.447ms](./2020-python/solutions/day_11.py) |
| [Day 12](https://adventofcode.com/2020/day/12) | [746.181µs](./2020-python/solutions/day_12.py) | [211.216µs](./2020-python/solutions/day_12.py) |
| [Day 13](https://adventofcode.com/2020/day/13) | [122.107µs](./2020-python/solutions/day_13.py) | [100.671µs](./2020-python/solutions/day_13.py) |
| [Day 14](https://adventofcode.com/2020/day/14) | [64.058ms](./2020-python/solutions/day_14.py) | [56.398ms](./2020-python/solutions/day_14.py) |
| [Day 15](https://adventofcode.com/2020/day/15) | [4.463s](./2020-python/solutions/day_15.py) | [718.712ms](./2020-python/solutions/day_15.py) |
| [Day 16](https://adventofcode.com/2020/day/16) | [11.108ms](./2020-python/solutions/day_16.py) | [2.903ms](./2020-python/solutions/day_16.py) |
| [Day 17](https://adventofcode.com/2020/day/17) | [743.804ms](./2020-python/solutions/day_17.py) | [836.255ms](./2020-python/solutions/day_17.py) |
| [Day 18](https://adventofcode.com/2020/day/18) | [10.263ms](./2020-python/solutions/day_18.py) | [2.053ms](./2020-python/solutions/day_18.py) |
| [Day 19](https://adventofcode.com/2020/day/19) | [145.980ms](./2020-python/solutions/day_19.py) | [259.030ms](./2020-python/solutions/day_19.py) |
| [Day 20](https://adventofcode.com/2020/day/19) | [513.955ms](./2020-python/solutions/day_20.py) | [316.973ms](./2020-python/solutions/day_20.py) |
| [Day 21](https://adventofcode.com/2020/day/21) | [2.177ms](./2020-python/solutions/day_21.py) | [1.578ms](./2020-python/solutions/day_21.py) |
| [Day 22](https://adventofcode.com/2020/day/22) | [1.516s](./2020-python/solutions/day_22.py) | [1.353s](./2020-python/solutions/day_22.py) |
| [Day 23](https://adventofcode.com/2020/day/23) | [14.754s](./2020-python/solutions/day_23.py) | [3.572s](./2020-python/solutions/day_23.py) |
| [Day 24](https://adventofcode.com/2020/day/24) | [753.985ms](./2020-python/solutions/day_24.py) | [357.455ms](./2020-python/solutions/day_24.py) |
| [Day 25](https://adventofcode.com/2020/day/25) | [144.685ms](./2020-python/solutions/day_25.py) | [4.184ms](./2020-python/solutions/day_25.py) |

200
2020/inputs/day_01 Normal file
View File

@@ -0,0 +1,200 @@
1837
1585
1894
1715
1947
1603
1746
1911
1939
1791
1800
1479
1138
1810
1931
1833
1470
1882
1725
1496
1890
1862
1990
1958
1997
1844
1524
541
2001
1591
1687
1941
1940
1561
1813
1654
1500
1575
1826
2006
679
1660
1679
1631
2008
575
1583
1883
1904
1436
1650
1532
1907
1803
1693
1700
359
1516
1625
1908
1994
1910
1644
1706
1781
1639
1662
1712
1796
1915
1550
1721
1697
1917
1665
1646
1968
1881
1893
1468
1678
1774
285
1754
1856
1677
1823
1802
1681
1587
1767
1711
1900
1983
1787
1996
1726
1982
1971
1553
1542
1863
2002
1831
1891
1555
2000
1847
1783
1873
1761
1742
1534
1993
1898
1973
1974
1597
1540
1581
1864
1452
1637
1649
1886
1965
1460
1664
1701
1647
1812
1937
1902
2004
1991
1718
1887
1606
1748
1737
1608
1641
1710
1724
705
1985
1571
1805
131
1788
1707
1513
1615
1897
1476
1927
1745
1926
1839
1807
1955
1692
1645
1699
1471
1604
1830
1622
1972
1866
1814
1816
1855
1820
1034
1673
1704
1969
1580
1980
1739
1896
434
497
1851
1933
458
1521
1551
1762
2010
1614
1840
1747
1875
1836
1895
1518
1825
1987

1000
2020/inputs/day_02 Normal file

File diff suppressed because it is too large Load Diff

323
2020/inputs/day_03 Normal file
View File

@@ -0,0 +1,323 @@
...........#..#.#.###....#.....
...#..#...........#.#...#......
#.....#..#........#...#..##....
..#...##.#.....#.............#.
#.#..#......#.....#....#.......
.....#......#..#....#.....#....
.......#.#..............#......
.....#...#..........##...#.....
...#....#.#...#.#........#...#.
..#.........###.......##...##..
.#....#...........#........#..#
..#.............##.............
..#.##.#....#................#.
.....##.#.......#....#...#.....
......#.#....##................
..#..........###..#..#.#..#....
....#..............#....##..#.#
.#.........#.#....#.#.#....#...
..#.....#......##.#....#.......
..#.#....#..#.#...##....###....
...#......##...#........#.#..#.
.##.#.......##....#............
...##..#.#............#...#.#..
.##...##.#..#..................
..#......##......#......##.....
.....##...#..#...#.........#...
.##.#.....#..#..#.##....##....#
..#.#......#.......##..........
......................#......##
##.#...#.................#.#.#.
......#.#..........#.....##.#..
#.#......#.....#...........#...
.....#...#.......#..#..#.#...#.
...........#......#.#...#......
....##...##...........#......#.
.........#.##..................
......#...#....#......##.##...#
......#...#.#########......#...
.......#.#...#.......#..#......
............#...#...#.###...##.
...........#..........#...#....
...#..#.#................#.#..#
..#....#.....#.............#.#.
....##......#........#....#....
........##...............#....#
........#..#...#..............#
...#....#.#...#..#...#....#.#.#
.........#.......#....##.......
#.##..............#.#........##
......................###......
.........#....##..##....#.#.#..
.#...##.#.#...#....##..#.....#.
....................#.#......#.
.#..#.......................#..
..#..#.............#..#....#...
...#...#..#...#...#.#..#.##....
........#....#...#....#........
.#.....#........#.........#...#
...#......#..#..#..####..#.....
#....#..............#.##.......
.#....#.............##...#.....
....#...#.##........##......#..
##....#...#.......#..#........#
....##........................#
..................#..#.........
..#....#........#..#.......#...
#...#..#....#...##...........#.
.........#..#..#.#.##..........
....#.#..#.....#..#.#.#.#..#.##
##................#.##.....#...
.#.....###..#..#..#.....#....##
...#...........#..........####.
.#.....#....#......#.##..#.#...
..#...##....#................#.
........#.......#......#.#.....
....#.#.#.#....#...#......#..#.
...........#......#..#.........
###...##......##.#..#....##....
##....##.........#..#....###...
#.#.....#....#......#...#..##..
#....##.#..............#.##....
.#........#.#.........#...#....
......................#......#.
........#..#..##.....#..#.#....
..#...###.................#..#.
...#...#............#..........
.##.......#..#.........#....#..
.#..............#....#....##...
...............##..#.#.......##
.#.....#....#...#..#.......#..#
#..#.............#....#......#.
.....#.#......#.........###..#.
.#...#.#...............#....#..
#......#.............#.........
.#.##.#.####...#..#.##..#.....#
.....#......#..#...#.......#...
#........###...#.....#..#.....#
....#.#.....#...#..........#...
...#.#.......#.#......#..#.##..
..#..........#.#..#.......#.#..
#...#.#..............#...###.#.
...#..#...#............###.....
..#..#...#.#............#..#...
.###.#.....................#..#
....#....#..#.....##.##........
#....#....#.#..#.........#.....
.#.....##....#............##..#
#....#.#...#...#..#.#......#...
#.....##.....##.....##.#...##..
...##...#..#..####.#........#..
.........#...#......##..##..#..
..#.....###.#..#..####.#.......
.......#......#...#..##....#...
.#.....#.#.#..#....#...#..##...
..........#.#...#...#.#..#.....
....#.....#........#.....##..#.
..#.#.##.........#...##.....##.
.........#.##....#............#
............##.....#.......#.#.
......#.....#...#..#..###......
##.....#.......#...##.#....#...
...........##......#..##...#.#.
..#.#.#.#...#.......#....#...#.
#.............#.....#.#...###..
##....#.......#.....#..##.#....
...#.......#....#.........##...
......#.......#......##.##.....
..#......#...#.#........#......
....#.#....#.#.##......#.....#.
#......#.........#..#....#.....
........#..#....##.....#.......
#......##....#.##....#......#..
..#.......#............##.....#
...........#...#...........#...
#.......#...#....#....#...#.#.#
..###..#........#........#.....
..#..###...........#.#......#..
.#...........#......#..........
.#.......#.....#.......#.......
..#......##.#............#....#
#..........#.....#.#..#........
.....#...##.##.......#......#..
..........#.....#........#.#.#.
....#......#.....#......#.#....
.........#.#.#..#...##....#...#
.........#.......#...##...#.#..
.##........#...............#...
.......#....#...........##.....
.........###......#.........#.#
......#.......#...#..........#.
...#.#..........##......#...#..
#.......#.#..........#.........
................#..#......#..##
.....#...#....#.#.....#........
#.....#....#...........#....#..
#....#.#..#...##....#...##.#...
...#.....#......#.#....#..#..#.
..#................#...#.#..##.
..........#..............#..#.#
.....##.....#..#.###...........
....#.#......#.#...........#...
.#....#.#.........##.#....#....
.#.#........#........###....#..
##.#................#...#..#...
.......#......##..#.....#..#.#.
...#............#......###...##
#.#...........#.........#......
.....#.#.#.................#...
....#..............#...#.#.....
...#.#.....##..#...............
.#..##...#....##.....###..#....
...............#...#...#.#.###.
.###....#.....#...#.#......#...
...#..#.....#.......#..##.#....
...........#..#....##..#...#...
...#...#..........#.......##.#.
............#.#.......#........
....#.........#.....#..........
...#.###.##..#...##..####..#..#
.#.#...#..#...................#
.....#..#.....##..#............
....#......#...##..#.##........
...#...............#..#.....##.
...#......#.........#.#..##....
.#....#.##.......#......#......
....#.......#....#..........#..
#.#.#....###.#.#.............#.
..##..###........#.#..#.#..#...
......#.#............##.#...###
.........#.#....#####.....##...
............##......#.#..#.....
...#.....#.....###....#........
##..........####.##.#.#........
....................##.....##.#
#.#............#........#......
....#...##.....#......#....#...
...###.#..##..................#
..###......#..............#.#.#
.#...#...........#....#........
....#............#..#..#.#.....
...#.........#.#.........#.####
..#...#...#...#...........#....
...............#.#......##..#..
#....#.#.......#.#..#......#..#
........#.#....#..#...#..#...#.
...#..#.......#...........#....
...........#.......#...........
.#......#................#.....
....#.#.#...#......#..#...#....
................#.#.#....#.....
.........................##..#.
.#...........#............##...
#...............#.....##.#.#..#
.........#.......###....#.....#
....##...#...#.....#..#........
........#.....#..#.#.#...#..#..
......#.......#.#.........#.#..
#......#............#...#....#.
#..##...#..#................#..
.##...#...#.....#.##.......#..#
.......#.##........##..##......
##.#..##...............#.....#.
......#....#..##...#......###.#
#........##..#....#.#......#...
.#......##.#...#.#...#.........
.#.#...#..#.............#......
.##..........#..........#......
.#.....#.....#..............#.#
..#.........#..#.#.....#.#....#
..#.##..............##...#..###
....................#..........
......###..#..#...........#....
..#..........#.......#...#.....
...#......#......#.............
....##..............#.#.....#..
........#.#......#..#........##
.............#...#.#.........##
...###...#..........##.......#.
.#..........#...##..#.#.....#..
##...#.........#...............
......#....#....#.....#.....#..
..........#....#...#...#..#...#
...##....#.#.#..#...##.........
#......#.#...##.###...#....#...
##.......##.#......##..#...#...
......#.............#.##.....##
#.......###....####.#...##....#
..#...#..#.......#..........#..
#.....#..#..#..#.##...###...#..
.....##.#..#..#..#.#....#...#..
..#...#..................##....
....#.#........##..............
#...#.......##...#...#.#.......
..#...#........##....#.#.......
..........###...###...#......#.
#.....#..###...##...##..#..#..#
..#.....##.....#.......##..#.#.
........#........#.........#...
.................#....#.......#
.......#...#.....#...#.#.......
....##...............#...##...#
.##...#................#...#...
.............#.................
.#..#....#....#.#....#.........
.#.#..#..........#.......#.....
.....##.....##...#..#..........
#...#.#.........#......#..#....
........#....#...#....#.#.##...
....#..#........#...#...#......
.#..#.....#.#...#.........#....
.#..#..#...........#..#....#...
....###.............#..#.......
#......#..#..##..........#.#...
#..#..#.##..#...#.#.#..........
....###......#.##.....#....#...
.##..#...#......##.#...........
..#..#.......#.....#.##....#.#.
.......#.#.#........#....##....
..##...#....#...............###
#..##..#...........#.#....##...
...##..#.....................#.
###......#....#....###..#...##.
.........##............#..#...#
..#..........#...#.#.#......#.#
.......#.....##..##......#.##..
#..........#.....##.#..........
#.......#.#...#...#....#.......
#...#.....##.......#.#..#.#.#..
.........#.#.#..#..#...#.###...
.................##...#....#...
###.......#..........##...#....
#.#..#.........#....##.#.......
......#.#.....#........#.......
.......#.#........#......#.#..#
..............#..#...##....#..#
#...........#...##.....#..#.#..
..#....#..#.#.#...#..#....#.#..
...##.#.....#..#...##..#.....#.
..#.#................#........#
......#...#.............#......
.##............#....#...#..#...
....#...#...........#.......#..
.###..#.......#.............#.#
.#.#....#.#...........#.#......
...#.........#.........#..#....
...#..........#.#.....#.#......
.....#........#....##......#...
..#.#.#......#..#.#......#....#
.#.#..#................#.#.....
.#.#.........##...#.......#.#.#
#..#.....#...#..#...........#..
..##......####......#..#....###
#.....###....#.#........#..#..#
..##.#...#.#..##..........#..#.
#.........#.#.............#...#
...#.#...#...#.#.#....##.......
##.##...#.....#...#...........#
....#........#.#.....#.........
.................##..#..##...##
.....##....#...#...#.....#..#..
....#...#........#............#
..#...........##....#...#...##.
.....#......#.........#..##.#..

1102
2020/inputs/day_04 Normal file

File diff suppressed because it is too large Load Diff

869
2020/inputs/day_05 Normal file
View File

@@ -0,0 +1,869 @@
FFFFBBBRLR
BFBBFBFRRR
FFBFBBFRRL
BFBFBBFRRR
BFBBFFFLLR
FFFBFFFRRL
BFFBFFFLLL
BFFBFFFRRL
FFBBFBBLRR
BBFBBFBLLL
BFFFFBFRRL
BFFFBFBLLR
BBFFBFFRLR
BFBFBBFLLR
BBFBFBFRLR
BBFFBFFRRL
FBFFFBFLRL
BFFFBBFLLL
FBFFFFFLLR
FBFFFBFLRR
BFBFBFBLLR
BFBBBFFRLR
FBBBFFFLRR
BBBFFFFLRL
FBBFFFFLRR
BFFFBFBRLL
BFBBBBBLLL
BBFBFBFRLL
FFBFBBBRRR
FBBBFBBLRL
BFFBFBFRRR
BBFFBFBRLR
FBFFFFBRRR
FBFBBFBLRR
BBBFFFBLLL
FBFFBBFLLL
FBFBBBBLRL
BFBFBFBLRL
BFBFFBFLLL
FBBBBFFRRR
BFBFFBBRLL
FFBFBBFLRL
BFBBBFFLLR
FBFFBBBLRL
BFBBBFFRRR
FFFBFBBLLR
FFBBFFBRLL
BFFBBFBRLL
BFBBFBBLRR
BFFFFBBRRL
FFFBBFFLLR
FBFBBFFLRL
FFFBFBBRLL
FBBBFBFLRL
BFFFBBBRLL
FFBFBFBLLR
FBFBFFBLRL
FBBFBFBLLL
FFFBBBBLLL
BFFBBBFRRL
BFFFBBBRRL
BBFBBBBRLR
FFBFBBBRRL
FFFBFFFLRR
BFFFBBBLRL
BFBFFBBRRL
BBBFFFBLRL
FFFBFFBLLL
BFBFFBBLLL
BFBBFBBRLR
FFFBFFBLLR
BBFBFFFLRR
BFFFFBFRRR
BBFBBFBLRR
BFFFFFBRRL
FFFFBBBLRR
BBBFFFBLLR
BBFFFBFRRL
BFFBFBBRLL
BBFFBFFRLL
FBBBFFBLRR
FFBBFBBRLR
FFBBBBFLLL
BBFFBBBRRR
FBBBFFBLLR
BFBFFFBLLR
BBFBFFFRRR
BFBBBFFLRL
FBBBFFBRLL
BFBBFBFLLR
FFFBBFBLLR
BFBFBFBRRR
BFBBFBFRRL
FBFBFBBLLL
FFBBBBFRRL
BFBFBBBLLR
FBFBFBFRLL
BFFBFBBRLR
FBBFFFBRRR
BFFBBFFRRL
BBFBFBFLRL
FBFBBFBRRL
FFBBFFBRRR
FBBBFBBRLL
FBBBBBBRLL
BFFFFBBLLL
BBBFFFBRLR
BBFBBBBLRR
FBFFBBBLRR
BBFFFFBLRR
BBFFBFBLLR
BFFBBFFRLR
FFFFBBBRLL
BFFBBBBRRR
BFBFFFFLLR
FBBBBFBRLR
FBBFBFFLRR
FFBBBFFRLL
BFFBBBBLRR
FFBBBFBRRL
BBFFBFFLRL
BBFFFFFRLL
BFFBFBFLRR
FFBBBBFLLR
FFBFFBFLLR
BFFBFFFLRL
BBFBBBFRLR
FFBBFFBLLL
FBBBFBFRLL
BBFBBBFLLR
FFFBBBFLRL
FBFBBBBLLL
FBFBFBFLRR
BBFBBBFLRL
FFBFBBBLLR
FFBBBFBRLR
FBFBFBBRLR
FBFBFFBRLR
BBFBFBFLRR
FBBBBBBLLR
BFFBFFBRLR
BFBFFBFLRR
FFFBBBFRLR
FFFBBBBRLL
BBBFFFBRRL
BBFFFFBRLL
BFBBBFFRRL
FBFFBBBLLR
BFBBBFBLLL
FBFFBBFRLR
FBBBBFFRRL
BBFFBBFLRL
BFFBBFBLRR
BBFBFFFRRL
FFBBFFFLLL
FBBFFFBRLR
FFBFBFFLLR
FFBBBBFRRR
FBBBFBBLLR
BFBFFFFRRR
FFBBFBBRLL
FBFFFBFRLR
FBFFBFFRRL
BFFFFBBLRL
BFBFBFFRRR
BFFBBFFLRR
BBFFFFFRRL
FFFBBFBRRL
BFFFBFBRLR
BFBBBBFLLL
BBFBBBFRRL
FFFBBBFRLL
FBFFFFBRLL
BBFFBFBRRL
BFFFBFFLRL
FBBFBBFRRL
BFBFFBBRLR
FFFBBFFLRL
BFBFFBBLRR
BFBFFFBRLR
FBBFBBBLRR
BBBFFFBRRR
FBBBFFBRRL
FBFFBFBRLR
BFFFFFFLLL
BFFBFFFRLR
FFBFBFFLLL
BFBBBBBRLR
BFBBFFFLLL
BFFBBBBRLL
BFBFFFBRRL
BBFFBBBLRL
FBFFBBFLRR
FBBBFFFLRL
BFBFFFBRLL
FBFFFBFRLL
BFFFBFFRLR
FFFBBBFLLR
BBFFBFBLLL
FBBFFBBRLR
BBFFFFBRRR
FBBBBFFLRR
BFFBFBFRLR
BBFBFBBLRR
BFBBFFBRLR
FBBBFFBLRL
FBBFFFBRLL
BFBFBBFLRR
FBBBBFBLRR
FBFBBFBRLR
FBFFFBBRRR
FBBFBFFLLR
FBFFBFBLRR
BFFBFBBRRL
FBBFFFBLLR
FBFFBBBRRR
BFFBBBBLLR
BBFFBFFLLL
BBFBBBFRRR
BBFFBBBLLL
BBFBBFFRRR
BFBFBBFRRL
BFFFBFBRRL
BBFBFBBLLL
BFBBBFBRLL
BBFFFBBRRR
BFFFBBFRLL
BFBBFBBRRR
BFFFBBFRRR
BFFBFFBLLR
BBFBBFBLRL
BFFFFFBLRR
FFBFBFBLRR
BFBBBFBLRR
FBFFBFFRLR
BFBBBFFLRR
FFFBFBFLLL
FFBBBBFRLL
FFBBBFFLLR
FFBBBBBLRL
FBFBFFBRLL
FFBBBFBRLL
FBFFBBBRLL
FFFBBFBLRR
BBBFFFBLRR
BFFBFFBLRL
FBBFFFFRLL
FBFFBFBRLL
BBFFFFBRLR
FFBBBFBLRL
FBFFFFBLLR
FBBBFBBLLL
FBBFBFFRRR
BBFFFBFRLR
FBFFFBFLLL
BBFBFFFLLR
BBFFBBBRLL
BFFBFFFRLL
FBFBBFFRLR
BBFBBBFLLL
FFBFFFFRRR
FBBFFBFLLL
BFFFBFFLRR
FFFBBFBRRR
FFBBBBBLRR
FBFBFBFRRL
BFBBFBFRLL
BBFBFBBLLR
FBFFFFFRRL
FFBBFBBRRL
BFBBFFBLLL
BBFBFBFRRR
FFBBBBFLRL
FFBBFBBLLL
FFFBFBBRRL
BFFBFBBRRR
BBBFFFFRLL
BFFBFBFLRL
FBBFBFBRRL
FFFBFBBRRR
BFBFBFFLLR
FFBBFFBRLR
BBFBBBFLRR
BFFBBFFLLR
FFBFFFFLRR
BFBFFBBLLR
FFBFFFFRLL
FFFBBBBRLR
FFFBFFBRRL
FBBFBFBRLR
FBFBFFBLLR
FFFBBBFLLL
BFBBBFFLLL
FBBFBFBLLR
FBBBBFBLLR
FBBBFBFRRR
BFFBFFBRRL
BBFFFFFRLR
BFFBFFFRRR
BFFBBFBRLR
FFBBBFFLRL
BBFFBFFRRR
FBFFFFFRRR
FFFFBBFLLL
BFFBBBBLLL
FFBFBFBRLR
FBBFFBBLRR
FFFBBFBLRL
BBFBBBBLLL
BFBBBFFRLL
BFFBBFBLLL
BBFFBFFLLR
BBBFFBFLLL
BBFBFBFLLL
FBBFFFFLLR
BBBFFFFRRR
FFBFBFBLLL
FBFBFFFRLR
BBFBFBBRRR
FBFFFFBLRR
BFBBBFBRLR
BBBFFBFLLR
FFBBFBFRLL
FBFBBFBLLR
BBFBFFBLLL
FFFBFBBLRL
FFBBFFFRLL
FFFBFFBRLL
FFFFBBFLRL
BFFFBFFRRR
BFBBFBBRLL
BFFBBFBRRR
BFFFFFFLLR
BFFBBFFLLL
FFFBFBFRLR
FFBBBBBLLL
FBBFBBBRRR
BFBFBFFRRL
FBFBBBFLRR
FBFFFBBRLR
FBBFBFBLRL
FBFBBFFLRR
FBBFFBFRLR
FFBFFBBLLR
FFFBBFFLLL
FFBFBFFRLL
BFFFBBFLLR
FBBFFBFRLL
FBBBBBFRLR
FBFFBBFRRR
FBBBBBFLLL
FFFBBBBLLR
BBFBFFFRLR
FBFBFFFLRL
FFBBBBFRLR
FFBFFBBRRR
BBFBFFBRLR
FBBBBFFLLL
FFFBBBBRRR
FFBBFFBRRL
FFFBBBBRRL
FBFFFBBLLL
BFBFFBBRRR
BFFBFFFLLR
BBFFFBFLRR
FFBBBFBLRR
FFBFFBBRLR
BFBFFBFRLL
FBBFBBBLLR
FFBBBBBRRL
FBBFBFBRLL
FBFBFBFLLR
FBBBFBFLLL
BBFBBFFRLR
BFFFFBFRLR
FBBFFBBRRR
FBBFFBFLLR
BFBFBFBRLL
FFFBFFBLRL
FFBBFFFRLR
FFFBBFFRLL
BFBFBBBRLR
FBFFFFFLRR
FBBBFFFLLL
FBFFFBBLLR
FBFBFBFRLR
FBFBFFBLRR
FFBFBBFRLL
FBBBBFFLLR
FFFBFBFRLL
FFFBBBFLRR
BFBBFFBLLR
FBFFFFBLRL
BFBBFBFRLR
FBFBFFFRLL
BFBFFBFLRL
BBFFBFFLRR
FFBFFBFRLR
FFBFFFBLRR
FFFBBFFLRR
BFFFFBFLRL
BFFBBBFRLL
FBFBBFBLRL
BFFBBBBLRL
BFFFFBBLLR
FBBBBBBRLR
FBFFFBFLLR
BFFBBFFLRL
FBFBBFBRLL
FFBBFFBLLR
BBFBFBFRRL
FFBFFBBRLL
BBFFFFFLLR
BFBFFFFLRL
FBBBFBBRRR
FFFFBBFRRR
BFBBFFFRLR
FBFFFFBRRL
BFFFFFFRRL
BFFFBFFRLL
FBBBFFBRLR
BFBFBBFRLL
BFBFFFBLRL
BFFBFBBLLR
FFFFBBFRRL
BFBBFFBRLL
FBFBBBFRLL
FFBFFFBRLR
BFBFFFFRLR
BBFBFBFLLR
FFBFFBBRRL
BBFBBFBLLR
BBFFBFBRLL
FFBBBBBRLL
FFFBBFBLLL
FBFFBBBRLR
FBBFBBFLRR
BBFFFBBLLR
FBBFBFBRRR
BFBBFFBRRR
BFBFFFBRRR
BBFFFFFLLL
BBFBBFBRRL
FBFFBFBLRL
BFBBFFFRRR
FBFFFFBLLL
BBFBBFFRLL
BFFBBBFRLR
FBBFFBFLRR
FBFBFFFLRR
BFBBFFBLRL
FBBFBBBRLL
BFBFBFBRLR
FFFBFFBLRR
FFBFFFBLRL
FBFBFBBRRL
FBFFFFFRLL
BFBBBBBRLL
FBBFBBFLLL
BFBFFFBLRR
BBFFBBBLLR
BBFBFFBRRL
FBBBBFFRLL
BFFFFFBLRL
FFBFFFFRLR
FBBFFFBLRR
BFBBBBBLRL
BFFBFFBLRR
FFBFBBBLRR
BFFFBBBLRR
FBFBFBFLRL
BBFBBFBRLR
FBBFFFFRRL
FBBBBBFLLR
FFFBBBFRRL
FFBFBBBLRL
FFBBBFFRLR
FBFBFBBRLL
FBFFFBBLRL
FFBBBFFRRL
BFBBBBFRLL
BBFFFBFLLR
FFBFFFFRRL
FFBFBFFLRR
FFBFBBFLLR
BFBFFBBLRL
BBFFBFBLRL
FBBFFFBLLL
FBBBFFFRLL
FFBFFBFRLL
FFFFBBFRLL
FBFFFFFLLL
BFFFBBFLRL
FFBBBFFLLL
FBFBBFFRRL
FBFFBFFLLR
FBBBFBFLLR
FFBFFFBRRL
BFBFFFFRRL
BBFFBBBRRL
FFBBFBFRLR
FBFFBFBLLR
BFBFBFFRLL
FBFFBFFLRL
BBFBBBFRLL
BFFBBFFRLL
FFBBFBBLLR
BBBFFFFRRL
FBBBFFFRRL
BFBFBBFLRL
FBBFBBFLRL
FBBBBFBRRR
BBFFFBBLRL
BBFFBBFRRL
BBFBFFBLRL
BFFFBBBRRR
BBFFBBFRLL
FBBBFFBRRR
FFBBFFFLRL
BFFFFFFRLL
BFBFBFFLRR
BFFBBBFLLL
BFBFFBFLLR
BBFBBFFLLL
FFBFFBFLLL
BFFFBFFLLR
FFBFBBBLLL
BBFBFFBRLL
FBFBBBBRLL
FFBBBBFLRR
FFFBFBBLLL
FBFBBFFRRR
FBFFBFFLLL
BBFFFBFLLL
BBBFFFFLLL
BFFFFBBRLR
BFBFFBFRLR
BBFFBBBLRR
FFBBFFFLLR
FBBBFBBRRL
FFBBBFBRRR
FFBFFFBLLR
FBFBBBFLLL
FFBBFBFRRR
FFBFFBFLRL
BBFBFFBRRR
BFBFBBFLLL
BFFBBBFLRR
FBBFFFBLRL
BBFFBBFRLR
FBBBBFFLRL
FBBFBFFRRL
BBFFBBFLRR
BFFFFFBRLL
FBBBFBFRRL
FBFBFFFRRL
BBFFFBBLLL
FBFBBBFLLR
BBFBFBBRLR
FFBFFBFRRL
BFFFFBBRLL
FBBFBBFRRR
FBFFBFFRRR
FBFBBBBRLR
BBFBBFFLRR
BFBBFBBRRL
BBFFBFBLRR
BBFFFFFLRR
BFFBBBBRLR
BBFFFBFLRL
FFFFBFBRRL
BFBBFBFLLL
FBFBBFFLLL
BFBBBBFRLR
BFFFBFBLLL
FBFBBBFRRL
FBFBFFFRRR
FFBFFFBRRR
FFBBFBFRRL
FFFBFFFLLR
BBBFFFFLLR
FFBFBBBRLL
FBBFBFBLRR
BFFBFBFLLL
FBBFBBFRLR
FBFBFFBLLL
FFFFBBBRRR
FBBFFBBLLL
FBFFBFFRLL
BBFBFFBLRR
BFFBFFFLRR
BFBBBBFRRL
BFFFBBBLLL
BFFBBBFRRR
FFBFBBFRLR
BFBBFFFRLL
FFBBFBFLRL
FFBFBFFRLR
FBBBBBBLLL
FBBFFBFLRL
FFFBFBFLRR
BFFFFFFLRL
FBBBBFBRRL
BFBFBFBLLL
FBBFBBBRLR
BFFFFBBLRR
BBFFFFBLLL
FFFBBBBLRL
FBFBFBBLRR
BFBBFBBLLR
BBFFFBBRRL
BBFBBBBRLL
FFBBBFFLRR
FBFFFBBRLL
BBFFFBBRLL
BFFBBFBRRL
FFFBBFFRRL
BFFBBBBRRL
BFFFFBFLRR
FFBBFBBLRL
BFBBBBBLLR
BFBBFBBLLL
BFFFBFBLRR
FBBBBFFRLR
FBBFFFFRRR
BFBBBBBRRL
BBFFFBBRLR
FFBBFFBLRR
BBFBFBBLRL
FBFFBBFLRL
FFBBFBFLLR
BFFFFFBRLR
BFFBBBFLLR
BFBBFBBLRL
FFFBFFBRRR
FBBFBBBRRL
BFBFFBFRRL
FBFBBBBLRR
FBBFBBBLLL
FFBBFBFLRR
BBFFBBFLLL
BFFFBBFRLR
BFBBBFBRRR
BFBFFFBLLL
BBFFBBFLLR
FBFBBBBRRL
FFFBFBBRLR
FBFBBBFRLR
FFFBFFFRRR
FFFFBBFLLR
BFFFFBFLLR
FBBBFBFLRR
BBFBFFFRLL
FBBBFBFRLR
BFBFFFFRLL
BBFFFFBLRL
FFBBFFBLRL
FFFBFBFLLR
FBBFFFFLLL
FBBFBFFLRL
BFFFFBFRLL
BBFFFFBRRL
BFFBFFBRRR
BFFFFFFLRR
BFBFBFBRRL
FBFFBBFRLL
FFFFBBBLLR
BBFBFBBRRL
FFFBBBBLRR
FFBBFBBRRR
BFBFBFFLRL
FBBBBBFRLL
BFBBFFBRRL
BFBBBBBRRR
FBBFBFFLLL
BFBFBFFLLL
BFFBBFBLLR
BFBFFFFLLL
BBFFFBBLRR
BFBBFFFRRL
FFBFBFFRRL
FFFBFBFRRR
BBFFFFBLLR
BFFFFFFRRR
FFFFBBBLRL
FBFFBBBRRL
FBFBFBFRRR
BFBFBFBLRR
FFFBFBBLRR
FBBFBBFLLR
FBFBFFFLLL
BFBFBBFRLR
FFFBBFFRRR
BFFFBFBLRL
FBBBBBBRRR
FBBBBBFRRL
BBFFBFBRRR
FBFBBFFRLL
FFFBFFBRLR
BBFFFBFRRR
FBBBFFFRRR
BBFBBFFLLR
FBBFFBFRRR
FFFBFFFLRL
FFBFFFBLLL
FFBFFBFLRR
BFFFBFBRRR
BFBFBBBLRL
BFBFBFFRLR
BBBFFBFLRR
BBBFFFFLRR
FBFBFBFLLL
BFFBFBFLLR
FBBBFFFRLR
FFBBFFFLRR
FBBBFFFLLR
FBBFBFFRLL
BBFFBBFRRR
FBBFFBBLRL
FBFFFFBRLR
FBFBBFFLLR
FBBBBBFRRR
FFBBBBBLLR
FBFBBBBRRR
FFFBBFBRLR
FBBFFFBRRL
FBFFFBFRRL
FBFFBBFLLR
FFBFBBFLLL
FBFBFBBRRR
BFFFBBFRRL
FFBFFBBLLL
FBBFFBBLLR
FFBFFFBRLL
FBBFBBFRLL
BFBFFFFLRR
FFFBFBFRRL
FFBFBFFLRL
BBFBBBBLLR
BFFBFBBLRR
FBFBFFBRRL
FBFBBBFLRL
FBBBBFBRLL
BBFBBBBRRL
BFFFFFBRRR
FFBBBFFRRR
FFBFBFFRRR
FBFBFBBLLR
FBFBFFFLLR
FBFFFBBRRL
BFFBBFBLRL
FBBBFFBLLL
FFFBFBFLRL
BFFFBFFLLL
BBFBFBBRLL
BFFBFBBLRL
BFFBBBFLRL
BBFBFFFLLL
FFBFBBFRRR
FFFBFFFRLL
FBBBFBBRLR
BBFFFFFRRR
FFBFBFBRRL
BFFFFFFRLR
FBFFBBFRRL
BFFFFBFLLL
FBBBBBFLRR
BBFBBBBLRL
BFBBFFBLRR
BFBFBBBLLL
FBBFBBBLRL
FBBBBBBLRR
FBFFBFBRRL
FBFFFBBLRR
FFFBFFFRLR
FFBBBFBLLL
FBFBBFBLLL
BFBFBBBRLL
BFBBBBFRRR
FFBFFFFLLL
BFBBFFFLRL
FBBFBFFRLR
BBFBBFBRLL
FFFBBBFRRR
FFBFBFBLRL
BFBBBBBLRR
FFFFBBBRRL
FBFFFBFRRR
BFFBFBFRLL
BFBFBBBRRR
FBFFFFFLRL
FBFFBFBRRR
BFBBFBFLRR
FBFBFBBLRL
BFFFFBBRRR
BFBBFFFLRR
FFBFFBBLRR
FFBBFBFLLL
FFFFBBBLLL
FFBFFFFLLR
BFBBBBFLRR
FBFFBBBLLL
BFFFFFBLLL
FFBBFFFRRR
BBFBFFFLRL
FBBBBBBLRL
FBBBBFBLLL
FFBFBFBRRR
FBFFBFBLLL
BFBBBFBLLR
FBFFBFFLRR
BFFFFFBLLR
FFFBBFFRLR
BFBBBFBLRL
BFFBFFBRLL
FFBFFFFLRL
FFBBBBBRLR
FFBFFBFRRR
BFBFFBFRRR
BBBFFFBRLL
BBFFFFFLRL
FFFBBFBRLL
FBBBBBFLRL
BFBFBBBRRL
FFBFFBBLRL
BBFBBFFRRL
FBFBBBBLLR
BFFFBBBRLR
BBBFFFFRLR
FFBFBBFLRR
BFFFBBBLLR
FBBBBFBLRL
FFFFBBFLRR
FBFBBFBRRR
FBFBBBFRRR
BFFBFFBLLL
FBBBBBBRRL
FFBBFFFRRL
BBFBFFBLLR
FBBFFFFRLR
FBBFFBBRLL
BFBBBBFLLR
BBBFFBFLRL
BBFFBBBRLR
BFBBFBFLRL
FFBBBFBLLR
FFFFBBFRLR
FBBBFBBLRR
BBFBBFFLRL
BBFBBBBRRR
BFFFBFFRRL
BFFBBFFRRR
FFBFBFBRLL
FFBFBBBRLR
FBBFFBFRRL
FBBFFFFLRL
FBBFFBBRRL
BFFBFBFRRL
FFFBFFFLLL
FBFFFFFRLR
BFBBBBFLRL
FFFFBFBRRR
BFFFBBFLRR
BFBBBFBRRL
BBFBBFBRRR
BBFFFBFRLL
BFFBFBBLLL
FBFBFFBRRR
FFBBBBBRRR

2190
2020/inputs/day_06 Normal file

File diff suppressed because it is too large Load Diff

594
2020/inputs/day_07 Normal file
View File

@@ -0,0 +1,594 @@
plaid beige bags contain 3 drab magenta bags.
dim silver bags contain 2 shiny chartreuse bags, 4 dull magenta bags.
bright silver bags contain 2 faded maroon bags.
shiny cyan bags contain 4 plaid green bags, 4 dim coral bags, 4 dull indigo bags.
shiny orange bags contain 3 dim cyan bags, 1 mirrored beige bag, 5 pale orange bags.
posh gray bags contain 5 dark bronze bags, 2 striped lavender bags, 3 light tan bags.
clear lime bags contain 1 shiny crimson bag, 1 dark plum bag.
wavy chartreuse bags contain 1 striped crimson bag, 3 mirrored black bags.
pale violet bags contain 3 clear teal bags, 5 clear olive bags, 3 posh bronze bags.
shiny plum bags contain 5 dotted beige bags, 1 faded orange bag.
dark lime bags contain 1 clear blue bag, 2 posh green bags, 2 striped plum bags, 5 posh purple bags.
striped brown bags contain 1 drab cyan bag, 3 light silver bags.
pale chartreuse bags contain 4 drab aqua bags, 3 striped tan bags, 1 shiny tan bag.
clear magenta bags contain 1 dotted bronze bag, 4 striped salmon bags, 2 wavy purple bags.
drab indigo bags contain 3 shiny brown bags, 4 striped purple bags, 5 dull magenta bags, 5 plaid chartreuse bags.
mirrored maroon bags contain 2 dotted tan bags, 2 bright green bags, 5 light black bags, 3 vibrant silver bags.
shiny purple bags contain 1 bright lime bag, 5 muted violet bags.
pale bronze bags contain 3 muted green bags, 4 wavy tomato bags.
striped beige bags contain 1 faded violet bag, 4 wavy cyan bags, 5 pale orange bags.
plaid tomato bags contain 5 plaid white bags, 1 light silver bag, 3 drab blue bags.
faded gray bags contain 3 shiny lime bags, 4 muted tan bags, 2 light black bags, 2 vibrant gold bags.
dotted blue bags contain 5 wavy violet bags, 2 clear orange bags.
dotted olive bags contain 1 shiny purple bag, 5 dim fuchsia bags.
light indigo bags contain 2 wavy cyan bags.
pale silver bags contain 5 dark black bags, 5 posh gold bags, 1 drab salmon bag, 5 clear bronze bags.
light lavender bags contain 3 dark cyan bags, 4 mirrored indigo bags, 4 light brown bags.
dull lavender bags contain 4 pale indigo bags, 1 dim cyan bag.
posh gold bags contain 3 light brown bags, 1 shiny turquoise bag, 2 drab cyan bags.
muted violet bags contain 4 pale green bags.
posh blue bags contain 2 light lime bags.
light violet bags contain 1 posh red bag, 1 vibrant gold bag, 5 pale beige bags.
dark beige bags contain 1 dim orange bag, 5 plaid red bags, 2 clear crimson bags.
muted magenta bags contain 1 wavy olive bag, 1 drab maroon bag, 1 muted silver bag.
faded white bags contain 2 dull orange bags, 4 dim olive bags, 2 dull olive bags.
faded salmon bags contain 3 dull white bags.
shiny tan bags contain 4 posh red bags, 1 vibrant gray bag, 3 bright red bags, 3 clear orange bags.
light tomato bags contain 2 striped bronze bags.
pale orange bags contain 4 drab maroon bags, 4 pale beige bags, 5 posh purple bags.
dotted brown bags contain 1 dotted beige bag, 1 faded green bag, 5 muted bronze bags, 5 striped purple bags.
clear gold bags contain 1 pale cyan bag, 3 dark turquoise bags.
drab lavender bags contain 2 faded silver bags, 2 muted violet bags.
dull orange bags contain 1 dim gray bag.
faded plum bags contain 1 mirrored gold bag, 3 bright indigo bags, 1 pale violet bag, 4 dotted tomato bags.
drab fuchsia bags contain 1 light fuchsia bag.
dotted black bags contain 2 mirrored red bags.
drab brown bags contain 3 dim yellow bags, 2 shiny turquoise bags, 5 faded purple bags.
dull tomato bags contain 2 striped silver bags.
drab red bags contain 1 dotted silver bag, 2 light white bags, 1 vibrant purple bag.
pale red bags contain 1 clear black bag.
muted indigo bags contain 3 shiny red bags, 3 clear lavender bags, 4 clear aqua bags, 4 shiny maroon bags.
drab violet bags contain 5 light blue bags, 5 vibrant bronze bags, 2 dotted gold bags.
dim green bags contain 5 drab black bags, 5 mirrored maroon bags, 4 bright aqua bags.
mirrored salmon bags contain 1 drab purple bag.
plaid red bags contain 1 drab blue bag, 1 pale chartreuse bag, 3 light blue bags, 5 clear fuchsia bags.
posh tomato bags contain 1 vibrant maroon bag.
faded bronze bags contain 4 dim crimson bags.
plaid teal bags contain 2 striped bronze bags, 3 dotted orange bags.
vibrant lime bags contain 2 light silver bags, 4 clear salmon bags.
plaid crimson bags contain 5 drab beige bags, 5 shiny gray bags, 3 faded green bags.
posh yellow bags contain 1 mirrored red bag, 3 pale maroon bags, 3 clear crimson bags, 3 bright chartreuse bags.
faded chartreuse bags contain 2 faded purple bags, 1 plaid cyan bag, 2 wavy black bags, 5 plaid plum bags.
dotted maroon bags contain 2 clear turquoise bags, 2 dotted bronze bags.
striped chartreuse bags contain 4 dotted blue bags.
bright tomato bags contain 3 plaid salmon bags, 1 wavy bronze bag.
light yellow bags contain 3 shiny salmon bags, 5 bright magenta bags.
light red bags contain 5 vibrant maroon bags, 4 dim olive bags, 4 bright salmon bags.
wavy red bags contain 1 pale teal bag, 5 mirrored crimson bags, 1 bright beige bag.
vibrant salmon bags contain 3 dull violet bags, 3 dim cyan bags.
bright turquoise bags contain 1 light brown bag, 1 posh olive bag, 1 plaid white bag, 1 striped beige bag.
bright chartreuse bags contain 3 dull green bags, 2 striped gold bags, 4 dotted lavender bags.
wavy lime bags contain 5 striped salmon bags, 1 pale fuchsia bag, 2 dim red bags.
dim fuchsia bags contain 5 light beige bags, 5 clear cyan bags, 5 plaid gray bags, 4 dotted cyan bags.
muted olive bags contain 3 posh plum bags, 2 plaid green bags, 3 dull white bags, 5 vibrant maroon bags.
mirrored indigo bags contain 3 faded silver bags.
muted teal bags contain 1 pale lime bag, 5 faded gold bags, 3 bright coral bags.
wavy maroon bags contain 4 muted violet bags, 1 pale yellow bag, 5 dim cyan bags.
striped salmon bags contain 1 shiny tomato bag.
dotted green bags contain 3 striped teal bags, 4 striped blue bags, 5 dotted cyan bags, 5 bright lime bags.
dim gold bags contain 1 pale lavender bag, 1 faded magenta bag, 2 light black bags, 5 clear turquoise bags.
faded beige bags contain 5 wavy teal bags, 1 drab brown bag, 2 dull olive bags.
dull salmon bags contain 5 muted chartreuse bags, 1 bright plum bag, 4 clear blue bags.
clear violet bags contain 5 dark crimson bags, 2 dark aqua bags, 3 bright green bags, 3 wavy white bags.
dark chartreuse bags contain 4 bright crimson bags, 5 clear orange bags, 1 striped aqua bag.
striped bronze bags contain 5 faded beige bags.
plaid green bags contain 4 pale tan bags, 2 vibrant gold bags, 3 clear chartreuse bags, 3 dotted fuchsia bags.
dim magenta bags contain 1 muted orange bag.
shiny green bags contain 5 drab tan bags, 3 faded tan bags, 1 posh brown bag, 5 pale yellow bags.
clear purple bags contain 3 muted indigo bags, 2 drab brown bags.
vibrant cyan bags contain 3 striped tan bags, 4 pale salmon bags, 3 striped tomato bags.
drab green bags contain 5 shiny fuchsia bags, 5 dull orange bags, 1 light violet bag, 3 bright purple bags.
pale purple bags contain 1 shiny gold bag, 5 plaid gray bags.
shiny silver bags contain 1 faded beige bag, 5 mirrored yellow bags, 1 light fuchsia bag, 4 muted yellow bags.
mirrored beige bags contain 4 mirrored gold bags.
dim salmon bags contain 3 drab tan bags, 3 pale beige bags, 2 faded magenta bags.
vibrant crimson bags contain 2 faded aqua bags, 5 wavy maroon bags.
vibrant beige bags contain 5 muted magenta bags, 1 bright purple bag.
dull indigo bags contain 4 vibrant salmon bags, 3 dull magenta bags.
posh orange bags contain 5 bright red bags.
dim crimson bags contain 2 pale fuchsia bags, 4 shiny maroon bags.
vibrant green bags contain 2 dark green bags, 5 pale chartreuse bags.
faded indigo bags contain 1 wavy gold bag, 5 dotted crimson bags.
dull plum bags contain 5 faded gold bags, 1 mirrored gold bag, 3 striped gold bags.
mirrored yellow bags contain 4 faded violet bags.
dull cyan bags contain 2 drab tan bags, 2 dotted beige bags, 2 posh olive bags.
bright gold bags contain 5 mirrored beige bags, 1 bright coral bag, 2 plaid turquoise bags, 3 striped crimson bags.
light green bags contain 2 drab teal bags, 1 wavy coral bag, 1 muted violet bag, 4 clear black bags.
bright magenta bags contain 5 mirrored maroon bags, 4 drab crimson bags, 2 dark salmon bags, 3 dark violet bags.
dotted gray bags contain 3 drab gold bags, 5 posh lime bags, 3 dim yellow bags.
posh white bags contain 1 pale green bag, 4 striped tomato bags, 2 striped plum bags, 5 muted orange bags.
mirrored orange bags contain 2 dim silver bags.
mirrored gold bags contain no other bags.
dull yellow bags contain 5 clear beige bags, 2 striped silver bags.
dull bronze bags contain 1 shiny turquoise bag, 1 dull gray bag, 2 faded purple bags.
dotted yellow bags contain 4 striped coral bags, 5 pale gray bags.
drab teal bags contain 1 wavy olive bag, 3 shiny tomato bags, 5 pale aqua bags, 3 dark blue bags.
vibrant red bags contain 5 dark crimson bags, 1 drab silver bag.
faded lavender bags contain 1 dark coral bag, 3 clear violet bags, 1 faded magenta bag, 1 plaid gold bag.
wavy aqua bags contain 2 light teal bags, 5 pale turquoise bags, 5 faded lime bags, 3 dull plum bags.
dotted purple bags contain 1 posh tomato bag.
dark gray bags contain 2 dark tomato bags.
dark lavender bags contain 1 shiny crimson bag.
posh silver bags contain 5 drab cyan bags, 4 bright blue bags, 3 wavy lime bags, 4 vibrant violet bags.
mirrored olive bags contain 3 shiny green bags, 3 faded gold bags.
striped lime bags contain 4 light black bags, 1 bright salmon bag, 2 posh bronze bags.
faded coral bags contain 2 muted yellow bags, 3 bright maroon bags.
clear gray bags contain 4 wavy beige bags, 1 dull beige bag, 5 dim bronze bags, 1 faded chartreuse bag.
plaid chartreuse bags contain 1 posh lavender bag, 3 dull orange bags.
bright violet bags contain 3 striped green bags.
wavy turquoise bags contain 5 vibrant maroon bags, 3 drab tomato bags, 1 drab crimson bag.
striped plum bags contain 5 clear cyan bags, 5 shiny turquoise bags, 4 mirrored gold bags.
posh green bags contain 4 muted orange bags, 2 shiny turquoise bags.
dark fuchsia bags contain 3 pale cyan bags, 1 drab lime bag, 4 pale gray bags.
mirrored lavender bags contain 5 dull tomato bags, 1 light purple bag.
wavy coral bags contain 4 vibrant plum bags, 1 muted silver bag, 5 dark orange bags, 3 faded yellow bags.
dark green bags contain 2 striped yellow bags, 1 light bronze bag, 1 drab indigo bag, 1 plaid red bag.
pale crimson bags contain 1 dull orange bag, 5 bright turquoise bags, 5 pale coral bags, 5 bright indigo bags.
faded magenta bags contain 3 dull olive bags, 5 pale cyan bags, 1 vibrant magenta bag, 3 plaid olive bags.
plaid violet bags contain 2 pale olive bags, 5 faded magenta bags, 5 drab brown bags, 2 mirrored white bags.
pale aqua bags contain 4 dotted tan bags, 1 mirrored crimson bag, 3 light silver bags.
drab purple bags contain 2 faded chartreuse bags, 5 muted chartreuse bags.
dim chartreuse bags contain 1 mirrored gold bag.
clear green bags contain 4 faded red bags, 1 clear magenta bag, 2 drab teal bags.
light brown bags contain 3 vibrant gray bags, 2 shiny plum bags.
faded cyan bags contain 2 muted lavender bags.
dotted plum bags contain 4 shiny green bags, 1 dark aqua bag.
dull olive bags contain 5 faded silver bags, 4 wavy maroon bags, 4 plaid gray bags.
dark teal bags contain 4 clear indigo bags, 2 dotted aqua bags, 5 faded tomato bags.
vibrant fuchsia bags contain 5 drab beige bags, 5 shiny maroon bags, 5 wavy coral bags.
bright crimson bags contain 5 wavy olive bags.
pale tomato bags contain 2 mirrored orange bags, 2 dim maroon bags, 3 faded teal bags, 2 wavy silver bags.
wavy magenta bags contain 3 dark lime bags, 2 wavy silver bags, 4 clear turquoise bags.
plaid coral bags contain 2 faded red bags, 2 vibrant indigo bags, 1 dark teal bag, 5 dull purple bags.
bright purple bags contain 3 bright red bags, 5 posh olive bags, 5 posh lavender bags.
muted silver bags contain 2 posh purple bags, 3 dotted lime bags.
clear red bags contain 5 light turquoise bags.
dark aqua bags contain 1 light purple bag, 2 muted bronze bags, 5 dim cyan bags.
shiny brown bags contain 1 mirrored beige bag, 5 posh purple bags, 2 clear blue bags, 1 clear bronze bag.
shiny red bags contain 3 shiny fuchsia bags, 5 mirrored crimson bags.
dim purple bags contain 1 dull beige bag, 4 dotted silver bags, 4 light cyan bags.
faded teal bags contain 5 wavy gold bags, 1 pale cyan bag, 4 dark crimson bags, 3 dark coral bags.
wavy teal bags contain 5 shiny coral bags, 2 shiny brown bags, 3 dark crimson bags.
muted green bags contain 1 posh red bag, 4 bright indigo bags.
drab gold bags contain 2 dark tomato bags, 5 pale tan bags.
wavy yellow bags contain 5 dotted gold bags, 2 plaid olive bags, 2 muted olive bags.
striped blue bags contain 4 posh green bags, 5 pale beige bags.
light blue bags contain 3 striped beige bags, 3 drab lime bags, 2 mirrored brown bags.
mirrored bronze bags contain 3 faded aqua bags.
faded fuchsia bags contain 2 posh olive bags, 5 muted olive bags.
dotted tomato bags contain 1 striped magenta bag, 5 posh gold bags.
bright orange bags contain 5 light magenta bags.
vibrant turquoise bags contain 1 striped fuchsia bag, 4 dim chartreuse bags.
dark orange bags contain 3 drab turquoise bags, 1 drab orange bag.
vibrant brown bags contain 2 faded aqua bags, 3 drab maroon bags, 2 bright orange bags.
mirrored teal bags contain 3 posh aqua bags, 4 dim bronze bags, 5 pale yellow bags.
plaid cyan bags contain 1 posh lavender bag.
posh tan bags contain 3 muted bronze bags, 3 clear crimson bags, 2 dim tomato bags.
clear silver bags contain 5 pale olive bags, 1 muted olive bag.
bright cyan bags contain 5 dark coral bags.
dark cyan bags contain 2 posh orange bags.
striped tan bags contain 1 pale beige bag, 1 striped magenta bag, 1 clear cyan bag, 5 faded orange bags.
muted turquoise bags contain 4 mirrored gold bags, 4 striped gray bags.
wavy purple bags contain 1 dotted tan bag, 2 shiny plum bags.
dull magenta bags contain 1 wavy bronze bag, 2 shiny beige bags.
faded black bags contain 3 wavy violet bags, 2 clear black bags.
drab plum bags contain 2 muted violet bags, 4 pale blue bags, 5 vibrant plum bags.
clear yellow bags contain 4 pale teal bags, 5 vibrant gold bags, 5 light brown bags, 1 wavy gray bag.
dull silver bags contain 1 wavy silver bag, 4 dark orange bags, 3 faded violet bags, 1 faded gold bag.
vibrant olive bags contain 4 drab blue bags, 2 shiny tan bags, 1 light orange bag, 2 light magenta bags.
shiny yellow bags contain 1 posh lavender bag, 1 vibrant coral bag.
clear olive bags contain 1 dark salmon bag, 3 mirrored crimson bags, 3 dull silver bags, 3 dotted lime bags.
light beige bags contain 4 drab indigo bags, 5 drab brown bags.
drab tan bags contain 3 clear cyan bags, 3 drab crimson bags, 2 vibrant gray bags.
muted crimson bags contain 5 dark tomato bags, 2 shiny maroon bags, 2 pale olive bags.
posh chartreuse bags contain 4 wavy crimson bags, 2 posh olive bags, 2 dim fuchsia bags, 4 dim orange bags.
posh crimson bags contain 4 faded chartreuse bags, 1 clear white bag, 2 clear beige bags.
mirrored cyan bags contain 4 dark bronze bags.
dim orange bags contain 2 striped teal bags, 1 striped crimson bag, 5 wavy purple bags, 3 wavy brown bags.
striped green bags contain 2 vibrant green bags, 3 faded green bags, 4 muted lavender bags, 2 dull green bags.
drab beige bags contain 5 posh purple bags.
dark blue bags contain 5 light tan bags.
clear plum bags contain 4 pale green bags, 2 light olive bags.
dull green bags contain 3 bright green bags.
wavy plum bags contain 4 faded orange bags, 5 pale green bags, 4 faded violet bags, 4 posh green bags.
striped lavender bags contain 2 striped gray bags, 1 wavy plum bag, 1 wavy cyan bag.
dull coral bags contain 3 shiny chartreuse bags, 5 clear black bags, 4 vibrant crimson bags, 3 dim gray bags.
dull red bags contain 1 shiny gray bag.
dull brown bags contain 5 striped bronze bags, 3 striped beige bags, 3 bright purple bags, 2 dull blue bags.
light turquoise bags contain 3 striped turquoise bags, 2 bright coral bags, 5 posh olive bags.
dotted lime bags contain 5 clear cyan bags, 5 mirrored beige bags.
muted blue bags contain 4 light bronze bags, 4 light orange bags.
dark salmon bags contain 2 dotted lime bags.
dark plum bags contain 2 dotted blue bags, 5 faded green bags.
mirrored red bags contain 2 striped magenta bags, 3 muted violet bags, 5 dim yellow bags, 1 mirrored beige bag.
dim lavender bags contain 1 wavy teal bag, 4 muted violet bags.
dim white bags contain 5 striped gray bags, 5 bright aqua bags.
vibrant violet bags contain 4 dull lavender bags, 2 pale teal bags, 5 posh lavender bags, 2 shiny green bags.
pale yellow bags contain 1 wavy cyan bag, 1 dotted tomato bag.
shiny indigo bags contain 5 vibrant tan bags, 3 shiny teal bags, 3 pale gray bags.
dotted chartreuse bags contain 1 dim blue bag, 1 shiny orange bag, 5 pale turquoise bags, 1 shiny plum bag.
light olive bags contain 1 dull magenta bag.
striped white bags contain 5 light maroon bags, 5 pale teal bags, 2 dim gray bags, 5 posh gold bags.
dim teal bags contain 4 posh white bags.
plaid magenta bags contain 4 pale brown bags, 3 wavy violet bags, 4 dim teal bags.
plaid indigo bags contain 1 wavy bronze bag, 1 faded green bag, 2 dotted teal bags.
dull turquoise bags contain 3 striped violet bags.
vibrant lavender bags contain 2 dotted bronze bags, 5 vibrant silver bags.
light crimson bags contain 4 plaid tan bags, 4 striped beige bags, 4 plaid silver bags, 2 light red bags.
bright lime bags contain 4 dim indigo bags, 5 light beige bags, 5 wavy olive bags.
mirrored turquoise bags contain 5 posh green bags, 4 striped tan bags, 3 dull cyan bags, 3 vibrant blue bags.
mirrored blue bags contain 4 posh cyan bags, 2 pale olive bags.
plaid tan bags contain 3 posh white bags, 1 posh turquoise bag.
drab coral bags contain 1 mirrored lavender bag, 4 vibrant salmon bags.
plaid olive bags contain 4 bright salmon bags, 1 drab brown bag, 3 drab cyan bags.
pale indigo bags contain 1 shiny coral bag.
drab silver bags contain 3 light red bags.
dull chartreuse bags contain 1 light lime bag, 3 drab bronze bags, 1 wavy turquoise bag.
posh black bags contain 4 light brown bags.
wavy crimson bags contain 4 shiny coral bags, 5 dark aqua bags.
dotted magenta bags contain 2 mirrored fuchsia bags, 3 pale purple bags, 5 shiny yellow bags.
posh red bags contain 4 dark violet bags, 2 posh purple bags, 3 dim yellow bags, 1 shiny turquoise bag.
dim violet bags contain 2 shiny orange bags, 5 bright bronze bags, 2 bright salmon bags, 1 striped bronze bag.
drab salmon bags contain 3 dull violet bags, 3 posh brown bags, 4 posh beige bags, 2 mirrored gray bags.
dotted silver bags contain 1 drab black bag.
vibrant gold bags contain 2 clear crimson bags, 2 posh olive bags, 3 drab black bags, 5 vibrant gray bags.
muted chartreuse bags contain 4 faded yellow bags, 2 posh red bags, 4 dotted gold bags.
dark purple bags contain 4 mirrored lavender bags, 3 muted salmon bags.
faded tomato bags contain 2 plaid gray bags, 4 muted tan bags, 1 wavy beige bag.
pale magenta bags contain 5 pale tan bags, 1 posh brown bag, 5 drab gray bags.
plaid orange bags contain 5 dull bronze bags, 2 faded beige bags, 3 vibrant white bags, 2 dull coral bags.
faded red bags contain 5 dotted tan bags, 1 dull tan bag, 2 bright blue bags, 2 dark coral bags.
pale plum bags contain 4 shiny cyan bags, 1 mirrored yellow bag, 2 muted violet bags.
shiny gray bags contain 2 faded chartreuse bags, 2 shiny tomato bags, 4 bright tan bags.
light teal bags contain 4 clear blue bags, 5 mirrored white bags, 2 pale olive bags.
posh cyan bags contain 5 dim gray bags.
vibrant yellow bags contain 4 drab olive bags.
dull violet bags contain 4 dim gray bags, 5 posh olive bags.
wavy olive bags contain 3 plaid olive bags.
mirrored fuchsia bags contain 1 dull gray bag, 3 pale green bags, 1 clear bronze bag, 5 dark violet bags.
posh brown bags contain 2 mirrored aqua bags, 2 clear chartreuse bags, 2 clear bronze bags.
drab chartreuse bags contain 3 faded cyan bags, 4 faded olive bags, 5 muted beige bags, 4 clear blue bags.
vibrant magenta bags contain 3 wavy plum bags.
clear beige bags contain 4 striped salmon bags, 2 clear aqua bags.
light orange bags contain 5 drab orange bags.
dotted orange bags contain 3 plaid gray bags.
muted orange bags contain 1 striped plum bag, 1 pale beige bag, 5 posh lavender bags.
plaid plum bags contain 4 wavy magenta bags, 3 drab tan bags.
mirrored brown bags contain 4 dim lavender bags, 5 pale lavender bags, 5 light silver bags, 2 shiny brown bags.
shiny gold bags contain 4 muted violet bags, 3 dark lime bags.
drab orange bags contain 2 clear turquoise bags, 4 dim cyan bags.
dim aqua bags contain 3 faded maroon bags, 1 pale tomato bag, 5 dull crimson bags.
plaid gray bags contain 4 posh lavender bags.
striped turquoise bags contain 5 dotted bronze bags, 5 dark tomato bags, 5 faded olive bags, 5 shiny teal bags.
plaid lime bags contain 2 mirrored yellow bags.
shiny blue bags contain 5 dotted lavender bags, 1 plaid white bag, 3 dotted red bags.
clear cyan bags contain no other bags.
drab bronze bags contain 3 bright salmon bags, 3 drab cyan bags.
wavy gold bags contain 3 clear blue bags, 2 shiny brown bags, 3 dotted lime bags, 4 shiny beige bags.
light silver bags contain 4 striped coral bags, 4 shiny plum bags, 5 dark coral bags.
faded violet bags contain 5 light brown bags, 4 clear blue bags, 1 pale orange bag, 1 mirrored gold bag.
dim red bags contain 1 clear white bag, 4 clear blue bags, 1 light black bag, 3 dim violet bags.
bright bronze bags contain 1 dotted lime bag.
muted salmon bags contain 1 shiny beige bag, 5 dull cyan bags, 3 vibrant red bags, 3 vibrant purple bags.
striped indigo bags contain 2 posh lavender bags.
dull fuchsia bags contain 2 dim tomato bags, 1 wavy crimson bag, 3 mirrored tomato bags, 3 shiny cyan bags.
dotted tan bags contain 4 pale orange bags, 2 shiny fuchsia bags, 3 pale indigo bags.
vibrant bronze bags contain 5 dotted fuchsia bags, 4 light black bags, 1 dark salmon bag.
dark coral bags contain 1 vibrant gray bag, 3 shiny brown bags.
drab maroon bags contain 5 mirrored gold bags, 4 posh purple bags, 2 light brown bags.
light white bags contain 4 light tan bags.
plaid maroon bags contain 5 bright purple bags, 4 pale bronze bags.
posh lavender bags contain 2 faded purple bags, 2 posh purple bags, 1 shiny plum bag.
vibrant white bags contain 1 plaid silver bag, 5 bright cyan bags, 2 light crimson bags, 4 clear black bags.
light gray bags contain 1 striped beige bag.
striped maroon bags contain 2 posh bronze bags, 3 mirrored chartreuse bags, 2 dark green bags, 4 dull salmon bags.
wavy cyan bags contain 2 dark coral bags.
muted tan bags contain 4 dark bronze bags.
mirrored lime bags contain 4 clear orange bags, 5 vibrant bronze bags.
pale brown bags contain 4 shiny tan bags, 2 muted silver bags.
light maroon bags contain 5 bright turquoise bags.
bright salmon bags contain 4 faded orange bags.
wavy tan bags contain 3 wavy magenta bags.
muted bronze bags contain 2 posh red bags, 4 wavy cyan bags, 3 posh turquoise bags, 5 pale cyan bags.
drab olive bags contain 1 dotted orange bag, 1 mirrored red bag, 4 dotted bronze bags, 3 light black bags.
striped violet bags contain 4 drab blue bags, 5 plaid white bags, 3 posh red bags, 5 clear teal bags.
muted maroon bags contain 4 pale blue bags, 2 dim magenta bags.
shiny salmon bags contain 5 light purple bags.
pale salmon bags contain 3 posh lavender bags, 2 pale aqua bags.
clear teal bags contain 3 muted turquoise bags.
muted purple bags contain 3 dim white bags.
shiny magenta bags contain 1 mirrored aqua bag, 3 dark coral bags, 3 clear crimson bags, 2 drab maroon bags.
clear black bags contain 4 wavy cyan bags, 4 striped coral bags, 2 shiny olive bags, 3 drab tomato bags.
drab yellow bags contain 3 muted olive bags, 1 wavy gold bag, 5 mirrored aqua bags, 1 posh red bag.
striped fuchsia bags contain 5 pale yellow bags, 3 posh plum bags, 4 plaid olive bags.
plaid lavender bags contain 3 drab brown bags, 5 pale aqua bags.
pale beige bags contain 4 dim gray bags, 3 shiny turquoise bags, 4 faded purple bags.
dull beige bags contain 5 pale orange bags, 2 plaid salmon bags, 3 wavy cyan bags, 2 clear turquoise bags.
clear bronze bags contain no other bags.
dim tan bags contain 2 dotted plum bags.
clear lavender bags contain 1 pale yellow bag.
dull purple bags contain 5 shiny red bags, 3 shiny lime bags, 2 dim white bags, 3 dull chartreuse bags.
dotted crimson bags contain 3 clear cyan bags, 5 dark red bags, 5 shiny tan bags.
clear indigo bags contain 2 bright maroon bags, 5 posh green bags.
posh magenta bags contain 5 dotted silver bags, 3 mirrored olive bags, 1 wavy cyan bag, 5 plaid purple bags.
dark white bags contain 4 vibrant bronze bags, 2 striped bronze bags, 4 faded white bags, 4 light purple bags.
mirrored violet bags contain 1 faded tan bag, 2 plaid fuchsia bags, 4 dim salmon bags.
dim blue bags contain 2 bright turquoise bags, 5 light brown bags, 5 dull maroon bags.
dim cyan bags contain 4 dotted lime bags.
posh coral bags contain 2 dim yellow bags.
muted white bags contain 1 pale yellow bag, 3 dull gray bags, 5 posh purple bags.
plaid bronze bags contain 5 striped green bags, 4 plaid indigo bags, 4 posh coral bags.
light chartreuse bags contain 5 posh turquoise bags.
wavy white bags contain 2 striped lavender bags, 5 dull gray bags.
mirrored gray bags contain 4 mirrored fuchsia bags, 5 wavy plum bags, 1 mirrored beige bag, 5 muted orange bags.
plaid white bags contain 2 dark salmon bags.
shiny fuchsia bags contain 5 clear blue bags, 3 pale orange bags.
faded gold bags contain 2 clear chartreuse bags.
vibrant plum bags contain 4 vibrant blue bags, 3 bright brown bags, 1 wavy magenta bag, 4 shiny red bags.
pale black bags contain 3 drab indigo bags, 1 pale indigo bag.
clear tomato bags contain 2 dotted indigo bags.
muted lime bags contain 4 vibrant beige bags.
muted tomato bags contain 3 wavy tomato bags, 3 pale brown bags, 3 dim yellow bags.
muted aqua bags contain 1 shiny cyan bag, 3 dull lime bags, 2 vibrant red bags.
light bronze bags contain 2 drab blue bags, 4 drab yellow bags, 5 wavy plum bags.
dotted lavender bags contain 1 dim teal bag.
striped cyan bags contain 2 pale bronze bags, 1 plaid green bag, 1 dark plum bag, 4 drab purple bags.
muted plum bags contain 3 shiny green bags, 2 vibrant plum bags, 1 dim gold bag, 1 shiny orange bag.
dark crimson bags contain 4 clear blue bags, 5 light purple bags.
shiny lime bags contain 3 plaid beige bags.
vibrant orange bags contain 3 striped olive bags, 1 muted olive bag.
light lime bags contain 1 dotted red bag, 5 bright red bags.
shiny olive bags contain 5 vibrant black bags, 2 dotted violet bags.
wavy blue bags contain 2 dull blue bags, 4 dark violet bags.
dark black bags contain 4 drab cyan bags.
faded orange bags contain no other bags.
mirrored magenta bags contain 2 bright crimson bags, 5 mirrored fuchsia bags, 4 plaid green bags, 4 plaid gold bags.
dotted indigo bags contain 2 muted bronze bags, 5 dim coral bags.
dark magenta bags contain 5 dull green bags, 1 faded indigo bag.
bright fuchsia bags contain 5 drab beige bags.
faded blue bags contain 1 mirrored salmon bag, 1 faded bronze bag.
bright lavender bags contain 2 wavy beige bags, 2 dotted bronze bags.
wavy fuchsia bags contain 5 dim teal bags, 3 shiny orange bags.
striped gray bags contain 5 dark coral bags.
light magenta bags contain 1 shiny turquoise bag, 3 light tan bags.
dotted turquoise bags contain 1 dim gray bag, 5 drab red bags.
dark turquoise bags contain 1 wavy black bag, 2 wavy violet bags, 1 faded yellow bag.
vibrant gray bags contain no other bags.
dark red bags contain 3 drab maroon bags.
faded tan bags contain 3 mirrored fuchsia bags, 1 wavy brown bag.
mirrored purple bags contain 4 clear cyan bags, 5 dark silver bags, 4 bright tomato bags.
vibrant coral bags contain 3 shiny gold bags, 4 mirrored yellow bags, 2 pale aqua bags.
wavy beige bags contain 5 dull plum bags.
faded maroon bags contain 4 bright fuchsia bags, 4 muted green bags.
bright red bags contain 4 posh olive bags, 5 mirrored aqua bags, 4 striped lavender bags, 3 pale tan bags.
faded aqua bags contain 3 light black bags, 2 dull magenta bags.
dim black bags contain 1 dim gray bag.
pale fuchsia bags contain no other bags.
vibrant chartreuse bags contain 3 muted red bags, 3 dull beige bags, 4 drab gray bags.
pale gold bags contain 1 bright bronze bag, 1 pale magenta bag, 4 mirrored gray bags.
clear maroon bags contain 4 dark salmon bags, 5 dull olive bags, 1 dotted fuchsia bag.
light coral bags contain 5 posh salmon bags.
light salmon bags contain 1 dull black bag, 5 shiny tan bags, 1 posh lavender bag, 2 vibrant tomato bags.
pale coral bags contain 2 posh lavender bags, 4 drab magenta bags, 3 faded teal bags.
vibrant maroon bags contain 2 pale orange bags, 3 plaid gray bags.
bright aqua bags contain 3 shiny brown bags, 1 wavy olive bag.
dark violet bags contain 5 mirrored beige bags, 3 clear blue bags.
dotted aqua bags contain 1 drab tan bag.
pale lavender bags contain 3 pale fuchsia bags.
bright gray bags contain 2 mirrored yellow bags, 4 mirrored cyan bags, 1 dark tomato bag, 1 light silver bag.
light tan bags contain 2 pale orange bags, 5 dark orange bags, 4 dotted tomato bags, 4 dim cyan bags.
dull tan bags contain 1 dull green bag.
posh bronze bags contain 1 muted turquoise bag, 5 vibrant gold bags, 2 muted indigo bags, 3 pale cyan bags.
wavy brown bags contain 1 pale cyan bag, 3 mirrored fuchsia bags, 1 shiny plum bag, 5 drab black bags.
pale green bags contain no other bags.
shiny white bags contain 5 dull crimson bags, 5 pale magenta bags, 4 clear green bags.
dull aqua bags contain 3 plaid lime bags, 3 striped purple bags, 2 clear olive bags.
clear orange bags contain 5 drab brown bags.
shiny teal bags contain 1 wavy gold bag, 4 muted bronze bags, 1 clear orange bag.
dim bronze bags contain 2 muted turquoise bags, 4 muted tan bags, 2 striped crimson bags.
light fuchsia bags contain 5 dark black bags, 4 mirrored crimson bags.
pale gray bags contain 2 wavy maroon bags.
clear fuchsia bags contain 1 pale indigo bag, 1 striped salmon bag.
striped orange bags contain 3 striped turquoise bags, 4 dim violet bags, 5 dim crimson bags, 3 pale gray bags.
drab turquoise bags contain 2 muted bronze bags, 2 clear cyan bags, 4 shiny beige bags, 2 shiny coral bags.
wavy lavender bags contain 1 drab cyan bag, 1 drab orange bag, 1 wavy silver bag, 5 dim olive bags.
plaid aqua bags contain 5 dim green bags, 3 drab crimson bags.
striped magenta bags contain no other bags.
shiny turquoise bags contain 1 clear cyan bag, 5 pale fuchsia bags, 4 dim gray bags.
muted fuchsia bags contain 1 wavy crimson bag, 5 muted coral bags, 4 dark turquoise bags, 3 clear teal bags.
clear turquoise bags contain 2 drab cyan bags, 1 striped magenta bag, 2 striped plum bags, 3 clear cyan bags.
dark maroon bags contain 2 wavy gray bags, 1 dim coral bag, 3 shiny coral bags.
pale olive bags contain 4 plaid silver bags, 2 dim tomato bags, 2 mirrored fuchsia bags.
vibrant indigo bags contain 3 mirrored orange bags, 1 faded salmon bag, 1 vibrant maroon bag, 3 dotted teal bags.
mirrored green bags contain 5 plaid lavender bags, 2 drab purple bags, 5 plaid red bags, 1 dim gold bag.
wavy salmon bags contain 1 faded magenta bag.
light purple bags contain 1 striped plum bag, 5 dull bronze bags, 1 posh purple bag.
drab crimson bags contain 3 dark lime bags, 5 pale green bags, 2 shiny plum bags.
dark silver bags contain 2 muted turquoise bags, 1 pale silver bag, 1 drab lavender bag.
mirrored black bags contain 5 faded purple bags, 1 wavy violet bag, 4 dull gray bags.
striped silver bags contain 5 dim white bags.
dull white bags contain 4 drab crimson bags, 5 pale fuchsia bags, 1 shiny beige bag.
faded yellow bags contain 5 plaid yellow bags, 4 faded silver bags, 2 dotted tomato bags, 3 mirrored gray bags.
muted brown bags contain 2 drab yellow bags.
dim maroon bags contain 3 dotted red bags, 2 dim coral bags, 1 posh blue bag.
drab tomato bags contain 5 dotted bronze bags.
muted red bags contain 1 dull violet bag, 3 muted gray bags, 3 plaid orange bags, 3 dark blue bags.
pale tan bags contain 3 striped tan bags, 3 shiny coral bags, 1 posh gold bag, 2 posh green bags.
striped teal bags contain 3 dim crimson bags, 1 dull cyan bag.
drab blue bags contain 5 striped lavender bags, 3 dotted teal bags.
muted cyan bags contain 3 striped bronze bags, 1 light silver bag.
dim brown bags contain 5 muted violet bags, 5 shiny gray bags.
posh lime bags contain 5 wavy salmon bags.
wavy bronze bags contain 5 dotted fuchsia bags, 2 dark coral bags, 3 faded orange bags.
light gold bags contain 2 bright turquoise bags, 4 dim indigo bags, 2 dark magenta bags.
dotted cyan bags contain 2 vibrant maroon bags.
muted black bags contain 1 plaid crimson bag, 3 faded silver bags, 1 mirrored magenta bag.
drab gray bags contain 5 drab beige bags, 1 dim fuchsia bag.
wavy black bags contain 3 striped gold bags, 2 posh green bags, 2 wavy teal bags, 2 shiny tan bags.
bright yellow bags contain 2 plaid fuchsia bags, 3 clear bronze bags, 2 posh lavender bags.
clear coral bags contain 5 muted turquoise bags, 1 dim black bag, 3 dull aqua bags.
plaid yellow bags contain 2 dull white bags, 5 posh brown bags, 1 posh purple bag.
dark brown bags contain 2 mirrored indigo bags, 2 dark cyan bags, 2 light chartreuse bags, 4 faded tan bags.
drab cyan bags contain 2 mirrored beige bags, 5 dotted lime bags.
bright indigo bags contain 1 faded purple bag.
wavy tomato bags contain 4 pale beige bags, 2 striped magenta bags, 5 faded orange bags.
light black bags contain 1 dim yellow bag, 2 plaid tan bags, 5 dim indigo bags.
dim tomato bags contain 1 vibrant maroon bag, 4 striped tomato bags.
dark gold bags contain 1 light crimson bag, 5 posh tomato bags, 1 drab indigo bag, 5 striped bronze bags.
bright teal bags contain 1 muted fuchsia bag, 3 muted violet bags, 5 pale brown bags, 4 mirrored orange bags.
dotted gold bags contain 3 plaid olive bags, 5 wavy purple bags, 3 dim silver bags, 3 vibrant tomato bags.
bright coral bags contain 1 clear tan bag, 4 dark purple bags.
drab lime bags contain 2 dull white bags.
light cyan bags contain 5 drab turquoise bags, 5 bright blue bags.
dark tomato bags contain 5 wavy maroon bags, 4 dim olive bags.
shiny black bags contain 5 plaid aqua bags, 3 muted green bags, 2 dim coral bags.
dotted coral bags contain 5 light magenta bags, 3 light beige bags, 1 dark black bag.
drab magenta bags contain 5 mirrored gray bags, 3 clear cyan bags, 2 wavy teal bags, 5 wavy maroon bags.
pale lime bags contain 2 dull crimson bags, 1 dark tomato bag.
shiny maroon bags contain 3 wavy bronze bags, 1 dim green bag, 1 wavy maroon bag, 5 dark bronze bags.
striped yellow bags contain 5 light magenta bags, 5 clear salmon bags.
pale blue bags contain 4 dim coral bags.
posh fuchsia bags contain 3 bright beige bags.
posh purple bags contain 2 mirrored beige bags, 3 striped magenta bags, 1 faded purple bag, 5 pale green bags.
dark indigo bags contain 5 dotted blue bags, 2 pale blue bags, 1 posh tomato bag.
dotted violet bags contain 2 pale green bags, 3 wavy olive bags.
posh indigo bags contain 1 faded purple bag, 2 bright salmon bags, 1 drab orange bag, 3 shiny olive bags.
muted gray bags contain 5 dark red bags.
mirrored aqua bags contain 1 striped tan bag.
shiny coral bags contain 1 muted orange bag.
vibrant purple bags contain 5 shiny red bags.
bright maroon bags contain 1 wavy tomato bag, 3 faded purple bags, 4 plaid plum bags.
clear salmon bags contain 1 wavy gray bag, 2 wavy silver bags.
striped aqua bags contain 4 bright green bags.
clear chartreuse bags contain 4 dark red bags, 4 clear blue bags, 1 mirrored fuchsia bag, 1 clear bronze bag.
bright plum bags contain 3 striped magenta bags, 3 dull lavender bags, 4 dotted cyan bags.
plaid blue bags contain 1 dark maroon bag.
mirrored coral bags contain 5 mirrored blue bags.
bright white bags contain 5 muted tomato bags, 4 dotted gray bags, 3 posh gold bags.
faded crimson bags contain 2 pale maroon bags, 1 posh bronze bag, 3 pale red bags, 2 faded fuchsia bags.
plaid salmon bags contain 2 vibrant maroon bags, 4 wavy plum bags.
posh maroon bags contain 1 mirrored aqua bag.
bright blue bags contain 5 plaid chartreuse bags, 2 dark aqua bags, 2 posh white bags.
dull gray bags contain 2 pale fuchsia bags, 4 striped plum bags, 4 posh green bags.
dotted fuchsia bags contain 1 mirrored gold bag, 4 dim yellow bags, 1 shiny gold bag, 5 light brown bags.
striped gold bags contain 5 vibrant silver bags, 4 plaid silver bags.
pale maroon bags contain 4 dark red bags.
mirrored silver bags contain 4 light red bags, 5 dim green bags, 1 mirrored beige bag, 5 wavy cyan bags.
plaid purple bags contain 4 drab tan bags, 1 posh gray bag, 4 mirrored chartreuse bags, 4 pale yellow bags.
shiny beige bags contain 1 posh green bag, 4 clear cyan bags, 4 striped gray bags, 5 dark violet bags.
mirrored chartreuse bags contain 5 vibrant silver bags.
dull black bags contain 3 bright aqua bags.
vibrant black bags contain 4 light purple bags, 1 drab brown bag.
dark tan bags contain 2 mirrored salmon bags, 2 striped purple bags.
dim plum bags contain 5 mirrored beige bags, 2 posh cyan bags, 1 posh tan bag, 2 striped brown bags.
faded turquoise bags contain 3 plaid black bags, 2 muted olive bags, 3 clear gold bags, 4 mirrored white bags.
shiny chartreuse bags contain 3 pale orange bags, 4 drab green bags, 3 drab salmon bags, 4 dark bronze bags.
shiny lavender bags contain 5 faded lime bags, 3 drab olive bags, 4 muted turquoise bags.
bright tan bags contain 3 dark tomato bags, 5 posh white bags, 4 pale green bags.
faded olive bags contain 3 dull plum bags.
vibrant teal bags contain 5 dotted fuchsia bags, 1 clear teal bag.
bright black bags contain 5 striped coral bags, 1 dark salmon bag, 1 pale blue bag.
plaid black bags contain 5 bright indigo bags, 3 striped gray bags, 2 posh blue bags.
light plum bags contain 2 dark orange bags, 1 wavy black bag, 3 muted tomato bags, 5 dark fuchsia bags.
mirrored crimson bags contain 2 light brown bags, 5 posh gold bags, 4 faded purple bags, 3 shiny beige bags.
plaid turquoise bags contain 1 dark gold bag, 2 dim orange bags.
clear blue bags contain 4 pale green bags, 5 striped magenta bags, 3 clear bronze bags, 2 dotted beige bags.
pale teal bags contain 3 posh lavender bags, 5 dark lime bags, 1 mirrored gray bag, 1 dark aqua bag.
shiny tomato bags contain 3 clear crimson bags, 2 dotted violet bags, 1 shiny brown bag.
dotted beige bags contain no other bags.
posh teal bags contain 2 muted purple bags.
posh turquoise bags contain 1 wavy magenta bag.
posh aqua bags contain 5 drab gold bags, 1 pale indigo bag, 1 plaid olive bag.
drab black bags contain 1 dark coral bag, 1 clear teal bag.
faded purple bags contain 3 vibrant gray bags.
clear aqua bags contain 4 faded gold bags.
striped red bags contain 3 clear teal bags, 3 faded aqua bags, 2 wavy black bags, 2 wavy silver bags.
muted lavender bags contain 5 dark lime bags, 4 dotted teal bags.
pale white bags contain 5 bright white bags, 2 striped blue bags, 1 plaid gold bag.
drab aqua bags contain 2 dim cyan bags, 2 striped tomato bags, 4 posh green bags, 4 shiny aqua bags.
dark olive bags contain 1 bright indigo bag, 4 pale blue bags.
mirrored tan bags contain 1 bright black bag, 2 wavy orange bags, 2 striped green bags.
wavy gray bags contain 4 muted gold bags, 1 dark lime bag, 4 pale indigo bags.
dotted red bags contain 5 plaid tan bags, 4 vibrant purple bags, 2 dim green bags, 4 faded white bags.
faded brown bags contain 2 shiny tomato bags, 2 mirrored yellow bags, 5 clear magenta bags, 1 muted orange bag.
plaid brown bags contain 3 dark crimson bags, 1 plaid white bag, 2 pale indigo bags.
dotted bronze bags contain 3 plaid olive bags.
dim beige bags contain 2 faded aqua bags, 1 vibrant gold bag, 1 drab tomato bag, 2 wavy black bags.
faded lime bags contain 4 bright lime bags.
dark yellow bags contain 5 dim crimson bags.
posh salmon bags contain 3 dark bronze bags, 5 drab aqua bags, 4 mirrored gold bags, 5 mirrored aqua bags.
dull blue bags contain 5 dotted violet bags, 2 pale gold bags.
posh violet bags contain 5 pale lavender bags, 4 shiny turquoise bags, 5 dark violet bags, 1 plaid gold bag.
muted yellow bags contain 3 mirrored beige bags, 3 dim chartreuse bags.
striped tomato bags contain 1 shiny plum bag, 2 plaid olive bags, 2 dark violet bags, 2 clear cyan bags.
posh olive bags contain 4 light brown bags, 3 bright salmon bags, 5 muted gold bags, 5 clear bronze bags.
pale cyan bags contain 3 muted violet bags, 2 dim gray bags, 4 dark lime bags, 3 faded purple bags.
vibrant tan bags contain 3 vibrant purple bags.
pale turquoise bags contain 5 wavy gold bags, 3 pale yellow bags.
striped black bags contain 5 dim white bags.
shiny violet bags contain 5 clear beige bags.
dotted salmon bags contain 5 mirrored turquoise bags.
striped olive bags contain 3 clear lavender bags.
vibrant tomato bags contain 4 drab crimson bags, 3 drab orange bags, 1 striped aqua bag.
vibrant silver bags contain 4 striped tomato bags, 4 dim gray bags.
shiny bronze bags contain 1 dark aqua bag, 5 light plum bags, 5 mirrored gray bags.
dull maroon bags contain 2 wavy violet bags.
clear tan bags contain 4 clear chartreuse bags, 5 dim olive bags, 1 drab gray bag, 3 dull indigo bags.
plaid fuchsia bags contain 1 bright fuchsia bag, 3 dull bronze bags.
striped purple bags contain 5 vibrant maroon bags.
wavy silver bags contain 3 dark coral bags, 5 shiny brown bags, 5 dark red bags, 2 muted gold bags.
dim olive bags contain 5 dull bronze bags.
bright olive bags contain 2 pale turquoise bags.
vibrant blue bags contain 4 bright salmon bags, 1 dim gray bag.
muted gold bags contain 3 dim gray bags, 1 mirrored gold bag, 2 mirrored beige bags.
dotted teal bags contain 3 faded violet bags, 3 dull white bags.
faded green bags contain 2 shiny green bags, 1 vibrant crimson bag, 5 light white bags, 4 dark red bags.
bright beige bags contain 3 striped orange bags.
dim gray bags contain no other bags.
posh beige bags contain 5 posh white bags, 2 dull gray bags.
wavy orange bags contain 1 faded brown bag.
faded silver bags contain 3 shiny beige bags, 5 clear orange bags, 5 pale indigo bags.
vibrant aqua bags contain 2 wavy beige bags, 4 shiny maroon bags, 4 muted red bags, 5 plaid crimson bags.
dim yellow bags contain 3 clear blue bags.
dim coral bags contain 5 striped gold bags, 2 dotted orange bags, 4 muted orange bags.
mirrored white bags contain 5 dull black bags.
clear brown bags contain 1 clear tan bag, 5 plaid silver bags, 3 clear teal bags.
bright green bags contain 5 vibrant salmon bags.
clear white bags contain 4 plaid white bags.
plaid gold bags contain 1 vibrant black bag, 5 bright silver bags, 5 dark aqua bags.
light aqua bags contain 1 dotted lime bag, 4 light coral bags, 2 light orange bags, 3 dotted maroon bags.
mirrored tomato bags contain 1 vibrant gray bag, 3 dotted crimson bags, 4 plaid olive bags.
wavy indigo bags contain 1 striped crimson bag, 5 dim brown bags, 2 mirrored coral bags.
shiny crimson bags contain 2 dull lavender bags.
muted coral bags contain 4 striped turquoise bags, 5 shiny cyan bags, 3 dull gray bags.
dim lime bags contain 1 clear silver bag.
dull lime bags contain 4 dotted red bags.
dim indigo bags contain 2 striped tomato bags.
bright brown bags contain 2 wavy cyan bags.
dull gold bags contain 3 dotted turquoise bags, 4 muted salmon bags, 1 pale lavender bag, 2 muted lavender bags.
wavy violet bags contain 4 plaid plum bags, 4 dim black bags.
posh plum bags contain 3 dim yellow bags, 4 wavy olive bags.
mirrored plum bags contain 4 muted gold bags, 3 vibrant red bags, 4 faded blue bags, 4 plaid tomato bags.
dull teal bags contain 3 faded olive bags, 1 clear blue bag, 4 faded gold bags.
dull crimson bags contain 2 mirrored white bags, 2 dull plum bags.
wavy green bags contain 4 posh tan bags, 2 dotted indigo bags, 1 striped olive bag, 2 vibrant white bags.
striped crimson bags contain 1 wavy turquoise bag, 5 posh green bags, 4 pale salmon bags, 4 vibrant maroon bags.
drab white bags contain 3 pale green bags, 2 striped indigo bags.
shiny aqua bags contain 4 muted lavender bags, 4 striped lavender bags, 1 posh turquoise bag.
dark bronze bags contain 3 pale beige bags, 2 faded teal bags, 1 mirrored chartreuse bag.
clear crimson bags contain 3 pale cyan bags.
dotted white bags contain 4 mirrored black bags, 5 posh white bags.
dim turquoise bags contain 3 drab indigo bags, 4 dotted lime bags, 4 plaid fuchsia bags, 4 dark blue bags.
muted beige bags contain 3 dotted turquoise bags, 4 plaid turquoise bags.
plaid silver bags contain 5 pale cyan bags, 2 wavy brown bags, 1 drab turquoise bag.
striped coral bags contain 4 wavy gray bags, 5 faded purple bags.

626
2020/inputs/day_08 Normal file
View File

@@ -0,0 +1,626 @@
nop +346
acc +44
acc +15
jmp +473
acc +29
acc -13
jmp +525
acc +22
acc +13
nop +265
jmp +397
jmp +39
acc +39
nop -1
acc +36
acc +25
jmp +153
nop +374
jmp +27
jmp +282
jmp +1
jmp +1
jmp +15
acc +33
acc -3
jmp +533
acc +25
acc -14
acc -16
jmp +245
nop +567
acc +7
jmp +147
acc +26
acc +40
acc -9
jmp +295
acc +14
nop +388
acc -1
jmp -21
nop +524
nop +166
nop +515
jmp +18
jmp +214
acc +42
nop -35
acc +7
jmp +492
acc +14
acc +48
jmp +326
acc +48
acc -18
acc -5
jmp +343
jmp +81
acc +18
acc +16
acc +21
jmp +355
acc +48
nop +358
acc +49
acc -2
jmp +89
acc +4
jmp +171
acc +6
jmp +299
acc -8
jmp +150
acc +41
acc -9
acc +48
jmp +73
jmp +523
nop +471
jmp +493
acc -16
nop +440
acc +2
acc +33
jmp +117
acc +3
acc +34
jmp +310
acc +8
jmp +197
acc +26
acc +47
jmp +194
nop +115
jmp +259
nop +456
jmp +420
nop +398
jmp +235
acc +44
acc +47
jmp +218
jmp +1
jmp +275
acc +12
jmp +434
acc +50
acc +10
nop +361
jmp +367
acc -16
acc +44
jmp +96
acc +9
acc +38
acc -15
nop -31
jmp -55
nop +421
acc +50
acc +12
jmp -64
acc +33
acc +25
jmp +382
acc +7
jmp -22
jmp +95
acc +44
acc +32
acc +23
jmp +1
jmp +456
acc +49
jmp +15
jmp +312
acc +6
jmp +216
acc +7
jmp +458
jmp +465
nop +372
acc +35
acc +32
acc +13
jmp -35
acc +50
nop +32
jmp +143
jmp +327
acc +0
nop -82
nop -62
acc +41
jmp -81
acc -10
nop -106
jmp +82
acc +1
acc +11
jmp +124
acc +25
acc +17
jmp -73
nop +8
acc +29
acc +33
acc +10
jmp +123
jmp +236
acc +41
jmp +370
acc +17
acc -13
acc +35
jmp -47
nop +287
acc +22
jmp +38
jmp +1
nop -52
nop -9
acc +22
jmp +253
acc +12
acc -18
acc +21
nop -69
jmp +28
acc +16
jmp +392
jmp +325
jmp -74
acc +34
acc +47
acc +41
jmp +201
nop +361
acc +50
jmp +30
jmp -127
nop -171
jmp +349
acc +11
nop +156
acc +1
acc -18
jmp +393
acc -8
jmp +1
acc -17
nop +188
jmp +134
acc -9
acc -14
jmp +206
jmp -209
jmp +1
acc +49
nop +112
acc -4
jmp -20
acc +41
jmp -145
acc +8
jmp +276
acc +48
jmp -5
jmp -143
acc +0
jmp -161
jmp +238
acc +8
jmp -134
acc +34
acc +10
jmp +1
nop +109
jmp -100
acc +41
acc -4
jmp -12
acc +42
acc +46
acc -7
acc +28
jmp +85
jmp +216
jmp +364
acc +0
acc -6
nop +331
acc +33
jmp +163
acc +37
acc +20
acc +33
acc +45
jmp -159
acc +34
acc +10
acc +48
acc +10
jmp +358
acc -9
jmp +276
acc +27
acc +45
nop +129
acc +32
jmp +243
acc +0
acc -5
jmp -24
acc +44
nop +307
acc -18
acc +13
jmp +37
acc +5
nop -125
nop -126
acc -18
jmp +186
jmp -87
jmp -262
nop -20
jmp -108
acc +26
acc +20
jmp +193
nop +185
jmp +129
acc +26
jmp +122
acc -8
nop +143
nop +166
jmp -236
acc +33
jmp -139
acc +38
jmp +1
acc +21
acc +31
jmp -79
acc -13
jmp -78
acc +29
jmp +160
acc +48
acc -8
acc +28
acc +15
jmp -284
jmp +25
acc +24
jmp +1
jmp -92
acc +22
jmp +169
acc -15
acc +16
acc +4
jmp -85
acc -18
acc -19
acc -2
jmp -278
acc +48
jmp -195
jmp -40
jmp -110
acc +47
jmp -26
acc +26
nop -187
acc +40
acc +42
jmp +167
acc +50
acc +36
acc -14
jmp -313
nop -203
jmp +227
acc -15
acc +22
jmp -23
acc +6
acc +30
acc +12
jmp +69
nop -212
nop -105
acc +12
jmp -155
nop +69
acc -16
jmp -68
acc -18
acc +35
acc +34
acc +6
jmp -80
acc +7
acc +19
acc -8
jmp -94
acc +12
nop -148
acc +33
nop -41
jmp -107
acc +25
acc +9
nop +107
jmp -44
jmp +1
jmp -254
acc +10
acc +0
acc +37
acc +33
jmp +137
nop +136
jmp -225
acc -4
acc -17
acc +39
jmp -286
jmp +150
nop -380
acc +34
acc +16
nop +146
jmp +105
jmp +119
jmp -190
acc +0
nop +205
nop -302
jmp -17
acc -4
jmp -7
jmp -14
jmp -394
acc +34
acc -1
acc +37
acc -17
jmp -312
nop -180
nop -139
acc +21
jmp -378
acc +24
acc +38
jmp +129
acc +26
jmp +19
acc +31
jmp -190
acc +29
acc -5
jmp +14
nop +186
acc +12
acc +9
acc -16
jmp +9
acc +2
nop -382
nop -284
nop -377
jmp -169
jmp +129
acc +49
jmp -297
acc +48
acc +18
acc +8
jmp +170
acc +12
acc -4
acc +28
jmp -20
acc -11
jmp -363
jmp +1
acc +9
acc +31
jmp +31
acc +36
acc +42
acc +2
nop -131
jmp -322
acc +35
acc +44
acc +11
acc +14
jmp -213
acc -16
acc -15
acc -5
jmp -277
acc -17
jmp -252
acc -19
acc +31
acc -16
acc -5
jmp +48
jmp +1
jmp -97
acc +5
jmp -382
acc +26
acc +41
acc +31
acc -2
jmp -392
acc +41
jmp -124
acc +45
acc +24
acc +10
jmp -339
acc +29
acc -10
acc -10
acc +3
jmp -456
jmp -25
acc +37
acc +39
acc -11
acc -1
jmp +106
jmp -328
jmp -489
nop -111
nop -458
acc +31
jmp -100
acc -18
jmp -258
acc -17
nop -46
acc +43
acc +45
jmp -127
jmp +34
acc +33
jmp -200
nop -90
acc +20
jmp -271
acc +41
jmp -189
acc -16
nop -321
acc +25
acc -12
jmp -62
acc -1
jmp +1
acc +35
acc +39
jmp -184
jmp -236
nop -331
acc +12
jmp +78
acc +15
jmp -30
acc -11
jmp -117
jmp -8
jmp +9
acc +2
jmp -497
acc +10
acc +0
acc -6
jmp -155
jmp -148
jmp -95
jmp -96
jmp -249
nop -277
nop -411
acc -13
acc -2
jmp -383
acc -13
jmp -110
acc +13
acc +16
acc +5
acc -2
jmp -67
acc +37
jmp -491
acc +35
acc +34
acc +32
acc -2
jmp -546
acc -19
jmp -322
acc +48
acc +18
acc +35
acc +8
jmp -448
acc +41
acc -15
acc +34
acc +46
jmp -50
acc +12
nop -184
acc +14
acc +38
jmp -370
jmp +10
acc -14
acc -16
nop -259
nop -300
jmp -400
acc +38
acc +29
acc +27
jmp -175
jmp -456
acc +30
jmp -308
jmp -538
jmp +1
acc -16
nop -127
jmp -407
acc +5
jmp -57
acc +21
acc +3
acc +42
acc +43
jmp -521
acc -9
acc +20
nop -217
jmp -15
acc +37
acc -12
acc -18
jmp +1
jmp -465
acc +37
nop -577
acc +8
acc +43
jmp +1

1000
2020/inputs/day_09 Normal file

File diff suppressed because it is too large Load Diff

108
2020/inputs/day_10 Normal file
View File

@@ -0,0 +1,108 @@
115
134
121
184
78
84
77
159
133
90
71
185
152
165
39
64
85
50
20
75
2
120
137
164
101
56
153
63
70
10
72
37
86
27
166
186
154
131
1
122
95
14
119
3
99
172
111
142
26
82
8
31
53
28
139
110
138
175
108
145
58
76
7
23
83
49
132
57
40
48
102
11
105
146
149
66
38
155
109
128
181
43
44
94
4
169
89
96
60
69
9
163
116
45
59
15
178
34
114
17
16
79
91
100
162
125
156
65

92
2020/inputs/day_11 Normal file
View File

@@ -0,0 +1,92 @@
LLLLL.LLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLL.LLLLL
LLLLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLL.L.LLLL.LLL.L.LLLLL
LLLLLLLLL.LLLLLL.L.LLLLLL.LLLLLLLLL.LLLL...LLLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLL.LLLLL
LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.L.LLLLLL.LLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLL..LLLLLL.LLLLLLLLLLLLLLLLL..LLLLLL.LLLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLL.LLLLLLLLLLL
LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLL.LLLLLLL.LL.LLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL
LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL..LLLLLLLLLLLLL.LLLL.LLLLLLLLLLL
LLLLLLLLL.LLLLLLL.L.LLLLL.LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL
LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLL.LLLLL.LLLLL
L.LL...L..L.L...L...L..L...L.....L....LL..L.LLLL..LL.LL..LLL.L..LL....L..L....L...LL..LL.......L.
LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLL..LLLL.LLLLL
LLLLLLLLL.LLLLLL.LLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLL.LLL
LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLL
LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.L.LLLLL.L.LLL.L.LLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL
LL..LLL......LLL.L...L.....L.....L.L.L..L.L.L.LLL.L.L.LLL....L...LL..L..L.L.LL......L.....LL.L...
LLLLLLLLL.LLLLLL.LLLLLLL..LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLL.LLLLL.LLLLL.LL.LLLL.LLLLL.LLLLL
LLLLLLL.L.LLLLLL.LLLLLLLL.LLLLLLLLL.LLL.L.LLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LL.LLLLLLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLL.L..LLLLLLLLLLLLLLLL.LLLL.LLLLL.LLLLL
LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.L.LLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLL.LLLLL.L.LLL
LLL.LLL.L.LL....L.....LL..L........L.LL.L...LLL.L...L.......L.L.L.L....LL...L.LLL........LL.....L
LLLLLLLLL.LL.LLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLLL..LLLLL..LLLLLLL.L.LLL.LLLLLLLL.LL.L.LLLLLLLLLLL
LLLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLL.LLLLL.LLLLLLL.LLLL.LL.LLLLL.LLLLLLL..LLLLLLL.LLLLLLLLLL.LLLLL
LLLLLLLLL.LLLLLLLLLLLLLLL.LL.LLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLL.LLLLLL.LLLLL.LLLLL
L.LLLLLLL.LLLLLL.LL.LLLLL.LLLL.LLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLL.LLLLL
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLLLLL.LLLLL.LLL...L.LLLLL.LLLLL.LLLLL
LLLLLLLLL.LLLLLLLLLLLLL.L.LLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLL.LLLLL.LLLLL
LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLLLLL.LL.LLLLLLLLLLL.LLLL.LLLLL.LLLLL
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLL..LLLLLLL.LLL.L.L.LLLLL.LL.LLLLL.LLLLLLLL.L.LLLLL
LLLLL.LLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLL.L.LLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLL
.L..LL...L....L..LL..LLLL......L.L..L.L.LL....L.L..L..L....L....LL..L.L..L.L.L..L..L.LL.L...L....
LLLLLLLLLLLLLLL.LLLLL.LLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLL..LLLLLLL.LLLL.LLL.L.LLL.L
LLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLL..LLLLL.LLLLL
LLLLLLLLLLLLLLLL.LLLLLLL.LL.LLLLLLL.LLLLL.LLLL.LLLLLLLLLL.LLLLLLLLL.LLL.LLLLLLLLLLLLL.LLLLL.LLLLL
LLLLLLLLL.LLLLLL.LLLLLL.L.LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLL..LLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLL..LLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLL.LLLLL.LLLLL
..L..L.L..L..LL..LLL.L..L..LL.L...LL.L.L..LL.L.LL.L....LLL..LLL..LLL.L.L...LL.LL.LL...L..L...L.LL
LLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLL.LLL.LLL.LLLLLLLLLLLLL.LLLLL.LL..LLL.LLLLL.L.LLL
LLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLL.LLL.LLLL.LLLLLLLL.L.LLLLL
LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLL.LLLLL.LLLLL.LLLLLLLLL.L.LLLLLLLLLLL.LLLLLLLL.LLL.LL.LLL.LLLLL
LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLL.LLLLLLL.LLLL.
.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLL
....L...L.....L..L...LL.L....L......L.....L..LL...L.......L....L.....L.L..L...L..........LL.LL...
LLLLL.LLL.LLLLLL.LLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL..LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLL.LL.LLLLLLL..LLLLLLLLLLLLL.LLLLL.LLLL.LLLLL
LLLLLLLLL.L.LLLLLLLLLLLLL.LLLLLLLLL.L..LLLLLLLLLL.LLLLLLLLLLLLL.L.LLLLLLLLLLLLLL.LLLL.LLLLL.LLLLL
LLLL.LL.L.LLLLLL.LLLLLLLL.LLLL.LLLL..LLLL.LLLLLLL..LLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLL.LLLLLLLLLLL
LLLLLL.LLLLLLLLLLLLLL.LLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL
L.LLLLLLLLLLLLLL.LLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LL.LLLLLLLLLLLLLLLLLLL.LLLLL.LLLLL
LLLLLLLL..LLLLLL.LLLLLLLLLLLLLLLL.L.LLLLL.LLLLLLLLLLLLLLL.LLLLLLL..LLLLLLLLLLLLL.LLLL.LLLLL.LLLLL
L...LLL.L..LL..L.LLL.....L......L...LLL..L....LLL..L...L...........L..L..L...LL.LL.L...LL.LLLLLL.
.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLL.LLLLL
LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLL....LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLL.LLLL.LLLLLLLLLLL
LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLL.L.LLLLL.LLLLL.LLLLL.LLLLLLLLLLLLL.LLLLL
LLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLL.LLL.LLLLL.LLLLLLLL.LLLL.LLLLL.LLLLL
LLLLLLLL..LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.L.LLLL..LLLLLLL.LLLLLLL.LLLLL.LLL.LLLL.LLLL.LLLLLLLLLLL
LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLL.LLLL.LL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLL.LLL.LLLLLLL
LL.LLLLLL.L.LLLLLLLLLLL.L.LLLLLLLLL.LLLLLLLLLLLLL.L.LLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLL.L.LLLLLLLLL
....LLL.LL.....LLLLL...........LLLL.L..L.L..L.L.L...L.LL...LL.LLL.LL....LLLL....L.L.......L...L.L
LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLL.LL.LL.LLLLL
LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLL.LLLL
LLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.L.LLLLL.LLLLL
LLLLL.LLL.LLLLLLLLLLLL.LLL.LLLLLL.L.LL.LL.LLLL.LL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLL.
..L.L.LL........L.L...LL.LLL...L....LL......L.......LL.......L.L...L..LL.L..LL.L.L.L..L..........
LLLLLLLLL.LLLLLL.LLL.LLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLL..LLLL.L.LLLLLL.LLLL.LLLLLLLLLLL
LLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LL.LLLLLLLLLL..LLLL.L.LLL.LLLLL
L.LLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLL.LL.LLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLL.LLLLL
LLLLLLLLLLLLLL.L.LLLLLLLL.LLLLLLLLL.LLLLL.LLLLL.L.LLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLL.LLLLL
LLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.L.LLLLL.LLLLL..LLLLLL..LLLL.LLLLL.LLLLL
LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLL.LLLL.LLLLL.LLLLL
.LLLLLLLL..LLLLLLLLLLLLLL....LLLL.L.LLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLL.LL.LL.LLLLL
LL.LLLLLL.LLL.LLLLLLL..LLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLLLLL..LLLL.LLLLLLLLLLLLL.LLLLL.LLLLL
LLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLL.L.LLLLL.LLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLL.LLLLL
.......L...L..L.L...L..LL..LL..L.....L..LL..L.L.L.....L.....L..L..LL.L..L..L.LL...LL..L.....L.L..
LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLL.LLLLL
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLL.LL.LLLLL.LLLLLLLLLLLLLLLLLLL.LLLLL
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLL.LLLLL..LLLL
LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.L.LL.LLLLL.L.LLL
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLL.LLLLL.LLLL.LLLLLLLLLLLLLLLLLL.L.LLL.LLLLLLLL.LLLL.LLLLLLLLLLL
L.LLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLL.L.LLLLLL.LLLLLLLLLL.LLLLL
LLLLLLLLL.LLLLLL.LLLL.LLL.LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLL.LLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLL.LLLLL.LLLL.LL..LLL.LL.LL.LLLL.LLL.LLLLLLLLLL.LLLL.LLL.LLLLLLL
LLLL.LLL..LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLLLL.LLLLLLL..LLLLLL.LLLLL.LLLLLLLL.LLLL.LLLLL..LL.L
.L......L....LLLL.......L.L...LL...L.L..L..L..LL..L.....L......LL..LL...L...L....L.L..L...LL.L.L.
L.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLL.LLLLL
LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LL.L.LL.LLLLLLLL
LLLL.LLLLLLLLLLL.LLLLLLLL.LL.LLLLL..LLLLL.LLLLLLL.L.LLLLL.LLLLLLL.LLLLL.LL.LLLLL.LLLLLLLLLL..LLLL
LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLL.LL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLL...LLL.LLLLLLLL.LLLL.LLLLLLLLLLL
LLLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLL.LLLLL.L.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLL.L.LLLL.LLLLL.LLLLL
LLLL.LLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.L.LLLLLLLLLLLLLLLLLLLL.LLLL..LLLL.LLLLL
LLLLLLLLL.LLLLLL.LLLLLLLL.LLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLL.LL.LL
LLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLL.LLLLLL.LLLL
LLLLLLLLLLLLLLLL.LLLLLLL..LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLL.L..LLLL.L.LLLLL..LLLL.LLLLL.LLLLL

789
2020/inputs/day_12 Normal file
View File

@@ -0,0 +1,789 @@
R180
S4
L90
S2
R90
W3
F30
R90
W3
L90
F68
L90
E5
F88
S1
L90
F46
W5
F51
S2
L90
F53
S5
F19
W2
L90
F91
E2
S3
F83
N5
F79
W1
S3
F11
E4
F53
W4
S5
R90
E1
F76
R90
F47
E5
R90
W3
R90
S5
L180
W5
N4
F10
S2
R90
S4
W4
F29
S5
F34
E2
S4
R90
F73
N2
F43
W1
N4
R90
S3
F26
S5
W1
N5
R90
W3
F29
R90
W4
F81
R90
E5
S4
W1
F73
N2
E1
F66
L90
E4
S4
E3
N2
F34
L90
W1
F13
S4
E2
F21
N5
E5
N2
F65
L90
N3
R270
F49
E5
L90
E5
R90
F20
S4
F99
W3
N2
E5
L90
F94
R90
S2
R90
S3
F47
S3
R90
F71
W1
R90
N4
E5
S1
F72
L90
F18
E5
F94
L270
F80
W5
R180
N1
F40
R180
N1
E3
N5
F29
R90
E1
R90
E3
L180
E3
R90
S2
L90
E3
L180
F80
E2
S5
E1
N2
L180
F25
N2
L90
F66
R90
F48
N3
L180
N3
R90
E5
R90
F52
R180
S5
L270
S4
L90
F53
S4
W3
W4
F36
W2
N2
N4
L90
W1
R90
E4
F30
N5
W1
S2
W5
F98
W1
N1
F92
L180
N2
R90
S4
L90
F66
N3
L90
F33
W2
S2
E4
F8
W2
L180
F15
S1
E1
F14
S1
W2
L270
F86
E1
R180
W5
R90
N3
L90
N5
E1
F78
N1
L90
F1
F73
R90
F68
W4
F79
F34
N5
R180
E5
L180
S3
W5
F27
R180
F70
R90
S4
F62
L180
N3
R90
S5
F4
R90
S5
W2
N5
R90
F81
L90
N1
F32
E2
N1
W2
L180
E5
R180
S3
E3
R90
S3
F1
N5
E3
F60
W2
F58
L180
S2
E3
L90
F36
L90
E4
E1
F29
W2
R90
R180
N3
L90
R180
S5
W1
F13
R90
W5
S2
R180
F16
W4
L90
W2
S5
F25
R90
F40
L90
L90
F76
S2
R180
N2
R180
W4
S5
F61
N4
E1
F57
E5
F72
W4
F61
R90
S4
F52
W2
N1
F30
L90
F59
N1
L90
W2
N2
F51
E5
F16
S1
W3
L90
F92
E3
N2
F22
L180
N3
F10
E4
N2
F43
R90
F99
S3
R180
E1
S1
W2
L180
F56
N3
F6
N4
F21
L90
N4
L180
N4
F15
E5
S3
W1
F57
E3
S4
W3
L90
S3
L90
F41
E1
S5
L90
F63
N4
F89
F57
S1
L90
S4
L180
F96
L180
N5
E4
L90
E1
S1
F77
S3
L90
E4
L90
E5
L90
N3
L180
S1
N2
L90
N3
R90
F45
R180
F57
N3
R90
E4
L180
F37
L90
W2
R90
S1
R90
N3
F77
W5
F80
S1
S5
R90
N5
E5
S3
L270
F15
L180
W5
F48
E1
L180
S4
E1
S4
W5
F76
S1
E1
S1
F55
L90
F70
R180
R90
E4
R90
S3
E2
S3
F84
S4
W3
F100
R90
S1
L90
F37
W4
F3
R180
N3
R90
L90
W2
F28
R270
N5
R180
S2
E4
F54
L90
W5
R90
F79
N3
R90
F34
W1
N3
F76
W3
F2
W1
L90
R90
F72
N1
E3
F79
W1
L90
F8
E4
F87
E2
F4
S3
L90
F100
F94
E4
R270
S1
E2
F70
E4
L90
S2
W5
L90
S5
W2
S2
W5
F19
E2
E1
F62
L90
F55
E3
R180
F74
S3
W2
F66
L180
F32
W5
F66
W1
F48
S3
R90
N5
W2
N2
F18
E3
F41
L90
N4
F56
L90
R90
F42
R90
S3
L90
E2
S2
F7
W3
N5
L180
L90
L90
N5
L90
W4
F82
W2
F68
S1
E3
S2
F87
L90
F93
L90
F16
L90
S4
L90
N3
E2
R90
S2
R180
F94
W1
S3
F68
S2
F70
S3
W4
F29
E5
R180
S2
F63
L180
F65
R90
W1
F64
E1
L180
L90
S5
F65
L90
N3
N4
L270
S1
E2
S3
W3
N1
E5
F16
E2
L90
N1
L90
E1
S4
W2
R180
F27
N1
R180
E2
L90
F20
N1
W3
N1
R90
W5
R90
E3
S2
F48
N1
R180
N3
W1
S4
F92
S3
R90
S5
E1
W5
R90
S2
W1
L90
R180
E3
N3
E1
R180
E4
L90
E5
L90
W3
L270
E1
S5
W5
L180
W3
S2
F16
W5
S4
R90
N3
L90
N4
F43
N2
F83
S2
W5
F58
W4
N5
R180
E3
F81
L90
F61
L90
W4
F41
E3
N2
F74
R90
F6
R90
W1
F18
R90
R90
N2
F87
S4
F16
S3
E3
F67
R90
E2
L90
S4
R90
F5
W1
R90
W4
F54
S1
W1
F100
S5
E2
L90
W3
F61
L180
W2
S3
F68
F35
N3
R180
E4
R270
S5
E4
L180
S3
R90
N5
E4
F60
W4
S1
L90
L180
N5
L180
W3
S1
E3
S1
N2
E4
R180
N4
F7
N3
W4
F89
N4
E3
L90
F97

2
2020/inputs/day_13 Normal file
View File

@@ -0,0 +1,2 @@
1000507
29,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,37,x,x,x,x,x,631,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,13,19,x,x,x,23,x,x,x,x,x,x,x,383,x,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,17

585
2020/inputs/day_14 Normal file
View File

@@ -0,0 +1,585 @@
mask = 01101001XXX000000111X1000X0000X11010
mem[9227] = 2018
mem[2743] = 107216
mem[7335] = 5498199
mem[62141] = 28643
mem[10396] = 615
mem[44596] = 16631831
mem[30301] = 1036820554
mask = 0X0010X11100000010011011111010101XX1
mem[25912] = 1706212
mem[18700] = 1436
mem[31216] = 1307
mem[61767] = 10950397
mem[55019] = 9351804
mem[5477] = 970907882
mem[49380] = 1102790
mask = 1100110XX10X10X00001X00010X10XX11111
mem[43431] = 43329
mem[39748] = 2295
mem[59160] = 4068818
mask = X10010101XXX00X010010X1X011001001X1X
mem[783] = 969
mem[15182] = 4439242
mem[34082] = 129773486
mem[3726] = 36911281
mem[14093] = 198
mem[7136] = 967728
mask = 1100X1100101000011011000010XX010111X
mem[33093] = 2500
mem[48387] = 5485316
mem[56382] = 38247
mem[19403] = 4830301
mem[53014] = 12910126
mem[51746] = 7221070
mask = 1100111011000000X101XX1001111100000X
mem[45506] = 6583
mem[37356] = 5047
mem[60299] = 16732544
mem[34415] = 233715
mem[38131] = 3633859
mem[39038] = 569179
mask = 11X011111110XXX01011X0001X000100X0XX
mem[61857] = 60109927
mem[61984] = 56703060
mem[25744] = 85084
mem[19683] = 146541846
mem[5034] = 3308207
mask = X1X01100110X01001101001110011000X111
mem[33321] = 476094
mem[47197] = 2775
mem[33561] = 1185
mem[44649] = 1910953
mem[12452] = 778855
mem[62667] = 7299049
mem[30629] = 942780
mask = 11101010110000000X01101X01001111XX01
mem[15304] = 2029422
mem[47648] = 224645267
mask = 110010000XX0X00000010X0000000X001000
mem[18174] = 10605
mem[27164] = 58633252
mem[49380] = 896
mem[35511] = 1865
mask = 1101X10011111010001100100001X011XX1X
mem[46534] = 133047049
mem[40985] = 1546810
mem[19567] = 322254
mem[13516] = 5103
mem[43307] = 220958462
mem[3522] = 10
mask = 00101010110X0000110X100101XX00110000
mem[32856] = 468089608
mem[16581] = 1520
mem[44671] = 493645
mem[59135] = 743
mask = X1001100010000X00001X1X100X0100011X1
mem[24709] = 381965
mem[18599] = 58320
mask = 11101110X1000X0X001111XX010110101101
mem[29307] = 110716
mem[11929] = 68368314
mem[5595] = 98625
mem[19842] = 114448
mem[82] = 116842679
mem[28608] = 106081605
mem[38415] = 166431
mask = 11X010001100X000011101101X101X1X0010
mem[64997] = 537175943
mem[4215] = 1700
mem[7842] = 91467205
mem[28677] = 92497218
mem[42227] = 309706330
mask = 0X00XX1011000010X00X0X0101X100001010
mem[24113] = 18710
mem[41368] = 61727257
mem[24910] = 1216
mem[48962] = 431244119
mem[52880] = 31537
mem[26016] = 3867529
mask = 110X100001011000100X001XX10110110111
mem[44808] = 8860
mem[977] = 227853
mem[24326] = 1292
mem[11196] = 185995
mem[24910] = 1456794
mem[38209] = 11963784
mem[2516] = 206274
mask = 10101X010X010011011XXXX01100X0X01X00
mem[37266] = 53802
mem[43697] = 3027265
mem[40421] = 182178
mem[14745] = 5768586
mem[33359] = 62113
mask = 11X01X0011000X00X101101110XX11XXX101
mem[60299] = 38321864
mem[13933] = 4119750
mem[63519] = 3793
mem[33359] = 6062406
mem[2145] = 1197981
mask = 01101000110X0X00XX010XX1X0111100X0X0
mem[996] = 1535
mem[37483] = 415
mem[36833] = 15446433
mem[12962] = 139638950
mask = 0X1010101111X00X10010X1X01110111011X
mem[28705] = 73
mem[46437] = 145646713
mem[10079] = 1238645
mem[23342] = 1856314
mem[7654] = 259644
mask = X1X010X0110X0000X001XX111X100110X000
mem[32957] = 365133
mem[13738] = 43314758
mem[21472] = 985365
mem[42598] = 32659669
mask = 01101X001100000X01X101X111100000X1X1
mem[39855] = 17101
mem[6765] = 846
mem[40866] = 495565203
mem[56928] = 3961201
mem[17228] = 3585
mask = 1100101010XX001X100100X0X01111001100
mem[64982] = 103054
mem[35989] = 44254616
mem[11366] = 7715
mask = 101010010001001XX11100X0X1100110X011
mem[43005] = 1741
mem[46533] = 383034263
mem[30931] = 2731638
mem[35338] = 133759116
mask = 0010110X011X00X011XX00101000X10X1X00
mem[23302] = 575430886
mem[41184] = 484667743
mem[11064] = 6013819
mask = X10010101X0100X01X01011X1111000XX010
mem[59531] = 51445
mem[604] = 65230
mem[25153] = 57802
mem[42909] = 16748064
mask = XX10100XXX0X001101X101011100101X0X10
mem[10016] = 1384
mem[28736] = 373587
mem[5388] = 20765
mem[55736] = 276409152
mask = 0X001001100000X0100X0101X0X111010001
mem[713] = 941
mem[34620] = 47358
mem[64695] = 118873278
mem[28381] = 5504290
mem[9352] = 1335605
mem[5606] = 127872
mask = 00101010110X0000XXXX0X0101X00X001000
mem[49208] = 1902856
mem[3726] = 861821129
mem[51431] = 217032464
mem[8104] = 201580051
mem[8561] = 22666152
mem[27779] = 25685964
mem[14798] = 35556100
mask = 11001X1XX1X0000010X10010111XX10X0X10
mem[40524] = 62170024
mem[26151] = 32735
mem[36331] = 791
mem[51971] = 4077
mem[39949] = 1208881
mask = 1110X00011X00100XX0X00111X011X1X0100
mem[49523] = 45562
mem[65190] = 437018
mem[48194] = 590010
mem[34081] = 2730318
mem[19485] = 71146
mem[43675] = 5165
mem[41990] = 5786294
mask = 1100XX00110XXX0000101X000010X11X1X10
mem[46338] = 969889
mem[56130] = 19345
mem[56003] = 108577353
mem[38580] = 132743
mem[51852] = 29007
mem[9562] = 4082929
mask = 01X0X0XX11000000100100111X1111X0X000
mem[16562] = 42746421
mem[10764] = 78319913
mem[62076] = 1791961
mem[34147] = 517873792
mem[6626] = 46567
mem[56829] = 132232586
mem[16078] = 1231
mask = 110XXX1101000000101110111X1001X0XX01
mem[36554] = 734907
mem[24177] = 794769422
mem[49782] = 2634
mem[27278] = 2566029
mem[20585] = 181
mem[54195] = 82217823
mask = 11101X0111000100X110X011011000X0X1X1
mem[36637] = 20724
mem[61749] = 22922812
mem[63812] = 29576
mem[56928] = 127412
mem[26016] = 15698299
mem[63570] = 546374
mask = 010000101100X010X000111XX01110010X0X
mem[42138] = 20438
mem[773] = 274846
mem[42598] = 12492801
mask = 1110000XXX0001X011000010100010000100
mem[58846] = 9689
mem[52001] = 22660
mem[23579] = 145885
mem[14525] = 103
mem[48501] = 7119
mem[25744] = 946940111
mask = 01XX0010X10000X00000X1X0110101001XX0
mem[58095] = 2159
mem[39650] = 116399462
mem[46338] = 2119
mem[12284] = 8136087
mem[35849] = 96530
mask = 10X010011100000010010XXXX0111X100X01
mem[11994] = 7198139
mem[19485] = 13623414
mem[16072] = 464968689
mask = 11101000110X0X00X1110010X101X0X00010
mem[27871] = 191670
mem[40370] = 1062912647
mem[12962] = 94498
mem[39988] = 505747636
mem[2651] = 27293224
mask = 00101100X1X00000X1011X1X10X01100X0X0
mem[39511] = 1228170
mem[12431] = 22479089
mem[16819] = 2295885
mem[16562] = 535
mem[61184] = 5370560
mem[61728] = 680
mask = X1101010X1XX00X010010111X1X001X11101
mem[27439] = 180428
mem[64502] = 317409
mem[63473] = 4484
mem[32050] = 957
mem[17565] = 451
mask = 001X100111X100110101010XX001X0X010X0
mem[38912] = 11646861
mem[10983] = 2571733
mem[57574] = 547761278
mem[21922] = 936
mask = 1110X0001100010001010X111X00X1111001
mem[41652] = 15
mem[52965] = 9633
mem[57427] = 44143
mem[1360] = 52315
mem[29741] = 30065628
mask = X1XX100011X000X0XX01100110X10X101000
mem[13738] = 41784
mem[82] = 2093225
mask = 1X0X1X0X110000000XX11010001010100011
mem[5734] = 3809359
mem[39002] = 64194333
mem[45226] = 582040770
mem[27757] = 201468
mem[23474] = 24958
mem[18945] = 186986435
mask = 110011XXX1011000000X100X00111110X1XX
mem[26951] = 34107
mem[9065] = 235577282
mem[61339] = 33344630
mask = X01X1010X1010000011100X1110110101000
mem[46016] = 799
mem[1032] = 2537
mem[14956] = 146596
mask = 1110X00011000000XX1X01110010X1001111
mem[44128] = 2854
mem[7947] = 311
mem[10438] = 9703
mem[59531] = 792206617
mem[61749] = 93851
mem[64623] = 1641525
mask = 110011001100XX0000011X011X0001100010
mem[42983] = 45292954
mem[55070] = 5534
mem[39372] = 274025469
mem[13952] = 35023
mem[15926] = 2673045
mask = 111000001100X0X0X11101100010011X0101
mem[30629] = 8185
mem[64623] = 21212602
mask = 110011000X010X0010XX10001XX01010X001
mem[43528] = 7668024
mem[19875] = 92712996
mem[1687] = 352650669
mem[46581] = 697
mask = XX0010011X0000001001XX001101000X0XX0
mem[14313] = 127102653
mem[27061] = 3071194
mem[15305] = 2799
mem[64156] = 520353
mask = 11X01X0X1X0001001101001110001X001010
mem[46088] = 103332
mem[36868] = 127638504
mem[24173] = 64518503
mem[51207] = 27119
mem[32439] = 31653573
mask = X1X010X0110X000X0101110110X1111X0X0X
mem[30216] = 6171472
mem[54536] = 3149
mem[61749] = 45155816
mem[63428] = 2285065
mem[21170] = 526423366
mem[56037] = 21621
mem[21744] = 6711
mask = 1100111X0101X00011010001100001X0101X
mem[50634] = 7830
mem[34473] = 93434803
mem[50697] = 3975
mem[28736] = 245436882
mem[36181] = 68026875
mem[44740] = 26732
mask = 1100XX11X110X0X010111011101XX1000010
mem[8264] = 2618
mem[22897] = 492
mem[25514] = 310547768
mem[14091] = 1296713
mask = 11X01000110000000X11XX11100000X0011X
mem[34147] = 55819618
mem[713] = 57753013
mem[43005] = 734
mem[19147] = 1261
mem[30629] = 100095173
mask = 11X1111X110X0000010111011011000000X0
mem[45108] = 255101
mem[14313] = 4574087
mem[17120] = 24850
mask = 011000011100X000X00100X110110100X110
mem[4230] = 303831830
mem[56928] = 5163880
mem[14726] = 946803
mem[65140] = 4998
mask = 01XX10010X0000010111X111010001101100
mem[48387] = 244989536
mem[55491] = 31887
mem[10659] = 329486493
mask = 0111XX0X1100000001111X0101010000X010
mem[35490] = 7441
mem[38204] = 2781817
mem[15504] = 4192042
mem[48165] = 22254
mem[41344] = 1275190
mem[31355] = 727899223
mem[6770] = 46922
mask = XXXX1XX0110000000X0100X110X110100000
mem[55906] = 45453
mem[9448] = 136999865
mem[43310] = 26035896
mem[64498] = 31435
mask = 11101000110X0X0X1X10011100110X001100
mem[38423] = 17106
mem[19919] = 317562128
mem[5388] = 1437766
mask = 11X0100X110001000X1010X00100111X000X
mem[59546] = 1648175
mem[57429] = 1451227
mem[10659] = 3865
mem[35838] = 304651619
mem[38506] = 663621
mem[60490] = 7815
mem[16648] = 139051458
mask = 111110X0111X0X10110100101X11XX00000X
mem[5237] = 38290
mem[30301] = 2620
mem[65271] = 1412405
mem[17030] = 1268
mem[1848] = 647
mem[45226] = 4055568
mem[16123] = 15303130
mask = 01X010X0X100000X01011X0101011X1XXX01
mem[40721] = 35664047
mem[2541] = 18078490
mem[19062] = 8737
mem[56642] = 109
mem[1732] = 99084
mem[43287] = 186566478
mask = 1X001110X1110X0X1001110001101XXXXX00
mem[22104] = 559
mem[17735] = 54865
mem[38352] = 437
mem[32396] = 3144542
mem[13760] = 139350
mask = 00111001X101X011010X0011X0110010X011
mem[27439] = 25862312
mem[3504] = 1937287
mem[59498] = 234476272
mem[29550] = 1498180
mem[19709] = 2171
mem[19165] = 20631
mem[63523] = 64887100
mask = 00X0X0011000000X100101001X0100010000
mem[13738] = 761575
mem[4342] = 24952
mem[35511] = 50203418
mem[27955] = 46141252
mem[14216] = 49071218
mask = 011X1001X100000X0X11001XX10X100X001X
mem[29346] = 20677
mem[35091] = 215097141
mem[40087] = 1901294
mem[19485] = 251731879
mem[24684] = 1467
mem[25815] = 1857109
mem[62590] = 216698971
mask = 0010101011X0000010110X11100XXXX01110
mem[28741] = 1680
mem[23948] = 171
mem[39293] = 14161274
mem[52880] = 7933820
mask = X01010010001001101XX101100001000XX00
mem[48409] = 599454
mem[4215] = 26481029
mem[15546] = 10024168
mask = 11X01XX0110000000XX11X111111110X1X00
mem[42920] = 882414611
mem[57574] = 1289149
mem[30629] = 809394101
mem[1476] = 2215
mem[48366] = 120690110
mask = 111010XX110001001X101X11X1100X011000
mem[28951] = 19045798
mem[37356] = 14088692
mem[65242] = 32015
mem[19875] = 1891
mem[59787] = 3238036
mask = 111010001101X1X0X01001010011010011X0
mem[50947] = 11958907
mem[50805] = 4184615
mem[9216] = 7284
mem[9366] = 616014
mem[39243] = 50245671
mem[26151] = 225
mem[37356] = 7454
mask = X11010XX110000XX01110X0X110X10100X00
mem[10146] = 901
mem[16819] = 1669
mem[49594] = 30118559
mask = 110X101X1X1X0000100100001011X1000001
mem[44462] = 437397422
mem[46581] = 122690574
mem[47406] = 2223301
mem[23302] = 27350
mem[9227] = 64749050
mem[32439] = 830166089
mem[16958] = 1767
mask = X110111X110000000101100111111000X10X
mem[30526] = 518919
mem[45088] = 3881541
mem[28736] = 101657283
mem[46276] = 67581
mem[54442] = 874618503
mask = X10XX11011011X1000X11X00X0X100000000
mem[14438] = 68398
mem[43123] = 682
mem[53975] = 12217
mem[14906] = 14892
mask = 011010111X0000X10111000X0100X0X10111
mem[18099] = 129190855
mem[24225] = 60254642
mem[6147] = 1967266
mem[23568] = 12452
mem[40866] = 233049911
mask = 01101000110X0X000101X00110011X1X0X00
mem[141] = 6636298
mem[61767] = 8072
mem[51955] = 1084869
mem[28703] = 86518
mem[49943] = 1162266
mem[6728] = 951818288
mask = 010010101100001010X100X01111X1000X10
mem[26893] = 2377486
mem[26841] = 521
mem[5584] = 1929
mask = 1100X11X01XX00001X011X0X110XX0001100
mem[24300] = 30584
mem[62220] = 926355
mem[21879] = 1802
mem[21963] = 346
mem[42819] = 217744624
mem[38442] = 75344432
mask = 11X010010X0000110111X10000X110001X10
mem[49782] = 331229
mem[37055] = 264861759
mem[7464] = 122702
mem[53975] = 10052271
mask = 00101100111X00XX01X11101100011X10XX0
mem[35490] = 369795318
mem[12330] = 242078616
mask = XX00X01011X00X00010101X110X011110101
mem[55598] = 3761622
mem[10193] = 70536
mem[4694] = 39620509
mem[40721] = 424771
mem[33140] = 154232
mem[26948] = 37978095
mask = X10X11X011X1101000X1000X10X0X001000X
mem[10734] = 35783
mem[60994] = 64736
mem[47530] = 211
mask = 110011111101X00X000X0X10X01001100001
mem[45758] = 714
mem[33710] = 3308098
mem[34082] = 1470
mem[13513] = 339084
mem[36005] = 948
mem[22208] = 54801
mask = 11001X00X10XX000X00100X01X1X1010X010
mem[64623] = 226472
mem[61920] = 69906
mem[21637] = 18145978
mem[35989] = 52932732
mask = XX001011X100000X1001XX10X100X1011010
mem[16277] = 1953
mem[1820] = 71
mem[52001] = 2117192
mem[41507] = 2489824
mem[63428] = 4874
mask = 01000X11110X0000100110X010X1X0000X0X
mem[50966] = 649836905
mem[13251] = 84391
mem[2827] = 2335210
mask = 01X01000X100X0000111X00X1101XX110010
mem[37050] = 22573528
mem[60994] = 508
mem[1560] = 286179
mask = 1110110111000100X1101X10000X0010X111
mem[15675] = 36967016
mem[46000] = 233496883
mem[34415] = 2067736
mem[9212] = 59203547
mem[4474] = 1218632
mem[18794] = 248839504
mem[48996] = 1469
mask = XX0X111011000010X000000X011100111011
mem[2827] = 265677
mem[38352] = 14739817
mem[8104] = 552372
mem[44416] = 430420
mem[10177] = 292
mem[27665] = 233108
mask = X0X010X01101X0000101010X110010100000
mem[26604] = 97034170
mem[24910] = 2438352
mem[21800] = 6131
mem[38442] = 33942864
mask = 11X010X01101X100X0101101101001X01X1X
mem[19403] = 2412
mem[62888] = 53930
mem[55471] = 3757
mem[62415] = 124924
mem[837] = 78
mask = 11101000110XX00110100X11111101001X11
mem[28580] = 14210267
mem[61701] = 21584384
mem[28544] = 23917
mask = 110011X01100000000011110X11X011X0010
mem[24266] = 4131276
mem[38423] = 9580
mem[64502] = 2974919

1
2020/inputs/day_15 Normal file
View File

@@ -0,0 +1 @@
5,2,8,16,18,0,1

270
2020/inputs/day_16 Normal file
View File

@@ -0,0 +1,270 @@
departure location: 32-615 or 626-955
departure station: 47-439 or 454-961
departure platform: 31-98 or 119-969
departure track: 45-746 or 763-967
departure date: 49-723 or 736-954
departure time: 42-556 or 581-962
arrival location: 46-401 or 418-964
arrival station: 39-281 or 295-974
arrival platform: 43-80 or 99-950
arrival track: 28-670 or 682-959
class: 43-504 or 520-957
duration: 31-358 or 365-959
price: 41-626 or 650-956
route: 26-488 or 495-949
row: 46-913 or 931-965
seat: 40-223 or 249-958
train: 32-832 or 853-966
type: 36-776 or 798-960
wagon: 38-122 or 134-969
zone: 27-870 or 885-952
your ticket:
191,61,149,157,79,197,67,139,59,71,163,53,73,137,167,173,193,151,181,179
nearby tickets:
482,948,368,336,171,501,192,438,384,499,692,331,527,624,344,859,351,902,213,615
391,405,942,203,174,467,611,553,65,544,349,899,221,264,547,800,942,144,738,304
470,497,358,169,599,613,804,342,820,865,594,58,825,167,362,771,269,768,706,765
891,526,368,191,296,295,270,497,735,378,351,688,317,186,526,896,813,544,683,72
544,396,163,686,911,137,59,322,884,586,597,223,692,525,316,704,483,72,683,745
712,763,626,594,555,377,440,651,945,693,500,51,281,475,948,817,687,314,320,189
461,295,273,386,872,57,143,497,147,657,520,901,202,170,824,704,815,600,663,706
670,215,74,607,159,862,389,266,61,250,127,320,193,592,687,167,769,147,555,653
395,342,197,865,990,525,912,377,278,897,799,366,464,689,398,901,597,204,667,546
550,936,205,686,886,340,183,800,251,905,338,605,486,945,343,141,935,903,155,110
479,947,418,809,421,687,221,136,56,712,420,433,612,748,196,349,357,298,381,466
126,370,66,341,939,530,501,886,626,664,275,250,55,250,270,175,63,80,520,419
687,170,171,326,249,879,60,868,329,400,352,663,813,719,529,217,72,946,937,498
895,173,393,147,439,525,489,827,137,942,684,454,499,525,832,178,597,78,714,298
897,154,60,429,856,165,657,184,857,63,897,765,719,144,577,220,257,476,63,907
797,866,541,712,307,589,539,683,689,895,908,473,556,496,54,949,143,173,765,60
832,146,205,699,652,443,209,376,190,438,421,424,823,886,197,901,255,691,300,72
997,591,435,945,943,811,485,465,399,652,382,51,387,484,692,911,535,696,705,336
884,521,351,809,533,120,260,179,588,186,277,581,667,314,218,435,324,808,546,551
292,350,51,805,344,461,670,57,342,389,551,310,217,767,160,938,662,599,908,420
821,630,175,324,387,150,609,532,327,206,687,328,817,76,932,317,890,336,301,700
453,433,251,708,775,461,775,276,460,524,469,583,67,626,896,858,521,367,309,315
151,316,806,170,356,67,618,861,912,157,250,168,826,432,469,352,803,612,390,195
534,704,886,600,552,313,367,897,59,804,496,361,154,722,436,859,375,209,74,169
62,165,61,707,609,278,470,350,544,430,886,866,469,649,943,316,599,910,764,424
698,334,61,212,688,979,745,688,656,420,356,141,66,384,193,421,828,767,277,718
61,219,68,460,381,856,684,745,422,979,769,251,470,69,719,421,612,466,301,295
799,670,325,419,824,258,767,58,295,853,803,211,55,120,555,129,334,154,530,181
594,910,862,765,589,602,745,498,486,722,895,163,419,805,623,904,392,861,715,263
853,145,132,320,254,652,658,260,169,768,311,711,150,668,346,366,279,178,188,467
198,202,913,600,346,326,597,864,743,554,300,522,607,192,737,603,316,146,625,933
702,90,345,655,463,853,608,541,389,272,653,330,864,885,657,859,484,831,259,310
686,489,668,597,501,526,272,71,829,500,471,811,62,949,201,603,306,530,196,304
491,482,822,600,603,523,136,177,252,208,378,435,212,525,194,488,67,698,717,475
894,167,332,126,385,265,315,583,154,694,433,541,56,773,326,170,149,156,119,771
223,460,377,480,975,814,582,534,611,385,524,373,769,340,154,396,175,260,302,868
353,746,661,200,982,773,276,907,656,221,173,119,314,370,460,341,912,370,720,462
305,334,251,186,766,557,766,772,706,392,799,170,721,58,708,198,765,457,776,205
522,164,521,419,352,802,218,531,813,364,263,737,145,931,439,77,809,605,354,664
66,697,63,655,321,481,651,887,931,422,342,375,372,878,863,220,165,597,423,465
394,281,523,264,947,500,473,654,70,603,813,682,765,299,551,857,330,150,613,879
317,400,277,717,147,310,705,615,317,136,812,503,582,377,333,335,539,544,4,303
329,770,772,723,690,82,709,803,217,336,854,588,804,458,540,189,650,262,335,303
58,932,827,541,556,806,119,423,334,313,204,893,203,864,182,814,714,528,315,360
771,750,309,526,805,807,142,429,479,365,868,270,206,318,186,824,502,328,582,802
168,155,581,767,434,438,934,815,939,303,743,313,373,902,705,947,339,310,225,771
384,805,542,212,426,419,336,536,346,173,336,270,270,578,200,163,831,456,324,474
609,890,488,258,496,422,663,669,173,161,892,892,78,771,260,89,485,702,615,64
75,652,866,906,545,167,184,274,610,941,161,52,944,626,912,302,625,615,314,313
604,50,467,284,63,203,379,467,309,377,304,438,692,191,394,304,256,818,365,215
831,393,528,366,476,361,485,400,382,535,500,689,891,158,809,496,934,213,341,501
933,328,180,588,542,582,799,327,292,455,210,464,178,305,581,899,368,498,803,663
384,663,586,503,941,304,16,819,210,741,153,709,537,664,156,854,377,650,430,153
5,336,908,152,903,740,208,605,398,462,398,949,816,767,348,302,718,486,688,934
248,601,554,202,911,354,369,279,165,78,464,531,944,295,590,170,141,483,812,900
76,198,943,484,317,210,415,58,907,140,811,766,70,162,251,911,897,463,658,604
137,939,827,348,92,896,939,214,437,667,807,62,159,904,480,707,173,904,349,337
218,137,866,631,199,467,708,938,438,742,660,667,434,547,539,665,610,55,607,340
661,853,434,372,600,287,742,595,587,936,478,942,341,68,861,51,541,158,468,210
204,189,878,740,390,692,393,419,526,905,262,742,383,868,375,316,656,694,746,894
554,538,722,272,312,103,946,893,591,527,775,887,50,597,544,906,817,311,524,258
577,821,255,427,218,832,720,281,704,200,855,434,54,503,152,613,885,865,201,389
712,396,392,144,308,458,943,804,473,520,545,249,190,806,249,163,730,263,144,376
195,263,422,109,372,767,155,302,177,323,547,336,73,194,763,501,742,393,436,469
892,217,829,342,700,279,776,657,488,698,432,206,666,260,706,214,311,128,430,608
60,622,140,71,825,427,866,178,391,387,947,138,503,68,72,866,599,691,369,57
136,319,474,145,891,705,314,122,304,334,642,583,258,717,191,319,859,469,909,936
824,653,75,685,716,886,743,61,394,369,465,828,76,803,432,768,685,601,682,98
608,300,56,718,439,219,896,808,825,52,377,862,899,272,104,912,203,219,183,65
334,530,274,222,550,685,601,249,692,13,188,689,420,669,434,419,861,50,604,169
158,867,395,854,78,552,938,816,331,427,745,888,824,57,64,197,669,298,92,476
660,350,23,213,79,744,500,437,832,899,524,211,815,461,819,143,300,699,859,607
54,549,663,264,145,685,629,210,469,554,860,183,309,503,65,387,664,155,769,899
75,104,478,742,465,659,388,696,327,662,314,597,392,700,372,626,329,695,307,615
556,272,179,887,462,805,217,464,278,205,274,740,766,176,800,217,606,484,18,938
354,545,521,941,818,699,312,666,495,936,199,273,665,980,769,702,348,540,399,329
471,278,693,660,947,198,378,56,992,78,426,684,221,601,667,863,596,817,888,521
148,545,481,78,544,342,544,437,430,397,397,350,294,597,655,697,665,465,831,892
932,867,355,659,313,659,666,703,745,151,314,890,254,356,302,463,108,296,910,66
743,253,817,196,587,993,158,523,723,829,149,889,862,173,715,313,496,401,192,160
459,176,461,396,291,264,136,831,810,297,189,888,545,862,711,668,376,700,656,550
937,522,204,870,382,537,107,51,870,425,465,822,392,134,866,908,299,658,50,587
416,433,253,121,812,818,370,868,540,223,343,807,162,79,548,421,722,940,429,870
548,907,320,156,495,597,168,665,469,394,333,347,78,258,696,187,808,606,923,818
147,901,479,855,171,820,770,439,465,478,587,259,301,100,422,468,853,811,803,607
701,352,458,905,50,279,501,309,889,356,809,869,831,256,422,482,644,390,348,330
270,989,894,210,827,394,377,461,251,723,60,714,503,897,201,802,157,370,891,54
486,274,656,199,272,813,708,142,156,931,122,477,65,68,460,931,906,667,413,372
462,14,192,899,140,801,376,818,62,332,942,223,547,591,670,210,500,396,901,888
684,542,266,69,425,395,310,431,439,162,936,357,169,890,424,347,716,524,446,894
375,763,651,704,189,471,934,304,603,462,335,887,337,136,472,528,656,169,282,158
480,276,298,172,656,53,273,488,660,741,163,813,55,125,698,395,376,346,432,669
71,69,897,893,393,391,740,422,907,275,207,431,901,743,877,75,465,549,551,544
166,297,856,687,166,62,503,864,720,268,653,345,771,80,9,265,948,202,472,537
272,820,485,737,370,332,202,503,219,718,699,775,186,435,223,501,819,361,378,306
337,767,302,999,583,670,712,934,137,373,936,684,216,66,799,266,458,334,615,318
178,480,555,379,341,181,354,258,13,163,190,196,652,257,77,350,602,176,940,801
818,377,869,723,600,120,703,161,153,466,173,161,528,534,827,534,990,536,167,720
135,451,139,217,264,267,422,420,651,211,369,660,941,889,861,545,521,718,461,326
53,544,943,172,862,255,214,317,602,530,223,218,16,217,218,669,819,434,396,373
61,68,162,566,156,886,159,687,325,318,317,393,155,197,855,798,774,653,205,151
495,474,535,22,742,806,154,368,316,887,276,152,949,347,122,261,536,464,861,264
273,160,867,152,73,933,826,433,153,466,180,945,473,474,735,334,523,157,333,718
261,164,606,768,740,138,386,251,818,184,290,808,215,707,202,66,474,207,379,592
381,55,461,829,596,581,375,661,79,303,553,153,269,71,540,347,443,376,904,338
51,806,540,216,552,334,739,329,359,64,381,281,258,419,199,458,495,355,321,324
748,467,179,281,503,309,181,603,195,949,339,477,210,540,949,591,164,720,689,902
51,477,540,186,829,811,126,692,764,939,892,256,158,612,69,139,309,376,602,119
812,870,495,186,202,502,711,137,525,859,274,667,201,24,597,609,435,528,662,708
142,216,327,807,370,899,360,828,595,717,307,334,932,764,864,193,774,870,691,934
686,862,858,720,75,188,223,522,401,467,359,603,144,766,63,223,152,161,371,889
829,859,946,585,315,120,890,310,538,682,371,853,465,706,820,541,913,819,654,562
911,743,68,258,354,396,459,947,626,741,218,771,264,674,378,612,310,120,831,394
214,397,265,477,814,759,467,656,375,193,811,909,709,342,347,77,744,481,459,943
864,690,865,437,611,312,150,366,546,162,98,823,152,166,398,736,933,426,177,520
379,887,460,281,746,870,345,457,144,272,421,457,746,899,23,176,200,607,668,159
329,158,314,472,576,393,251,545,537,170,467,454,222,427,267,67,809,220,548,466
147,894,56,813,738,60,474,163,370,809,250,393,95,666,466,203,418,419,438,400
423,302,705,250,943,763,335,194,368,164,897,548,177,406,395,737,907,590,425,520
154,472,859,808,654,273,73,344,615,311,297,299,474,80,351,996,315,299,399,528
486,67,903,223,890,434,355,298,216,487,774,189,881,765,764,885,891,310,525,488
280,73,660,337,156,281,870,710,657,435,539,150,72,203,638,147,901,799,766,933
818,650,184,831,613,806,308,658,944,200,937,356,434,148,183,325,532,947,689,127
178,553,221,556,391,385,147,802,504,71,815,543,996,474,61,304,813,390,437,701
466,770,737,530,688,184,82,259,172,329,719,192,380,498,187,465,467,887,197,426
425,503,935,419,392,905,945,153,273,653,943,389,495,182,893,368,175,690,734,484
815,541,581,267,586,717,499,589,307,358,767,217,62,897,603,593,430,479,839,533
642,269,435,435,500,253,178,808,269,461,669,456,71,316,710,819,428,501,594,716
434,468,522,317,119,317,247,258,590,712,860,456,120,742,765,198,940,254,430,476
322,327,298,534,147,717,221,261,631,423,901,479,269,712,260,194,250,355,805,63
773,145,701,912,706,308,651,213,124,346,685,175,899,936,310,907,314,937,739,319
374,698,739,70,435,354,892,250,464,151,309,658,262,335,144,371,553,70,492,691
906,217,769,134,830,75,462,522,469,206,803,56,715,911,86,386,898,899,136,178
537,804,891,527,302,277,369,885,550,272,769,147,275,350,315,297,653,327,109,255
626,64,337,452,737,435,650,539,277,351,352,744,933,178,651,314,768,401,605,199
378,395,278,889,689,306,720,467,93,369,328,599,461,150,530,68,261,454,184,943
721,578,742,860,454,801,59,524,295,587,438,626,602,547,70,686,554,122,527,209
588,146,385,538,298,270,546,353,975,911,144,479,77,475,51,767,767,528,527,165
581,14,389,609,434,666,380,432,146,496,158,319,80,254,295,900,164,219,520,885
655,710,305,894,202,495,832,469,435,613,149,261,166,832,815,901,873,79,944,377
806,670,592,699,645,161,144,161,466,307,78,687,534,157,57,543,457,911,539,934
720,378,859,726,825,718,595,888,605,146,365,743,594,457,433,535,503,694,210,819
360,465,605,595,829,345,807,597,173,280,69,485,168,831,180,175,150,476,437,198
498,246,194,801,183,539,690,613,265,146,854,540,142,892,945,279,501,377,303,266
701,656,351,137,345,128,819,374,713,540,819,775,614,603,824,743,64,582,687,197
804,54,54,432,156,764,760,602,424,773,824,399,689,153,891,458,626,665,887,907
892,606,504,359,158,260,392,467,163,276,389,332,208,549,378,719,322,538,908,397
142,859,630,255,906,74,73,462,695,692,368,295,829,657,538,316,901,457,310,253
86,685,357,390,372,549,370,379,550,864,539,933,203,54,273,605,329,171,486,155
249,289,597,167,703,187,357,763,745,690,189,389,377,393,313,609,607,603,340,223
995,693,420,497,57,134,811,252,686,776,495,318,314,341,394,79,314,668,468,177
462,802,5,270,805,805,552,595,340,819,682,827,215,939,652,656,704,910,524,348
552,690,853,266,324,655,378,165,179,391,598,149,355,418,549,669,896,482,777,899
650,500,521,825,203,594,529,51,540,367,181,900,162,846,178,553,341,830,399,703
700,654,348,661,772,729,812,481,368,370,467,547,432,484,504,737,249,161,165,500
473,356,357,763,51,525,571,418,162,438,682,252,343,822,308,461,53,170,386,333
817,741,340,903,386,699,670,933,265,712,303,377,705,311,702,186,392,987,904,609
375,910,352,887,746,769,656,668,888,605,484,433,523,854,554,547,80,250,570,477
717,384,459,586,265,434,433,74,136,434,817,168,2,581,258,60,220,909,156,78
815,713,97,668,498,323,397,169,122,897,602,299,736,897,182,906,811,907,767,221
304,295,596,988,587,70,817,138,478,764,942,66,896,253,257,832,370,471,909,163
324,698,764,184,153,152,462,186,424,855,614,185,381,238,344,855,609,891,193,472
693,457,531,3,220,182,366,669,207,302,707,687,798,887,695,609,55,267,538,303
711,473,468,321,439,549,655,456,475,71,612,721,23,191,374,541,665,156,350,328
422,363,266,300,892,889,272,741,864,65,250,60,591,856,664,537,375,457,455,905
207,161,890,542,64,154,203,496,80,864,157,294,536,298,462,175,321,521,199,803
693,523,472,538,523,201,430,172,220,371,80,548,105,933,946,943,686,343,739,652
682,803,520,816,313,523,827,300,547,807,613,857,350,391,611,863,361,596,181,909
625,266,799,547,68,911,174,192,122,694,599,379,277,390,463,53,341,209,488,317
905,331,934,712,281,946,435,186,169,806,499,859,724,398,737,885,693,433,693,158
476,771,334,802,581,934,731,719,387,669,662,668,938,255,532,706,57,811,773,203
53,459,202,913,476,588,287,700,181,69,182,768,498,350,472,147,664,340,605,798
382,174,338,373,554,536,75,906,328,397,342,765,984,801,139,345,692,692,281,366
428,894,308,623,145,542,358,170,821,257,535,582,214,120,710,593,171,221,583,369
54,767,151,756,458,380,271,260,803,197,427,262,905,803,773,78,533,462,537,899
67,881,298,207,210,320,321,597,261,829,745,770,534,153,815,223,372,611,488,161
134,346,715,470,439,633,318,554,454,800,336,524,807,469,52,525,58,896,140,496
316,356,366,896,660,252,736,135,169,458,653,533,268,299,999,374,194,134,375,191
467,939,168,385,359,774,342,383,547,389,251,461,718,64,867,171,821,171,483,606
720,386,186,379,258,716,345,737,768,723,478,584,156,333,821,283,934,138,419,597
531,160,169,889,608,207,822,459,892,858,431,327,393,656,653,601,534,706,163,1
194,501,60,223,321,165,718,464,823,775,500,554,711,269,442,499,814,798,379,77
613,540,191,746,702,551,179,932,323,605,808,867,346,743,532,214,92,932,892,397
715,377,503,713,906,541,249,424,120,439,392,395,361,719,867,399,863,463,932,718
183,816,650,170,862,393,466,869,665,718,818,299,579,538,530,401,438,743,594,366
59,126,354,806,208,196,77,719,61,162,604,470,260,504,275,901,320,215,549,467
460,311,185,169,466,553,150,997,342,418,583,50,344,537,495,693,382,598,318,146
689,725,373,553,191,175,885,353,207,822,775,530,703,774,390,353,171,585,556,333
250,591,337,820,335,338,504,69,668,905,657,375,705,9,256,738,169,196,808,803
674,154,468,382,716,435,397,462,935,739,531,399,477,526,268,598,657,261,611,295
726,888,173,64,203,154,179,595,312,936,188,380,207,772,308,273,712,464,894,202
59,553,685,298,741,597,312,273,596,688,428,321,167,363,267,890,74,165,706,138
117,121,538,372,135,270,140,712,296,495,249,56,190,65,949,369,773,276,435,265
540,813,931,83,59,268,701,936,342,323,713,743,312,327,827,896,266,261,590,69
893,337,165,874,199,719,342,386,328,485,612,533,281,76,861,652,900,821,393,611
436,51,742,259,661,188,437,606,737,175,9,769,399,343,742,585,337,775,268,61
66,306,205,705,660,550,388,473,198,931,436,801,830,294,706,433,944,185,169,908
870,831,151,892,654,690,255,543,162,167,168,221,355,96,178,829,539,653,314,142
310,75,267,824,693,209,458,714,14,176,71,420,393,214,169,79,686,200,424,265
588,259,219,315,550,374,741,436,714,368,353,191,537,658,127,549,522,329,460,718
688,807,828,475,215,804,332,51,473,889,273,581,483,599,183,276,291,935,341,262
71,525,597,893,828,545,708,307,367,303,325,251,686,586,197,608,391,821,355,2
23,905,719,495,166,715,774,554,810,737,217,948,198,135,278,691,267,458,421,711
420,806,207,192,353,352,711,868,464,277,811,168,713,320,984,326,300,354,583,700
314,329,626,344,550,424,611,743,520,855,462,771,369,719,682,476,557,381,208,149
379,58,80,809,391,540,270,296,365,269,527,380,937,489,337,581,498,668,258,401
983,427,808,278,859,152,667,213,775,320,357,697,305,685,799,522,553,530,594,183
690,913,853,600,197,804,874,190,427,860,830,741,400,501,822,943,553,376,941,696
811,150,314,312,823,531,704,693,700,942,264,164,695,938,497,860,500,856,258,642
209,253,815,431,601,382,277,375,167,810,591,318,906,178,611,203,417,886,526,698
536,541,436,813,600,593,939,763,175,210,945,384,295,739,151,201,431,582,129,715
464,709,463,317,663,472,547,715,563,458,606,771,605,626,186,859,866,304,253,821
63,79,423,188,819,616,553,774,588,142,279,477,343,68,180,155,252,736,302,905
333,701,815,398,824,336,305,690,467,142,202,378,127,140,820,481,607,661,312,533
596,211,554,742,595,906,273,340,829,272,855,770,912,311,814,76,748,348,370,259
219,906,363,803,350,350,769,525,280,430,767,398,332,155,358,556,864,531,266,535
823,692,712,905,212,865,603,555,383,610,162,145,722,792,600,381,168,869,471,433
891,589,177,194,429,338,344,372,162,436,477,821,388,259,369,864,695,64,691,997
744,486,284,530,372,603,765,169,305,432,454,204,344,212,181,693,892,707,948,172
521,266,317,860,487,250,275,122,888,61,430,327,636,593,477,858,461,476,865,464
462,537,894,889,700,763,171,482,298,223,822,931,155,498,159,891,897,319,361,265
520,768,531,935,476,595,668,77,710,855,183,805,659,939,721,359,270,332,391,171
326,717,399,474,297,706,431,522,598,799,533,706,894,817,289,935,669,482,597,394
197,496,686,545,349,716,167,55,866,931,477,310,716,427,168,73,892,282,553,864
887,223,159,655,458,889,607,331,175,464,495,143,540,865,54,811,370,67,680,398
170,343,418,466,549,373,80,78,695,310,302,594,375,731,168,814,146,460,704,71
419,888,352,338,898,478,820,589,948,421,667,307,607,174,933,819,599,595,700,12
605,463,353,821,539,862,594,596,327,556,152,372,894,309,435,11,581,801,432,159
313,389,774,272,908,811,890,822,815,709,270,422,145,660,460,167,128,251,317,899
667,316,458,259,67,400,168,60,705,5,696,688,193,355,431,137,814,219,477,470
343,0,59,592,771,813,502,654,682,720,338,55,933,422,376,457,741,694,174,151
598,714,253,606,854,399,357,668,148,471,270,194,378,702,213,79,532,799,634,810
936,366,53,775,861,329,691,765,397,626,861,164,190,531,690,354,310,322,753,596
279,343,157,416,654,381,768,551,427,737,64,609,742,503,421,457,252,317,827,497
547,222,212,163,691,179,346,813,617,723,936,487,868,768,938,819,581,396,172,221
932,773,214,742,370,717,63,61,300,737,719,869,480,278,460,718,224,823,590,600
398,485,350,222,739,198,211,472,590,984,139,354,615,664,144,591,742,931,590,395
419,865,800,355,805,613,668,596,545,469,197,654,659,452,389,340,262,185,486,433
814,160,70,217,768,176,938,582,53,374,587,552,651,936,592,439,912,995,484,369
545,386,713,594,500,54,268,610,220,354,810,275,548,374,454,198,524,593,877,897
371,680,176,818,433,66,801,340,527,302,187,655,664,302,454,534,887,909,911,313
203,189,687,683,50,53,300,263,99,336,399,166,540,480,717,329,890,704,691,318
701,254,400,218,78,398,613,931,58,531,148,651,481,15,703,425,524,154,534,554
822,192,207,222,830,295,894,187,599,135,798,933,894,253,822,423,383,170,438,288
772,188,73,486,129,78,897,595,426,486,481,772,652,266,548,187,892,692,534,256

8
2020/inputs/day_17 Normal file
View File

@@ -0,0 +1,8 @@
##.#####
#.##..#.
.##...##
###.#...
.#######
##....##
###.###.
.#.#.#..

371
2020/inputs/day_18 Normal file
View File

@@ -0,0 +1,371 @@
5 + 6 * 9 + 5 + 5 + (7 * 2)
2 + (3 + 7 + 7) * 5 + 9 + (5 + (4 + 5 + 3 + 6) + 8 * 5 + (7 + 4 + 7 + 6 + 9) + 9)
(5 * 4 + 7 + 4 + 8) + 9 * ((5 * 4) + 2 + (6 + 2 + 8 + 7 + 4 + 5)) * 5
4 * ((4 + 9 + 3 * 3 * 5) * 3 + 2 + 2 * (9 * 2 + 3)) + 5 * ((8 * 3 * 6) + 9 * 4 + (5 + 4 * 7 + 7)) * 7 * (9 + 2 * 2)
5 * 6 + ((8 + 9) * 5 * 9 + 4 + (9 + 3 * 9))
(3 * (3 + 3) * 9 + (6 + 9 * 8) + 5) + 5
6 * (9 * 6 * 9)
4 * 3 + (9 + (8 * 2 * 3 * 4) * (6 * 8 + 5 + 3 + 4)) + (3 + 7 + (7 * 6 + 2) * 6 + (4 + 6 + 5) * (3 + 7)) + 6 * (8 * 6 + 7 * 8 * 9 + 2)
5 * (2 + 3 * 4 + 3 + (4 * 4 + 3))
9 * 2 * (5 * (8 * 7 * 3))
(6 * 9) * 6 + 7 * 8 + 5
5 * 4 * 9 + 6 * 9 * (4 * 7 * 2 * 3 + 6)
3 + 9
2 + 6 * 7 * (8 * 3 * 5 + 7 * (7 * 8 * 6)) * 3
5 + 6 + (8 * 4 * 7 + 2 + 4 * 5) * (3 * 9 + 3 + (3 * 2)) * 9
4 + 7 * 7 * 2 * (2 * 6 + (9 + 4 + 8))
4 + 4 * (7 * (5 + 3 + 8 * 6) + 9 + (4 * 7 + 9 + 3 + 4) + 6) + 5
5 * (4 + 8 * (8 * 5 + 5 * 6 + 2) * (9 * 4 * 3)) + 6 + 5
3 * ((3 + 5 * 7) + 8 * 2 * 5) + 5 + (3 + 7 * (5 * 9 + 3 + 7 + 7) * 2)
2 + (5 * 7 + 9) + 2 + 2
((3 * 9 + 6) + 7 + 7 + 8 * 6) + 5 + 5 + 9
(8 + 3 * 6) * 7 + 2
9 + (9 * 7 + 7 * 4 * 7 * (6 * 7 * 3)) + 3
(3 + 7 + 7) + (5 + (2 * 9 * 3 * 2 * 5 * 3) + 7 * 5) + (7 + 9 + (2 + 7 * 7 * 7)) + (3 + 4) + 5 + (9 + (7 * 8 * 3 + 2 + 3 + 7) + 7)
2 + 4 * (8 * 2 * (8 + 8 * 8 * 3 + 3 + 8) * 2) * 8 * 3
9 + 4 * (5 + 7 * 4) + 2 * (3 + (9 + 3 * 7 + 5 + 5 + 6) + 4 * 7 + 5)
5 + ((4 * 3 * 5) + (2 * 4 + 2 + 9) + 5 + 6 * 9 * 3) + 2 + 2
((6 * 8 + 8 + 2) * 4) + 5 + 3 + 4 * 4 + 9
7 * (9 + 7 + 4 * 6) + 5 * 6
(7 + 7 * (7 + 8)) + 7 + 7
9 * (5 + (7 * 6 * 9 + 5 * 3 * 3) * 2 * 4 * (5 + 8 * 8 + 4 * 9) + 3) + 2 + 6 * 4 + (9 + 7 + 2 + 4)
4 + (7 * 6 + 5 + 7) + 8 + 8 * 4
4 + (3 + 3 + 7 * 6 + 3) + (6 * (6 + 8 * 2 + 9 * 4) + 4) + 3
((7 * 7) + 4 + 6 + (6 * 4 * 4 * 9 * 5 * 2)) * ((6 + 8 + 9 * 6) + (4 + 5 + 9 * 3) + (3 + 9) + 8)
(7 + 7 + 6 + 6 * (2 + 2 * 7 * 9)) * 4 * 6 + 3 * (3 * (5 * 3 * 3 * 3 + 3) * (3 + 7 * 9) + 8 * 6 + 8) + 8
(6 * 9 + 8 * 4 + 6) + 8 * 6
8 + 2 * (9 * 2 * 7 + 9 * 8) + 2 * 3
((7 + 7 + 8) + 6 * 7 * (6 + 3 * 7 + 7 * 9 * 4)) + 7 * 7 + 5 + 3
7 * 2 + (8 * 8) * 8 * 5 * (5 * 2 * 2)
(8 * 7 + 9) * 2 + 6 * 8 * 2 * 2
9 + ((9 + 9 + 2 * 4 * 4 + 6) + 8 + (3 + 3 + 5 + 6 + 9) * 7) + 8 + 5 + 4 * 7
4 + 7 * (5 * 4 + 7 * 7 + 6)
(6 * 4 + 2) * 8
3 * 7 * 8 + (5 * 9 + 2 + 2 + 4)
(3 + (2 * 6) * 5 * 3 * 3 * 5) + (5 * 6 * 7)
8 * 2 * 7 + (6 + 6 * (5 + 7)) * 8
(2 + 8) + (9 + 9 * 5 + 2 * 8 + 7) + 7 + 9 + 6 + 3
2 + ((4 * 7 + 5 + 6) + 2)
4 + 4 * (3 * 7 * 4 * 6 + 3) * (8 + 5 + 5 * 6 + 6 + 7)
9 * (9 * 9 + 6) * 8 + 7 + 9 * 7
(7 + (5 * 8 + 2 + 2) * (8 * 3 * 4 * 3 + 4 + 2)) + (8 + 6 * (2 * 3)) + (7 + 6) + ((9 * 6 * 9 + 8) + 5 * 6 + 9) + 8 * 3
(9 * 5 * 7 + (9 + 5) + (2 + 5 + 9 + 2 * 6 + 8)) * (7 + 6 + 3 + 4) + 8 + (2 * 8 + 7) * 2
((5 * 6 + 2 + 3 * 9 + 5) + 4 + 8) * 7 + (3 * 7 * 2 * 4 + 3)
4 + 2 * (3 * 5 * 3 + 4)
(2 * 3 + (4 * 4 * 5) + (2 + 7) * 8 + 2) * 3
5 + ((7 + 7) + (6 + 6) + 2 * 3) + 4 * ((9 * 2) * 3 + 3 + (4 + 8 * 7 + 3 * 6) * 6)
((3 * 2 * 5) + 4 + 4 * 8) * (2 * (7 + 9 + 4 + 6)) + 7 * (9 + (9 + 6 * 4 + 6 + 2 * 4) * 3)
4 * 3 * (9 + (8 + 5 + 6)) + 7 * 4 * ((4 + 2) * 9 + 6 * (5 + 4) * 6)
4 + (7 + 7 * 6 + 3 * 9) * ((4 + 2 * 4 + 4 + 9 + 7) * 5 * 9 * (3 + 7 + 4 * 4) + (4 * 8 * 7)) + 3
(2 + (5 * 8 + 3) * 9 + 5) * 9 * 7 + (6 + 2 * 8 * 2)
9 * (8 + 8 + (4 + 4 + 2 + 7)) + 6 * 5
6 * 9 + 2 * (8 * 5 * 5) * (2 + 4)
3 * 3 + 4
3 + 3 * ((4 * 4 * 4) + (2 * 5 * 9 * 4 + 4) * 9) * 9 * 5
(3 + (5 + 7) + 4 + 4 * (4 * 2) + 3) + (3 + 6)
6 * ((5 + 6 * 4 + 9 + 4 * 9) * (2 + 8)) * 6 + 8 * 6
8 * ((2 * 3) + 9) + 2 * 6
5 * (3 * 7 + (7 + 9 * 3 + 8 * 4) + 9 + 5) * 4
4 * (5 + 2 + 3 * 2 + 4 + 9) * 4 * (2 + 6 * 2 * (4 + 9) * (8 + 6 + 4 * 4 + 7)) + 5
7 * ((7 * 8 + 2 + 4 + 7) + 9 + 7 * 7 + 5) + 2 + 9 + 3 * 3
(7 + 2 * 2 + (9 * 6 * 4)) * 8 * 9
4 * (5 + 5 * 2 * (4 * 7) + (9 + 9 + 6 * 6 + 8 + 9) + 2) + 6 + 2
2 + 6 + (7 + 9 * (3 * 4 * 3 * 5 * 7) + 7 + (7 + 5) + 2) + 5 * (7 + 9) + 9
9 * (3 * (7 + 5) * 8 + 6) * 9 * 2
2 * ((2 * 9 + 7) * 3 + (2 + 4 * 8) + 6 * 6)
2 * 7 * ((6 + 7 * 5 * 3) + 9) + 9 + (8 * 8 * (9 * 2 + 2 + 3 + 3) + 2) * 2
((8 + 7 * 5) * (2 + 7) * (7 * 8 * 9) * 6 * 2 + 5) + 8 + 6
(7 + 3 + 5 + 6 + (7 * 9) + 2) * 5 * 7 + (2 + 5 * 3) + 8 + 4
((5 + 6 * 8) + 4 * (5 + 6 + 5 * 4) + (5 + 8) + (5 * 6)) * 3 * (4 + 5 + 6 * 5 * 5 * 2) + 3 + (3 * 8 * (3 * 6) + 8 * (6 * 2 * 2 * 3 * 9 * 9) * 7) + 2
3 * 3 * (9 * 2 + 7 + 9 * 5 * 7) * 9 * 3
9 + 4 + (5 + 7 * 5)
8 + (6 + 4 * 5 + 8 * 4) * 6 + (8 + (6 * 6 * 8 + 3 * 9) * 8) + 4 + 3
(8 + 4 * 3 * 4 * (6 + 5) + 9) + 3 + 5 * 9 + 7
(8 + 6 * 8 * 3) * 2 * 7 + 6 * (9 + 2)
7 * 7 + (5 + 9 * 6) + 7 + (7 + (7 * 8 + 5 * 3 * 5 * 4) * (9 * 7)) + 5
7 * 8
5 * 6 * 4 + (3 + 4 * 6 * 6) + 3
8 + ((4 + 2 * 6 + 2) + (7 * 9 + 9 + 7 * 6))
6 + (6 * 8 + 6 + 5 + 6) * 5 * 9
7 * ((8 * 6 + 3 * 7 * 9 + 2) * 4 + 5) * 8
2 + 5 + (8 * 8 + 4 + 8) + 2
4 + 3 + 7 + 5 * 8
6 * 4 * (6 + 8 + (8 * 4 + 9) + 4 * (7 * 6 * 4) + 3)
6 + 8 + (4 * (5 * 4) * 4 + (2 * 3)) * 4 + 3 * (2 * 9 * 5 * 4 * (8 + 3 * 3 + 8 * 7 + 9))
5 + (7 * 3 * 6 + 3 * 2) * ((7 * 3 + 5 + 8) + (9 + 8 + 5 * 4 * 7)) + ((5 + 4 * 3) + 4 * 7) + 2 * (8 * (8 + 7 * 7 + 3 * 6) * 4 * 7 * 4 * 3)
9 * (6 * 4 * 2 + (7 + 9 + 7 * 2) + 3 + (5 * 7 + 4)) + 6 * 2
(5 * 2 + 7 * 2) + 9 * (3 * 4 * (5 * 2) + 4) * 4
(2 * (6 + 9 + 4 + 3) * (9 * 6) * 2) * 8 * 5 * 5 + 6
3 * 9 + 9 + 9 * (9 + (8 * 2 * 7 + 3 * 8 + 3)) + 3
8 * 3 * 2 + (7 + (3 * 2 * 2)) * (2 * (2 * 4 * 4) * 8)
3 + (9 * (7 + 9) + 6 * (3 + 4 + 5 + 5 * 2 + 9)) * (6 + 4 + (6 + 5 * 6 + 6 * 5) + 2 + 2 * 6)
((7 * 3 * 3) + 7 + (3 * 4 + 5 * 4 + 7)) + 8 * 3 * 9 * ((7 * 3) + 8 + 7) * 9
((2 * 3 + 2 + 9 + 4) + (9 * 2 * 4) * (6 * 5 + 9 * 2 * 7 + 7) * 7 * 9) * 6 * 4 * 5 + 7
9 * 2 * 2 + 2 + (3 + 3 + 6 * 2)
(7 * 6 * 6) * 2 + 9 + 8 * (7 + 3 + 8 * 7 + (4 + 5 + 3) + 8) + 9
2 + 6 + 9 * 3 * (6 * 4 + 9 * 5 + 2)
5 * (5 * 2 + 6 + 8 * 8 + 7) + 9 * 5 + 9 * 3
9 * (8 + 9 + 8 + (9 * 6))
(4 + 8 * 8 * 6 + 4) + 7
2 + (8 * (4 * 2 + 6 + 2 + 3 + 6) + 4 * (7 + 4) + 6 * 2) + 8 * 5 * 6 * 8
((5 * 7 * 9 * 5 * 8 * 3) * 5) + 5 * 2 * 3 * 7 + 5
8 + 4 + 8 + 7
3 + 3
9 + ((4 + 7 + 8) + 3) + 8 + 9 * 5 * (6 * 5)
(2 + 2) + 9 + 8 + 5 + 6 + 7
3 + 8 * (7 * 5) + 9
5 + (5 + (8 + 3 * 3 + 9 * 7 + 3)) * ((9 * 5 * 8 + 2 + 2 * 7) * 4 * 6 + 4 + 6 * 9)
(6 + 5 + 6 * (9 * 2) * 6 * (4 * 5 + 8 * 9)) + 6
2 * 4 + ((9 * 2 + 6 + 8) + 4 * (5 + 3 * 3 + 7 * 9 * 6) * (6 + 6 + 4 * 3 * 8) + 7) * 5
(6 + 4 * 2 * (8 + 3 + 4 * 4 * 5)) * ((4 * 2 * 5 + 9) * 8 + 3 * 7 * 8) + 7
((5 * 6) + (2 * 2 * 8)) * (3 * 4 * 2 * 3) * 6 + 5 + 7
2 * 2 + ((5 + 6 * 7 + 5 * 8) * 7 * 7 * 4 + 8) + 6
2 + (7 * 4 * 7 + 8 + (8 + 5 + 4 * 9)) * 8 * 2 * 6
8 * 4 * ((2 * 8 * 9) * 9) * 8 + (8 + 2) + 9
(5 * 9 * (8 + 7 * 3 + 9) * (4 * 6 + 5) * (7 + 2 * 6 + 5 * 2 * 2) * 4) + 5 + ((7 * 6 * 8) * 9 + 8)
2 * 7 * (9 + (5 * 2 + 9) + 5 + 4 * 3 + 8) * 6 + (8 + 4 * 9 * 4 * 8 + 4) * ((9 + 6 + 2 * 4 * 8 + 3) * 7 * 8)
(8 + 3 * 7 + 7 + 5 + 7) + (6 + 8 * 3 + 8 + 7 + 6) + (5 + 6 * 7 + 6 * 2 * 7) * 6 + 3
8 * 5 + 7 + 5 + (2 + 4 * 5 + 2 * 5 * 8)
3 + (8 * 5) + 4 * 2 + 7 + (6 * 7 * 8 * (4 * 5 * 5) + 2 + (4 * 8))
5 * (7 * 5 * (5 * 4 * 5) + 4 + 4)
5 * 9
(5 * 9 + 5 * 4) + 4
3 + 8 + 9 * (5 + 9 + 9 * 8) * (3 + 3 + 4 + 6 * 3 + 9) * 3
(7 * 9 + 6 + (4 + 7 + 7 + 7) * 3) + 3 + 2 * 3 + 8 * 5
6 + 6 * 6 + 8 * 9 * 6
(8 + 6 * 5 * 4 * 4 + 3) * (8 + 6)
2 + 9 * 2 + 3 * ((9 * 3 * 3 + 8 * 4 * 9) * 3 + 7 + 6 + (2 + 6) * 6)
(5 * 6 + (2 * 3) + (6 + 8 * 6 * 9 + 7) + 6) + 8 * 3 + ((2 * 4) + 6 * (2 * 8) + (3 * 8 + 3) * 3) * 7
4 + (2 + (8 * 5 + 5 * 9 * 7 + 5)) * 4 * 4 * 7 * 9
7 + 8 + 6 * (8 + 3 + (9 * 2) + 8 + 8) + (4 + 2)
(9 + 4) + (3 * 4) * 6
((8 * 5) * 3 + 4) * 3 * 7
8 * ((8 + 5 + 7 * 6 + 2) * 7 + 5 + 4 * (2 + 3 + 6 + 6)) * 3 * 5 * ((3 * 5) * 2)
7 + 4 + 9 * (3 + 9 * 2 * 8 + (9 * 3)) + 9
((8 * 8 * 3 + 9 * 4 + 7) + 8 * 7 + 6) + 5
7 * 8 * 7 + 4 * (6 * 5 + 6) * 8
3 * (8 * (4 + 8 + 4 + 9)) + 3 + (8 + (8 + 8 + 5 * 6) + 5) * 8 * 7
9 + 4 + 9 * (7 + 9 + 2)
4 * 9 * 3 + 3 * (3 + (7 * 2 * 7 * 7))
(8 * (3 * 8 + 9 * 4 + 2 * 8)) * (2 + (5 * 3 * 6 * 5 + 3 * 4) + 8 + 2)
6 + 7 * 9 * (7 * 3 * (8 + 2 * 9 * 3) * (4 + 7) * 9)
7 + 3 + (6 + 3 + 9 + 6 + (4 * 9 * 5 + 7 * 9 + 7))
3 * 6 + (5 * 7 * (9 + 6 * 8 + 8 * 8 * 5) + 5)
4 * ((4 * 9 * 5 * 2) * 8) * (4 * (5 * 6 * 3 * 2) + 2) * 6 + 3 + 4
9 + (6 + 4 + (8 + 7 + 9 * 3 * 6 * 8) * 6) + (2 * 8) + 5
9 + 9 + 8 * 9 + 9 + 4
((7 * 6 + 3 * 9) * 6 + 9 * (8 + 6 + 4 * 6 + 4 + 5) * (4 * 6 + 6 * 7 + 5 + 2) + 4) + 7 + 3 * 5
((3 + 4 + 4 + 4 * 2) * 8 + 6 + 6 * (7 + 8 + 4)) + 5 * 6 + 7 + 3
(9 + 8 * (7 * 9 * 3 + 5 * 6) * 7 * 9 * 3) * 4 * 7 * (9 * 9) + 5 + (5 * 2 * 7)
8 + 3 * 9
(4 * 6 + 3 + (2 + 7 + 5 * 3) + (4 + 9 + 6 * 5 + 4)) + (7 + 2 * 4 + 3 * 8 * 7) + 9 + 2 + 6
9 + 9 * (2 * 8 * (3 + 3 * 4 * 2)) * 3
6 + (2 + (4 * 3 + 8 + 5 * 3) + 8 + 2 * 6 + (8 + 4)) * 9 + 8 * 4
(2 * 4 * (2 * 5 + 8 + 6) + (6 + 5 + 7 * 6 + 3 + 3) * 6 + 4) * 6 * 7 * 2 * 6
6 * (9 + 8 + 2 * (4 * 5 + 5 * 9 * 2 + 7) * 4 * 5) * 3 * 6 + 8
2 + 8 + 8 * (4 * (2 * 6 + 8 + 2 + 4 * 4)) * 7 + 6
((8 * 6 + 2) + (4 * 5 + 6 + 2 + 3 + 9)) + (3 + 7) * 2 + 2
7 + (4 * 8 * 7) * 8 + (2 * 2 * 3 * 4) + (2 + 7 + 9)
(5 * 5 * (6 * 6 * 8 + 7) * 6) + 8 * (7 * (8 * 6 * 7)) * 6 * 5
3 * 3 * (2 * 6) + 3 + (4 + 5 * 2 + 7 + 8 * 9) * 4
6 * 8 * 6 + 4 * (5 * 2 * 6 + 4 + (7 + 9) + 7) + 3
(8 * 7 * 3 * 6) * (7 + 7 + (7 * 2) + 8 * 3) + 7
5 * (2 * 8 * 4 + 2 + 9)
4 + 5 * 3
3 + (5 * 8 * 6) * (8 * 5 * 5 * (3 * 7 * 5 + 6) + 6 + 2) + 2 * 5 + 4
4 + 2 * (5 * 5 * 2) + (7 * 3 + 5 + 3 * 8)
(4 + 7 + 4 + (6 + 7 + 7)) * (4 * 2 * 2 + (8 * 8 * 6 * 6 + 3)) * (8 + 8 * 5 * 2 * 8)
5 + 2 * (2 * 4) * (2 * 6) + 4
6 + 5 * (8 + 4) * 4 + 8 + 7
4 * 3 + 7 * 4 * 5 + ((5 * 6 + 9 + 5) + 6 * (7 + 2 + 6 + 4) * 8 + (6 * 9 * 9) + 7)
4 + ((9 * 8 * 2 * 8 + 8) + 5 * 3) * 8 * 2 + (5 + (2 + 7 + 3 * 4 * 8 + 2) + 4) + 8
8 * (6 * 9) * 9 * ((5 * 2 + 2 + 8 * 2 + 3) + 9 * 8 * 7 * 3 + 8) + 6
7 + (6 * 5 * 2 + 4 * 5 + (5 * 7 + 8 * 6 + 8)) + 2 + 8
(8 * 6 * 3 * (2 + 4 * 6 + 2) * (5 + 9)) + 3 * 6 * (7 * 9)
(4 + (2 + 6 * 6 + 4 * 9 * 9)) * ((2 * 7 * 3 * 9) + (6 * 5 + 8 + 5 + 9) * 8 + 5 + 4 + 5) + (9 + 8 * 8 * 5 * 5 + (9 * 6 * 5)) * 9
9 * ((7 * 7) + 7 * 9 + 7 + 2) + 5 + 5 + 6
5 + 7 + (2 + 4 + 8) * 3 + 3
8 + (9 * (3 * 8 + 8 + 9) * (7 * 8 * 2 + 3 * 2 * 2) * 3 * 6 + 7) + 9 + 7 + 5 + 5
(7 + 8 * 7) + 7 * ((5 + 4 * 9) * 7 + 6 + 6 + 7 + (3 + 9 * 6 * 3 + 3)) * 5 + 5
(4 + 4 + 4 * 4 + 4 * 7) * 4 * ((3 * 4 * 6) + 5 + 2) + 6
6 + (2 + 4 + 2 + 4) * 2
6 + ((4 + 4 * 4 + 3 + 8) * 4 * 4 + 6) * 7 * 3 * 4
6 * 5 + 2 + 7 + 8 * 6
9 * 2 + (5 + 8 + 6 * 3 * 9 * 5) * 5
8 * 7 + 5
(8 * 8 * (7 + 8 + 4) * 8 * 2) + 3 * 4
3 + ((9 * 7 * 4 * 3 + 4) + 8 + (3 * 4 * 7) * 5 + (3 * 5 + 7 + 2) + (4 + 9 + 9)) * 3 + 7
(3 + 6) * 3 + 6 * (7 * 8 + (7 + 9 * 4) + 6) + 8
9 + (2 + 8 + 3 * 9 * 4) + (8 * 9) + 7 + 2 + 2
4 * ((9 * 3) + 2)
7 + (7 + (9 * 3))
6 * 4 + 5 * (4 + (4 + 5 + 4 + 9 + 3 * 2) + 9 + (6 * 2 * 4 * 6 * 8) + 3) + 9 * (6 + 5 + 9)
4 * 6 * (3 * 6 * (3 * 5 * 4 + 9)) * ((3 + 6 + 4) + (7 * 2 * 5 * 9 + 4 + 4))
((9 * 4 + 8 + 6 * 3 + 6) * 8 + 8 + 2 * 6 * (6 + 5 * 4)) * 5 + 6 + ((9 * 8 * 4) + 9 + 8 + 9 * 2 * 6) + 8
7 + 8 * ((2 * 7) + 9 * 8 + 8 + 9) + 9
(9 + 2 * 6 * (8 + 5 + 8 + 5) * 7) * (6 + 9 * 6 + 8 * 9 * 7)
(7 + 5 + 8 * 4 + 8 + 5) + 5 * (3 * 2 + 7 + 5 + 8) * 9 * 6 * 8
7 * 2 * 3 + 6 + (8 * (3 * 6) + 6 + (6 + 4 * 9 + 5 * 7 + 9))
7 * (6 * (5 * 7) * 8 + 5) * (2 * 5 + 7 * 3 * 3) * 7 * 3 * (7 * 2 * 8)
9 * 2 + 8 * (7 * 4 * 8 * 2 + 4 * (9 + 2 + 6)) + 2 + 7
4 + (3 + 8 * 9 + 7) + 2 * 8 * 6 + (7 * 8)
(3 * (2 + 6 * 2 + 9 * 5) * 9) + 4 + 2 * 7
4 * 4 + 8 * 3 + 7
(2 * 8 * (2 * 3 * 5 * 9 * 6 + 7) * 4 * 6 * 8) + 3
2 * (9 * 7 + 5 + 4 + (3 + 7 + 6 + 8 + 5)) * 8 * (3 * 7 + 7) + 9
8 + 9 + 7 * 9
((3 * 2 * 5 * 6 * 7) + 6) * (3 * 9 * 4 * 4 + 6) * 2 + 8
(4 + 3) * (3 * 9 * 4) + 5
8 + 2 * 6 + 6
(8 + 4 * 3 + 3) * (8 * (7 + 6 + 6) + 7 + (9 + 9 * 5)) * 8 + 2
8 * 4 + 2 * 6 + 9 + ((7 * 5 + 5) + 2)
(6 + 9 + 8) + ((4 * 3 + 9 * 6 + 3) * 3 + 3 * 4 * (5 + 5 + 6)) * 6 + 9 + 7 * (6 + 8 + 5 * 5)
(6 + 9 + (5 + 2) * (9 * 4 * 5 + 9 + 3 + 9) + 3) * 8 + 8 * 7 + 3
(9 * 6 + 9 * 7) + (5 * (7 + 6 * 7 + 2) + (6 + 8 + 9 + 4) + 2 * 4) + (2 + 6 + 4 + 7)
4 + ((2 * 5 * 7 + 8 + 7 + 7) * 6 + (6 * 2 * 2 * 9) + 8) * 4 * 3 + 3 * 5
5 + (8 + 8 * 2) + 3 + 5 + (7 * 8 * 9 + 2) * 2
((5 + 7 * 7 * 6) * 9 * 2) * 3 * 2 + 9 + 7 * (6 + 4 + 6 + (5 * 8 * 2 + 8 + 2) + 9 * 7)
7 * (2 + 3 + (5 * 9 + 8 * 9 * 5 + 4) + 4 * 8)
(8 * 7 + 8 + 8) + 7 + (4 * 7) + 4 + 8
6 + 6 + 4 * 8
6 + 5 + 9 + 4 + 5 * (8 + 5 + 2 + 4 + 9 + 7)
(2 * 9 + 3 + 7) * 9 * 7 + 8 + 9
(2 + 7 * 3) + 7 + 8 * 4
9 + (5 * 2) + 6 + 8 + ((5 + 2) + 7)
8 * 9 * 6 * (9 + 9 + 4 * 8 + 7 * 5) + 7
((3 * 9 + 6) * 2 + 2 + 6 * 6 * 6) + 4
4 * 4 * 7 + 5 * 8 + 2
9 * (3 + (3 + 7 + 6 * 3 * 8))
6 * 6 * 9 * (3 * (5 + 9 * 9) * 8 + 9 * 8 + 2) + 4
(3 * 9 * 4 * 8) + 5 + (9 * 5 * 5) + 7 + 2 * 4
5 * 8 * 4 * (5 * 6 * 8) * 3 * (2 + 2)
(8 + 6 + 3) + 7 + (5 + 9 * (9 + 7 + 4) * (2 * 5 * 6 * 8) + 4) * 5 + (9 * (5 + 6 + 6) * 8)
7 + 2 * 4 + 7 * 3
2 * 7 * 2 * (4 + 6 * (4 + 7) * 9 + (9 * 4 + 9 + 4))
(8 + 6 * 4 + 9 * 7 + (7 * 9 + 5)) + 2 + 2
3 + 2 * 3 + (2 + 6 + 6 + (8 * 9 + 4 + 9 + 8 + 9)) * (2 + 4 + 7 * 3 + 6 * 2)
5 * 7 * ((7 + 9 * 8 * 7) + 8 + 9) * 5 * 7 * 2
3 * (6 * 5) * 2 * 6
6 * (4 * (2 * 2 + 2 + 3 + 7) * 7 + 9 * 6) + 3 + 6
8 * 6 + (9 + 7) + 4 + ((4 * 2 + 9 * 2) + (5 * 5) + (7 + 5 + 6) * (5 * 5 * 8 + 8 * 5 * 5) + 6) + 4
8 + 9 * 3 * 9 + ((9 + 3 + 8) + (8 + 8 + 3 * 3) * 2 * 3 * (4 * 9) * (6 * 6 + 9 + 3 + 4))
5 * 3 * (6 * (9 + 5 * 8) * 9)
9 * (9 * 4 + 4 + 7) + (6 * 4 * 6) * (3 * 8 * 3 + 4)
(9 + 7 + 6 + 8 * 3) * 7 + (2 + 7) + (2 + 7 * (5 * 3 + 9) + (6 + 8 * 4 + 4 + 2 * 5))
9 * ((8 * 5 * 5 + 5) * (2 + 7) * 9 + (4 + 5 + 3 + 2 * 5) + 2 + 5) + 9 * 4
6 + ((2 * 6 * 8) * 3 * 4 + 3 + 7) + 8 + 2 + 7 + 3
4 + (8 * 9 + 7 + 6) * (7 * 7 + 6 + 2 * (6 * 6 * 4 * 6 * 9) * 8) + 2
(9 * (8 + 9 + 5 + 8) + 7 * 6 * (9 * 3 + 5 + 3 + 2)) + (2 + (2 + 4 * 5) + 6 * (6 * 3 + 7 + 7) + 2) + 7 + 8 + 6
3 + 5 + 5 * 5 + ((6 * 7 + 9 + 4 * 2) * 6 * 8 + 6)
(2 + 8) * 3 + 7 * 6
4 + 5 + (8 * (5 * 8 + 4) * 9 + (6 * 6) + (5 + 7)) + 2
6 * 7 + 5 + (9 * 2 + 2 * 7 * 4) * 2 + 2
3 * (3 + (3 + 9) + 3 + 9 + 3) + 6 * 8 + 5 * 4
8 + ((8 * 6 + 5 * 6) + 7 + 3 * 8 + 9 * (2 + 6 + 3 + 8 + 6))
5 * 8 + (7 + (9 + 3 + 3) * 6 * 4) + 9
2 + 4 + 5 * 2 * 9 * (4 + 9 * 3)
2 * 6 + (4 * 7 + 6) + 9 + 9 + 4
(7 * 9 * 4 + 3) + 9 + 6 * (7 + 6 * 8) + 9
6 + (4 + (3 + 3 + 6 + 2) + (4 + 9 * 7 + 4 + 8) * 5 * 5) + 4
4 * 7 + (2 + 2)
(3 + 2 * 8 * 8 + 3 + 3) + 5 + 7 * 5
(2 * 5 + (8 * 6 + 2 + 4 + 4 + 8)) * 2 * (8 + 8 * 5) + (2 + 9 * (9 * 3) * (6 * 7 + 7) * 2 + 4) * 6
5 + 2 * 9 * 8 + 5 * ((7 * 8 + 3 * 6) + 2 * 6 + 2)
7 * 2 + (8 * 5) * 7 + (2 + 2 + 4)
5 * 6 + 8 * ((2 + 3 + 6 + 8 * 8) * 8 + 5)
4 + 4 * 4 + (7 * 4)
(7 * 3 * 4 * 8) + 3 * 2 + 8 + 2 + 3
2 * 8 + (2 * 4 * 6 + 8) + 2 * 7
(5 + (7 + 5) + 6 + (7 + 7 + 7 * 8 + 5 + 4) + (8 * 8)) + 8 * (7 * 9 + 8) * 6 + 3 * (9 + 6 * 3)
9 * 9 + ((6 + 4 + 6 * 6) + 9 + 6) * (8 + 4 + 4 * (3 * 3 + 8) * 3 * 9) + 6 * 2
(9 + (8 * 7 + 4 * 5 + 8 + 9)) * ((2 + 8 * 2 + 2) * 8 + 2) * 9 + (2 + 9) + (2 * 4 * (3 + 4 * 3 + 7 * 4 * 7))
2 * 6 * 3 * 7 * (4 + 6 + 8)
5 * 8 + (6 * 5 * 5 + 9 * (9 * 2 * 2 * 5 + 5 * 4)) + 4 * 2 + 8
(9 + 7 + 5) + 2 + 9 + 2 + (6 * 9 * 9)
9 + ((7 * 4) + 9 + (3 * 5)) * 8 * 6 * 6 * (3 + 3 + (8 * 9) + 7)
5 + 4 + 3 + 3 * 9 * 5
6 + 6 + ((5 + 4 + 6 + 9 * 5 + 4) * (8 * 9 * 8) + 3 + (8 + 2 * 4 + 4 + 3)) + 9
3 + 5 * 4 * 3 * (5 * 3) + 9
2 * 5 * 3 + 6 * (8 + (5 * 4 + 4 * 7 * 6 + 8) + 4 * 7) * 6
2 * ((3 * 2) + 7 * 9 + 7 + 8 * 6) * (9 + 8) * 8 * 8
3 * ((7 * 6 + 9) + (8 * 9 + 9 + 2 + 3)) * 5 + 2 + (3 * (6 * 6 + 7 * 9 + 8 * 9))
3 * 3 + (8 + (8 * 6 * 9 * 8 + 5 + 3) + 5 * 2 * 5 + 7)
3 + (6 + 5 * (4 * 2) + 8 * 3 + 6)
7 + 7 + 7 * 6 + 3 * ((2 + 5 + 4 * 9 + 2 * 9) * 5 * (8 * 4) + (9 + 5 * 8 + 8 + 6) * 4 * 5)
9 + (6 + 6 * (7 * 4 + 2 * 8 * 5))
(7 + (5 + 3 + 5 + 6 * 5)) * 8 + 9 * 8 + 5
(6 * 2 * 7) * (3 + 3 * 7 + (8 * 3 + 7 * 4 + 5)) + 7 * 3 + 4 + 2
4 * 9 * 3 + (3 * (3 + 4) * 3) * (2 * 5) + (4 + 4 * 2 * 4 * 7)
(8 + (6 * 7 + 5 * 3) + 5 * 4 + 7 * 8) * 3 + (6 * 9 + 7)
5 * 6 * 5 + 4 * 9 + (3 + 3 + 8 + 4)
(6 + 4 + 7 * 8) + 5 * 4 * 9
8 + (7 + 5 * 4 + 8 + 9 * 6) * 8 + 4
3 + 6 * 8 + 3 + (3 * 3 + 2 * 9) * 8
7 + 6 * 4 + 4
9 + 3 + ((2 + 8 * 5 * 5 + 2) * (8 * 7 + 7 * 3))
9 * 9 * (6 + (2 * 9 + 4 * 8 + 6) * 2 + 5) + (7 * 3 * 7 * 4)
4 * ((5 * 2 + 9) + 9) * 2 * 3 + (2 + (4 + 4 * 7) * 2 + 6)
3 + 6 + (8 * 7 * (7 * 8) + 3) + 5
(6 + (9 + 8 + 3 * 8 + 8 + 7) * (4 * 3 + 4 * 3) * 6 + (9 * 8 * 2)) * (6 * 5 + 4 * 4) * 6
((9 * 3 + 3 * 5 * 9) * 3 * 2 * 5 * 4 + 9) + 2 * 5 + 5 * 8 * 6
7 * 9 + 4 * ((3 + 7 + 2) + (8 + 7 + 9 * 8 * 6 * 2))
(5 * (3 + 5) * 3 * (3 + 6 + 3 + 4) + 8 + 9) + 9 + 6 * 4
3 + 9 * (3 + (4 + 7) + 2 + 3 + 7) * 8 * 6
(5 * 7 + 4 + 7 + (5 + 4 * 4 * 6 + 6)) + (9 + 3 + 2 + 2) + ((3 + 2 + 9 + 7 * 2 * 3) + 8 * 2 * 2 + 9 * 3)
3 + 7 + ((5 * 7) + 7 + 3 * (7 + 5 + 8) + (9 + 8 * 8) + 7)
5 * ((5 + 8 * 3 * 7) + 2 * 7 * 5 + (4 + 8 + 3) + 3)
(3 + 9 + 4) * ((3 * 6) + 5 * 7 * 6)
8 * 7
(5 * (2 + 9 + 4) + 8 * (8 + 7 * 7 + 5) + 6 * (2 + 4 * 7)) * 8 + 9
(4 + (3 + 7 * 4 * 2 * 7 + 8)) * 9 * 6
6 + 7 + 9 * (9 * 2 * 6) * 6 + 2
7 * 5 + (5 * 3 + 9 * 6 + (9 * 5 * 2 * 3) + 7)
3 * 5 + 7 + 2 + 3 * ((8 + 5 * 2 * 6 * 5) * (4 + 4 + 7 * 9 + 8 * 4) + (2 * 9 + 2 * 2 + 8))
(9 + 7 * 9 * 2) + 8 * 6
(9 * (7 + 8 + 9 + 5 + 5) * 2) * 3 + 5 + (7 * (6 * 8 + 9 * 4 * 4 + 8) + 6 + 6 * (9 + 8 + 4 + 6)) + 2
(3 * 9) + 4 * 9
4 + 7 * ((8 * 2 * 6 + 8 + 7 * 2) * 2)
2 * (6 + 3) + 4 + 7 * 4
(2 * 8 + 9) + (2 + 6) + (4 * 6)
7 * 2 + 9 + 7 * 3 + ((5 * 5 * 3) + 3 * 8 * 6 + 2 + 7)
((2 + 6) + (7 * 4 * 8 * 7 * 3) * (2 + 8 * 4) * 5 + 6 * 2) * (4 + 7 + 2 + 8 * (3 + 8) * 8) + (7 + 8 + 3 + 3) + 9 + 4
(3 * 4 * (9 + 4 + 6 * 7) + 2 + 2 + 8) + 4 + 6
(4 * (4 * 3 + 2 + 9) * 4) + 2 * 6 * 3 + 8 + 5
(3 + 9 + 7) * 8 + 9 + (4 * (7 + 7 + 8 + 7) * 8 * 3 + 5)
5 * 2 * (5 + 9 + 6 + (6 + 6) * 2 + 7)
7 * 7 + (2 + 2 * 5 * 6 + 2) + 4
8 * (2 + (9 * 2 + 2 + 7 + 7)) + 8 + 7 + 5 + 7
(5 + (9 * 8 * 3) * (2 * 2 + 8 + 8 * 5) + 7 * 3 + (8 + 9 + 2 + 6 + 3 + 7)) * 9
(4 + 8 + 9) + (6 + 3 * 4 * (4 + 2 + 4 * 2 + 8 + 2) + 8 * 3) + 5
6 + 3 + 2 + (2 + 6 + 7 + 2 + (7 + 3 * 9 + 3 * 5))
4 + 7 * 2 + 8 * 2
7 * 6 + 4
(2 * (5 * 3) * 9 * 3) * (3 + 7 + 6 * 5) * 4 * 9
3 + 9 * 2 + (8 * 4 + 8 * (3 + 3 + 2 * 3) + (9 + 5 * 8 * 6))
8 * (8 * 2 + 4 * 4 * 6) * 9 + 5 + 4
2 + 8 + (4 * 7 + (2 * 9 * 2 + 4 * 5 + 7) * 9 * 8 * 3) * 5 + 7 * 3
8 * 5 + 7 * 5 + (7 * (5 + 8) * 5 * (3 * 7 * 2 * 3 + 2)) + 5
8 * (2 * (5 + 3 * 6)) + 2 * ((7 * 6 * 7 + 2 * 2) + 8) * 6
((9 + 8 + 7 * 6 * 7 * 9) + (9 + 6 * 4 + 9 * 4 + 2) * (6 + 4 + 6 + 9 * 4)) * 7 * 8 * ((8 * 4 * 9 * 5 + 6 * 6) + 7 * 3 * 3 * (2 + 4 * 4))
4 + (8 * 7 * (9 + 6 * 8 + 8) * 7 * 4) + 2 * ((4 * 4 + 7 * 9 * 8 + 3) + 7 + 3 * 9 * 3) + 6
6 + ((5 * 2 + 9 + 9 + 7 * 7) * (2 + 9 + 6 * 8) + 9) * 3
(6 + 6 + 9 * (8 * 5 * 3 + 3 + 2) * 8) * 5 + 8 * (3 + 6 + 8 * 9 + (5 + 3 + 7)) * 5
8 * ((8 + 3 + 5) + 5 * 4 * 6) * ((7 * 3 * 2 * 7 + 8 + 8) * 7 + 9 * 5 + 2) * 8
9 * ((6 + 3 + 3) + 4 * 3) + 6
9 + ((9 * 8 + 3 + 5 + 6 + 3) * (7 * 5 * 6 + 5 + 6) * 5 + 8) * 4 + 8 + 6
2 * 4 * 2 * (8 + (7 * 5) + 8 * 3) * 7
8 + (6 * 8) * 9 * 2 + 3 * 7
(4 * 3 * 2 + 8) * (8 + (5 * 2 * 7) + 5 + (6 + 8 * 4 * 9 + 5 + 5) * 4) * 2 * 3 * 2 + 5
9 + 5 * 9 + (3 + 4) + (5 * 6 + 5)
9 * 9 * ((9 * 9) * 5 * 6 + 4 + 3) + 8 + 8 + (4 + 4 * 4 * (3 * 7 + 7 + 9 + 5 * 3))
9 + (3 * 2) + 2
((3 + 7 + 5 * 8) + 3 * 5 + 2 + 2) * (5 + 7 + 5) * (2 * 3 + 8 + 8 * (9 * 3 + 6 + 7 * 7))
((8 + 3 + 2) * 9) * 5 * 9 * 8 * 3 + 8
2 + 8 + 4 + 2 * 2
(8 * 9) + 9
6 + (4 * 8)
(5 + 9 * 7) * 9 + ((9 + 9) + 6 + 3 + 8) * (9 + 9 * (6 + 9))
((6 * 6 + 8 * 6) + 2 * (6 * 6) * (3 * 9 + 7 + 9 * 8) + 3) * (8 * (2 + 7 + 9 * 8) * 2) + 4 + 7 * 6
7 * (7 * 3 * 9 + 7) + (4 * 9 + (5 + 3 + 5) * 7) + (5 + 3 * 3 + 2) * 2
(6 * (2 * 7 * 3)) + 5
8 * ((7 * 4 * 4 * 3) * 3 * 5 + 6 + (2 * 5 + 5 + 2 * 8) * 9)

480
2020/inputs/day_19 Normal file
View File

@@ -0,0 +1,480 @@
66: 69 116 | 9 115
91: 95 9 | 109 69
14: 110 69 | 15 9
4: 119 9 | 61 69
17: 9 23 | 69 93
37: 118 69 | 94 9
68: 9 80 | 69 19
117: 37 9 | 45 69
132: 9 109
74: 9 25 | 69 126
102: 122 9 | 6 69
98: 89 9 | 99 69
113: 83 9 | 7 69
92: 9 16 | 69 50
33: 9 39 | 69 133
134: 95 69 | 7 9
57: 9 7 | 69 110
31: 9 66 | 69 51
47: 9 3 | 69 83
21: 69 123 | 9 129
104: 9 86 | 69 7
40: 69 24 | 9 34
32: 9 44 | 69 88
45: 49 69 | 48 9
2: 69 88 | 9 23
5: 3 9 | 110 69
108: 20 86
76: 97 9 | 113 69
56: 9 121 | 69 58
29: 69 13 | 9 82
123: 86 20
46: 23 69 | 95 9
19: 7 69 | 109 9
12: 93 9 | 95 69
75: 85 9 | 128 69
127: 93 69 | 83 9
61: 9 7 | 69 23
78: 9 132 | 69 107
121: 88 69 | 23 9
60: 33 69 | 76 9
73: 26 69 | 100 9
116: 9 60 | 69 75
93: 69 9
38: 9 106 | 69 110
107: 9 7 | 69 86
82: 5 69 | 64 9
58: 44 69 | 23 9
34: 69 57 | 9 104
124: 69 106 | 9 44
109: 69 9 | 9 9
48: 69 44 | 9 83
28: 9 83 | 69 7
64: 9 93 | 69 7
54: 9 102 | 69 40
94: 83 69 | 7 9
80: 9 86 | 69 3
62: 86 69 | 83 9
42: 125 69 | 70 9
71: 69 112 | 9 114
8: 42
131: 69 44 | 9 7
88: 69 9 | 9 69
87: 15 69 | 7 9
3: 9 9 | 69 69
9: "b"
41: 21 69 | 78 9
65: 9 69 | 69 20
128: 134 69 | 101 9
44: 9 69 | 69 69
51: 9 18 | 69 54
55: 69 79 | 9 5
95: 69 69 | 69 9
110: 9 69
22: 92 69 | 10 9
67: 9 44 | 69 23
7: 9 20 | 69 69
90: 69 96 | 9 68
53: 111 9 | 27 69
125: 69 72 | 9 22
11: 42 31
23: 9 69 | 9 9
114: 69 105 | 9 131
81: 53 69 | 29 9
69: "a"
1: 86 9 | 95 69
18: 9 73 | 69 90
83: 20 20
130: 89 69 | 47 9
89: 44 9 | 93 69
15: 9 9
0: 8 11
105: 69 110
13: 135 9 | 14 69
6: 69 105 | 9 132
103: 120 69 | 71 9
85: 1 69 | 2 9
96: 89 9 | 12 69
101: 69 95 | 9 23
39: 69 15 | 9 109
133: 88 69 | 65 9
86: 69 20 | 9 9
122: 127 9 | 43 69
20: 69 | 9
52: 69 109 | 9 3
119: 15 69 | 88 9
77: 9 7 | 69 93
50: 87 9 | 61 69
129: 9 65 | 69 110
97: 69 95 | 9 93
111: 59 69 | 35 9
115: 69 84 | 9 41
84: 36 69 | 4 9
72: 117 9 | 74 69
135: 110 69
112: 62 69 | 124 9
43: 69 3 | 9 15
118: 109 9 | 93 69
49: 69 23 | 9 83
26: 69 67
63: 106 9 | 44 69
70: 103 69 | 81 9
25: 17 9 | 77 69
36: 91 9 | 32 69
10: 69 98 | 9 56
30: 9 109 | 69 3
126: 9 28 | 69 63
16: 9 38 | 69 30
99: 106 9 | 109 69
59: 23 9 | 3 69
120: 130 9 | 55 69
27: 69 91 | 9 108
24: 46 69 | 52 9
35: 9 93 | 69 109
100: 9 101 | 69 80
106: 69 69
79: 44 69 | 65 9
bbabbbaaaaaabbabbaabaaabbaababbbabbbabbbababbbbbbbbabbbbbbabaaaa
aabbbabbabaaaababbbaaabb
baababbbaababaaaabbaababbabbbaaabaaaabbbaaaabbaaabbaabba
abbbbaaabbaaaababbbabaaabbbabbbbbabaabab
aaabbbbbabbbbbabbabbaabbaaaaababababbbbaaaaabbbabbbbabbababbaaabaaaababa
bbbabaaaabbaaabbbababababababaaaabaabbbabaaaabbbabbabbabbbaaabbaaabaaaaa
bbaaaabbaabbbaabbabaaaba
abaabbabbaaaaabbbbbabaabbabbbababaaababb
baaaaabbbabbbbbbabababba
baaabbbaabbaabababbbaaab
baaaabaababbbbbababbbbaaabbabbaabbababababababbabbbabaab
baabbaaaaaaaaaababbaaabaaabbabaaabbababaaaabaaaaabbaabaaababaabbbaabbbaaaabbabbbabbbbbbb
ababbbaaabaabaababababbabbbaabbaaaabbbbbababbabaabbbbbaa
abaabbaabbbbbbbaaaabbbbaaaababba
ababaaabbaabbaaabbbaaaba
bababbbbbaabbabbabbabaaaabaababababababababaabab
bbaaaaababbbaababbbbbbaa
abaabababababbbaababaaaa
aabbababaaaababababbbbba
aabaababbbaaababbabbabab
baababababbbabbbbbbbbaba
bbbbaaaabbababaabbbabbabababbbab
baaabbbbbbabbbbbaaaabaaa
ababbbbabbaabbaaaababbaaaababaaabbbbaaabababbabbaababbbb
bbbbaababababbbbbabbaabbbabaaaba
abbbabbababbbaaaababbbbb
abbbbbabbabbabbbbaaabbabbaaaabbbbbaabaaabaabbaba
aabbabbabbbbbbabbbabbaaa
bbbbaaaabaababbbbabbbbab
bbababaaabbaaabbabaaaabb
bbbbbbbabaabababbbbababbbabbbaaaababaaaa
abbbbbaabbabbbaabbbababbababbaabbaaabbab
aaabaabbbbabababaaaabababababaabbbabbabb
abbabbabbbaaaabbabaaaababbbaabbabaaabaaa
babbbabbbbbabaaababaaabb
bbaaaaabaabbaaaabbbabbbb
abaaabbbbaababbaaabaaaab
bababaababbaaabbaaaabaab
bbaabaabbabaaaaabbbbbbbaaabaaabaaaabbbaabbaabbbabbaaaabaaabbabbbbbaaaaaabaabaaaaabbaaaba
abbabababbbbababbbaabaab
ababababaabbaabbbbabbaaa
bbbbbaabbbbabaaabaaaabba
aababaaabababbbabbababababaabbbaabbaaabababbaabbbaabbbaa
aabbaabaabbbbabbaabababb
aabaaaaaabbbbbbbabababbbbabaaaabbbaabbba
bbaaaaabaaabaabbaabaaaab
aaaaaaaaabbaaaaabbbbaaababaaabab
baababbaaaaaababbbbaaabb
abbbbaabaabbaabbbaaabbaaabbbbabbabbbaaaabaaaaaaaaabaabba
baabaabaaabbbabbbbaaaabaabaaaaabaaabaabbbabaabbb
abaaaaabbabbbabbbababbaaaabaaabbaabbababbabbbabababaabaabaabbbaa
aaaaaaabababbbbaaabaaabaababababababbabb
abbbabaabbabaababaaaabaa
abbbbbaabababbbbbabaaaba
aabbaabbbaabaaaabbaaabba
bbabababaaaaabaabbbbaabaaaaababb
aabbaabbbbbbbaabaaabaaba
bbbbbaabbabbbbbbabbbaaab
bbababbaabbbbabbbaabbbab
baaabbbbbababbaaaaabbbab
bbaabbbbbbbbbababaaaabbbbaaaababbbaababa
aabaabababbbbaabaaaaabba
abaabbbbaabbbaaabbbabbba
baabaaaaabbbaabaaabababb
baaabababbbababbaaaaaabb
babaababbaaaababbaabbaaaaaaabababbbbbbaabbaaabbbaaaabbabaaaaaabbaabbaaaaaabbbaaaaaabaaba
aaabaabbaaaababaaaaaaaabaabbbbbb
abbbababababbbbabaaaabab
abaabaabbbabababaaabbaaa
bbbbababaabaaaaaaabbbabbaababaabababaaabbbbabbab
bbbbaaabaabbbabbabbbabbabaababbbbababaaa
bbaabbbbaaabbabbaaababaaaabaaababbaabbba
aabaabbabbabbbaaaaaaabbb
aabbabaababbbabbaabbbbab
baababbbbbbbbbabbabbaaaababaabab
babbaababbaabbaaaaaaaaba
aaabbbbabbaaaabbaaabbaaa
aaaabbbbbaaababaababbbbabababbababaabbab
baaaaabbbaaabaababbaaabbabaabbaabbbbaaaababbaaaa
babbabaabbbbaaaababbbbaabbbbabbb
abbbbabaaabababababaabab
bbaaaaabababaababababbab
ababbaabaabbaaaabaabbaba
bbaabbaaabaababaaaabababbbbbaaba
babbbbaaaabbabbaaabbbbbb
baaabbaabababbaaabababaa
aaaabbbabaabababbabbaababbbbabbaaaabaabbaaaabababbbaabbb
bbbbbbabbaaabbaaabbbbaabbbabaababbbbbaaabbabaaabbabbbbba
baabaabaaabaabbaaabbababbabbabaabbabbaabbaaabaab
babaaaaaabbbbaabbbbbbaba
bbbaababaabbbabbaaababba
bababbbbbaaabbbbabbbabbaababbaababbbaaabbbbaaaba
abbbababbbbbaaabbabbaaab
bababaababaabbbabaaabbbbbaabababbbbaabaa
bbbaabbbaabbbbbaabaaabaaaaabbbbbaababbbbbbababbabbabababaaaababaaaabaabb
baaaaabbabaabaaaabbbbaaaaababababbbbabbb
bbbbaabbbbaaabbbbaabbbaabaaababbbbaababb
abaaaabaaabbababbbaabbba
bbabaabbbbaabbaaababbaabaaababaa
aababbbaabaabbbaaababbaabaaabaaaaabbbbba
babbaabbbbbbaabaaabbabbaaabbabaabbaabbab
aababaabbbbababbaabbbaababbabbabbaaaabaaabbaabaabbbaaabb
abaabbbbabaabbaababaaaba
aabbbaabbaaabababbaaabba
baabaaaaaaaabababaaaabab
bbaaaabbbaaabbbaabababba
bbaaaaabaabaaabbaaaaabbb
baaababaabbaaaaababbbbbbabbbbbaabbbbbbabababbbaa
abbbbabaababaabaaaaabaab
baaababaabbbabbbbaabbaab
abaabbaabababaababbaaaaaababaabb
abaababaaabbabbaabaaabba
bbaababbaabaaabbbababaabbbbabbab
babbaaaaabbabbbaabababbb
aabbaaabbabbbbaaaabbbbba
bababaaababaaababbbabbba
bababbbaabbaabababbbabbbbbababababbbbbaabaaababb
abbabbbababbbbaaaabbaabbaabbaaaaabbabbaa
aaaabababbabbbaaaabaabaaabbabbabbbbbaaaabbaaaababaabbabbbbbbbbbababbabaaaabbbaab
bbbaaaaabbaabbbaaabaabbaabaaababbabbbbbabbbabaab
bbaaaababbbaababbabbbaab
aabaaabaaaabaabbbbabbaaababbababbabaababbbbaabba
aaaabababaababbaaabaaabaababaababbaaabbbbabbbaab
bbaabbaaaaaaabababbabbbabaaaabbb
ababbababbabaababbbabbbb
bbbbbbabbbaabbbbbbbabbbbbbbbbbaaaabbbbabaaabaaba
aabaaababbaabbaababbaabaabbaabbaababbbbb
bbaaaaabbbbaabbabbabbabaabaaaaaababaabab
aababaaabbbbaabbbbababbabbabaaaabaaaababbaaaababbabbbaabbaaabaab
aabbaaaaabbbaaaaabbaaaaabbbabaab
aababbbabbbaababaabababaababbbaaabaaabab
bbbaaaababaaabaaaaaabbabaababbbaabababaaaaaabaabaaababab
abaaaabbabababbaababbbab
bbabaabbaababababaabbbbb
babbabaabbabbbbbaaabaabbbabbaaaabaaabbba
aaaaabaababbabaaabbabbbb
bbaaaabbaabaaabbbaabbaba
abaaababaaabbbbbbbabbababbaaabaa
bbbbaababbbabaaababbabab
ababababaababaaabababbbbaaabbaababbbbabababaabba
babbaabaabaabbbbbaabaaaaaaabaabbbaabbabb
aaabaaaaababbaabaabbabaaabaabbabbbbbbaaabaaabaaa
baaabbaabaabaabbbaabbbab
aaaabbbaabaabbbbabbbbbaabbbbbbbbababbbaa
bbabbbaabababaababbaabaa
bbabaabaabbababaabaaaaabaaaaaaaabbbaabba
bbaababbbaabbaaabaaaaaba
baabbabbabbababbbbbbbbaabbbaaaaabaaaabbb
babaaabaaababbabbabaaaaaaaabbaaaaabbabbabaaabbbabbaabbab
babbabaaabaaaabaabbbababbaaaabba
abbababaaabaabbaabbbaaaabbaabaababbbbbabaabbbaaaaaababbaabbbbbbb
abbabbbaabaabaaaaababaabaaaabbbbabbaaaaababababbbbabbaabaabbababaaaabaabaaabababbbabbaab
bbaababbaaaaabaaaabbbaababbbbbab
babbbabbaaabaaababaabbbabbbaaaba
aaabaaabbaababbaabbbbbaaaabbbaba
bbaaabababaaaabaababaabaaabbbabbbbbbaabbbbaabbaababbbbabbbabbabbbababbab
abbbabbabbbbaaababbbbaabbaaaaaab
babbbabbaabbaabaaabbaaabbbbbaaabbaababbbaaaaaabb
aabbaabaabaabbabbbbbbbbabbbaabbb
abaaaaabbbbbaababaaaabab
abbbbbbaaabaaaaabbabaaaa
bbbbbbbaaabababaaaabaaba
bababbaababaaaaababaaaba
abbbaababaababbbbbbbabbabbbaabaa
abbbbbaabbbababababbbbbbbaaaabaabbbaaaba
abaaaabaabaaabbbbaababaa
bbaabaaaaaaaababaabbaabbabbbbbbabaabbbbabbababba
baabbaabaaaaabaabaabaabbbbabbbab
bbaaabbaaabbabbaaaaaaabbbbbaabbabbaaaaaabaabbbaa
aaaaaaabbbbbbbabbbababaabbababbb
abbbabbbbabbbaaaabababbb
aaabaaabaaaabbabaaaabbbb
babbaaaabbbbbbabbabbabba
ababababaabbabaabbabbbbbbaabbbaa
aabbbaabaaaaaaabaaababbb
aaaaabaaaaabbbbaaaaabbababaabbababaabababaaaabaa
abbbbaabbbabaabbababaaabaaabaaabbaaaabbabbaaabba
aaabbbbabbbbaabaababababbababbbabaabaabbbbbaabbb
abbbababbaababbababaabaa
ababaaababbbbaabbbabbabb
babbbbbbbaababbbbbbabaaaabababbbbaabbabb
aabaaabbaabbaaaabaaaabab
abbbabbbbababbbbbbabababababaabbaabbbbba
bbbabaaaaababaabaaaabbaa
bbbbaaabbabbaababbbaabba
ababababbaaababababaaaaaaaabababbaaabbbbbbaaabaaaaababbabaaaabba
bababbbbbbaaababaababaabaabbababbbbbbbba
baababbaaabaabababbaabba
bbbaababbbbbbbbabbaabbab
babbbbaababbbbbbbaabbbba
aaabaabbabbbbaabbbaababa
abbbaaaaaaaaabaabbabbaab
aabababbababaabaabbbbbbbaabbaababbaaaaaaaaabbbbaaaaabbaa
bababbbbaaababababbabababbbbbbbaababaaaaaaabbaaa
bbbbaaababbabbababababaa
bbbbbaabaaaababbaabbbbba
baabbaaabbbbabbbbbabaabaaabaabbbaabbbbbb
bababbaababbbbbbbaaaaabbbbaaabab
aabbaaabbbbbbbabaababbabbbaaabaa
bbbbaaabbaababbaaababbab
ababbaabaabbababbaaaabaa
baabaabbabbbabbbbaaaabbb
abbabbbabbbaababbbbaabba
abaaabbaaaabbabbababaabbbaaaababbaaabbbbaaabaabb
baabaabbbaaaaabbbabbaaaaaabbabbbbbbaabbb
abbaabababaabababbaababbabbaabaa
bbaaaaaabbaaaabaaabbababababbbab
aabbaaabbababbaabbbbabbbbaababababbaabba
bbbbaabbaababaababbbbaabbbabbbbaababbbaaabbbbbbbbbababbb
aaaaababaaaababaabbbababaabababaabbaaabbbabbbbab
aaabbbbabbabaabbbbaaabaa
bbabababbabaaabbbbbaaaba
aabbabbabbbabababaaabaab
bbbbaabbabbbabbbaabbbbbabaabababaaabbbab
baaabbbbaabbbabbbbaaaaaaabbbaabbaababbbb
bbaaabababbbaabaabbbaababababbabbbbabbab
bbbaaaababbaaababbbabbabbbbbbaaaababaabb
abaababbbabbbbabaababbabbaaaaabbbaababaaabbaabaabbababaaabaababb
ababbaabaabaabbaabbabaaa
bababbaababbaababaabbaabaabaaaaabaabaabaaababbabbbabaaaa
babaaaaaaabbbabbaaabbbaa
abbbbaabbbbbaababbbaababaaaaaaababababbb
bbabababbababbbbbbbbbaaa
aabbbaabbababbaaaabaaababbabbabb
baababbbabbbbbbabbbbbbbaaaabababbaaabbab
bababbbbabaabbaaabbbbaaabaaaabbb
abbaabaaabababbbaaaaaaaaaabbaabbbaabaabb
bbabbbbbbbabbbbabbbbaabbabaaaabbbaabbaba
bbaabbaabbababaabbaaababbabaaabb
bbaaaabbbaabaababbbbabbaababaabb
aaaaaaababaabbbabbbbabaa
bbbbaabaabababbabbaabaaabbababbaababbbbbaaaabbaabbbabbbabbaababb
abaaabbbbbbbababbbaababa
abaaaababbbbabbaabababba
aababbbabbbbaabbbababbbbabaaaaababbbaabbbababbab
bbbbaaaaabaabaabbbbbababbaaaaaba
babbaaaabaabbaabaaaaabba
bbbbaaaabaababbabbbaabba
ababababbbaaaaaaabbabaab
bababbbabbbaababaabbabaaabbabbbabbabbbab
baabaaabbabbbbbbbbbbbaabaabababa
ababbbbaabaaaabababbbbba
aaaaababbbabbbaababaaaba
baabababbaaaaabbbbababbb
bbbbabbabaabaaaababbbbba
aababaaabbabbbabbbbbbabbbbbaabbbbaabbabb
bbabaabaabbabababbbabaaaabaabaaababaaaba
aabbbbaaabbbbabbbabbabab
abaababaababbbbbbababbab
bbbabaaaabbbbabaaaabbabb
aabbaabbabbabbabbabbabba
bbababababaabbbbbabaaaab
bbbbaaaaaabaaabbbaabbbbb
aaaababbbaababababbabbaa
abaabbaaaabaaabababbbbba
aababbaabbaaababbbbbbbbababbaabb
babbbababbbbbaabbaabbbabbaaaababbbaabbabbbbaaabbaabbbabbbaababaa
bbaaaaabbaabaabaabbaaabbababaababaabaabbabbabbaabbaaabbababbbbab
abbabbbabaabaabbabbbaaab
babbababbaabbabaabaaabbabbababbbaaababbb
baababbbbbababaaababaaaabbabbaaa
bbbabaaaaaabbbaaaaaabbabbabababbabbbbaaaaaababab
ababaaabbaaabbbbababaaabbbbbaaaababbaabaabbbbabbbbabbaaa
abaaaaababbaaaaabbabbbaabaaaabaababaaaba
abaabababaabbaabbbbaaaab
babbbbbbbaaabbaaabbbbababbaaabbbabababaabbbaaaba
baabaaabaaaaaaabbbabaabbbbabbaba
aababbaaabbbaaaaabababba
abbbbabaabaabbaaaaaaaaababbbaaaabbabbaaababaaaab
bbaaaabbaababaabaabaaabaabbabbbb
bababaabbabbbaaabbaabaaa
bbbaabababbbbaabbabbabaabbaabaaa
babaaaaaabaaabbbbbababbb
abbbbbaabaabaabababbabba
baababbaaabbababababbbaa
aaabbbbaaaabababbabaabba
abaabbbabbbaabababaaabab
babbbaaaaabaaabababbbaba
abaabaabbabbaabaabaababb
aaaaaaabbabbaabaaaabbbab
bbabbbaabaabaababbaaaaab
bbaaaabbbbbbbbabababaabb
bbaababbbaaabbbabbaabbab
aaababababbabbabbabbabab
aabbaaaababaaaaaabbbabbaabaabbbaababaaaa
aabaaaaaabbaabababaaabab
baabaaabbbbababaababbbbb
ababababbbbbaababbaabaaa
bbbababaaababbbaabaaabab
bbbababbbbababababababbb
baababbbbbbbbbabaabbbbaabbbbbaaa
ababbbbaaabbaabbbbaabbbb
baababbababababbbbbbbbbaabbbbaabbbaaaaabbbaabbab
abaabbbabaababbaabbaabaa
aabbabbabbbbaaaaabaababb
baababbaabbaababaabaaaaabbbabbba
aabaaaaabbbbababbbbbaaaabbbabaabaababbab
aaaaaaaaabbaaabababbbbab
baaabbbbabbbaaaaababbbab
abaababaaababaaabababbaaabbbababbbabbbaaaaababbaaaaaabbaaaabbbbb
aabbbaaaabaabaaabbbbbbababbbbaaabbbabbaa
babbaaaaaabbbaaaabbbbbaaaabbabbabbbaabaa
bbbababbbabbbbaaaabaabaa
babbbabbabbbbbaaabbabbbb
aababaaabbaaaaababaaaaaabbbbbbababababbbbaaaabbabaababaababbabbaabbbbaaababababa
bbbabaaabaababbaaabaaaab
baabaababbabbbbbbaabbbbb
bbbbbbabaaababbbabbabbaabaabbbba
bababbabbaabbaaabaababbbabbbaababbabbaaaaababbabbbbbaaabbabbaaaaabaabbba
abbaaabbabbababaabaaabaa
bbaaababaabbabaaabaaabaa
bbabbbaaaaaaaaaaaaaabaab
bbaaaaabbbababbabbbaaabb
aaaaaaabababbabababaaaab
abbabbabbabbbbaabbabbabb
aabaaaaaabbbaaaaaabbabababaaabbbbbabaaabbabaabaabaaaabaa
bbbbbaabbbaaaaaababbbbbbaaaabbababbaabbbabbbbbabbaaaabab
aaabaaaaabbbabaabbaaaaba
aababaabaabbaaaabaaaaaaa
aaaabbbaaaabababaabbbaababbabaaabaaaaaaa
baabbaabbaabaabbbababbbbbbbabbaa
bbbaababbbbbaaaaaaaabaab
bababaabbabbabaabbabbaaa
baabbaaababaaaaabbaaaaaabbbabbbaaabbbaaabbbabaaaaababbbbbbbaaaab
abbaababbaababababaabbaaababbaababbaabbbaaaaaabb
babbabaaaaababbaabbaabaabbbbabba
babbaabbbabbaabbaaaabaab
aababbaaaaabaaabaabbbaabaabbabbaabbbbbbabbaabbbbbababaaa
aaaabbbababaaaaaaabaabbb
bbaababbabbbaaaaababaaabbbabbbbaaabbbbaababbababbbabbabb
aababbbaaaabaaaaabaababb
baaababbabbbbbbbbabaaabbabaabaabbbabbaba
abbabbabaaaaaabbaaabbabbbbbabaababbababbbbbaabba
abbbbabaaabbababbbbaaaba
abbbaababbabbabbbaabbabbbbabaaaa
abbbbaabaabbbabbaaaabbaa
aaabbbbaaaaabbababbaaabbaaaaabbb
bbbbaaabaaabaaabbaabbbaa
babbbabbbabbabaaabbabbbb
ababbbbaabbbabbbaaabbaaa
bbabbbbbababbaabaaaabbbb
bbbababbbbbbbbbabbbabbbb
abbbabbbbababbbbabbabbbb

1728
2020/inputs/day_20 Normal file

File diff suppressed because it is too large Load Diff

38
2020/inputs/day_21 Normal file
View File

@@ -0,0 +1,38 @@
jnlgn xqth jtjtrd vhdt rlsr jjhfbn vvrhc hbrplx fntg dtkr fnlqrk vvbqtz prkblp ffj zkkz vmb xlvrggj qjg sfghbs srjv vphhllt fvjkp qszsz zhszc rzbncvnc mfbfsz xdjk plxs xgc gfzmpxq rmpfkv tglj rsmstv lfckh rkllz qczmsk xpbxbv zdpxfl zfsbvl mmdcl nzqx gzsdm mqv cmffmd gjlql htmb fqrm prtvmb smbdlcg zgzt zcvs qcksk trpbj jbslsbv lhtpf jgjrj tqlbk (contains shellfish)
zhszc mgrr zgdt txldvd tvz xlvrggj zvrm brvz rzbncvnc kzklp zcxq krpcn rxv xqth ztpmz trpbj hnngrhk dqspdq qmqbz qpndpm dfsnq sfghbs jgjrj gjlql dktlp prtvmb zxnjkf fvjkp prkblp jjhfbn crjpt rsmstv qthxnb tcflf lfckh fsmqv rnjlpq vvnmqt scnc mqv khmzbj xkmz hbrplx lxpqkn gzsdm nxvzp fktgv rkkgm hlhc xpbxbv kzrk pffccf ndkmq bxc vmb czzx vdjtl rkkpgs zgzt mmdcl sdggf jszqhpf jtjtrd zhbtz fntg pdst qltvp rbjdgh zdpxfl nnrctqh hprqd tcfgv vphhllt jrpm mnn tglj vvrhc mqscmlf qnc gtqfrp dtkr srjv vhr htmb ffj xrvgdh qszsz cqkprv trjqbr cqs (contains soy, wheat, fish)
xbzns trjqbr prkblp mbdbf gfzmpxq gtqfrp fntg frnmdqx rlsr zgzt qvjk cmffmd srfm qltvp brkds lkzfc qthxnb plxs tsjtr dkshp qrbbf rmpfkv sxpbg qczmsk xlvrggj nzqx rnjlpq zkkz mvmhqbpz tcflf vvrhc tvdntm qplx btttz gjlql zsd vvz sgn rkkgm vmb zhszc pdst qcksk tkv tcfgv rkkpgs vhdt smbdlcg lxpqkn pffccf krnfm lfckh khmzbj htmb tvz crbd fqrm fnpkmh fsmqv txldvd qktcqv hbrplx hzxx xqth xpbxbv jtjtrd fvt (contains peanuts, sesame, eggs)
nchjqv frnmdqx nxvzp tdszhqn jnlgn nzqx fnpkmh jszqhpf dlzb qltvp dtkr mbdbf jmvv zhbtz vhdt ltbqt ftrnplt rtjbpd vvbqtz fsmqv vmq brkds xpbxbv nltv cghkbp vrgdk fvjkp qrbbf krnfm xgc hbjmtc tcflf tftpnc zvrm flxplq qpndpm tbnlrpb qpkbc fntg zhszc vphhllt qmcdlz lnvrg srjv jtjtrd crjpt rnjlpq zbnv fnlqrk zljsv zsd xqth prpbcv vvz pffccf rkkgm gjlql khmzbj lhtpf mgrr mfbfsz kzklp zxnjkf btttz gtqfrp hxcc rlsr mbx nhldb rzbrrr vhmpqd zcxq zkkz lkzfc tkv tfn qvks zkxxnhn mvmhqbpz lzxpn dqspdq nnrctqh lxpqkn htmb crbd tvz jrpm srfm txldvd qczmsk (contains eggs, sesame)
krnfm jrpm xbzns lnvrg rzbncvnc vhr mqscmlf xqth ffj zgzt xkmz nchjqv vmq jtjtrd xzd qmcdlz mqv smbdlcg qvjk khmzbj xgc dkshp prpbcv zptr vhdt nnrctqh tqlbk zcxq mnn vhmpqd qplx crjpt zhszc jjhfbn ltbqt dktlp tftpnc hxq vphhllt gtqfrp rlsr zdpxfl flxplq plxs sgmsn cqs fqrm mmdcl qlrxfv jmvv nltv frnmdqx cghkbp jszqhpf sxpbg vdjtl tkrflnf qjg fvjkp jnlgn kzklp lfckh mgrr fntg xpbxbv hlhc tvz tdszhqn tfn srfm ztpmz sfghbs zgdt rxv trpbj qczmsk (contains shellfish)
htmb srfm qcksk ftssfh czzx fntg rbbnskn rnjlpq rxv rsmstv vrgdk gtqfrp rd flxplq hbrplx vmq xdjk vvrhc nhldb ztpmz jmvv tftpnc mfbfsz szsrnsc hprqd zptr mvmhqbpz mnn qjg srjv jtjtrd tqlbk vdjtl nltv mqscmlf rkkpgs prtvmb fvjkp hnngrhk ftrnplt lxpqkn tvdntm ffj xlvrggj bmpnrhb jrlzcv zhszc xgc vpvm zhbtz vvz mbdbf lzxpn zdpxfl qktcqv qvjk rlsr khmzbj (contains soy, fish)
rmzbr jtjtrd fvghn jjhfbn tsjtr mfbfsz tglj qthxnb cqkprv trjqbr zqnn tkrflnf lnvrg kssgts vvbqtz rzbrrr ndkmq zfsbvl qrbbf vvz dfsnq gpvcz dqspdq vhdt gzsdm phkxp rlsr prtvmb jnlgn rkllz ltbqt zljsv nchjqv fvt znhjn fsmqv cghkbp sgn nzqx fvjkp tbnlrpb fntg pffccf bxc zhszc gtqfrp cqs nxvzp mqv xpbxbv jgjrj zgdt srjv tftpnc lsnnzp lxpqkn xzd tkv qmcdlz (contains soy)
nhldb tlbtr fvghn lfckh tftpnc rlsr hxq zptr htmb lzxpn smbdlcg qplx zdpxfl hnngrhk dkshp qszsz qlrxfv plxs nxvzp xqth rd qmqbz tzc sxpbg mmdcl jnlgn nzqx rbjdgh vmb vvrhc scnc rzbncvnc prpbcv jrpm zxnjkf vhr nltv fktgv xzd fntg crbd vhmpqd pdst nnrctqh zhszc rnjlpq tsjtr krpcn rzbrrr zgzt xpbxbv jtjtrd gjlql fnpkmh cghkbp cmffmd trjqbr mqscmlf gtqfrp khmzbj dfsnq hzxx rbbnskn srjv xrvgdh fvjkp qmcdlz hbrplx xgc cqs mvmhqbpz szsrnsc hprqd qktcqv znhjn mfbfsz (contains sesame, eggs)
nzqx fktgv vmb jszqhpf ffj fvjkp qcksk xqszlhq qvks zcvs pdst rmpfkv nchjqv dtkr qplx tfn crbd zdpxfl sxpbg xpbxbv bmpnrhb zgdt zkkz rtjbpd qrbbf tvdntm xkmz zbnv sfghbs vphhllt dktlp nnrctqh pffccf xrvgdh qszsz qmcdlz gjmbv vhr qvjk rkllz rlsr xzd tzc rkkgm txldvd cqs fntg xdjk hbrplx jnlgn hxcc mgrr lfckh qnc ftrnplt vvrhc frnmdqx xgc jbslsbv gfzmpxq rzbrrr gtqfrp rbjdgh jtjtrd tdszhqn rd lzxpn srjv rsmstv ndkmq rbbnskn tsjtr fnlqrk srfm fvt vvnmqt cvnmx scnc lxpqkn tcfgv zptr zhszc vvbqtz mmdcl hnngrhk mqv prkblp brkds sgn (contains wheat, soy, peanuts)
qltvp mfbfsz rtjbpd fntg jtjtrd fvt rmzbr rzbrrr rd xqszlhq xrvgdh fvghn frnmdqx zdpxfl mbdbf rnjlpq mnn jgjrj rkllz rlsr cvnmx gzsdm lkzfc mqv nxvzp rmpfkv pffccf gpvcz zptr zkxxnhn qnc sgmsn qvjk dlzb fnpkmh txldvd trjqbr qlrxfv vhdt lfckh mvmhqbpz ftssfh krnfm hxq mbx jjhfbn fvjkp hbrplx bxc khmzbj lzxpn tqlbk lxpqkn vrgdk cqkprv zhszc jrpm trpbj hxcc prkblp mqscmlf xqth tcflf brkds tvdntm fnlqrk vvrhc vvnmqt xlvrggj qpndpm kssgts dfsnq zqnn pdst tbnlrpb qplx zhbtz mmdcl xpbxbv qpkbc (contains soy, sesame)
lnvrg ftssfh tbnlrpb zhszc xbzns hxq cmffmd cghkbp jmvv zgdt ftrnplt nxvzp xlvrggj vphhllt tglj vhr trjqbr flxplq kstd tlbtr qrbbf gtqfrp rbjdgh xpbxbv jbslsbv lxpqkn zsd fktgv vvrhc mnn brkds vrgdk nchjqv xqszlhq ndkmq hprqd czzx hlhc xgc dkshp jgjrj xqth cvnmx hbjmtc zgzt rtjbpd nhldb ltbqt zcvs qpkbc fntg xzd gzsdm fvjkp zfsbvl lzxpn fqrm plxs bmpnrhb zljsv tvz vpvm pffccf jtjtrd qlrxfv (contains sesame, fish, shellfish)
zcvs qnc zfsbvl xkmz bvdqd tzc fvjkp zxnjkf phkxp rnjlpq znhjn jgjrj vhr krnfm qcksk szsrnsc zhszc tvdntm gzsdm fntg jtjtrd vrgdk vvnmqt jrpm fnpkmh xbzns kzklp rlsr tdszhqn kssgts hbjmtc rmpfkv rkllz xdjk kzrk qczmsk nnrctqh ftrnplt tcfgv qltvp trjqbr rkkgm tcflf gjlql hbrplx srfm sgmsn qrbbf tlbtr tftpnc fvghn hprqd tqlbk gtqfrp hnngrhk fktgv ndkmq prkblp lnvrg mbx xgc gjmbv flxplq cghkbp rmzbr ftssfh nchjqv nxvzp xqth qktcqv jszqhpf jbslsbv dtkr qpndpm bmpnrhb tglj xpbxbv plxs (contains wheat, sesame)
fvghn mvmhqbpz jjhfbn zgzt krnfm xqszlhq qvks fntg kssgts jmvv dtkr xdjk nchjqv vvrhc bmpnrhb qczmsk zcxq lhtpf prkblp tbnlrpb rlsr xlvrggj xpbxbv htmb qmqbz fvjkp phkxp prpbcv mmdcl kstd zgdt hbrplx krpcn ltbqt jtjtrd jbslsbv rxjsq lxpqkn sfghbs mfbfsz xkmz tcfgv hbjmtc mbx vvz nnrctqh tkrflnf dlzb vhdt rsmstv rmpfkv brvz vmq zptr gtqfrp rnjlpq zqnn prtvmb rbbnskn qpndpm qvjk ftssfh zhbtz rbjdgh kzklp ztpmz nxvzp hzxx (contains peanuts, eggs, dairy)
xlvrggj nhldb rxjsq ltbqt fntg xgc zqnn vmb zvrm mqv jtjtrd vvz qjg mbx rkllz hxcc ftrnplt zsd jjhfbn jmvv scnc crjpt zcvs zhszc vphhllt tfn htmb mqscmlf rlsr qcksk lhtpf dtkr zkxxnhn zgdt qrbbf sgmsn srfm rd lxpqkn xqszlhq vhr gtqfrp brvz tcflf fvjkp bmpnrhb tqlbk gzsdm tcfgv qczmsk mgrr qktcqv fvghn hxq qvjk (contains fish, eggs, peanuts)
tftpnc qktcqv dlzb vhmpqd qpndpm xlvrggj bmpnrhb vrgdk hbrplx kssgts kzklp zgzt mvmhqbpz krpcn vvnmqt gjlql gfzmpxq jtjtrd zhszc xpbxbv xbzns mbx vmq crbd vpvm krnfm qmqbz txldvd bxc qrbbf kstd fvt tqlbk tdszhqn rzbrrr sgn zqnn prpbcv fvjkp rkkpgs qjg kzrk qczmsk jgjrj rd rlsr fntg lhtpf tsjtr qnc qmcdlz ftrnplt szsrnsc xgc sfghbs xkmz fnpkmh zcvs rnjlpq prtvmb xqszlhq dtkr rkkgm srjv rtjbpd mqv qplx jszqhpf tzc zxnjkf gpvcz brvz ztpmz ltbqt cvnmx tbnlrpb (contains fish)
plxs fvjkp hzxx rmzbr xbzns xlvrggj flxplq hbjmtc xpbxbv qnc sgn hxcc zhszc trjqbr qczmsk znhjn prtvmb zljsv qplx vphhllt vvnmqt zxnjkf cqs brkds gjlql rkllz zdpxfl lzxpn phkxp zsd frnmdqx hxq lsnnzp gtqfrp qltvp rsmstv hprqd fntg gfzmpxq vvbqtz mgrr tkrflnf jszqhpf vvz fvt jrlzcv prkblp kssgts nnrctqh ndkmq nltv tqlbk rnjlpq pffccf jtjtrd lkzfc rbbnskn dfsnq qvjk rtjbpd rmpfkv zbnv qcksk lnvrg qmqbz xqszlhq tvdntm zptr sgmsn txldvd (contains eggs, shellfish, fish)
xkmz qktcqv frnmdqx qpndpm tfn ftrnplt xpbxbv rsmstv gfzmpxq zhszc gpvcz jszqhpf ltbqt fvghn kssgts khmzbj krnfm ndkmq rbbnskn scnc fqrm qmcdlz zqnn qmqbz xlvrggj rlsr ftdbz jgjrj gtqfrp jrlzcv zljsv xqth mnn tlbtr vvz dktlp rkllz gzsdm fntg cqs tftpnc fnlqrk tdszhqn hzxx fvjkp qltvp fnpkmh nltv qvjk tsjtr tcfgv (contains sesame)
hbrplx xpbxbv mnn rmpfkv xdjk ftdbz fvt htmb vphhllt rtjbpd ndkmq xlvrggj xqszlhq xbzns rlsr qpkbc gzsdm krnfm srfm prtvmb fvjkp zqnn nzqx rzbncvnc tglj mqv qmqbz qmcdlz nhldb ffj nxvzp szsrnsc hnngrhk jrpm dqspdq plxs lzxpn xqth lhtpf zdpxfl sfghbs jrlzcv tcflf qltvp jjhfbn mqscmlf tkv hbjmtc tcfgv flxplq dfsnq crjpt trjqbr jnlgn ltbqt jszqhpf zgzt qszsz dktlp jmvv brkds rbbnskn lnvrg tfn prkblp tvz rkllz zcxq jtjtrd prpbcv gtqfrp vrgdk krpcn rkkgm cqs qjg zhszc zvrm rd rbjdgh tvdntm xkmz (contains fish, sesame)
vmq cqkprv rkllz mqscmlf dqspdq rxjsq nxvzp fvjkp jtjtrd xpbxbv lzxpn tcflf qthxnb kzrk gtqfrp tqlbk tcfgv vhdt fsmqv rd cvnmx vvrhc hxcc zgzt qszsz ftdbz qltvp czzx qcksk lfckh gzsdm bvdqd qczmsk rlsr brvz tdszhqn kzklp lkzfc zhszc crjpt vmb rbjdgh rtjbpd tkrflnf hzxx xrvgdh xbzns fntg vpvm mfbfsz jnlgn qjg nzqx zxnjkf tvz zptr sgn fnlqrk zqnn vrgdk rbbnskn pdst (contains wheat, dairy)
lfckh jgjrj xpbxbv lkzfc fntg mfbfsz vmq vrgdk rnjlpq tqlbk szsrnsc rkkpgs rbjdgh jrpm plxs zgdt qthxnb jtjtrd zkxxnhn bmpnrhb lzxpn mbx hbjmtc vhr lnvrg gjlql zqnn gtqfrp vvnmqt qnc qpndpm xkmz fvghn mbdbf zbnv rzbrrr qlrxfv vpvm znhjn qktcqv tsjtr qltvp rd pdst fvjkp xlvrggj rzbncvnc qvjk sxpbg czzx rlsr qczmsk (contains shellfish, soy)
zqnn fvjkp qmqbz hnngrhk vdjtl xpbxbv srfm zhszc fktgv sxpbg vvz btttz lxpqkn hzxx lnvrg vhdt lfckh vphhllt rnjlpq gtqfrp tzc qktcqv plxs zsd xlvrggj qszsz rzbncvnc rkkgm dkshp jgjrj qlrxfv ztpmz mgrr fntg jrpm trpbj jtjtrd txldvd smbdlcg pdst vrgdk rkllz bxc rmpfkv kssgts zljsv (contains soy)
cvnmx sdggf hnngrhk ltbqt srfm flxplq qthxnb prpbcv zkkz tcflf gpvcz dlzb bvdqd zvrm plxs znhjn fktgv xgc rzbrrr hzxx jgjrj rzbncvnc dkshp fsmqv fvt fvghn trpbj jnlgn qmcdlz nnrctqh brvz qpndpm kzrk xpbxbv xlvrggj nltv kzklp krnfm crbd ffj dqspdq kstd qczmsk dtkr vhdt qjg sgmsn frnmdqx rmzbr jtjtrd qlrxfv xbzns rlsr fvjkp qrbbf fntg trjqbr ftdbz sgn txldvd zptr vmq prkblp lxpqkn lkzfc rkkpgs tvdntm tkv rbjdgh krpcn mgrr srjv mbx vvrhc mbdbf qnc phkxp gtqfrp hbjmtc zsd (contains fish, sesame)
zgdt czzx rxv cghkbp tglj rkkpgs vdjtl ftdbz vhr tdszhqn tsjtr qmcdlz hprqd plxs xlvrggj mmdcl znhjn qczmsk frnmdqx jbslsbv vvbqtz tlbtr gtqfrp zkxxnhn fsmqv qmqbz zbnv smbdlcg brkds qpkbc qjg hbjmtc dqspdq zcxq rlsr nchjqv ltbqt sdggf qrbbf kzrk lkzfc ftrnplt zqnn tvz zsd fntg sfghbs srfm dtkr crjpt htmb hnngrhk nnrctqh rbbnskn rsmstv mfbfsz fvt zkkz jtjtrd zhszc pdst jjhfbn xpbxbv tkv nxvzp qcksk vvrhc fktgv dfsnq prkblp ftssfh vvz (contains shellfish, eggs, peanuts)
trjqbr ndkmq fntg trpbj vhmpqd btttz prkblp brkds tfn qthxnb lnvrg xlvrggj xpbxbv xrvgdh hxq qmcdlz hbjmtc ftrnplt tkrflnf rbbnskn phkxp dfsnq sxpbg fvjkp gfzmpxq pffccf qpndpm sdggf zhbtz ztpmz zsd sgn zhszc ftssfh rd zvrm rlsr rkllz prtvmb rmpfkv bxc cqkprv qjg zkkz fvt mqv jtjtrd qczmsk ffj dktlp nnrctqh tcfgv mbx hbrplx lsnnzp (contains peanuts, soy, sesame)
hzxx vpvm vphhllt xzd gpvcz btttz jtjtrd dqspdq sgmsn tvz xlvrggj ftdbz fnlqrk tglj zljsv rzbncvnc fsmqv xpbxbv rmpfkv qmqbz fntg pffccf zdpxfl cmffmd vvrhc rd zhszc qpndpm qszsz ztpmz lfckh fktgv zkkz xdjk nxvzp hxcc vrgdk qvks xrvgdh rxv rbbnskn qvjk nzqx vvz ndkmq zsd tkrflnf nltv mnn fnpkmh frnmdqx cqkprv vhmpqd kssgts mvmhqbpz dkshp qlrxfv tcfgv rkkgm tkv tsjtr zgzt dtkr cqs jszqhpf lkzfc hxq smbdlcg hprqd fvghn qnc prtvmb tlbtr rlsr lnvrg gzsdm tvdntm gtqfrp rzbrrr qthxnb (contains sesame, wheat, fish)
nhldb vrgdk txldvd zhszc sgmsn czzx kssgts tcflf jgjrj mqscmlf rxv jszqhpf scnc lsnnzp xdjk qvks prtvmb cvnmx jrpm hzxx jtjtrd sgn rtjbpd dktlp jbslsbv fvt zvrm lhtpf trjqbr gtqfrp rlsr tkv sxpbg prpbcv fvghn hbrplx kzklp nnrctqh gzsdm zbnv lxpqkn ftdbz srjv tzc pffccf mmdcl szsrnsc tqlbk ltbqt fvjkp tdszhqn btttz mgrr sdggf dqspdq rbjdgh xqth gfzmpxq nltv rbbnskn flxplq rnjlpq jrlzcv qnc tbnlrpb qltvp smbdlcg qpndpm xpbxbv zgdt vdjtl dtkr tlbtr xlvrggj pdst zgzt vhmpqd rzbncvnc (contains shellfish, soy)
mvmhqbpz ffj xlvrggj crbd jtjtrd dtkr hbjmtc zgdt gtqfrp szsrnsc lnvrg kzklp tftpnc khmzbj scnc lfckh rxv nzqx jrlzcv gzsdm mmdcl zcvs hzxx ndkmq sgmsn xzd txldvd mnn fnlqrk rlsr rtjbpd plxs dkshp sgn srfm nchjqv fqrm tkrflnf hxcc bxc xpbxbv tlbtr nhldb qktcqv rbbnskn ztpmz zhszc nxvzp nltv fvghn zhbtz kssgts rsmstv qvks qplx vpvm lsnnzp cqkprv qrbbf hbrplx tfn rmpfkv crjpt brvz xkmz sdggf vvz vphhllt rxjsq fntg tzc prpbcv rkkgm fktgv zcxq (contains sesame, fish)
scnc cqkprv kssgts szsrnsc cqs tkrflnf zcvs crjpt dktlp trjqbr qjg vhr lzxpn sdggf xkmz khmzbj ftrnplt rd qvjk fntg qthxnb xqth mnn jtjtrd ftdbz brkds pffccf cghkbp jgjrj dkshp vvrhc qktcqv zptr sxpbg vvbqtz sfghbs rzbrrr lfckh ffj rmpfkv lxpqkn mgrr lnvrg vmq czzx nltv qczmsk phkxp jszqhpf txldvd vvz tzc tdszhqn zgdt tvz zhszc rlsr vrgdk prpbcv znhjn fvjkp prkblp fnpkmh nhldb zxnjkf xlvrggj zvrm qpndpm ltbqt jrpm ftssfh tvdntm hxcc nnrctqh xbzns xpbxbv (contains soy)
zhszc nxvzp hbjmtc xgc gzsdm kzrk vvnmqt mqscmlf hzxx rlsr rzbrrr tcflf rmpfkv jtjtrd szsrnsc vmb zdpxfl frnmdqx gfzmpxq sgn vhdt qplx jbslsbv lsnnzp xpbxbv vmq gtqfrp crbd zvrm xdjk lkzfc zqnn bxc fvjkp tbnlrpb qczmsk zkxxnhn nzqx rxv xlvrggj tcfgv lzxpn vvrhc gjlql lhtpf fvghn tftpnc gpvcz txldvd (contains peanuts)
xlvrggj rlsr gjlql trpbj kzklp rzbncvnc nhldb xkmz hlhc fqrm rzbrrr dfsnq mvmhqbpz zkxxnhn vdjtl dlzb bmpnrhb kzrk rtjbpd xpbxbv flxplq tftpnc qmqbz krnfm fntg jszqhpf qltvp sgmsn trjqbr tsjtr dqspdq tvdntm qplx fsmqv vvnmqt qszsz cqs fvjkp nnrctqh tcfgv rnjlpq xbzns jtjtrd tzc gtqfrp xqszlhq mmdcl tbnlrpb rxjsq kstd fvt sgn zbnv fnpkmh (contains dairy, sesame)
fntg jszqhpf xrvgdh ztpmz xpbxbv qszsz hbjmtc plxs cghkbp tkv zhszc cmffmd lnvrg qjg tvz vvz qnc flxplq qpkbc rmpfkv tbnlrpb dlzb bmpnrhb hlhc rmzbr hxcc zhbtz gzsdm gtqfrp mqscmlf qvjk fvghn hbrplx bxc qltvp jrlzcv vhr tzc lhtpf zbnv sfghbs kssgts vhmpqd hnngrhk qthxnb tftpnc krpcn zgzt fvjkp rsmstv vdjtl jtjtrd mnn jbslsbv rlsr ltbqt tglj (contains wheat, dairy, sesame)
crbd krnfm jtjtrd dlzb tcfgv dfsnq ltbqt rkkpgs ffj zgzt dkshp ztpmz vdjtl crjpt smbdlcg phkxp tkrflnf kzrk tftpnc bvdqd vhr frnmdqx scnc rzbrrr sfghbs xpbxbv xzd gpvcz qpkbc pdst cqkprv rzbncvnc xlvrggj srjv ftdbz rsmstv qrbbf sxpbg prkblp hxq hlhc zgdt rlsr vvrhc pffccf vphhllt vmb hnngrhk bxc fvghn czzx nxvzp vhmpqd gtqfrp lkzfc lsnnzp prpbcv lnvrg xkmz xqth fvjkp tcflf rkkgm fnpkmh zkxxnhn jszqhpf qmqbz rbbnskn qvks tkv nltv tdszhqn kstd qplx fntg (contains sesame, eggs, peanuts)
zqnn jtjtrd rzbncvnc fqrm fvjkp zsd vhr dkshp btttz fvt fntg lnvrg rlsr xgc sgn rkllz dlzb vmb qktcqv phkxp szsrnsc txldvd rmpfkv mbx gzsdm xlvrggj tkrflnf mfbfsz xrvgdh hxcc qmcdlz tftpnc tkv rsmstv xdjk zljsv krpcn zgdt smbdlcg prpbcv gtqfrp qjg qvks vphhllt tdszhqn prtvmb zhszc cghkbp qczmsk vrgdk gfzmpxq (contains fish)
vhmpqd jjhfbn xpbxbv brvz qthxnb lkzfc xrvgdh fvt xqth tdszhqn gtqfrp tkrflnf kzrk zgdt dkshp kssgts mbx gjlql jtjtrd cvnmx gjmbv tvz zptr kstd rxv fntg prpbcv qplx zbnv jbslsbv trjqbr mfbfsz fvjkp ftdbz phkxp mgrr tvdntm dlzb crjpt vvz tsjtr xlvrggj nhldb zhszc fvghn qczmsk tftpnc htmb ndkmq rbjdgh vvrhc (contains wheat, soy)
xlvrggj tglj rzbrrr dtkr trjqbr prtvmb zvrm jnlgn xqszlhq cqkprv vphhllt fqrm qczmsk cmffmd khmzbj rbbnskn zkxxnhn xpbxbv jbslsbv fvjkp xbzns mmdcl brvz rkkpgs fnpkmh scnc gtqfrp nltv zhszc fvt rmpfkv qjg mgrr qpndpm zsd vvbqtz tftpnc ltbqt jtjtrd prpbcv dqspdq rlsr ztpmz (contains eggs)
fnpkmh hprqd kssgts czzx mnn tlbtr ltbqt bvdqd vrgdk tftpnc ftssfh hxcc tfn vhdt fntg szsrnsc bmpnrhb zljsv hbrplx lzxpn ztpmz kzrk kstd xqszlhq rtjbpd mqv qpkbc tzc zbnv qvjk rlsr sfghbs phkxp qszsz qnc txldvd nxvzp rbjdgh lkzfc xrvgdh gtqfrp gpvcz qczmsk nnrctqh tdszhqn dktlp hbjmtc rzbncvnc qrbbf zfsbvl vphhllt xlvrggj dlzb xdjk zhszc jtjtrd zkxxnhn dtkr rkllz jrlzcv vdjtl lfckh tkrflnf btttz zqnn rbbnskn fvjkp ftdbz krnfm hnngrhk rmzbr pffccf flxplq zgzt ndkmq zptr (contains wheat, eggs)
szsrnsc nnrctqh rxv prpbcv dfsnq ndkmq rxjsq qlrxfv jgjrj dkshp rkllz zdpxfl scnc rlsr qnc crjpt lsnnzp nhldb zcxq xdjk gzsdm hxq fvjkp mbdbf xpbxbv tvz tqlbk ftdbz crbd bxc zkxxnhn fntg pdst lnvrg krpcn vrgdk tsjtr fnpkmh zhszc tzc qmcdlz qpkbc kssgts gtqfrp gfzmpxq qszsz trpbj phkxp hlhc xzd xlvrggj zljsv (contains wheat)
nchjqv mgrr tvz prpbcv rlsr sgn jjhfbn gjlql zgzt nhldb vmq gtqfrp xrvgdh cghkbp nzqx vvbqtz bmpnrhb mvmhqbpz fnlqrk brkds hzxx vvz fvghn krnfm tbnlrpb zcxq gzsdm kssgts rkllz fntg tlbtr zljsv rzbncvnc kzrk rbbnskn sdggf ftdbz lnvrg zbnv lxpqkn vhr szsrnsc rxv fktgv zcvs zptr jgjrj mfbfsz cqkprv jbslsbv dqspdq xpbxbv lzxpn jtjtrd rbjdgh fvjkp rtjbpd cqs htmb gpvcz lkzfc tdszhqn hprqd zhszc sxpbg qjg fqrm qvjk tkrflnf xdjk vvrhc cvnmx zsd jszqhpf qpndpm rkkgm krpcn rxjsq vpvm mbdbf qltvp rsmstv (contains eggs)

53
2020/inputs/day_22 Normal file
View File

@@ -0,0 +1,53 @@
Player 1:
1
43
24
34
13
7
10
36
14
12
47
32
11
3
9
25
37
21
2
45
26
8
23
6
49
Player 2:
44
5
46
18
39
50
4
41
17
28
30
42
33
38
35
22
16
27
40
48
19
29
15
31
20

1
2020/inputs/day_23 Normal file
View File

@@ -0,0 +1 @@
589174263

406
2020/inputs/day_24 Normal file
View File

@@ -0,0 +1,406 @@
neneeenenesweneswneesewenenwneew
eswswenweeseneseswwsenewsenw
seeweswwneswnwwwenwwwwwnenwwsesw
swsweseseseswswsenwswseswswsese
eseseseswsenweseseneseswnwneeewww
sweeeeeenweseenesweee
nwnwsewenwwnwnwsenwwnwseswnwnw
swswswwwswweswswswswswenenesesewwwe
swnwenenesenwsewswswseeeswnwwnewwsese
senwweewnwweswnenwwsw
ewneswswsweenwwnwsenwswnewsenwnwsw
nenenwwneenwnwnwwnesewsenenwnwnenwnw
nwnwwsenwwnwnwnwnwwnwnwewwnw
wnwnwnwnwseswwnwnwesewsenwnwnwnwnenew
seswewwneweswnwnwswwsw
neswesenenenewwswnenwnenenenwnenenenese
nwwswsenwnenwnesenwnwsenwnwnwwnwsenenwse
senwswwswwnweswswneswswwswnweswseswew
neeeeswnweswseeeeeneeeeenwwnene
nwnewnwnwnwswnewwsewnwwseenenwnww
eeseeeeeswneenwewee
neseseseeenwwseseeseneswnenwsewswse
wswswnwnwwswswneswwweeswswswwww
swnwnwneswswseswseswswswswswnwseswsesenesw
swneesenwnwnwwnwnwnenwnwnwnwnewnwsese
wswswswewnewnewsenewnwswseswswwse
swenwnwnwnenwnenwnwswnenenwswwnenwsenw
ewnenwnwweenwneesewnwwwwnwswse
eeewnweneneeesweesweeeneeee
nenwnwnwnwswwnwsewnwswswenwweswenw
senenenenenenwneneewnenenene
neneeneswnesewneneneeneneeenenenwe
nwswenwseswnwswenwnwnewnwneww
wnewwwweswwsww
seseswsewesesenesesewseewseseenenwe
neneseswnesenewwenenwneneneneneenew
swswswswwsweswseswsewwneswswswswneswswsw
sesenesesesenwsesesesenwsewnw
nenenenenenewnwswnwnenwsenesenwneswwne
swwnewweewwwwnwswnewwweswew
swnwwswesenewwwswwswwweseswswnesw
weeseseseneseseewwseseseseseseesese
nwenenenwwnenenenenwneneneseswnenwenesw
nwsewswswwswsweswnwwwnwswswsew
nwewnwwwewnwwnwnwwnwswwnwwsewnw
eesesesesesesewseseewneseesesesesenw
nwwenwweswnwswenwnw
sewseswswneneswnwenwneeswwnwwesenw
eseswwnwnwwenewneswnwsweenwseswne
wsewwswnwnwewnewswwwwswseswnew
eswnenwnwnenwswnenwnwnwnenwnwnwnenwsewne
neneewswnenenenenene
nwseeseseesesesesesesese
eenweneeeswswseeseeneesese
sewneeneneswseeewnwswsenewswenwwenw
nwwwweswnenwsenwwswnwwnwwwnwwnew
nwewwneswnwwwnwswswsesweswswwseww
neseswseweseeswsenwsesesesesw
nwswswseswswseeswswseswnewneseswswwsw
eweseeswseeeeseneenwenweeee
nesewwwwneeseweswwseneeseseswseswsw
nwswnwnewnewneeenwneeswwnwse
swwnwsesewneneeneenwseswseswnww
nwnwnwnwsenwnwnwnwnwnwnwnw
wwnewnwsesewwwwwwnwseewsenenew
swswswswenwswseswsweeswnwswswswswswswswnw
nwnwseeswnwnwswnenwwnwnewnwnwwnwnw
wnenenesesenwnwwnwsenenesewnewnenee
senwswnwnwwenenwnenwnenesewswenewnene
neseseeseneswswswswswwwswswnwswwsenesw
neswwsesenwnwnwneswseseseseswnesenwsese
eeweesenesweenweeneenwneeswse
wwnewswsenwnwsesenwswseneeswswseswnese
wnwsewnwnwnenwnwnwnwwnwnwwww
wwswswewwwwwwswwwwnewnwnenw
eeneseswswnewneneneenenenenenenenew
wswwnwswwswneneneswnwnwnwswseneneswsenene
nwswswewswsewswsewswsenweswswneswnwsw
wwwwesewnwnewwwnewwwwsese
nwnesenwnwnwnwswswnwwswwnwnwwwwneeenw
swseseswenwswswnwswwnenesenesesesesesese
nesewswswswsewswswnwswwswwswsw
wnwwwnwnwnwnwsewsenwsewwwwwww
wwwwwwwwswwswwwewwnw
swseseseseeswsesesenwseseswseswwsenwse
sweeeseeswnwenwneeenwneswenwneee
nwswseswswswswwsweswnesesweswswswseswse
nwnwenwnwnwnwnwswnwwnwnwwnenw
wseewnwnwnwenewnenenesenewnenwnenwne
nwsweswswswswswswswswsw
swswwswwswswswswnenewenwewweswnw
nwseeswnwnwseseseswneseswseseseenewsw
wseswseseesenweeeseeeewnwenene
newnenenwswnwnenenwneneseneneneenenesenw
wnwnwswseenwnwnwnwenwwwnwnenwnwswne
esesesesewneseswswsewswseswswneswsesesw
wsewwwnewswwnenenwnwwnwwnwnwwwsew
wsenwenwnwnwewwsesenwwwwnwnwnwnew
nwnwnenesenenenwnenewnenenwneneswswnene
eseneneewneneneeneeneneee
nenenenwnwseswswnwwnwnwwesenwsenewswne
neenwnwnenenwnwnwwnwnenwnwnwwnwswsenw
swwwswwswswwnwwwnenwseswswwseswsenw
nwsewneswnwesweeswnwwwnweswnwne
neswsewswseswseswswswneswseswneseseswsww
wsewwwnwnenwnwewwseenwwwwswnw
neseseswseswwswswswnenwsesewswswswswsw
swwsweswneseswswwswswswswweswwsw
nenwneneswneeneenene
eneweneseneeneeswswswenenesenenew
swseeseswswesenwsesenwswnwnwseeesenwswsw
nenenwnenwwwnenenweneneneseneswnenenene
neneenenwswswseswwwnweswnenesesewnewse
neneseneneseneenenenewswneeenenewnene
swsweesenesenenenwnwnwswsweneseenww
swnewwnwsewseswewsewsesenwneewnww
enenewnenenenwnenenenw
seseesesewwseseseseseswswseesesenese
eeenwneeeewneneeeeewswneneee
eswnwenweesenwseeswsweenwsenwnwesw
eesweeeneneeneeeeewnweeewe
seswswseseswswswsene
newswnewswwwneswwwse
neeswnenwewnwnesewsweneeswnwenesww
eswwwwwwswnesewwwnewwnwwww
ewsesenwseswsesenwsesesewesenwsenenese
nenwnewswneneneneeeneneseneneneenee
wwseseeeenwnwweseneewnweeeewsw
nwneswnwnwnwwwnwseenwnwnwenenwnw
swswswswswneswenwwweswswsw
swenwwwnwnewswnenwneswnwesweswwe
neswseenwseseeenwsesesew
seseeesesenwnwseeseseseswnesese
sweeeseseenwseeweesee
swneswsweswnewwswseswswsw
nwwwewsewwwwwwwwewswswnewsw
nenenewneswsenenenenesenenenenenenenwneenw
sewwwnesewswwnwwwwswewswwswew
swswseswnwnwswswswswswswnwseswenwseswswsw
nwnwnwnwnwnwnwnwnenwnwsenw
nenwwewnwwsewnewwnwsewwwewseswe
seseseswweewnwneneseseseesewsesesw
swswesenewswswswwewswsesweswsw
seseneneswwsewneeenwenenwseenwsee
nenwenwwneewnwneswnwnenwseswnwenwnwnw
sweswswswseswswswseseswseswwnesesesenw
nweeesweeeeneseeseeenwenwwe
sweewneneeeseeewswneeenwneenene
swsewseseenwsenesewseseseswswseswnese
wwwswseseswwnwwnwnenenwwswnwsenesene
seswswswseeseswseseseswnwsenwseswswsesene
nenwesenwswneneseeewsesesweeseeswse
nwseswswnwseeswnwswsenwnwnenwnenwnwnenwnw
neswnenwweesenwneswwneneswnwenenesw
nwneswnesesenwswenwsesewewsweewsw
neseeenenenewnenenweswew
eenweesweewneneseneeswee
weesenwsweenenenwswenenwneswenee
nwswswsweseswwsweswswswswnwswswswswsw
esweweseeeeseneeenweeeeee
swneswswswwswnenwewswenwswswwnew
eesweswnwseeeeeeeeneseeenwsee
senwwswnwnwnwnwnwnenwnwnwnwnwwnenenwnese
swwseeswswnwnenesewnenwsenweeeene
enenwnesenenenenwnenewneneneewswswwne
nwwneseseeseeseeseseeseseeseswnwsese
sewwswsewnwwswnwnwnewenweneswesw
eneeneeneeneewneeeeeeenwsesw
wwenwwnesenwnwnwwww
nwneneswnesenenenenwnwnenenenwnene
sweneseseswewnwswwneneneneseneesenwnw
nwewenwnwwwnwnenwsesenwnenesenwnwwwnw
nwenwnwswsenwnwnwnenwnwnwnwnwwesenenw
swswwnewweweswswnwswsenesewwwnww
nenewneswnenenweenenenwswsenene
swswswwswswswswswswswswswne
eeswswenwswneenwenweseenwnweeese
swnwnwnwwwsewnwnenwwwnww
wswwwenenwwwweswseswnwswweswsw
enewneneweseeswswenewnenwwnesene
swsenesweswswswswwswswswseseseswwsw
nwwseswnwsenwsenenwwnwnwneewwwwww
wwsesesenwnwnenesenwenenwswneneenesw
seseneweseeswseseneeseseesenwesese
nwnwwswwwweenwwnwwswsewwneww
eneneneeneswnenweneswenewneeseenenew
eseewneesenewesenwsewewwwsee
nwnwnwenenenwenwnwnwsenwnwnwswnewnenwne
neseeeesewneseseweeseseswseseesese
newwnwswwewneswseewsesweswneswwse
seseseseseeseenwseeenwsesesesese
eseswnesewseswswswsenwwswseswneswsee
eeseseseneeeeeseeeseeew
nwesweeneenwnwseneeeneeeneneneswse
swswswswseseswnwneswswseswsewse
senwnweswwnwwnwweseenwswsenwnwwse
wneneneenenesenewnwswswenwnene
eswseswneseseneseseeeeeewsenenwnew
sewseeeeenwseese
sesenwnwseseseswseseswswswseesenesesesenwse
nwwneewseswneeeneneneseenenwewneese
wwwswwnewwneswwwwwsewwwsw
seswwwwneswneswwneswswswswswseww
eewneenwsweseseweeeeneneneneesw
swswsewswswwswswnewwswsww
nwnwwswnenwwnwnenwswnwnwwsenwseeswwnw
swswsenwnewseeswseseneneswsewnwsesesenwsw
senwnwnwnwswneswnwenwnwwnesweswswnwnenw
neenenewswnwswnwsewwewswsenwnwwsw
senwnewnewnwwnwwnwseseswwnw
seeseseeneswneeswnenwwswswwswnwswwe
seswenweeneeneneneeneneneee
nwwnwwenwwwwwwwnw
swswswswwswwswwswsenenwsewnewneswswne
newswnwnwswnwenwwnenwnwnwwwwsewnwnw
eneewenweeeweeseenwseneeeswse
seseseswenwseseweseseenwnee
wnwwnenwswnwnwweeeswsw
senesesenwswseseseenwseswseswswseswsesw
seseseseseseseseseseseseenwsese
seenwnwnwswsewweeweseeneesewswene
wwwseswsesenwnwnenenwse
nwwewnwnwwneswnwwnwnwnwwnwewswne
neewneneseneneswnene
wswwswnwwwswwwewswswsww
wswwneswwswnwwnwnewseswsewswenwsw
ewnwwwwswwnwesweswswwsw
wswnwnwwnenwnewwsesewwseenewswenew
wswwnenwwswnenenwnenenenenweswseseswe
nesesenwswsweeswewwswneeneeeee
nwswwwnewwwwwwneewnwsewsewsew
nwwweswwswwwnwneswnwswenwnwneew
nwnwswnwswenenenwnwwnwnenwnenenweew
neswnwneseeneneenewswwnwnweseneene
nwswswwwwseeswnwswwsweswwnwseswww
neneseneswsesewenwseswneneswnenwwenew
neneneeneneneseneeneseneww
sweenenwenweeenesweeeenwesee
seseseseseseneesesesesesesesew
senesweewneeswenwseswseseeeesee
nesesenwwswnwnwwnewsenenwswnwnenwsee
neseewnwenenwwnewnenwnwsenwnwswswnwnw
eswnenenwswnewsweseswseewsesenwsee
enweeswenwewsweeeneenweeseesee
senwswswwswwswswwswswswswseswswswneswne
sweswwnwewseneeeenenewenweee
newnenwnwswwseseseesenwsese
enweeswseenwneeenenesweeneswenewsw
nwnwnwnwnwswenwnwnwnwnwnweswnwnwnwnwnw
nenenenweneswnesenwneswneneneneeneese
seseeenwswnweeeewswseeeswwnwsenw
esenwsewseseesewneseeseseseeeenese
seewnwsesesenwesesesesewneeeseee
eneseneewneneseweeneneeeneeee
nwwnwenwswsenwnwnwnwnwwnwswwnwnwnwnew
wnewwwwwwnwwwswnwww
wnwenwsenwswnwnwnwwnenwnwnw
eeneneswnwwneneswnwneeeneneneneewne
wsewnwwwwewwwwwwwsenwwnwwe
wwwseeseswsewsewewneswnwsewnenenw
seseneswsewneswswseswseswswswseneswsesesw
nwnwnwsenenweeneneeneswswneswneseeesw
eswseswwnwswseswswswswneenwswseswsese
eenewseneeeseneneeswwneeeenenee
nweeeeseeeseeseeswenwnenweswee
swswwneneneswenenwsenenenenenwnenwnwe
nwenwnwnwseswnwnwnwnwnwnwsenwnwnwnwnwnwnw
eswnwnweswsweseseswwswswnwseneswnenwswe
wnesewneswwneswwwwnwwwwsese
nwnenwnenenenenenenwneswnenwnenw
neswenenwswneneswnwee
wwnwwwwewwnwswnesewww
esenwnwswenenwnewswneswwenwswwnwswnww
swswwswnenwwswswnwseswswswwswswewsesw
nenwsenewnwswswneeswnwnenwnwnweenwnwne
neswwnwwwnwwwnenenwnwswwnwsenwnww
neneeneswenenenenenenee
swseweseneeeswwnenwswnwnwe
eewswweneweeneneeenenenenenenene
nwnwneneneneseneseswnenwnenwnwnenwnenene
enwnwenenwswswswnwsenwswswseswseenwe
eneneneneeeswneneenenenene
enwnenwwwsenwwwswneswnwwenwewww
neneneswnenewneneneeenwnenwnesewnene
seswsenwsesesenwewseswseseseseswsesenenwse
neneenewsesewneweeewseseenwneeene
nwwswwwsesenwwwsenewwnwnew
seseenesesesesesesesewesesee
nwwnwswswswseswwswseneswswswswswswswswe
wswwnwnwnwnwnwnwwnwnenwnwenwnwenwnw
seseswseneeswneswnewwswwwnwneesenene
nenwnwnwnenwnwnwnenwsenwnwnwnw
eswwwwwsewwnewswswwwswswneswww
esenwnwnweeewswneneswnwswnwswnenwnwnene
nenweseenwneenenwseeeneseene
newnwwsenwnwenwwwnwsewswnwnwenwww
newenenenenenenwenwswswswsene
nwsweswnwwnwewewwwenwwwwwnwwnw
sewnwsewwnwsenenwwww
swswnenwnwnewneswnewnweswsweswenwsenwse
wsweseeswnwseenewseneenee
eeeeeseeswnweeeenwseseewsese
sesesesenewsesesewesesesenwseseseene
sesewswseswsewseseseswweseeseseenese
esenwswwseseseseesesesenweseseseswe
nwnenenwnenwnwnenenesw
nwnenweneenwnenwnwnwswnenwneneswnenwnw
sewswswswswswnwswneeseswswswsw
swwswswswwwwneswneswwswswswnweswsw
neseswswesesewswwswswseswswnwseswnenese
nwswnwneewneweeseeseewewneneew
swseenenwwsenwnwnewneenwwewnwswe
swsweseswswswwwwswswswnewswsw
swnwwneneswswnwewwnwsenwenwnenwee
ewswseseneesewseneswsenwswseseswsese
eneeneeseswenwsewneeweenwnwese
swnwswswseswswswseseeswnwswswsweswnwsww
wwnwnwswnwsewwnwwnwwnwwnwsenwnee
eeseeeswneseneseeweneweseee
senesenwsesenwwsesesesesesesesesesesese
nwnewesewneswneeeeneeneeswnesenene
wesenwseswsweweenwnenwwnesese
nenwnwneeswneneeneneneswneneswneneenwnee
nwnwwsenwwnwnwwnwsenwnwenwnwnwwnwne
nwnwsenwnwsenwnwnwnenwnwwnesenwnwenwne
sewswweneesenenwneseswseswnweeeene
nwswnwnwnwnwwsenwnwwnwnwenwnwesenwnw
wwwwwwnenwwwwnesewwwse
swnenenenenenenwneneswnwneesenwnenewne
neneneswneneeneneneene
wswneseswswnewwnewswwwwwwwswsww
neeneseewnenwnwneseewneenenwwnenesww
enwseswseesesewnesweeeeneswsesenese
nwnwswnenenenwnwnwnenene
wswswswneswneswwswswsweseswswseswseswsw
sewseseesesweseneseseseseseswnwwsw
swseswswwnesenewnwwnweenweswwsenw
seseseswswseseseeseesesesesenwnwsesese
nenewnenwneswnwnese
seseneswseswswseseswswseswnwwswse
nwneeeeseseneseseeseeeeeeeeww
nwnwneenwswswnenwnenwnenwwneneenenwnwnw
nwnwenwnwnwsenwnwenwnwwnwnwnwswnwnwnw
wwnwwenesesewwwnewsesewnewwwe
wnwnwwwewnwseswwwwwnewnwswnwe
nwwwwswnesewwsewsenewnwnwsewnwnww
nweeeenwseeeseee
eneenewnwenewnwsesenewewswenenese
eswwsweswseswnwsenewnenwswseswwww
neswnesenenenwnenwenenwnwneneswneswnwne
enwseswnwnweesewnwseeseseeseseseseesw
wenwwwswnewswsesewwnwwnwnenewnw
nwwseseswswewwswwsewneswnenwnwesww
swnwnwnwswenenwnwnwnwsewenenenwnenesw
weneswwswswnwsweeesenenwsenwwwsw
eeseesenesesewnweseeenesweeeeew
eseweseseseesenwwsesenese
eneneneneneneneneeenenenenenwsw
esenwnweswenenwnwswnwwnewneenewnww
eeneneneeeeswneneenwsew
seweeseesenewswsenwewwneeeeee
newnwnwenwwnenesenewsenewswnweese
neswwwswswswneww
seswseswseneswseswswnewneswswswswsenenw
eneeneeeenwswneneeswnweenwseneswnene
neswseeswseseswswsewsese
wnewwswwneswswwenewswswwwswwnene
newswseswnwnwnwnenwnwnwnwnwnesenwne
neewswseswswnwswswseneswswswswswseswsesw
nwwneenwwwwsenwwseswenwnwswwnenw
wwwenwwnwnwwnwnwnwe
esesewsesesesesesenwsenwesenwswswswee
nwsesesenweseswseseseseswsesewseseenwse
newnwnwnenwswswwwnwwwnwwnwwnenwsw
swsewsenwseseseswwseseneesweswswsese
neeenweseeeeneswneeeeweee
nwenwnwnwnenwwnwnenenwnw
wwsewwenewwwwwwwsewwwnww
neneenesweneeneenwnenwneneseseeee
eswseneseseseeeeeeeseenwsewsese
nenenwswneeswnesenenewwnenenenwenwsese
nwwwwwewwswwswwnewwwwseeww
swswswswswswswseseswneeswswseneswwswwsww
nwneneswneeswenwseenweeneneewwwnee
swswswswneswwneseswwseswswswsw
swswseswneswwwswswwswsw
nwenweseesweeeeneeseeswseeesw
swswswsweswswnewwswwwswswwwnwswse
sewneseseswsesesesesewseseswnwseneswse
enenweeswsweswenwnwe
nenenwnwnenwnenwwnwswnwnenwsenenwne
neswseneswswnwwweneswnwseswswneewnese
nenweswsweeneeneswnweeneswneswee
wsenwseseseseeseseseseseseeseneswnese
swnenwwnwnwenwnwswnwnesenesesewnwnenenw
sweneeenenwenenenweeenenwsweeeswe
sewewnesesewnenwsesesesweseswswsesesw
neswswnenwneseseneneneneneneneswnenwnene
newnewweewwwnwseswwseswwewswww
senwseseseswswnesenweseswsewswsesesewsw
senenenenenenwnwnwsewnwnwenwnwnwwnene
nwnwenenwnwwneneswneneneneenwnwnwnese
seseseseseseswwneswseswesewswseswnwse
nenwnwnenwenenweswneneswweenwneneswnwnw
swnwseswewnewnesesesesesesesee
seswnenwwwewseneswswsenweneswnenenwe

2
2020/inputs/day_25 Normal file
View File

@@ -0,0 +1,2 @@
1614360
7734663

44
2020/solutions/day_01.py Normal file
View File

@@ -0,0 +1,44 @@
"""AOC Day 1"""
import pathlib
import time
def read_input(input_path: str) -> tuple:
"""take input file path and return appropriate data structure"""
with open(input_path, 'r') as input_file:
entries = list()
is_present = [False]*2020
for entry in input_file.readlines():
entries.append(int(entry))
is_present[int(entry)-1] = True
return (entries, is_present)
def part1(entries: list, is_present: list) -> int:
"""part1 solver take a list of int and a list of bool and return an int"""
for x in entries:
complement = 2020 - x
if complement > 0 and is_present[complement-1]:
return x * complement
return None
def part2(entries: list, is_present: list) -> int:
"""part2 solver take a list of int and a list of bool and return an int"""
for x, i in enumerate(entries):
for y in entries[i:]:
complement = 2020 - x - y
if complement > 0 and is_present[complement-1]:
return x * y * complement
return None
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
entries, is_present = read_input(input_path)
start_time = time.time()
print("Part 1: %d" % part1(entries, is_present))
print("Part 2: %d" % part2(entries, is_present))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

49
2020/solutions/day_02.py Normal file
View File

@@ -0,0 +1,49 @@
"""AOC Day 2"""
import pathlib
import time
import re
def read_input(input_path: str) -> list:
"""take input file path and return appropriate data structure"""
with open(input_path, 'r') as input_file:
rules = list()
for entry in input_file.readlines():
splitted = re.split('-| |: ', entry)
rule = [int(splitted[0]), int(splitted[1]), splitted[2], splitted[3]]
rules.append(rule)
return rules
def part1(entries: list) -> int:
"""part1 solver take a list of tuples and return an int"""
correct_passwords = 0
for entry in entries:
occurrences = entry[3].count(entry[2])
if occurrences in range(entry[0], entry[1]+1):
correct_passwords += 1
return correct_passwords
def part2(entries: list) -> int:
"""part2 solver take a list of tuples and return an int"""
correct_passwords = 0
for entry in entries:
pos_1, pos_2, letter, password = entry[:]
if (password[pos_1-1] == letter) != (password[pos_2-1] == letter):
correct_passwords += 1
return correct_passwords
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
entries = read_input(input_path)
start_time = time.time()
print("Part 1: %d" % part1(entries))
print("Part 2: %d" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

59
2020/solutions/day_03.py Normal file
View File

@@ -0,0 +1,59 @@
"""AOC Day 3"""
import pathlib
import time
def read_input(input_path: str) -> list:
"""take input file path and return appropriate data structure"""
with open(input_path, 'r') as input_file:
lines = list()
for line in input_file.readlines():
lines.append(line.strip())
return lines
def slope_tree_check(lines: list, dx: int, dy: int) -> int:
"""check how many trees would be encountered with a specific slope"""
x_pos = 0
y_pos = 0
trees_encountered = 0
line_length = len(lines[0])
while y_pos < len(lines):
if lines[y_pos][x_pos] == '#':
trees_encountered += 1
x_pos = (x_pos + dx) % line_length
y_pos += dy
return trees_encountered
def part1(entries: list) -> int:
"""part1 solver take a list of strings and return an int"""
return slope_tree_check(entries, 3, 1)
def part2(entries: list) -> int:
"""part2 solver take a list of tuples and return an int"""
slopes = [
(1, 1),
(3, 1),
(5, 1),
(7, 1),
(1, 2),
]
prod = 1
for slope in slopes:
prod *= slope_tree_check(entries, slope[0], slope[1])
return prod
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
entries = read_input(input_path)
start_time = time.time()
print("Part 1: %d" % part1(entries))
print("Part 2: %d" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

72
2020/solutions/day_04.py Normal file
View File

@@ -0,0 +1,72 @@
"""AOC Day 4"""
import pathlib
import time
import re
def read_input(input_path: str) -> list:
"""take input file path and return appropriate data structure"""
with open(input_path, 'r') as input_file:
data = input_file.read()
entries = re.split(r"(?:\r?\n){2,}", data.strip())
passports = list()
for entry in entries:
passport = dict()
entry = entry.replace('\n', ' ')
data = entry.split(' ')
for field in data:
key, value = field.split(':')[:2]
passport[key] = value
passports.append(passport)
return passports
def check_fields(passport: dict) -> bool:
"""check if a passport contains all the required fields"""
required_fields = ["byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid"]
for required_field in required_fields:
if required_field not in passport.keys():
return False
elif passport[required_field] == None or passport[required_field] == '':
return False
return True
def check_data(passport: dict) -> bool:
"""check if all passport fields contains correct data"""
return (1920 <= int(passport["byr"]) <= 2002 and
2010 <= int(passport["iyr"]) <= 2020 and
2020 <= int(passport["eyr"]) <= 2030 and
((passport["hgt"].endswith("cm") and 150 <= int(passport["hgt"][:-2]) <= 193) or (passport["hgt"].endswith("in") and 59 <= int(passport["hgt"][:-2]) <= 76)) and
re.match(r"^#[0-9a-f]{6}$", passport["hcl"]) and
passport["ecl"] in ("amb", "blu", "brn", "gry", "grn", "hzl", "oth") and
re.match(r"^[0-9]{9}$", passport["pid"]))
def part1(entries: list) -> int:
"""part1 solver take a list of strings and return an int"""
valid_passports = 0
for passport in entries:
if check_fields(passport):
valid_passports += 1
return valid_passports
def part2(entries: list) -> int:
"""part2 solver take a list of tuples and return an int"""
valid_passports = 0
for passport in entries:
if check_fields(passport) and check_data(passport):
valid_passports += 1
return valid_passports
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
entries = read_input(input_path)
print("Part 1: %d" % part1(entries))
print("Part 2: %d" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

39
2020/solutions/day_05.py Normal file
View File

@@ -0,0 +1,39 @@
"""AOC Day 5"""
import pathlib
import time
def read_input(input_path: str) -> list:
"""take input file path and return appropriate data structure"""
with open(input_path, 'r') as input_file:
entries = input_file.readlines()
seats = list()
for entry in entries:
entry = entry.strip()
seat = int(''.join(['0' if letter in 'FL' else '1' for letter in entry]), 2)
seats.append(seat)
seats.sort()
return seats
def part1(entries: list) -> int:
"""part1 solver take a list of strings and return an int"""
return max(entries)
def part2(entries: list) -> int:
"""part2 solver take a list of strings and return an int"""
missing = [seat for seat in range(entries[0], entries[-1]) if seat not in entries]
return missing[0]
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
entries = read_input(input_path)
print("Part 1: %d" % part1(entries))
print("Part 2: %d" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

74
2020/solutions/day_06.py Normal file
View File

@@ -0,0 +1,74 @@
"""AOC Day 6"""
import pathlib
import time
import collections
TEST_INPUT = """abc
a
b
c
ab
ac
a
a
a
a
b"""
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read()
return input_data
def extract(input_data: str) -> list:
"""take input data and return the appropriate data structure"""
groups = input_data.strip().split("\n\n")
yes_count = list()
for group in groups:
persons = group.split("\n")
yes_count.append((len(persons), collections.Counter(''.join(persons))))
return yes_count
def part1(entries: list) -> int:
"""part1 solver take a list of sets and return an int"""
return sum(len(group[1].keys()) for group in entries)
def part2(entries: list) -> int:
"""part2 solver take a list of sets and return an int"""
count = 0
for group in entries:
for key in group[1].keys():
if group[1][key] == group[0]:
count += 1
return count
def test_input_day_6():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 11
assert part2(entries) == 6
def test_bench_day_6(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %d" % part1(entries))
print("Part 2: %d" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

103
2020/solutions/day_07.py Normal file
View File

@@ -0,0 +1,103 @@
"""AOC Day 6"""
import pathlib
import time
import collections
TEST_INPUT = """light red bags contain 1 bright white bag, 2 muted yellow bags.
dark orange bags contain 3 bright white bags, 4 muted yellow bags.
bright white bags contain 1 shiny gold bag.
muted yellow bags contain 2 shiny gold bags, 9 faded blue bags.
shiny gold bags contain 1 dark olive bag, 2 vibrant plum bags.
dark olive bags contain 3 faded blue bags, 4 dotted black bags.
vibrant plum bags contain 5 faded blue bags, 6 dotted black bags.
faded blue bags contain no other bags.
dotted black bags contain no other bags."""
TEST_INPUT_2 = """shiny gold bags contain 2 dark red bags.
dark red bags contain 2 dark orange bags.
dark orange bags contain 2 dark yellow bags.
dark yellow bags contain 2 dark green bags.
dark green bags contain 2 dark blue bags.
dark blue bags contain 2 dark violet bags.
dark violet bags contain no other bags."""
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> tuple:
"""take input data and return the appropriate data structure"""
rules = input_data.split('\n')
graph = dict()
reverse_graph = dict()
for rule in rules:
container, contents = rule.split('contain')
container = ' '.join(container.split()[:2])
content_graph = dict()
for content in contents.split(','):
if content == " no other bags.":
break
parts = content.split()
amount = int(parts[0])
color = ' '.join(parts[1:3])
content_graph[color] = amount
if color in reverse_graph.keys():
reverse_graph[color].append(container)
else:
reverse_graph[color] = [container]
graph[container] = content_graph
return (graph, reverse_graph)
def part1(reverse_graph: dict, color: str) -> int:
"""part1 solver take a dict of lists and return an int"""
queue = collections.deque(reverse_graph[color])
already_counted = set()
while queue:
container = queue.popleft()
if container not in already_counted:
already_counted.add(container)
if container in reverse_graph.keys():
queue += collections.deque(reverse_graph[container])
return len(already_counted)
def part2(graph: dict, color: str) -> int:
"""part2 solver take a dict of dicts and return an int"""
def search_count(graph: dict, color: str) -> int:
if not graph[color]:
return 1
count = 1
for content, amount in graph[color].items():
count += amount * search_count(graph, content)
return count
return search_count(graph, color)-1
def test_input_day_7():
"""pytest testing function"""
graph, reverse_graph = extract(TEST_INPUT)
assert part1(reverse_graph, "shiny gold") == 4
assert part2(graph, "shiny gold") == 32
graph, _ = extract(TEST_INPUT_2)
assert part2(graph, "shiny gold") == 126
def test_bench_day_7(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
graph, reverse_graph = extract(input_data)
print("Part 1: %d" % part1(reverse_graph, "shiny gold"))
print("Part 2: %d" % part2(graph, "shiny gold"))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

106
2020/solutions/day_08.py Normal file
View File

@@ -0,0 +1,106 @@
"""AOC 2020 Day 8"""
import pathlib
import time
TEST_INPUT = """nop +0
acc +1
jmp +4
acc +3
jmp -3
acc -99
acc +1
jmp -4
acc +6"""
class Instruction:
"""Instruction class hold an operation, an argument and an execution counter"""
op = None
arg = None
def __init__(self, op, arg):
self.op = op
self.arg = arg
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> list:
"""take input data and return the appropriate data structure"""
instructions = list()
for instruction in input_data.split('\n'):
op, arg = instruction.split(' ')
arg = int(arg)
assert op in ('acc', 'jmp', 'nop')
instructions.append(Instruction(op, arg))
return instructions
def run(entries: list) -> (int, bool):
"""run instructions"""
instruction_counter = 0
prev_instruction_counter = 0
accumulator = 0
exec_counter = [0]*len(entries)
while instruction_counter < len(entries):
prev_instruction_counter = instruction_counter
instruction = entries[instruction_counter]
if exec_counter[instruction_counter] != 0:
return accumulator, False
if instruction.op == 'nop':
instruction_counter += 1
elif instruction.op == 'acc':
accumulator += instruction.arg
instruction_counter += 1
elif instruction.op == 'jmp':
instruction_counter += instruction.arg
else:
raise ValueError('Invalid instruction operation %s' % instruction.op)
exec_counter[prev_instruction_counter] += 1
return accumulator, True
def part1(entries: list) -> int:
"""part1 solver"""
return run(entries)[0]
def part2(entries: list) -> int:
"""part2 solver"""
for instruction in entries:
if instruction.op == 'acc':
continue
original_instruction = instruction.op
instruction.op = 'jmp' if instruction.op == 'nop' else 'nop'
accumulator, success = run(entries)
if success:
return accumulator
instruction.op = original_instruction
def test_input_day_8():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 5
assert part2(entries) == 8
def test_bench_day_8(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %d" % part1(entries))
print("Part 2: %d" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

87
2020/solutions/day_09.py Normal file
View File

@@ -0,0 +1,87 @@
"""AOC 2020 Day 9"""
import pathlib
import time
import itertools
TEST_INPUT = """35
20
15
25
47
40
62
55
65
95
102
117
150
182
127
219
299
277
309
576"""
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> list:
"""take input data and return the appropriate data structure"""
entries = list()
for entry in input_data.split('\n'):
entries.append(int(entry))
return entries
def part1(entries: list, preamble_length: int) -> int:
"""part1 solver"""
for index, entry in enumerate(entries[preamble_length:]):
preamble = entries[index:index+preamble_length]
if entry not in [i+j for i, j in itertools.combinations(preamble, 2)]:
return entry
return None
def part2(entries: list, invalid_number: int) -> int:
"""part2 solver"""
left, right = 0, 1
interval_sum = entries[left] + entries[right]
while True:
if interval_sum < invalid_number:
right += 1
interval_sum += entries[right]
elif interval_sum > invalid_number:
interval_sum -= entries[left]
left += 1
else:
numbers = sorted(entries[left:right+1])
return numbers[0] + numbers[-1]
def test_input_day_9():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries, 5) == 127
assert part2(entries, 127) == 62
def test_bench_day_9(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
invalid_number = part1(entries, 25)
print("Part 1: %d" % invalid_number)
print("Part 2: %d" % part2(entries, invalid_number))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

111
2020/solutions/day_10.py Normal file
View File

@@ -0,0 +1,111 @@
"""AOC 2020 Day 10"""
import pathlib
import time
TEST_INPUT = """16
10
15
5
1
11
7
19
6
12
4"""
TEST_INPUT_2 = """28
33
18
42
31
14
46
20
48
47
24
23
49
45
19
38
39
11
1
32
25
35
8
17
7
9
4
2
34
10
3"""
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> list:
"""take input data and return the appropriate data structure"""
entries = [0]
for entry in input_data.split('\n'):
entries.append(int(entry))
entries = sorted(entries)
entries.append(entries[-1]+3)
return entries
def part1(entries: list) -> int:
"""part1 solver"""
jolt_diff_1, jolt_diff_3 = 0, 0
for index in range(len(entries)-1):
diff = entries[index+1] - entries[index]
if diff == 1:
jolt_diff_1 += 1
elif diff == 3:
jolt_diff_3 += 1
return jolt_diff_1*jolt_diff_3
def part2(entries: list) -> int:
"""part2 solver"""
distinct_paths = [0]*(entries[-1]+1)
distinct_paths[0] = 1
for adapter in entries:
distinct_paths[adapter] += distinct_paths[adapter-1] + distinct_paths[adapter-2] + distinct_paths[adapter-3]
return distinct_paths[len(distinct_paths)-1]
def test_input_day_10():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 35
assert part2(entries) == 8
entries = extract(TEST_INPUT_2)
assert part1(entries) == 220
assert part2(entries) == 19208
def test_bench_day_10(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %d" % part1(entries))
print("Part 2: %d" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

143
2020/solutions/day_11.py Normal file
View File

@@ -0,0 +1,143 @@
"""AOC 2020 Day 11"""
import pathlib
import time
import copy
TEST_INPUT = """L.LL.LL.LL
LLLLLLL.LL
L.L.L..L..
LLLL.LL.LL
L.LL.LL.LL
L.LLLLL.LL
..L.L.....
LLLLLLLLLL
L.LLLLLL.L
L.LLLLL.LL"""
FLOOR = 0
EMPTY_SEAT = 1
OCCUPIED_SEAT = 2
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> list:
"""take input data and return the appropriate data structure"""
entries = []
for row in input_data.split('\n'):
entries.append([])
for seat in row:
if seat == '.':
entries[-1].append(FLOOR)
elif seat == 'L':
entries[-1].append(EMPTY_SEAT)
elif seat == '#':
entries[-1].append(OCCUPIED_SEAT)
else:
raise ValueError("Invalid seat %s" % seat)
return entries
def occupied_adjacent_neighbors(seats: list, row: int, column: int) -> int:
"""return number of occupied adjacent neighbors of a given seat"""
neigh_seats = [(0, -1), (1, -1), (1, 0), (1, 1), (0, 1), (-1, 1), (-1, 0), (-1, -1)]
neighbors = 0
rows = len(seats)
columns = len(seats[0])
for dy, dx in neigh_seats:
nrow, ncolumn = row+dy, column+dx
if 0 <= nrow < rows and 0 <= ncolumn < columns and seats[nrow][ncolumn] == OCCUPIED_SEAT:
neighbors += 1
return neighbors
def occupied_insight_neighbors(seats: list, row: int, column: int) -> int:
"""return number of occupied in-sight neighbors of a given seat"""
neigh_seats = [(0, -1), (1, -1), (1, 0), (1, 1), (0, 1), (-1, 1), (-1, 0), (-1, -1)]
neighbors = 0
rows = len(seats)
columns = len(seats[0])
for dy, dx in neigh_seats:
nrow, ncolumn = row+dy, column+dx
while 0 <= nrow < rows and 0 <= ncolumn < columns:
seat = seats[nrow][ncolumn]
if seat == OCCUPIED_SEAT:
neighbors += 1
break
elif seat == EMPTY_SEAT:
break
nrow += dy
ncolumn += dx
return neighbors
def part1(entries: list) -> int:
"""part1 solver"""
seats = copy.deepcopy(entries)
while True:
new_grid = []
changed = False
for y, row in enumerate(seats):
new_grid.append([])
for x, seat in enumerate(row):
neighbors = occupied_adjacent_neighbors(seats, y, x)
if seat == EMPTY_SEAT and neighbors == 0:
new_grid[-1].append(OCCUPIED_SEAT)
changed = True
elif seat == OCCUPIED_SEAT and neighbors >= 4:
new_grid[-1].append(EMPTY_SEAT)
changed = True
else:
new_grid[-1].append(seat)
if changed:
seats = new_grid
else:
return sum(row.count(OCCUPIED_SEAT) for row in seats)
def part2(entries: list) -> int:
"""part2 solver"""
seats = copy.deepcopy(entries)
while True:
new_grid = []
changed = False
for y, row in enumerate(seats):
new_grid.append([])
for x, seat in enumerate(row):
neighbors = occupied_insight_neighbors(seats, y, x)
if seat == EMPTY_SEAT and neighbors == 0:
new_grid[-1].append(OCCUPIED_SEAT)
changed = True
elif seat == OCCUPIED_SEAT and neighbors >= 5:
new_grid[-1].append(EMPTY_SEAT)
changed = True
else:
new_grid[-1].append(seat)
if changed:
seats = new_grid
else:
return sum(row.count(OCCUPIED_SEAT) for row in seats)
def test_input_day_11():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 37
assert part2(entries) == 26
def test_bench_day_11(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %d" % part1(entries))
print("Part 2: %d" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

116
2020/solutions/day_12.py Normal file
View File

@@ -0,0 +1,116 @@
"""AOC 2020 Day 12"""
import pathlib
import time
TEST_INPUT = """F10
N3
F7
R90
F11"""
LEFT, RIGHT = 'L', 'R'
FORWARD = 'F'
NORTH, SOUTH, EAST, WEST = 'N', 'S', 'E', 'W'
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> list:
"""take input data and return the appropriate data structure"""
entries = []
for line in input_data.split('\n'):
instruction = (line[0], int(line[1:]))
entries.append(instruction)
return entries
def rotate_ship(direction: str, rotation: str) -> str:
"""rotate the ship"""
if direction == NORTH:
return WEST if rotation == LEFT else EAST
if direction == SOUTH:
return EAST if rotation == LEFT else WEST
if direction == EAST:
return NORTH if rotation == LEFT else SOUTH
if direction == WEST:
return SOUTH if rotation == LEFT else NORTH
return None
def move(direction: str, x: int, y: int, value: int) -> tuple:
"""move the ship or the waypoint"""
if direction == NORTH:
return (x, y+value)
if direction == SOUTH:
return (x, y-value)
if direction == EAST:
return (x+value, y)
if direction == WEST:
return (x-value, y)
return None
def rotate_waypoint(direction: str, x: int, y: int, value: int) -> tuple:
"""rotate waypoint around ship"""
if (direction == LEFT and value == 90) or (direction == RIGHT and value == 270):
return (-y, x)
if ((direction == LEFT and value == 180) or (direction == RIGHT and value == 180)):
return (-x, -y)
if ((direction == LEFT and value == 270) or (direction == RIGHT and value == 90)):
return (y, -x)
return None
def part1(entries: list) -> int:
"""part1 solver"""
direction = EAST
x_ship, y_ship = 0, 0
for action, value in entries:
if action == FORWARD:
x_ship, y_ship = move(direction, x_ship, y_ship, value)
elif action in (LEFT, RIGHT):
for _ in range(value//90):
direction = rotate_ship(direction, action)
else:
x_ship, y_ship = move(action, x_ship, y_ship, value)
return abs(x_ship) + abs(y_ship)
def part2(entries: list) -> int:
"""part2 solver"""
x_ship, y_ship = 0, 0
x_wp, y_wp = 10, 1
for action, value in entries:
if action == FORWARD:
x_ship += x_wp * value
y_ship += y_wp * value
elif action in (LEFT, RIGHT):
x_wp, y_wp = rotate_waypoint(action, x_wp, y_wp, value)
else:
x_wp, y_wp = move(action, x_wp, y_wp, value)
return abs(x_ship) + abs(y_ship)
def test_input_day_12():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 25
assert part2(entries) == 286
def test_bench_day_12(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %d" % part1(entries))
print("Part 2: %d" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

87
2020/solutions/day_13.py Normal file
View File

@@ -0,0 +1,87 @@
"""AOC 2020 Day 13"""
import pathlib
import time
TEST_INPUT = """939
7,13,x,x,59,x,31,19"""
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> tuple:
"""take input data and return the appropriate data structure"""
entries = input_data.split('\n')
departure_ts = int(entries[0])
timetable = entries[1].split(',')
ids = [(-index, int(bus_id)) for index, bus_id in enumerate(timetable) if bus_id != 'x']
return (departure_ts, ids)
def egcd(a, b):
""""extended euclidean algorithm"""
if a == 0:
return (b, 0, 1)
g, y, x = egcd(b % a, a)
return (g, x - (b // a) * y, y)
def modinv(x, m):
"""calculate the modular multiplicative inverse"""
g, inv, _ = egcd(x, m)
assert g == 1
return inv % m
def part1(entries: tuple) -> int:
"""part1 solver"""
wait_time = float('inf')
best_bus_id = -1
min_dep_time = entries[0]
for _, bus_id in entries[1]:
if min_dep_time % bus_id == 0:
multiple = min_dep_time // bus_id
else:
multiple = (min_dep_time // bus_id) + 1
time_diff = (bus_id * multiple) - min_dep_time
if time_diff < wait_time:
wait_time = time_diff
best_bus_id = bus_id
return wait_time * best_bus_id
def part2(entries: tuple) -> int:
"""part2 solver"""
min_timestamp = 0
moduli_product = 1
for _, modulo in entries[1]:
moduli_product *= modulo
for remainder, modulo in entries[1]:
ni = moduli_product // modulo
modulo_inv = modinv(ni, modulo)
min_timestamp += (remainder * ni * modulo_inv)
return min_timestamp % moduli_product
def test_input_day_13():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 295
assert part2(entries) == 1068781
def test_bench_day_13(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %d" % part1(entries))
print("Part 2: %d" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

109
2020/solutions/day_14.py Normal file
View File

@@ -0,0 +1,109 @@
"""AOC 2020 Day 14"""
import pathlib
import time
import re
import itertools
TEST_INPUT = """mask = XXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXX0X
mem[8] = 11
mem[7] = 101
mem[8] = 0"""
TEST_INPUT_2 = """mask = 000000000000000000000000000000X1001X
mem[42] = 100
mask = 00000000000000000000000000000000X0XX
mem[26] = 1"""
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> list:
"""take input data and return the appropriate data structure"""
entries = list()
mem_rexp = re.compile(r'mem\[(\d+)\] = (\d+)')
for line in input_data.split('\n'):
if line.startswith('mask'):
entry = {
'type': 'mask',
'value': line[7:].rstrip(),
}
else:
entry = {
'type': 'mem',
'value': mem_rexp.match(line).groups(),
}
entries.append(entry)
return entries
def generate_addresses(addr: str, mask: str) -> list:
"""generate all possible addresses from floating mask"""
generator_bits = list()
addresses = list()
addr = format(int(addr), '036b')
for addr_bit, mask_bit in zip(addr, mask):
if mask_bit == '0':
generator_bits.append(addr_bit)
elif mask_bit == '1':
generator_bits.append('1')
else:
generator_bits.append('01')
for address in itertools.product(*generator_bits):
addresses.append(int(''.join(address), 2))
return addresses
def part1(entries: dict) -> int:
"""part1 solver"""
mem = dict()
mask_set0s = 0
mask_set1s = 0
for entry in entries:
if entry['type'] == 'mask':
mask = entry['value']
mask_set0s = int(mask.replace('X', '1'), 2)
mask_set1s = int(mask.replace('X', '0'), 2)
else:
addr, value = entry['value']
mem[addr] = (int(value) & mask_set0s) | mask_set1s
return sum(mem.values())
def part2(entries: tuple) -> int:
"""part2 solver"""
mem = dict()
mask = ''
for entry in entries:
if entry['type'] == 'mask':
mask = entry['value']
else:
addr, value = entry['value']
for address in generate_addresses(addr, mask):
mem[address] = int(value)
return sum(mem.values())
def test_input_day_14():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 165
entries = extract(TEST_INPUT_2)
assert part2(entries) == 208
def test_bench_day_14(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %d" % part1(entries))
print("Part 2: %d" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

68
2020/solutions/day_15.py Normal file
View File

@@ -0,0 +1,68 @@
"""AOC 2020 Day 15"""
import pathlib
import time
TEST_INPUT = """3,1,2"""
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> list:
"""take input data and return the appropriate data structure"""
entries = list(map(int, input_data.split(',')))
return entries
def calculate_last_spoken(numbers: list, turns: int) -> int:
"""calculate the last spoken number at specified turn"""
spoken = [0]*turns
last_spoken = -1
for turn, number in enumerate(numbers, 1):
spoken[number] = turn
last_spoken = number
for prev_turn in range(len(numbers), turns):
if spoken[last_spoken] != 0:
current_spoken = prev_turn - spoken[last_spoken]
else:
current_spoken = 0
spoken[last_spoken] = prev_turn
last_spoken = current_spoken
return last_spoken
def part1(entries: dict) -> int:
"""part1 solver"""
return calculate_last_spoken(entries, 2020)
def part2(entries: tuple) -> int:
"""part2 solver"""
return calculate_last_spoken(entries, 30000000)
def test_input_day_15():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 1836
assert part2(entries) == 362
def test_bench_day_15(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %d" % part1(entries))
print("Part 2: %d" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

136
2020/solutions/day_16.py Normal file
View File

@@ -0,0 +1,136 @@
"""AOC 2020 Day 16"""
import pathlib
import time
import re
TEST_INPUT = """class: 1-3 or 5-7
row: 6-11 or 33-44
seat: 13-40 or 45-50
your ticket:
7,1,14
nearby tickets:
7,3,47
40,4,50
55,2,20
38,6,12"""
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> tuple:
"""take input data and return the appropriate data structure"""
values_rexp = re.compile(r'([0-9]+)-([0-9]+) or ([0-9]+)-([0-9]+)')
rules_str, ticket_str, nearby_tickets_str = input_data.split('\n\n')
rules = dict()
nearby_tickets = list()
for rule in rules_str.split('\n'):
field, vals = rule.split(': ')
ranges = values_rexp.match(vals)
rules[field] = (
(int(ranges.group(1)), int(ranges.group(2))),
(int(ranges.group(3)), int(ranges.group(4)))
)
my_ticket = list(map(int, ticket_str.split('\n')[1].split(',')))
for ticket in nearby_tickets_str.split('\n')[1:]:
nearby_tickets.append(list(map(int, ticket.split(','))))
return (rules, my_ticket, nearby_tickets)
def check_field(rule: tuple, field: int) -> bool:
"""check if a field is valid given a rule"""
for min_range, max_range in rule:
if min_range <= field <= max_range:
return True
return False
def find_invalid_field(rules: dict, ticket: list) -> int:
"""check if a ticket is valid or not"""
for field in ticket:
valid = False
for rule in rules.values():
valid = check_field(rule, field)
if valid:
break
if not valid:
return field
return None
def part1(entries: tuple) -> tuple:
"""part1 solver"""
rules, _, nearby_tickets = entries
valid_tickets = list()
invalid_fields_sum = 0
for ticket in nearby_tickets:
invalid_field = find_invalid_field(rules, ticket)
if invalid_field is not None:
invalid_fields_sum += invalid_field
else:
valid_tickets.append(ticket)
return valid_tickets, invalid_fields_sum
def part2(rules: dict, my_ticket: list, valid_tickets: list) -> int:
"""part2 solver"""
acceptable_fields = {key: [] for key in rules.keys()}
field_map = {key: None for key in rules.keys()}
departure_values_product = 1
for name, rule in rules.items():
for index in range(len(my_ticket)):
valid = True
for ticket in valid_tickets:
if not check_field(rule, ticket[index]):
valid = False
break
if valid:
acceptable_fields[name].append(index)
while not all(field is not None for field in field_map.values()):
removed_index = -1
for name, indexes in acceptable_fields.items():
if len(indexes) == 1:
field_map[name] = indexes[0]
removed_index = indexes[0]
break
for name, indexes in acceptable_fields.items():
if removed_index in indexes:
acceptable_fields[name].remove(removed_index)
for name, index in field_map.items():
if name.startswith('departure'):
departure_values_product *= my_ticket[index]
return departure_values_product
def test_input_day_16():
"""pytest testing function"""
entries = extract(TEST_INPUT)
_, invalid_fields_sum = part1(entries)
assert invalid_fields_sum == 71
def test_bench_day_16(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
valid_tickets, invalid_fields_sum = part1(entries)
print("Part 1: %d" % invalid_fields_sum)
print("Part 2: %d" % part2(entries[0], entries[1], valid_tickets))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

95
2020/solutions/day_17.py Normal file
View File

@@ -0,0 +1,95 @@
"""AOC 2020 Day 17"""
import pathlib
import time
import itertools
TEST_INPUT = """.#.
..#
###"""
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str, dims: int) -> set:
"""take input data and return the appropriate data structure"""
alive_cells = set()
zeros = [0]*(dims-2)
for x_cell, row in enumerate(input_data.split('\n')):
for y_cell, cell in enumerate(row):
if cell == '#':
alive_cells.add((x_cell, y_cell, *zeros))
return alive_cells
def count_alive_neighbors(alive_cells: set, coords: tuple) -> int:
"""return the number of alive neighbors of a given cell"""
alive = 0
ranges = ((c-1, c, c+1) for c in coords)
for cell in itertools.product(*ranges):
if cell in alive_cells:
alive += 1
if coords in alive_cells:
alive -= 1
return alive
def get_cube_limits(alive_cells: set, dims: int) -> list:
"""return cube bounds incremented for expansion"""
limits = list()
for i in range(dims):
low = float('Inf')
high = -float('Inf')
for row in alive_cells:
if row[i] < low:
low = row[i]
elif row[i] > high:
high = row[i]
limits.append(range(low-1, high+2))
return limits
def step_cube(alive_cells: set, dims: int) -> set:
"""return next step alive cells"""
next_step = set()
for cell in itertools.product(*get_cube_limits(alive_cells, dims)):
alive_neighbors = count_alive_neighbors(alive_cells, cell)
if (cell in alive_cells and alive_neighbors in (2, 3)) or alive_neighbors == 3:
next_step.add(cell)
return next_step
def part1(input_data: str) -> int:
"""part1 solver"""
cube = extract(input_data, 3)
for _ in range(6):
cube = step_cube(cube, 3)
return len(cube)
def part2(input_data: str) -> int:
"""part2 solver"""
cube = extract(input_data, 4)
for _ in range(6):
cube = step_cube(cube, 4)
return len(cube)
def test_input_day_17():
"""pytest testing function"""
assert part1(TEST_INPUT) == 112
assert part2(TEST_INPUT) == 848
def test_bench_day_17(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
print("Part 1: %d" % part1(input_data))
print("Part 2: %d" % part2(input_data))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

125
2020/solutions/day_18.py Normal file
View File

@@ -0,0 +1,125 @@
"""AOC 2020 Day 18"""
import pathlib
import time
TEST_INPUT = """1 + (2 * 3) + (4 * (5 + 6))
2 * 3 + (4 * 5)
5 + (8 * 3 + 9 + 3 * 4 * 3)
5 * 9 * (7 * 3 * 3 + 9 * 3 + (8 + 6 * 4))
((2 + 4 * 9) * (6 + 9 * 8 + 6) + 6) + 2 + 4 * 2"""
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> list:
"""take input data and return the appropriate data structure"""
return [exp.rstrip() for exp in input_data.split('\n')]
def regular_op(stack: list, num: int) -> list:
"""return the stack after performing a regular math operation"""
while stack:
if stack[-1] == '(':
break
operator, left_operand = stack[-1], stack[-2]
stack = stack[:-2]
if operator == '+':
num = left_operand + num
elif operator == '*':
num = left_operand * num
stack.append(num)
return stack
def advanced_op(stack: list, num: int, sub_expr: bool) -> list:
"""return the stack after performing an advanced math operation"""
if sub_expr:
index = -1
for stack_index, value in enumerate(stack):
if value == '(':
index = stack_index
if index != -1:
target = stack[index+1:]
stack = stack[:index]
else:
target = stack
stack = []
for value in target:
if value != '*':
num *= int(value)
while stack:
if stack[-1] in '(*':
break
operator, left_operand = stack[-1], stack[-2]
stack = stack[:-2]
if operator == '+':
num = left_operand + num
stack.append(num)
return stack
def evaluate(expression: str, advance: bool = False) -> tuple:
"""return the result of an expression evaluated with regular or advanced math operator precendece"""
stack = list()
index = 0
while index < len(expression):
data = expression[index]
if data.isdigit():
num = int(data)
if advance:
stack = advanced_op(stack, num, False)
else:
stack = regular_op(stack, num)
elif data in '*+(':
stack.append(data)
elif data == ')':
num = int(stack[-1])
if advance:
stack = stack[:-1]
stack = advanced_op(stack, num, True)
else:
stack = stack[:-2]
stack = regular_op(stack, num)
index += 1
if advance and len(stack) > 1:
stack = advanced_op(stack[:-1], int(stack[-1]), True)
return stack[0]
def part1(entries: dict) -> int:
"""part1 solver"""
result_sum = 0
for expression in entries:
result_sum += evaluate(expression)
return result_sum
def part2(entries: tuple) -> int:
"""part2 solver"""
result_sum = 0
for expression in entries:
result_sum += evaluate(expression, True)
return result_sum
def test_input_day_18():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 26386
assert part2(entries) == 693942
def test_bench_day_18(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %d" % part1(entries))
print("Part 2: %d" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

153
2020/solutions/day_19.py Normal file
View File

@@ -0,0 +1,153 @@
"""AOC 2020 Day 19"""
import pathlib
import time
import re
TEST_INPUT = """0: 4 1 5
1: 2 3 | 3 2
2: 4 4 | 5 5
3: 4 5 | 5 4
4: "a"
5: "b"
ababbb
bababa
abbbab
aaabbb
aaaabbb"""
TEST_INPUT_2 = """42: 9 14 | 10 1
9: 14 27 | 1 26
10: 23 14 | 28 1
1: "a"
11: 42 31
5: 1 14 | 15 1
19: 14 1 | 14 14
12: 24 14 | 19 1
16: 15 1 | 14 14
31: 14 17 | 1 13
6: 14 14 | 1 14
2: 1 24 | 14 4
0: 8 11
13: 14 3 | 1 12
15: 1 | 14
17: 14 2 | 1 7
23: 25 1 | 22 14
28: 16 1
4: 1 1
20: 14 14 | 1 15
3: 5 14 | 16 1
27: 1 6 | 14 18
14: "b"
21: 14 1 | 1 14
25: 1 1 | 1 14
22: 14 14
8: 42
26: 14 22 | 1 20
18: 15 15
7: 14 5 | 1 21
24: 14 1
abbbbbabbbaaaababbaabbbbabababbbabbbbbbabaaaa
bbabbbbaabaabba
babbbbaabbbbbabbbbbbaabaaabaaa
aaabbbbbbaaaabaababaabababbabaaabbababababaaa
bbbbbbbaaaabbbbaaabbabaaa
bbbababbbbaaaaaaaabbababaaababaabab
ababaaaaaabaaab
ababaaaaabbbaba
baabbaaaabbaaaababbaababb
abbbbabbbbaaaababbbbbbaaaababb
aaaaabbaabaaaaababaa
aaaabbaaaabbaaa
aaaabbaabbaaaaaaabbbabbbaaabbaabaaa
babaaabbbaaabaababbaabababaaab
aabbbbbaabbbaaaaaabbbbbababaaaaabbaaabba"""
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> tuple:
"""take input data and return the appropriate data structure"""
rules = dict()
messages = list()
rules_input, messages_input = input_data.split('\n\n')[0:2]
for rule_input in rules_input.split('\n'):
rule_id, rule = rule_input.split(': ')
rules[rule_id] = rule
messages = messages_input.split('\n')
return rules, messages
def get_regxp(rule_num: str, rules: dict):
rule = rules[rule_num]
if re.fullmatch('"."', rule):
return rule[1]
rule_parts = rule.split(' | ')
or_rules = []
for part in rule_parts:
numbers = part.split(' ')
or_rules.append(''.join(get_regxp(n, rules) for n in numbers))
return f"(?:{'|'.join(or_rules)})"
def get_regxp_upd(rule_num: str, rules: dict):
if rule_num == '8':
return f"{get_regxp_upd('42', rules)}+"
elif rule_num == '11':
rule_11 = (f"{get_regxp_upd('42', rules)}{{{n}}}{get_regxp_upd('31', rules)}{{{n}}}" for n in range(1, 22))
return f"(?:{'|'.join(rule_11)})"
rule = rules[rule_num]
if re.fullmatch('"."', rule):
return rule[1]
rule_parts = rule.split(' | ')
or_rules = []
for part in rule_parts:
numbers = part.split(' ')
or_rules.append(''.join(get_regxp_upd(n, rules) for n in numbers))
return f"(?:{'|'.join(or_rules)})"
def part1(entries: tuple) -> int:
"""part1 solver"""
rules, messages = entries
regxp_0 = re.compile(get_regxp('0', rules))
return sum(regxp_0.fullmatch(x) is not None for x in messages)
def part2(entries: tuple) -> int:
"""part2 solver"""
rules, messages = entries
regxp_0 = re.compile(get_regxp_upd('0', rules))
return sum(regxp_0.fullmatch(x) is not None for x in messages)
def test_input_day_19():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 2
entries = extract(TEST_INPUT_2)
assert part2(entries) == 12
def test_bench_day_19(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %d" % part1(entries))
print("Part 2: %d" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

306
2020/solutions/day_20.py Normal file
View File

@@ -0,0 +1,306 @@
"""AOC 2020 Day 20"""
import pathlib
import time
import collections
import operator
import itertools
TEST_INPUT = """Tile 2311:
..##.#..#.
##..#.....
#...##..#.
####.#...#
##.##.###.
##...#.###
.#.#.#..##
..#....#..
###...#.#.
..###..###
Tile 1951:
#.##...##.
#.####...#
.....#..##
#...######
.##.#....#
.###.#####
###.##.##.
.###....#.
..#.#..#.#
#...##.#..
Tile 1171:
####...##.
#..##.#..#
##.#..#.#.
.###.####.
..###.####
.##....##.
.#...####.
#.##.####.
####..#...
.....##...
Tile 1427:
###.##.#..
.#..#.##..
.#.##.#..#
#.#.#.##.#
....#...##
...##..##.
...#.#####
.#.####.#.
..#..###.#
..##.#..#.
Tile 1489:
##.#.#....
..##...#..
.##..##...
..#...#...
#####...#.
#..#.#.#.#
...#.#.#..
##.#...##.
..##.##.##
###.##.#..
Tile 2473:
#....####.
#..#.##...
#.##..#...
######.#.#
.#...#.#.#
.#########
.###.#..#.
########.#
##...##.#.
..###.#.#.
Tile 2971:
..#.#....#
#...###...
#.#.###...
##.##..#..
.#####..##
.#..####.#
#..#.#..#.
..####.###
..#.#.###.
...#.#.#.#
Tile 2729:
...#.#.#.#
####.#....
..#.#.....
....#..#.#
.##..##.#.
.#.####...
####.#.#..
##.####...
##..#.##..
#.##...##.
Tile 3079:
#.#.#####.
.#..######
..#.......
######....
####.#..#.
.#...#.##.
#.#####.##
..#.###...
..#.......
..#.###..."""
MONSTER_PATTERN = (
' # ',
'# ## ## ###',
' # # # # # # '
)
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> dict:
"""take input data and return the appropriate data structure"""
tiles = dict()
for tile in input_data.split('\n\n'):
parts = tile.split('\n')
tile_id = int(parts[0][5:-1])
tiles[tile_id] = parts[1:]
return tiles
def edge(matrix: list, side: str) -> str:
"""return a side of a matrix"""
if side == 'n':
return matrix[0]
if side == 's':
return matrix[-1]
if side == 'e':
return ''.join(map(operator.itemgetter(-1), matrix))
return ''.join(map(operator.itemgetter(0), matrix))
def get_tiles_corners(tiles: dict) -> dict:
"""return the corners of a set of tiles"""
matching_sides = collections.defaultdict(str)
corners = {}
for id_tile1, id_tile2 in itertools.combinations(tiles, 2):
tile1, tile2 = tiles[id_tile1], tiles[id_tile2]
for side_a in 'nsew':
for side_b in 'nsew':
edge_a, edge_b = edge(tile1, side_a), edge(tile2, side_b)
if edge_a == edge_b or edge_a == edge_b[::-1]:
matching_sides[id_tile1] += side_a
matching_sides[id_tile2] += side_b
for tid, sides in matching_sides.items():
if len(sides) == 2:
corners[tid] = sides
assert len(corners) == 4
return corners
def rotate90(matrix: list) -> tuple:
"""return the matrix rotated by 90"""
return tuple(''.join(column)[::-1] for column in zip(*matrix))
def possible_orientations(matrix: list) -> list:
"""return all possible orientations of a given matrix"""
orientations = [matrix]
for _ in range(3):
matrix = rotate90(matrix)
orientations.append(matrix)
return orientations
def possible_arrangements(matrix: list) -> list:
"""return all possible arrangements of a given matrix"""
arrangements = possible_orientations(matrix)
arrangements.extend(possible_orientations(matrix[::-1]))
return arrangements
def strip_edges(matrix: list) -> list:
"""return a matrix without it's edges"""
return [row[1:-1] for row in matrix[1:-1]]
def matching_tile(tile: list, tiles: dict, side_a: str, side_b: str) -> list:
"""return the adjacent tile of a given one"""
edge_a = edge(tile, side_a)
for other_id, other_tile in tiles.items():
if tile is other_tile:
continue
for other_arr in possible_arrangements(other_tile):
if edge_a == edge(other_arr, side_b):
tiles.pop(other_id)
return other_arr
def matching_row(prev: list, tiles: dict, tiles_per_row: int) -> list:
"""return matching tiles in the row of a given one"""
matching_tiles = [prev]
tile = prev
for _ in range(tiles_per_row - 1):
tile = matching_tile(tile, tiles, 'e', 'w')
matching_tiles.append(tile)
return matching_tiles
def build_image(top_left_tile: list, tiles: dict, image_dimension: int) -> list:
"""build an image of a set of tiles"""
first = top_left_tile
image = []
while 1:
image_row = matching_row(first, tiles, image_dimension)
image_row = map(strip_edges, image_row)
image.extend(map(''.join, zip(*image_row)))
if not tiles:
break
first = matching_tile(first, tiles, 's', 'n')
return image
def count_pattern(image: list, pattern: tuple) -> int:
"""return the number of times a given pattern appears in an image"""
pattern_h, pattern_w = len(pattern), len(pattern[0])
image_sz = len(image)
deltas = []
for row_index, row in enumerate(pattern):
for cell_index, cell in enumerate(row):
if cell == '#':
deltas.append((row_index, cell_index))
for img in possible_arrangements(image):
appearances = 0
for row_index in range(image_sz - pattern_h):
for cell_index in range(image_sz - pattern_w):
if all(img[row_index + dr][cell_index + dc] == '#' for dr, dc in deltas):
appearances += 1
if appearances != 0:
return appearances
def part1(entries: dict) -> int:
"""part1 solver"""
corners = get_tiles_corners(entries)
corners_prod = 1
for tile_id in corners:
corners_prod *= tile_id
return corners_prod
def part2(entries: dict) -> int:
"""part2 solver"""
corners = get_tiles_corners(entries)
top_left_id, matching_sides = corners.popitem()
top_left = entries[top_left_id]
if matching_sides in ('ne', 'en'):
top_left = rotate90(top_left)
elif matching_sides in ('nw', 'wn'):
top_left = rotate90(rotate90(top_left))
elif matching_sides in ('sw', 'ws'):
top_left = rotate90(rotate90(rotate90(top_left)))
image_dimension = int(len(entries) ** 0.5)
entries.pop(top_left_id)
image = build_image(top_left, entries, image_dimension)
monster_cells = sum(row.count('#') for row in MONSTER_PATTERN)
water_cells = sum(row.count('#') for row in image)
n_monsters = count_pattern(image, MONSTER_PATTERN)
return water_cells - n_monsters * monster_cells
def test_input_day_20():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 20899048083289
assert part2(entries) == 273
def test_bench_day_20(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %d" % part1(entries))
print("Part 2: %d" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

110
2020/solutions/day_21.py Normal file
View File

@@ -0,0 +1,110 @@
"""AOC 2020 Day 21"""
import pathlib
import time
import collections
TEST_INPUT = """mxmxvkd kfcds sqjhc nhms (contains dairy, fish)
trh fvjkl sbzzf mxmxvkd (contains dairy)
sqjhc fvjkl (contains soy)
sqjhc mxmxvkd sbzzf (contains fish)"""
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> tuple:
"""take input data and return the appropriate data structure"""
recipes = list()
ingredient_allergenes = collections.defaultdict(set)
recipes_with_allergene = collections.defaultdict(list)
for index, recipe in enumerate(input_data.split('\n')):
ingredients, allergenes = recipe.split(' (contains ')
ingredients = set(ingredients.split())
allergenes = set(allergenes.rstrip(')').split(', '))
recipes.append(ingredients)
for ingredient in ingredients:
ingredient_allergenes[ingredient] |= allergenes
for allergene in allergenes:
recipes_with_allergene[allergene].append(index)
return recipes, ingredient_allergenes, recipes_with_allergene
def find_safe_ingredients(recipes: list, ingredient_allergenes: dict, recipes_with_allergene: dict) -> list:
"""return a list of ingredients not containing allergenes"""
safe_ingredients = list()
for ingredient, allergenes in ingredient_allergenes.items():
impossible_allergenes = set()
for allergene in allergenes:
if any(ingredient not in recipes[i] for i in recipes_with_allergene[allergene]):
impossible_allergenes.add(allergene)
allergenes -= impossible_allergenes
if not allergenes:
safe_ingredients.append(ingredient)
return safe_ingredients
def assign_allergenes(ingredient_allergenes: dict) -> dict:
"""return a dict with each ingredient and its allergene"""
assigned_allergenes = dict()
while ingredient_allergenes:
assigned_allergene = str()
assigned_ingredient = str()
for ingredient, allergenes in ingredient_allergenes.items():
if len(allergenes) == 1:
assigned_allergene = allergenes.pop()
assigned_ingredient = ingredient
break
assigned_allergenes[assigned_allergene] = assigned_ingredient
ingredient_allergenes.pop(assigned_ingredient)
for ingredient, allergenes in ingredient_allergenes.items():
if assigned_allergene in allergenes:
allergenes.remove(assigned_allergene)
return assigned_allergenes
def part1(entries: tuple) -> int:
"""part1 solver"""
recipes, ingredient_allergenes, recipes_with_allergene = entries
safe_ingredients = find_safe_ingredients(recipes, ingredient_allergenes, recipes_with_allergene)
return sum(ingredient in recipe for recipe in recipes for ingredient in safe_ingredients)
def part2(entries: tuple) -> str:
"""part2 solver"""
recipes, ingredient_allergenes, recipes_with_allergene = entries
safe_ingredients = find_safe_ingredients(recipes, ingredient_allergenes, recipes_with_allergene)
for ingredient in safe_ingredients:
ingredient_allergenes.pop(ingredient)
assigned_allergenes = assign_allergenes(ingredient_allergenes)
return ','.join(map(assigned_allergenes.get, sorted(assigned_allergenes)))
def test_input_day_21():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 5
assert part2(entries) == 'mxmxvkd,sqjhc,fvjkl'
def test_bench_day_21(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %d" % part1(entries))
print("Part 2: %s" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

110
2020/solutions/day_22.py Normal file
View File

@@ -0,0 +1,110 @@
"""AOC 2020 Day 22"""
import pathlib
import time
import collections
import itertools
TEST_INPUT = """Player 1:
9
2
6
3
1
Player 2:
5
8
4
7
10"""
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> tuple:
"""take input data and return the appropriate data structure"""
deck1, deck2 = input_data.split('\n\n')
deck1, deck2 = deck1.splitlines(), deck2.splitlines()
deck1 = collections.deque(map(int, deck1[1:]))
deck2 = collections.deque(map(int, deck2[1:]))
return deck1, deck2
def play_space_cards(deck1: collections.deque, deck2: collections.deque) -> collections.deque:
"""return the winner's deck after a space cards game"""
assert len(deck1) == len(deck2)
while deck1 and deck2:
card1, card2 = deck1.popleft(), deck2.popleft()
assert card1 != card2
if card1 > card2:
deck1.extend((card1, card2))
else:
deck2.extend((card2, card1))
return deck1 if deck1 else deck2
def play_recursive_space_cards(deck1: collections.deque, deck2: collections.deque) -> tuple:
"""return the winner and its deck after a recursive space cards game"""
configurations = set()
while deck1 and deck2:
current_config = (tuple(deck1), tuple(deck2))
if current_config in configurations:
return 1, deck1
configurations.add(current_config)
card1, card2 = deck1.popleft(), deck2.popleft()
assert card1 != card2
if card1 <= len(deck1) and card2 <= len(deck2):
sub_deck1 = collections.deque(itertools.islice(deck1, card1))
sub_deck2 = collections.deque(itertools.islice(deck2, card2))
winner, _ = play_recursive_space_cards(sub_deck1, sub_deck2)
else:
winner = 1 if card1 > card2 else 2
if winner == 1:
deck1.extend((card1, card2))
else:
deck2.extend((card2, card1))
return (1, deck1) if deck1 else (2, deck2)
def part1(entries: tuple) -> int:
"""part1 solver"""
deck1, deck2 = entries[0].copy(), entries[1].copy()
winner = play_space_cards(deck1, deck2)
return sum(index * card for index, card in enumerate(reversed(winner), 1))
def part2(entries: tuple) -> str:
"""part2 solver"""
deck1, deck2 = entries
_, winner = play_recursive_space_cards(deck1, deck2)
return sum(index * card for index, card in enumerate(reversed(winner), 1))
def test_input_day_22():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 306
assert part2(entries) == 291
def test_bench_day_22(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %d" % part1(entries))
print("Part 2: %s" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

101
2020/solutions/day_23.py Normal file
View File

@@ -0,0 +1,101 @@
"""AOC 2020 Day 23"""
import pathlib
import time
TEST_INPUT = """389125467"""
class Cup:
"""a cup with a value and a pointer to the next cup"""
def __init__(self, value):
self.value = value
self.next = None
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> list:
"""take input data and return the appropriate data structure"""
return list(map(int, input_data))
def build_list(values: list, n_cups: int = None) -> tuple:
"""return the value of the first cup and a dict of Cup"""
if n_cups is None:
n_cups = len(values)
cups_list = [None]*(n_cups+1)
for i in range(1, n_cups+1):
cups_list[i] = Cup(i)
for i, _ in enumerate(values):
cups_list[values[i]].next = cups_list[values[(i+1)%len(values)]]
return values[0], cups_list
def play_crab_cups(first_cup: int, cups: list, moves: int):
"""play n moves of crab cups"""
current = cups[first_cup]
max_cup = len(cups) - 1
for _ in range(moves):
next_cup = current.next
picked = (next_cup.value, next_cup.next.value, next_cup.next.next.value)
current.next = current.next.next.next.next
label = current.value
while label in picked or label == current.value:
if label != 1:
label = label-1
else:
label = max_cup
destination = cups[label]
next_cup.next.next.next = destination.next
destination.next = next_cup
current = current.next
def part1(entries: list) -> str:
"""part1 solver"""
first_cup, cups = build_list(entries)
play_crab_cups(first_cup, cups, 100)
cur_cup = cups[1]
cups_str = ''
for _ in range(8):
cur_cup = cur_cup.next
cups_str += str(cur_cup.value)
return cups_str
def part2(entries: list) -> int:
"""part2 solver"""
entries.extend(range(10, 1000001))
first_cup, cups = build_list(entries)
play_crab_cups(first_cup, cups, 10000000)
return cups[1].next.value * cups[1].next.next.value
def test_input_day_23():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == '67384529'
assert part2(entries) == 149245887792
def test_bench_day_23(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %s" % part1(entries))
print("Part 2: %s" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

144
2020/solutions/day_24.py Normal file
View File

@@ -0,0 +1,144 @@
"""AOC 2020 Day 24"""
import pathlib
import time
import re
import itertools
TEST_INPUT = """sesenwnenenewseeswwswswwnenewsewsw
neeenesenwnwwswnenewnwwsewnenwseswesw
seswneswswsenwwnwse
nwnwneseeswswnenewneswwnewseswneseene
swweswneswnenwsewnwneneseenw
eesenwseswswnenwswnwnwsewwnwsene
sewnenenenesenwsewnenwwwse
wenwwweseeeweswwwnwwe
wsweesenenewnwwnwsenewsenwwsesesenwne
neeswseenwwswnwswswnw
nenwswwsewswnenenewsenwsenwnesesenew
enewnwewneswsewnwswenweswnenwsenwsw
sweneswneswneneenwnewenewwneswswnese
swwesenesewenwneswnwwneseswwne
enesenwswwswneneswsenwnewswseenwsese
wnwnesenesenenwwnenwsewesewsesesew
nenewswnwewswnenesenwnesewesw
eneswnwswnwsenenwnwnwwseeswneewsenese
neswnwewnwnwseenwseesewsenwsweewe
wseweeenwnesenwwwswnew"""
STEPMAP = {
'e': (1, 0),
'se': (1, 1),
'sw': (0, 1),
'w': (-1, 0),
'nw': (-1, -1),
'ne': (0, -1)
}
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> set:
"""take input data and return the appropriate data structure"""
rexp_steps = re.compile(r'e|se|sw|w|nw|ne')
tiles_steps = [rexp_steps.findall(line) for line in input_data.split('\n')]
black_tiles = set()
for steps in tiles_steps:
dst_tile = find_dst_tile(steps)
if dst_tile in black_tiles:
black_tiles.remove(dst_tile)
else:
black_tiles.add(dst_tile)
return black_tiles
def find_dst_tile(steps: list) -> tuple:
"""calculate the destination tile based on the steps"""
x_dst, y_dst = 0, 0
for step in steps:
d_x, d_y = STEPMAP[step]
x_dst += d_x
y_dst += d_y
return x_dst, y_dst
def count_black_neighbors(tiles: set, x_tile: int, y_tile: int) -> int:
"""return the number of black adjacent tile of a given one"""
black_neighbors = 0
for d_x, d_y in STEPMAP.values():
if (x_tile+d_x, y_tile+d_y) in tiles:
black_neighbors += 1
return black_neighbors
def calculate_floor_bounds(tiles: set) -> tuple:
"""return the floor boundaries"""
min_x = float('Inf')
max_x = float('-Inf')
min_y = float('Inf')
max_y = float('-Inf')
for x_tile, y_tile in tiles:
if x_tile < min_x:
min_x = x_tile
elif x_tile > max_x:
max_x = x_tile
if y_tile < min_y:
min_y = y_tile
elif y_tile > max_y:
max_y = y_tile
return range(min_x-1, max_x+2), range(min_y-1, max_y+2)
def flip_tiles(tiles: set) -> set:
"""calculate the new daily floor"""
new_floor = set()
for tile in itertools.product(*calculate_floor_bounds(tiles)):
black_neighbors = count_black_neighbors(tiles, *tile)
if tile in tiles and not (black_neighbors == 0 or black_neighbors > 2):
new_floor.add(tile)
elif tile not in tiles and black_neighbors == 2:
new_floor.add(tile)
return new_floor
def part1(entries: set) -> int:
"""part1 solver"""
return len(entries)
def part2(entries: list) -> int:
"""part2 solver"""
for _ in range(100):
entries = flip_tiles(entries)
return len(entries)
def test_input_day_24():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 10
assert part2(entries) == 2208
def test_bench_day_24(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %s" % part1(entries))
print("Part 2: %s" % part2(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()

52
2020/solutions/day_25.py Normal file
View File

@@ -0,0 +1,52 @@
"""AOC 2020 Day 25"""
import pathlib
import time
TEST_INPUT = """5764801
17807724"""
def read_input(input_path: str) -> str:
"""take input file path and return a str with the file's content"""
with open(input_path, 'r') as input_file:
input_data = input_file.read().strip()
return input_data
def extract(input_data: str) -> tuple:
"""take input data and return the appropriate data structure"""
return tuple(map(int, input_data.splitlines()))
def part1(entries: tuple) -> int:
"""part1 solver"""
card_key, door_key = entries
loop_size = 0
key = 1
while key not in (card_key, door_key):
loop_size += 1
key = (key * 7) % 20201227
if key == card_key:
return pow(door_key, loop_size, 20201227)
return pow(card_key, loop_size, 20201227)
def test_input_day_25():
"""pytest testing function"""
entries = extract(TEST_INPUT)
assert part1(entries) == 14897079
def test_bench_day_25(benchmark):
"""pytest-benchmark function"""
benchmark(main)
def main():
"""main function"""
input_path = str(pathlib.Path(__file__).resolve().parent.parent) + "/inputs/" + str(pathlib.Path(__file__).stem)
start_time = time.time()
input_data = read_input(input_path)
entries = extract(input_data)
print("Part 1: %s" % part1(entries))
end_time = time.time()
print("Execution time: %f" % (end_time-start_time))
if __name__ == "__main__":
main()