diff --git a/2020/03.input b/2020/03.input new file mode 100644 index 0000000..359ae69 --- /dev/null +++ b/2020/03.input @@ -0,0 +1,323 @@ +.......#................#...... +...#.#.....#.##.....#..#....... +..#..#.#......#.#.#............ +....#...#...##.....#..#.....#.. +....#.......#.##......#...#..#. +...............#.#.#.....#..#.. +...##...#...#..##.###...##..... +##..#.#...##.....#.#..........# +.#....#..#..#......#....#....#. +...........................#... +..........#.......#..#.....#.#. +..#.......###..#.#.......#.#... +....#..#....#....#..........#.. +..##..#.......#.#...#.......... +.....#.......#.....#....#...... +..........##..#................ +....##.#..###...#..##.....#.#.. +..#..#.#.#...#......#...#.....# +....#.#....#...####.##......... +..#.........##...##.#..#..#.... +.#......#...#..#..##.#......... +.#....#.......#..##..##..#.#.#. +...........#....#......#....... +..#....#....#...............#.. +..#.....#....###.##.....#.#..#. +#..........#.#......#.#....#... +....###...#.#.....#....#.####.# +........#......#...#...#..##..# +...##..............##.#.......# +#..........#...........#.#....# +#...#....#..####..#............ +###....#........#.............. +...#.##....................#.## +...#..#.....#.....##...#....#.. +.......###.#...#.........#..... +.#..#.....#.#..#.....#......... +#................#............. +...#......#.#.....##.#.#....#.. +...#..#.#..#.....#...#....#.... +.......#......#........#.....#. +.#.##..##.....#.#......#.#.#... +#...............#.....#....#... +.....#...........#..##......... +.....#..#........##..#..#.....# +..###.#.#.......#.#...........# +##....##....#.#....##...#.##.## +..................##.#.#.....#. +.#...........###...#........... +.#.#....#......#....###.#...... +.......#.##...#...#..#.#....... +..#.....#.#....#..#............ +.....#..#..#....#..#.........#. +..##.#......#.....#...#.#..#.#. +.........#......#....##.......# +#........#..#.#......#...#.#..# +...#....#.#..#....##.......###. +..#...#......#.##..........#... +........#..#..#...#.......#.... +.##.#..#...#..#........#.#.#### +#..#..#..........#....##...#... +....#...#........##........#... +.#......#.......#..#..#........ +#...#.#......#....#............ +#........#..##.#...##.......... +...#..##.....#......##.#..#.#.. +.#.#.....#.....#.####.#..##.... +..........###....#.##...#...... +.......#.......#..#.#.#.##.#..# +..#.#....#......#.#...#.......# +.#...#....#......#...#......... +.#....#..#....#.##.#....#..##.. +...#..#.#..................#... +.##..#.............##.........# +...#.#.#................#.....# +...###..###..................#. +........##.##..#.#...#.....#... +.##...##...#...#....#...#...... +#..#....#..#..#.#....#..####... +.#...............##....##.#.... +#..#................#...#..#... +.#....#.....#..#.#........#.... +...............##.#..##..##.... +.#......#........#....#.#...#.# +.#.....#...##.#........#.##.#.# +..###............#..#.#....#... +..#.....#.........#....#..#.#.. +.##.....#.#..........#.#....##. +...#...#....#..#......#.#.#..#. +#.....#...#....##...#.......##. +.......#.#.........##.......... +............##.#.##...#.......# +.....#........##...#........#.. +.#........#.#.#.#....#......... +#....#..#....#.#..#...#.#...... +....##...........#...#...##.#.# +......#...##.###.....#......... +............#..##....##......#. +......##....#...#.#....#......# +#..#..#..#.#.#.........#...##.# +...#.........#...#.........##.# +#.#.....#.......#.##..#..#..... +##................#......#....# +....#..#.......#....##.....#... +.....#..#...#...#......#.#....# +..#....#.....#.........#.....#. +..#..#..........#.....#........ +.......#..##.#......#.#........ +.............##.....#....#..... +...#....#..#.#.#............... +........#....##..#...#........# +..##...............#.....#....# +........##.#.##.#......#..#.... +..#.##.......#..........##..#.. +.#..............#.#.##......... +.#.......#....#....#.#.#....... +.#.##.......#....#......###.#.. +.......#...#............##..... +........#.#..........##..#..... +...###..#......#.....##..#..#.. +...........##......#....#...... +..............#....#..#..#.#..# +....#...#......#.##...#........ +.#.............#..#......###.#. +#...#..#.#..............##..#.# +....................#.........# +..##..#......#.###.....#...#.#. +.#....#.#........#...#........# +..#....#.....#..............#.. +##..........#..#..#...#........ +...........#..##...#.......#... +........##.............#....... +#....#........#..#.#.###..#.... +...........##..........##...... +#......#.....##.#.##......##... +..#......#.........#.......#..# +......#.#....##..##.#...#.#...# +......#..................##.... +...#....#.#...#.#.......##..... +#.#...##...##........#...##.... +..#.......#.#.#...#............ +.......#......#..#...#......... +#...#..#...........##.......... +......#....#.........#.#....#.. +#......#........#...#..##....#. +.....#.......##..#.#......#..#. +...........#......#...#......#. +#.#.##.....#....#.....##......# +.....##..#.#.#.###........#.#.. +...#...#.#......#......#....... +......###....#..##...#.#.##.... +#.....#.....#.................. +...#...#......#...............# +..#............##..#.....#..... +.#....#...#...#...#...#..#..... +.##......#.........#.###.#..... +#.#.##.......##...#........##.# +.##.#.#......#.....#...#.....#. +....####.##.......#..##..##.#.. +#.#.......#..##....###..#...#.. +..#..#....#...#.#.#.#...#...... +##.........#.##................ +........#.....................# +..#...........#..#..##.#..#.#.. +#...#...................#.###.. +##..#............#.........#..# +...............##...#...##....# +#.#.....#..#.......#......#.... +.#...#......#............#..... +#.......#...#..#....#.......#.. +...#....#.##.#....#....#.#..... +...#..#..............#..#.#..#. +.........#.....#.#...#..#....#. +..#..#..#...##.....##.#.....#.. +.#.#..........#........#....... +...............#........#.#.#.. +.#......#.....#..............#. +........#.#..............#.#... +.......#.#....#..#.#.#..#.#.##. +...##..#...#.#..#...........#.. +#...###.#.....#..#........#.... +.#...##...##...##.#.....###.... +.........#......#.#..##.#.#.... +#....#.#..#...#.#.#....#..#..#. +.#.#...#......###.....#........ +#.....#.#.......#..#.#...#..... +.................#.#....#..##.. +#...........#....###..#......#. +##.#..#....#.#.#.#............. +#.....#..#...#........#........ +..#..#......#..#.##.#.......... +...#....#..#..........#.#.##.## +#........#...#.......#..##.#... +.#.#..#....#.#....#......#..... +##.......##.#........#...#..##. +##.##.....#.......#####.#....#. +..#..###.#.#..#....###..#.##..# +#.........#.............#.#...# +..#...##.#..................#.. +.....#.#....#.#..#.#........#.# +......#.......#.#..##.#.#..#... +..#......#.#..##......#..#....# +..##..#..#.##.#..#....#...##... +###....#...##....##.........#.. +#........##.........#......#..# +...#.........#......#.##....... +.....#.#.#....#......#......... +..#...........#....#......#.#.. +##........#...##.....######.... +....#..#..##.......#..#..#..... +..#....#..##....#......##....#. +...##....#........##......#.... +.#.#...###...#......#.......... +#....#..#.##.........#...#..... +......#..#.........#.##.....#.. +...#............##....#......#. +...#.....##.....#........#.#..# +......#.#..#......#.....#..##.. +#.#.........##..........#...... +..###.....#..#....##..........# +.............##..#....#..##.... +....#.#....##..#......#...#.... +....###.....#..#.......#....... +............#..#............... +......#........#..#......#..... +.#........#.......#.##.......#. +..#.........#..#.#.....##....#. +...#.......#.......#.......##.# +#......##.#.....#......##.#..#. +#..........#.................#. +....#..##...........#.....#.#.. +#.###...#............#.#....#.# +....#......#.#..###....##..#... +....#...#..........##.......... +..#.#............#...#...###... +......#...#......#..#.#........ +.#.......#..#...........##...#. +##...#...##....##.#..#..#.#.... +.......#........#............## +.#......#...#.#................ +#.#........#.#....#..#.##...... +.......#.#...#....##.......##.. +........#.#.#.........##..##... +..##...............#.#.###.#... +......#.#....#..#......##.....# +###.........#.....#.#.....##... +.#.#....#.....#.#.##..#.......# +..#..#.#......#...##..##.#..#.. +...#........#..#....#.......... +#...#.#...#..##....##.......... +.........#........#.##....#..#. +..#...#.#.......##..........##. +###...........##.#......#.#..#. +...#....#...#..#..#......#..... +.....##.......###.#....###..##. +...#...#..........#.#......#... +....#.....##...##..#.#........# +.....#...#..#.....##...##....#. +................##.#.##....##.# +.#..#..#....#.....#....#..#...# +.....###.....#................. +#...#..##..#.........#......... +.....#..#................#..... +.#..#...#......#..#............ +...#...#.#....#....##...#...##. +..........#....#.#..#.#.....#.. +....#...###.##...#..#..#......# +#...#.......#..........#..#.... +.#............#..##.......#...# +....#..#...#............#..#.#. +.#....#.......#..#.#......#.... +...#...#............#...#.....# +....#.#.#..##.#.....#...#.#.... +......#.#.#......#..#...#.....# +......##.....#.............#... +..#...#..#.#....#.............. +.#.#..#....#.#..##....###.##... +..#...........#....#.###.#....# +.....#.........#.#............. +...#.#.....#......###......##.. +...#...#.....#................. +...#..#...##.....##.........#.. +..#...#..#..##..#...#........#. +##..#.#.##.#....#...........#.. +.......#....##....#...##..#..#. +#.......##.#...##...##..#.....# +....#.#...............#......#. +....#.#...#.....#....#......#.. +.#.........#.#....###........#. +.#.#.....#.....#.#.#....#.#.... +............#...........#.#..## +#...#......#..#......#.#....... +...#.#.#.....#..#...#..##...... +...#.#..#...#....#.........#.#. +........#..#......##.....#...#. +...#..#..............#..#...... +.........#.......#...#......#.. +.#......#.....#.....#......#... +......#.......#....#...#.#..... +.#.....#.##..#........#...#.... +#.....##..##....#.#.......#..#. +.#..#...#..#.......#........... +..#..#...#.....##....#.....#... +#.#..............#....#..#..... +.........##...#......#.##...##. +.###...#.#...#.....#.........#. +.....#..........##...#..#....## +.#..#......#....##.#...#....... +.............###.#.#..#.#.#...# +.......#...##..#..#.....###.... +##.......#...........#....#.#.. +##......#...#.#................ +.#.####..##.#...............#.. +..#...#.#.#..#...#........#...# +.##..##.##.....#.......#..#.#.. +...................#......#.#.. +#.##..#..........#............. +##..#......#....#.#............ +.#........#.....##...#......... +.##....#..#..##..........#...#. +#..........##........#..#..#.#. +####.###.#.....#....#..#.#....# +..#...#...#.#.......#....#...#. +......##.###..##.#.###......#.# \ No newline at end of file diff --git a/2020/03.py b/2020/03.py new file mode 100644 index 0000000..d29712e --- /dev/null +++ b/2020/03.py @@ -0,0 +1,49 @@ +def tree_counter(horizontal_shift, vertical_shift, input_list): + tree_count = 0 + row_count = 0 + for i in range(0, len(input_list), vertical_shift): + horizontal = row_count * horizontal_shift + vertical = i + + reference = horizontal % len(input_list[i]) + if input_list[i][reference] == "#": + tree_count += 1 + + temp_input = input_list[i] + if temp_input[reference] == "#": + temp_input = temp_input[:reference] + "X" + temp_input[reference + 1:] + if temp_input[reference] == ".": + temp_input = temp_input[:reference] + "O" + temp_input[reference + 1:] + + row_count += 1 + print(f'''"Row {f"""{vertical}/{len(input_list) - 1}""":8} {temp_input:35} {i:5} {horizontal:5} {vertical:5} {tree_count:4}''') + return tree_count + +# with open('./2020/03.test') as input: +with open('./2020/03.input') as input: + input_list = input.read().split('\n') + +tree_count = 0 +for i in range(len(input_list)): + horizontal = i * 3 + vertical = i + + reference = horizontal % len(input_list[i]) + if input_list[i][reference] == "#": + tree_count += 1 +print(tree_count) + +slope_list = [] +slope_list.append(tree_counter(1, 1, input_list)) +slope_list.append(tree_counter(3, 1, input_list)) +slope_list.append(tree_counter(5, 1, input_list)) +slope_list.append(tree_counter(7, 1, input_list)) +slope_list.append(tree_counter(1, 2, input_list)) + +total = slope_list[0] + +for i in range(1, len(slope_list)): + total *= slope_list[i] + +print(slope_list) +print(total) \ No newline at end of file diff --git a/2020/03.test b/2020/03.test new file mode 100644 index 0000000..8f551de --- /dev/null +++ b/2020/03.test @@ -0,0 +1,11 @@ +..##....... +#...#...#.. +.#....#..#. +..#.#...#.# +.#...##..#. +..#.##..... +.#.#.#....# +.#........# +#.##...#... +#...##....# +.#..#...#.# \ No newline at end of file diff --git a/2020/04.input b/2020/04.input new file mode 100644 index 0000000..71500dd --- /dev/null +++ b/2020/04.input @@ -0,0 +1,957 @@ +byr:1971 +iyr:2017 hgt:160cm +eyr:2020 ecl:hzl +pid:157096267 + +hgt:183cm +pid:368895060 +ecl:oth eyr:2020 +iyr:2013 +byr:1966 + +ecl:lzr cid:279 pid:192cm +hcl:1f7352 iyr:2014 hgt:70cm eyr:1983 +byr:2004 + +hcl:#602927 iyr:2018 byr:1938 ecl:blu +eyr:2024 hgt:172cm +pid:839621424 + +ecl:#12f268 +hcl:#6b5442 +iyr:2012 byr:2011 +eyr:1933 pid:189cm hgt:155in + +byr:1954 +ecl:gry pid:664227667 eyr:2028 +hgt:151cm +iyr:2019 + +ecl:gry +byr:1931 iyr:2017 +pid:459927933 eyr:2028 +hgt:67in hcl:#fffffd + +cid:322 hgt:163cm +byr:1969 hcl:#a97842 pid:472877556 +iyr:2019 +ecl:amb eyr:2030 + +hcl:#733820 ecl:brn byr:2000 eyr:2022 iyr:2014 cid:320 pid:751634349 +hgt:180cm + +ecl:blu eyr:2028 +hcl:#866857 byr:2029 hgt:191cm iyr:2010 +pid:170cm cid:123 + +pid:258660154 byr:1921 hgt:161cm +eyr:2030 +cid:217 iyr:2012 +hcl:#4dd6d4 ecl:grn + +hgt:170cm byr:1978 eyr:2022 pid:399347273 +iyr:2010 cid:109 ecl:blu hcl:#602927 + +pid:172106685 +hgt:183cm +ecl:gry iyr:2020 eyr:2025 hcl:#18171d byr:1980 cid:289 + +cid:77 ecl:#254ad9 +byr:2017 pid:169290741 iyr:2003 hgt:85 hcl:z + +hgt:155cm byr:1987 ecl:oth hcl:#fffffd +iyr:2010 + +ecl:brn iyr:2014 cid:74 +hcl:#623a2f +hgt:187cm byr:1955 pid:008305281 eyr:2025 + +pid:428624233 ecl:grn +eyr:2027 hgt:167cm hcl:#623a2f byr:1960 iyr:2016 + +eyr:2027 pid:358876826 hgt:171cm ecl:oth byr:1957 iyr:2018 +hcl:#ceb3a1 +cid:314 + +ecl:grn eyr:2030 +hgt:73in iyr:2011 hcl:#602927 + +hgt:76in byr:2029 +pid:2703176 iyr:2020 +eyr:2037 ecl:#95d926 +hcl:9574d2 + +eyr:2020 hgt:164cm +byr:1949 hcl:#fffffd pid:591281293 iyr:2014 cid:136 + +cid:268 hgt:73in hcl:#6b5442 eyr:2025 ecl:brn byr:1988 pid:899417027 iyr:2015 + +iyr:2020 hcl:#b6652a hgt:177cm +eyr:2028 ecl:hzl +byr:1995 pid:594197202 + +hcl:#a97842 hgt:179cm byr:1930 +ecl:brn pid:010268954 eyr:2020 iyr:2010 + +iyr:2022 pid:93390086 +cid:321 eyr:2034 hcl:#a97842 hgt:168in byr:2006 ecl:#a8f84c + +eyr:2028 ecl:blu byr:1935 +hcl:#6b5442 pid:187679418 +hgt:174cm iyr:2016 + +iyr:2019 hgt:164cm pid:704379775 +ecl:oth hcl:#888785 byr:1930 +eyr:2025 + +hcl:#6b5442 cid:168 +hgt:171cm eyr:1944 iyr:2018 pid:675364934 +byr:1962 +ecl:hzl + +hcl:z +eyr:2039 +ecl:zzz pid:26281402 cid:144 iyr:1928 +hgt:166cm + +ecl:hzl hcl:#7d3b0c +eyr:2022 pid:011589584 +hgt:64in byr:1945 iyr:2014 + +byr:1950 hcl:#18171d pid:685748669 eyr:2028 iyr:2010 hgt:176cm ecl:grn + +byr:1989 +hgt:163cm hcl:#18171d ecl:grn iyr:2020 pid:721397788 cid:308 eyr:2020 + +pid:443496560 iyr:1999 +eyr:2027 hcl:z +hgt:69in ecl:zzz byr:2019 +cid:108 + +pid:#c9d804 eyr:2011 +ecl:#574df9 iyr:2027 hcl:z byr:2018 +hgt:64 + +hgt:69cm +iyr:1926 hcl:fdcce6 +ecl:#28b358 +eyr:2026 +byr:1994 +pid:76404593 + +eyr:2020 +ecl:hzl pid:978839539 hcl:#efcc98 +byr:1935 cid:121 +hgt:165cm + +ecl:amb +byr:1951 hgt:186cm pid:812513486 iyr:2012 eyr:2029 hcl:#fffffd + +hcl:fcdd61 hgt:168in ecl:grt pid:8474140699 byr:1924 iyr:2027 eyr:2023 + +ecl:oth hcl:#866857 +byr:1965 pid:533941934 hgt:166cm iyr:2019 eyr:2040 + +eyr:2032 pid:0795438812 iyr:2009 hcl:z +byr:2028 hgt:131 ecl:gmt + +cid:102 byr:1923 eyr:2025 +pid:222102208 iyr:2019 hcl:#341e13 +hgt:167cm +ecl:amb + +hgt:180cm byr:1956 iyr:2014 eyr:2022 +ecl:oth cid:175 hcl:#888785 + +cid:216 eyr:2022 +ecl:brn pid:002875069 iyr:2019 hcl:#cfa07d byr:1991 hgt:164cm + +iyr:2014 byr:1933 pid:537809907 +hgt:185cm eyr:2029 hcl:#341e13 ecl:blu + +cid:286 hgt:166cm byr:1977 iyr:2012 pid:541909675 ecl:oth eyr:2020 +hcl:#59eb12 + +hcl:#18171d cid:329 byr:1921 eyr:2027 iyr:2019 +pid:440820443 hgt:75in ecl:blu + +hcl:#733820 hgt:177cm +pid:085529831 eyr:2029 iyr:2010 ecl:amb byr:1972 + +pid:704125918 hcl:#b6652a byr:1981 +ecl:#698ae8 cid:141 iyr:2018 eyr:2026 hgt:66in + +iyr:2020 eyr:2022 +hgt:191cm hcl:#7d3b0c +ecl:blu byr:1943 pid:969407635 + +pid:10899196 +hgt:161cm +ecl:lzr iyr:2023 hcl:#ceb3a1 byr:1986 eyr:2012 + +hcl:#7d3b0c ecl:utc eyr:2020 +byr:2028 pid:#f8c441 iyr:2030 +hgt:164cm + +byr:2003 hcl:z iyr:2012 hgt:187in +ecl:gry eyr:2030 pid:150cm + +pid:427618420 hgt:155cm iyr:2012 +ecl:brn +byr:1948 eyr:2029 hcl:#6b5442 + +ecl:oth hgt:81 +byr:2025 cid:66 pid:174cm hcl:z +eyr:2021 + +byr:2027 ecl:lzr hcl:#888785 eyr:1923 hgt:110 cid:54 iyr:1939 + +hcl:#341e13 byr:1961 eyr:2022 hgt:163cm cid:137 ecl:amb +iyr:2019 + +hcl:#866857 +iyr:2020 +byr:2005 +hgt:139 ecl:amb cid:181 +eyr:2016 +pid:181cm + +byr:2030 +iyr:2014 +hcl:#733820 cid:74 eyr:2021 hgt:179cm +pid:7938817872 +ecl:amb + +hcl:91a6dd +iyr:2019 byr:2024 +hgt:72cm +ecl:gmt eyr:2023 +pid:8440093771 + +ecl:grn byr:1963 cid:60 iyr:2030 +hgt:74 eyr:2022 +pid:193189388 +hcl:#b6652a + +pid:403849590 byr:2012 +eyr:1951 cid:90 iyr:2023 +hgt:69cm hcl:z ecl:gmt + +iyr:2010 hcl:#341e13 +pid:011326174 hgt:185cm byr:1976 cid:207 eyr:2027 ecl:amb + +hgt:64in +pid:499837104 hcl:#3be285 +byr:1944 +eyr:2024 iyr:2017 +ecl:gry + +eyr:2032 pid:#850d4e hcl:deddda ecl:brn hgt:172 byr:2004 +cid:244 iyr:2022 + +hcl:a3346d ecl:amb +pid:#505713 hgt:74cm eyr:2010 iyr:2020 + +byr:1987 +ecl:oth iyr:2012 eyr:2023 +pid:131199420 cid:112 hcl:#a97842 + +cid:256 hcl:#a97842 byr:2000 iyr:2018 ecl:oth +eyr:2022 pid:637777693 hgt:160cm + +hgt:152cm +cid:164 hcl:#866857 ecl:grn eyr:2025 +pid:495224989 iyr:2020 byr:1949 + +iyr:2010 +cid:288 byr:1986 ecl:blu +pid:304077824 +eyr:2020 + +hgt:182cm +ecl:blu +hcl:#18171d pid:047931925 byr:1964 +iyr:2012 eyr:2030 cid:167 + +byr:1958 +hcl:#866857 iyr:2019 hgt:165cm pid:553631683 +cid:109 ecl:gry +eyr:2023 + +cid:156 +iyr:2014 pid:811368482 eyr:2026 hcl:#b6652a byr:1994 +hgt:184cm ecl:brn + +hcl:#733820 +hgt:183cm ecl:grn +pid:265625165 byr:1943 cid:344 +iyr:2011 + +iyr:2017 hcl:#c0946f pid:716422629 cid:104 byr:1974 +hgt:160cm eyr:2021 ecl:brn + +byr:2002 hgt:180cm hcl:#602927 +eyr:2025 ecl:grn iyr:2011 pid:887584172 + +hcl:#888785 ecl:brn eyr:2026 +pid:14483306 byr:1947 +hgt:177cm iyr:2015 + +hcl:#b6652a +ecl:#64783e eyr:2020 hgt:163 pid:651615946 +iyr:2012 byr:1999 + +iyr:2014 ecl:gry hgt:188cm eyr:2028 pid:503058612 hcl:#a31066 + +hgt:178cm hcl:z +ecl:amb +pid:17656631 +eyr:2031 byr:2023 + +hgt:166cm pid:783568747 hcl:#341e13 +byr:1955 ecl:grn eyr:2023 + +iyr:2016 hgt:161cm byr:1989 +eyr:2023 +ecl:amb pid:133770783 +hcl:#fffffd + +cid:75 byr:1986 eyr:2020 pid:099478576 ecl:blu +hcl:#733820 +iyr:2011 hgt:158cm + +pid:911200183 hcl:#602927 eyr:2029 iyr:2018 ecl:brn hgt:181cm +byr:1937 + +iyr:1928 byr:2020 hcl:579202 +hgt:60 ecl:utc eyr:1963 pid:157cm +cid:253 + +eyr:2028 iyr:1949 +pid:284455762 hcl:#a97842 ecl:oth byr:1947 hgt:163cm + +hcl:#18171d eyr:2025 cid:222 +byr:1924 ecl:oth +pid:898594506 hgt:182cm +iyr:2017 + +byr:1935 iyr:2027 +hgt:160in pid:#c090c3 +hcl:#623a2f cid:162 eyr:1942 ecl:amb + +iyr:2014 hgt:160cm eyr:2028 hcl:#623a2f byr:2010 +pid:684765216 ecl:blu + +byr:1958 +hgt:154cm hcl:#a97842 +ecl:oth iyr:2015 eyr:2020 cid:334 + +pid:636691339 iyr:2018 +byr:1930 +hcl:#b6652a cid:86 +hgt:184cm ecl:oth +eyr:2029 + +iyr:2025 +hgt:76cm ecl:#043004 hcl:z +byr:2009 eyr:1999 + +eyr:2020 pid:56419390 iyr:2015 hcl:#ceb3a1 ecl:utc +hgt:98 + +iyr:2014 byr:1927 hcl:#fffffd ecl:amb eyr:2022 +hgt:188cm pid:602778565 + +hcl:#cfa07d eyr:2029 byr:1937 pid:7912057436 +ecl:hzl +cid:192 hgt:68in iyr:2012 + +hgt:155cm +iyr:2015 byr:1954 pid:559203670 +ecl:blu hcl:#fffffd eyr:2025 + +hcl:#341e13 byr:1998 iyr:2019 +cid:312 +ecl:oth +pid:230874778 hgt:161cm + +iyr:2011 ecl:amb +eyr:2026 +hgt:163cm byr:1932 hcl:#733820 pid:850176278 + +eyr:2030 +hgt:170cm +iyr:2017 byr:1972 +pid:014731313 +hcl:#341e13 ecl:brn + +pid:133005637 +hgt:167cm +cid:317 +eyr:2025 hcl:#341e13 iyr:2012 ecl:gry byr:1950 + +iyr:2029 pid:745014772 hgt:68in +eyr:2034 ecl:hzl +hcl:ec07ce + +hgt:165cm +ecl:gry +hcl:#a97842 byr:1921 cid:263 pid:609363367 + +pid:192cm hcl:18f308 +ecl:oth +eyr:2037 cid:239 iyr:2026 byr:2010 + +hcl:d0e525 eyr:2037 iyr:2019 +cid:197 +pid:469740743 +hgt:186in ecl:brn byr:1977 + +ecl:hzl cid:254 hgt:165cm +eyr:2024 byr:1996 +iyr:2021 pid:797277746 hcl:e286e8 + +hcl:#b6652a cid:142 ecl:oth hgt:190cm byr:1962 pid:997137384 iyr:2020 +eyr:2029 + +ecl:brn byr:1962 hcl:#866857 iyr:2020 hgt:152cm pid:701556397 cid:121 eyr:2029 + +eyr:2024 cid:186 hcl:z +byr:1962 hgt:155cm pid:448098321 iyr:2017 ecl:grn + +iyr:2016 +hgt:168cm byr:1999 +cid:286 +hcl:#18171d pid:223995430 eyr:2022 ecl:blu + +pid:227780276 ecl:blu iyr:2017 byr:1985 hcl:#6b5442 hgt:183cm eyr:2028 + +hgt:190cm +ecl:oth eyr:2030 cid:223 hcl:#888785 iyr:2010 +pid:115829664 byr:1967 + +eyr:1992 pid:0688674980 hcl:z +byr:2028 +hgt:186in ecl:#849f7b +iyr:2029 +cid:64 + +eyr:2025 +iyr:2013 byr:1958 ecl:grn +hcl:#ceb3a1 +hgt:153cm pid:815357118 + +pid:038013822 hgt:180cm iyr:2013 +hcl:#623a2f +ecl:grn eyr:2029 byr:1949 + +byr:1923 +cid:299 hgt:184cm iyr:2020 +hcl:#fffffd eyr:2027 +ecl:hzl + +byr:1930 +iyr:2012 +ecl:grn hcl:#87f2c8 pid:787371085 + +iyr:2019 +eyr:2028 pid:107626362 hgt:183cm +ecl:grt hcl:#623a2f byr:1985 + +byr:2011 +hgt:68in iyr:2002 ecl:#5dfa18 hcl:#341e13 pid:205853974 + +iyr:2014 +pid:179cm +hcl:13b9e3 eyr:2022 ecl:#b1759b hgt:184in +byr:1954 + +hgt:183cm hcl:#efcc98 +pid:428260080 cid:231 eyr:2025 ecl:grn +iyr:2010 +byr:1957 + +iyr:2016 +ecl:gry +pid:192cm eyr:2026 +byr:1956 +hgt:174cm hcl:#623a2f + +eyr:2021 ecl:blu cid:230 +byr:1923 +pid:438732879 hgt:167cm +hcl:#602927 + +byr:1948 ecl:xry +pid:154cm hgt:179cm eyr:2029 iyr:2017 +hcl:#dd59ab + +hcl:#ceb3a1 +iyr:2014 byr:1981 hgt:167cm ecl:grn +eyr:2021 +pid:926925947 + +iyr:1985 +pid:652196636 hcl:#18171d ecl:#ff3e10 hgt:162cm byr:2012 eyr:2023 cid:171 + +eyr:2029 +hgt:166cm +pid:499909488 byr:1929 hcl:#866857 ecl:brn iyr:2013 + +pid:440245122 +byr:1992 hgt:179cm iyr:2010 cid:181 ecl:brn hcl:#888785 eyr:2020 + +eyr:2029 hcl:#888785 pid:274994154 ecl:hzl +iyr:2014 byr:1995 + +pid:3195072620 +hcl:z ecl:hzl cid:130 iyr:2030 eyr:2034 hgt:157 + +hcl:#1b0a51 +pid:129985083 eyr:2029 +hgt:192cm cid:236 byr:1996 ecl:blu iyr:2016 + +ecl:lzr pid:899902347 iyr:1982 +hcl:#cfa07d eyr:2028 byr:1927 hgt:155in + +cid:187 eyr:2029 hcl:#efcc98 byr:1986 pid:760318090 +hgt:169cm iyr:2018 ecl:amb + +hcl:#fffffd eyr:2021 pid:532530085 iyr:2019 byr:1995 hgt:169cm + +iyr:1980 +hcl:z eyr:2019 +hgt:72cm pid:6532875244 ecl:#2f2221 byr:2006 + +hgt:174cm byr:1920 +ecl:gry pid:#14fae7 eyr:2026 hcl:#1814d1 +iyr:2013 + +hcl:#ceb3a1 ecl:grn +iyr:2018 +byr:1978 +hgt:183cm pid:566862236 +eyr:2028 + +iyr:2020 ecl:amb +pid:618246345 byr:1940 +hgt:60cm eyr:2027 cid:242 hcl:#b6652a + +ecl:grn +hcl:#18171d byr:1957 pid:325895714 iyr:2018 +eyr:2023 hgt:162cm + +ecl:#a3ed7b +byr:2024 +hcl:z eyr:2022 iyr:2016 cid:350 hgt:119 pid:185cm + +iyr:2010 +byr:2004 eyr:2032 cid:326 hcl:6019c5 +ecl:gmt hgt:137 + +pid:477848102 eyr:2025 hgt:178cm hcl:#e31a3d ecl:brn +byr:1943 + +pid:#65fca1 eyr:2026 hgt:192cm cid:293 ecl:blu byr:2026 iyr:2024 hcl:#a97842 + +eyr:2025 cid:181 hgt:186cm byr:1968 +ecl:brn pid:318405093 hcl:#341e13 iyr:2015 + +hcl:#c12f4b eyr:2025 cid:311 pid:652667870 +ecl:oth +hgt:166cm +byr:1981 iyr:2016 + +ecl:hzl +byr:2025 iyr:2014 +hcl:138d5c eyr:2037 hgt:160in cid:206 +pid:#d9119b + +pid:51419740 cid:141 +iyr:2012 +hgt:90 ecl:#9438f4 hcl:#7d3b0c byr:2021 eyr:2020 + +pid:#0bc613 +hcl:z byr:2017 +hgt:91 cid:284 eyr:1966 iyr:2008 +ecl:#974ceb + +cid:344 iyr:1953 eyr:2020 ecl:hzl byr:2019 hcl:z pid:2969979 + +ecl:gry +byr:1925 cid:113 +hcl:#a97842 pid:744660539 hgt:153cm iyr:2020 + +hgt:177 pid:856186682 eyr:1968 ecl:blu +cid:167 byr:1986 hcl:#866857 iyr:2015 + +byr:1937 eyr:2021 iyr:2017 +cid:91 hgt:183cm hcl:#a97842 ecl:blu pid:149192621 + +hgt:154cm hcl:#602927 ecl:oth +byr:1939 iyr:2018 pid:670669747 eyr:2029 cid:301 + +eyr:2025 pid:249412970 ecl:oth +iyr:2016 +byr:1921 hcl:#a97842 hgt:176cm + +byr:1969 +iyr:2019 hcl:9de0cb +pid:644476999 hgt:75in +ecl:oth eyr:2022 + +hgt:164cm iyr:2016 +byr:1988 ecl:gry +eyr:2030 +hcl:#efcc98 pid:393258887 + +hgt:183cm pid:6930456 eyr:2023 cid:210 ecl:#766482 byr:2023 iyr:2017 hcl:z + +iyr:2011 hgt:165cm eyr:2020 byr:1966 +hcl:#efcc98 pid:691169980 ecl:blu + +iyr:2011 hcl:#602927 eyr:2029 +byr:1966 +ecl:oth hgt:165cm pid:945383793 + +pid:567096741 iyr:2025 +ecl:gry eyr:1944 hgt:187in byr:2026 hcl:8ac39a + +byr:2025 +eyr:2025 iyr:2015 +hgt:191 pid:1659927272 ecl:grn + +iyr:2027 hgt:63in byr:1963 pid:874200881 +ecl:oth hcl:#c0946f eyr:2029 + +hcl:#b37a48 +byr:1957 ecl:hzl +eyr:2030 +iyr:2013 + +pid:#38e0fd eyr:2019 cid:103 +hgt:153in +ecl:#956d7c +iyr:2029 byr:2029 hcl:z + +eyr:2021 pid:956654136 +hcl:#854d9d hgt:186cm byr:1960 iyr:2015 + +eyr:2020 +byr:1995 +hcl:#b6652a ecl:amb pid:746523744 iyr:2015 +hgt:178cm + +eyr:2020 hgt:173cm cid:322 byr:1956 iyr:2020 ecl:blu +pid:833595649 + +ecl:gry iyr:2017 eyr:2020 pid:537816651 hgt:183cm cid:160 byr:1996 hcl:#733820 + +iyr:1920 +byr:2013 +hcl:z eyr:1932 pid:169cm + +eyr:2030 cid:258 iyr:2020 ecl:grn byr:1947 pid:571610070 +hgt:162cm hcl:#888785 + +byr:2025 hgt:155cm iyr:2030 ecl:amb eyr:2002 + +iyr:2020 ecl:hzl +pid:090561426 hcl:#a97842 +byr:1923 + +ecl:hzl +iyr:2019 +hcl:#c0946f eyr:2025 +byr:1999 hgt:178cm pid:026042669 + +hgt:74in +eyr:2027 iyr:2015 ecl:gry +byr:2005 pid:#28b09d + +eyr:1953 byr:2014 ecl:lzr cid:202 hcl:1af88d +iyr:2028 + +cid:99 +pid:706477697 iyr:2018 hgt:171cm eyr:2027 +ecl:oth +byr:1978 hcl:#930aef + +iyr:2017 +byr:1935 +eyr:2029 +ecl:amb pid:321873254 hgt:179cm hcl:#1b9aea cid:160 + +iyr:2013 ecl:hzl eyr:2023 cid:233 byr:1996 pid:605962483 hgt:175cm hcl:#ceb3a1 + +pid:754905579 +ecl:brn eyr:2021 hcl:#ceb3a1 +byr:1943 hgt:59in + +cid:110 byr:1935 eyr:2021 hgt:172cm iyr:2020 +pid:643443673 hcl:#888785 ecl:brn + +ecl:gmt hcl:#cfa07d +hgt:148 iyr:2024 pid:635827422 +eyr:1935 +byr:1964 + +iyr:2012 byr:2016 hcl:z +hgt:178cm pid:213073693 eyr:2005 + +ecl:#b3cc58 byr:2027 pid:172cm hcl:#888785 hgt:177cm eyr:1988 +iyr:2027 + +eyr:2029 +byr:1923 +hcl:#d9855b cid:134 pid:068598146 hgt:152cm ecl:blu + +cid:309 +iyr:2010 ecl:oth hgt:188cm hcl:#18171d eyr:2028 pid:174227992 byr:1931 + +iyr:2010 hgt:72in cid:266 ecl:brn pid:0090854908 +hcl:#623a2f eyr:2032 +byr:1967 + +pid:192554211 eyr:2020 hgt:192cm ecl:gry cid:158 iyr:2015 byr:1940 +hcl:#efcc98 + +cid:248 hgt:75in eyr:2025 byr:1957 hcl:#c0946f +iyr:2019 +ecl:brn + +pid:96533216 hcl:z ecl:blu eyr:2027 hgt:193cm cid:224 +byr:1928 iyr:2014 + +iyr:2010 +eyr:2022 cid:276 hcl:#a97842 byr:1968 ecl:gry pid:808830560 hgt:188cm + +hgt:158in +pid:097590485 iyr:2030 eyr:1940 hcl:z cid:274 +ecl:#2ea9ec +byr:2024 + +pid:616947922 byr:1982 iyr:2014 hgt:186cm ecl:oth hcl:#888785 + +byr:1941 pid:039744699 hcl:#efcc98 hgt:190cm iyr:2011 +eyr:2020 ecl:blu + +byr:1971 +ecl:hzl hgt:65in +pid:076133019 iyr:2019 eyr:2030 + +ecl:blu iyr:2011 byr:1928 hcl:#c0946f hgt:172cm eyr:2026 pid:171544458 + +byr:1929 pid:145819079 ecl:hzl +hgt:192cm iyr:2015 eyr:2020 hcl:#b6652a + +byr:1981 ecl:amb pid:123467924 +eyr:2024 hcl:#18171d +hgt:184cm iyr:2017 + +byr:1957 +ecl:oth pid:881258191 hgt:65in iyr:2010 +hcl:#a97842 + +ecl:amb eyr:2020 hgt:152cm +iyr:2021 pid:9448811025 hcl:#c0946f cid:204 byr:2030 + +eyr:2022 pid:208725350 +byr:1944 ecl:blu hcl:#18171d cid:164 +hgt:170cm iyr:2014 + +hcl:#18171d eyr:1952 iyr:1939 pid:788651896 hgt:157in byr:2007 + +byr:1944 cid:87 pid:463367304 +iyr:2020 hgt:188cm ecl:gry +eyr:2027 hcl:#cfa07d + +ecl:hzl +iyr:2018 hgt:164cm byr:1972 cid:272 pid:990204374 +hcl:#6b5442 + +hgt:155cm pid:791416860 iyr:2015 +cid:278 hcl:#18171d byr:1994 ecl:brn +eyr:2023 + +iyr:2017 cid:245 eyr:2026 byr:1932 ecl:blu +hgt:159cm pid:904760812 hcl:#18171d + +ecl:blu hcl:#6b5442 +iyr:2015 eyr:2023 pid:535891497 hgt:175cm cid:168 byr:1920 + +byr:2000 hcl:#6b5442 hgt:156cm +pid:765444727 iyr:2012 +ecl:brn +eyr:2028 + +eyr:2005 pid:9092484649 +byr:2028 +ecl:#5fc7fc hgt:81 +iyr:1988 hcl:8280e1 + +cid:275 +byr:1928 iyr:2010 hcl:#888785 pid:596954301 ecl:brn eyr:2020 hgt:166cm + +cid:163 +byr:1984 eyr:2027 iyr:2020 +ecl:gry hgt:166cm pid:650001846 +hcl:#602927 + +iyr:1925 eyr:2030 +byr:1985 hcl:#cfa07d ecl:#f16a95 hgt:150cm pid:67853501 + +ecl:gry +eyr:1949 cid:218 hgt:73cm byr:2004 pid:055108092 +iyr:1961 + +eyr:2024 iyr:2016 pid:133523002 +hgt:62in hcl:#d99c14 +byr:1996 ecl:hzl + +eyr:2026 iyr:2019 hgt:189cm ecl:brn hcl:#623a2f +byr:1979 pid:172111665 + +iyr:2017 +eyr:1937 ecl:#bfd0ee +byr:1964 hcl:#733820 +hgt:169cm pid:33181449 + +eyr:2024 hcl:#6b5442 +iyr:2014 +hgt:68in pid:577055593 ecl:grn byr:1996 + +hcl:z cid:150 eyr:2039 byr:2015 pid:2453663020 ecl:brn +hgt:154cm + +hcl:#efcc98 eyr:2022 +ecl:grn hgt:167cm byr:1978 iyr:2010 pid:180446111 + +ecl:gry +iyr:2020 hgt:152cm pid:#cce9cf eyr:2028 +byr:1942 +hcl:z + +hcl:#341e13 ecl:brn iyr:2019 +pid:589837530 cid:157 byr:1925 hgt:183cm eyr:2020 + +byr:2009 +pid:179cm hgt:164cm +iyr:1927 hcl:#cfa07d eyr:2034 + +ecl:oth iyr:2012 +eyr:2028 hcl:#866857 pid:716964854 +byr:1940 cid:113 hgt:193cm + +byr:1985 iyr:2011 hcl:#866857 pid:454558712 eyr:2025 cid:301 +hgt:62in ecl:blu + +hcl:#733820 eyr:2025 ecl:amb +pid:855788635 iyr:2016 +byr:1965 +cid:140 hgt:183cm + +hcl:#efcc98 cid:326 eyr:1961 +pid:001357810 iyr:1947 ecl:#8abfc8 hgt:75 byr:2012 + +hgt:60cm pid:#e28da4 byr:2014 iyr:2019 eyr:2040 ecl:utc + +hcl:#733820 eyr:2022 pid:708208638 hgt:162cm cid:326 iyr:2018 ecl:oth byr:1997 + +iyr:1967 byr:2013 pid:8595504787 hgt:73cm ecl:dne + +pid:808787977 hcl:#18171d +cid:205 hgt:181cm +byr:1986 +ecl:gry iyr:2013 + +ecl:dne iyr:2009 +byr:2027 +hgt:188in hcl:#c0946f +pid:585147305 eyr:2024 + +hcl:#733820 iyr:2019 +eyr:2020 +hgt:190cm +pid:042907748 ecl:grn byr:1920 + +ecl:#603ad1 +eyr:2026 +hcl:33f9f8 +pid:862887360 hgt:156in byr:1993 +iyr:2013 + +ecl:oth eyr:2030 byr:1960 +hcl:#a97842 cid:285 +hgt:60in pid:655974048 iyr:2016 + +iyr:2030 +hgt:143 +pid:65806846 byr:1948 hcl:#72a0d3 eyr:1934 ecl:#7cd402 + +hcl:z pid:#0f7c0a iyr:2012 hgt:161cm +byr:2022 eyr:1937 + +hcl:#fffffd ecl:hzl +hgt:191cm byr:1935 iyr:2015 cid:240 eyr:2030 pid:778049989 + +ecl:amb iyr:2011 hcl:#e196f6 pid:231470794 eyr:2026 hgt:179in byr:1979 + +ecl:oth hcl:#6b5442 pid:181cm hgt:72cm +eyr:2040 iyr:2010 + +iyr:2016 eyr:2026 pid:113617276 +cid:117 hgt:176cm ecl:grn +hcl:#c5b999 + +iyr:2016 byr:1941 +pid:846760253 hgt:60cm +hcl:#7d3b0c ecl:zzz +eyr:1972 + +eyr:2023 hcl:#623a2f +cid:103 pid:476193829 hgt:181cm ecl:oth byr:1997 +iyr:2014 + +ecl:#b64a07 hcl:7bb40c byr:2028 eyr:2039 pid:#e2ba33 hgt:189 iyr:1940 + +pid:#3ecfd8 hcl:#7d3b0c iyr:2014 ecl:#30a5e7 hgt:73cm byr:1954 + +ecl:dne +byr:2011 pid:512088455 +hcl:#18171d eyr:2023 +iyr:2024 + +byr:1996 eyr:2026 pid:268556486 ecl:brn +hgt:150cm +iyr:2013 hcl:#7d3b0c + +iyr:2014 +ecl:grn pid:222910621 hcl:#602927 +eyr:2030 hgt:155cm + +pid:530689228 byr:1938 +iyr:2015 +hgt:185cm ecl:hzl eyr:2022 hcl:#866857 + +hcl:#b6652a byr:2028 iyr:2018 cid:150 ecl:lzr pid:706073193 hgt:169cm + +hgt:171cm ecl:gry hcl:#6b5442 byr:1953 +iyr:2011 pid:622763802 eyr:2026 + +eyr:2032 hgt:137 +pid:5033763648 +byr:1925 ecl:hzl hcl:#623a2f iyr:2024 + +byr:1930 pid:6999766453 ecl:#3e3e07 +hcl:#602927 iyr:2010 eyr:2039 +hgt:160cm + +hgt:122 ecl:amb pid:105302121 iyr:2017 +hcl:#733820 +eyr:2027 byr:1955 + +hcl:#95f96b +hgt:193cm iyr:2020 pid:719337690 +byr:1971 +ecl:brn eyr:2024 \ No newline at end of file diff --git a/2020/04.py b/2020/04.py new file mode 100644 index 0000000..ba7eb70 --- /dev/null +++ b/2020/04.py @@ -0,0 +1,63 @@ +# with open('./2020/04.test') as input: +with open('./2020/04.input') as input: + input_data = input.read() + +input_list = input_data.split("\n\n") + +working_list = [] +for one_input in input_list: + one_worker = {} + one_input = one_input.replace('\n', ' ') + attribute_list = one_input.split(' ') + for one_attribute in attribute_list: + attributes = one_attribute.split(":") + one_worker[attributes[0]] = attributes[1] + working_list.append(one_worker) + +target_list = ['byr', 'iyr', 'eyr', 'hgt', 'hcl', 'ecl', 'pid'] +valid_count = 0 +for one_item in working_list: + if all(element in one_item.keys() for element in target_list): + valid_count += 1 +print(valid_count) + +valid_count = 0 +for one_item in working_list: + test_check = 0 + test_str = "" + if all(element in one_item.keys() for element in target_list): + test_check += 1 + test_str = test_str + "keys|" + else: + continue + if int(one_item['byr']) >= 1920 and int(one_item['byr']) <= 2002: + test_check += 1 + test_str = test_str + "birth_year|" + if int(one_item['iyr']) >= 2010 and int(one_item['iyr']) <= 2020: + test_check += 1 + test_str = test_str + "issue_year|" + if int(one_item['eyr']) >= 2020 and int(one_item['eyr']) <= 2030: + test_check += 1 + test_str = test_str + "expire_year|" + + print(one_item['hgt'][-2]) + if (one_item['hgt'][-2] == 'cm' and int(one_item['hgt'][:-2]) >= 150 and int(one_item['hgt'][:-2]) <= 193) or (one_item['hgt'][-2] == 'in' and int(one_item['hgt'][:-2]) >= 50 and int(one_item['hgt'][:-2]) <= 76): + test_check += 1 + test_str = test_str + "height|" + print(one_item['hcl'], len(one_item['hcl'])) + if len(one_item['hcl']) == 7: + test_check += 1 + test_str = test_str + "hair|" + if one_item['ecl'] in ['amb', 'blu', 'brn', 'gry', 'grn','hzl', 'oth']: + test_check += 1 + test_str = test_str + "eye|" + if set('0123456789').issubset(one_item['pid']) and len(one_item['pid']) == 9: + test_check += 1 + test_str = test_str + "passport|" + if test_check == 8: + valid_count += 1 + print(test_check) + print(test_str) + print(one_item) + +print(valid_count) \ No newline at end of file diff --git a/2020/04.test b/2020/04.test new file mode 100644 index 0000000..3b38741 --- /dev/null +++ b/2020/04.test @@ -0,0 +1,13 @@ +ecl:gry pid:860033327 eyr:2020 hcl:#fffffd +byr:1937 iyr:2017 cid:147 hgt:183cm + +iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884 +hcl:#cfa07d byr:1929 + +hcl:#ae17e1 iyr:2013 +eyr:2024 +ecl:brn pid:760753108 byr:1931 +hgt:179cm + +hcl:#cfa07d eyr:2025 pid:166559648 +iyr:2011 ecl:brn hgt:59in \ No newline at end of file diff --git a/2021/03.input b/2021/03.input new file mode 100644 index 0000000..2995822 --- /dev/null +++ b/2021/03.input @@ -0,0 +1,1000 @@ +010101110000 +010011000110 +010101000011 +111100100001 +011100110101 +110001010101 +001111110101 +101100011100 +010111111011 +101010111101 +101000001110 +001000100001 +000100011110 +100011000100 +101100100001 +101010111010 +111000001011 +101101001011 +000010010110 +110111100111 +111101011110 +100100010010 +110001011110 +010011101000 +111110000110 +110001011111 +001001010110 +110111100100 +100111000101 +110011110000 +000110000010 +010001100001 +111110111011 +100010101011 +000000010101 +100010101110 +100110100111 +100111101111 +110011110001 +001000111100 +001101010010 +111101011101 +011000110001 +111111011010 +011000000000 +100000111001 +011110101100 +011101010111 +011001111110 +011100101101 +101100010011 +001100110000 +110101101100 +110110001100 +000101101110 +001010110010 +111110110110 +111010010011 +100010111111 +001001001000 +110111001011 +010110000010 +100000000100 +100001010010 +110010011101 +000001011011 +000100010100 +101011000001 +011101110111 +001100010100 +101000010110 +111111001100 +110011001011 +110000000000 +010100110101 +001111100011 +100011010010 +100111100011 +110101001010 +011111011000 +001010100110 +010101010100 +110111011111 +001001010000 +001011010101 +101111011011 +101001101000 +000011101110 +000101110010 +100011001010 +011001010010 +100100110011 +010010011100 +001100100110 +100111110111 +000111111000 +100000001101 +001111010101 +000001001111 +000101100000 +000101001111 +101010001001 +111011110001 +000111100011 +110011000010 +110011111101 +101001010110 +101111111000 +000110100010 +101111010001 +010011110001 +111110010010 +101111011101 +101110111101 +010001011111 +101110011010 +001110001100 +000110011001 +000101000101 +101010111011 +110010101100 +000100101101 +010111011111 +111001010110 +000010100100 +100000111100 +101101110001 +100001111010 +000111010010 +111100000110 +010010000000 +010001001011 +111101010000 +010011111110 +111011101011 +110110100110 +100001000011 +010010000110 +010000000001 +000001000101 +011010100000 +001011011000 +110101010001 +011000111110 +010011101101 +010011000011 +011010011101 +001101110100 +010001100101 +111011100011 +010111101000 +111100000010 +010000110000 +000100111001 +010010110100 +000101110110 +000011001110 +111010111100 +100101010001 +111011000101 +011111101100 +000110010001 +100011101111 +100101001110 +101101110010 +000000011010 +000001101000 +010110011000 +110100001001 +111111101100 +011010110001 +011100111101 +001101010110 +100111000111 +000000001111 +001110101010 +101000011001 +000111010111 +100110110001 +100011000011 +110111101011 +000110111001 +000010010011 +010111011001 +000111001000 +100011011010 +011101000100 +101010010100 +010111110000 +011011100111 +000001110001 +000100111000 +111100001011 +100101010000 +000110110100 +110011110111 +111000010111 +101110011000 +110011010000 +001111000100 +111010001001 +110001111000 +011101011111 +000001001100 +110100111011 +110001011011 +001010000100 +110011101110 +101100100100 +100101100001 +001010001010 +101010001000 +000110101001 +001100010000 +110001000101 +000100111110 +000110100111 +100010001010 +100100010110 +010001110011 +101111010010 +100000001001 +000110110000 +100010011011 +111101000001 +101111111011 +111111100110 +101001101010 +000011111011 +110000000011 +000001111010 +001001000100 +101110001101 +100111011111 +110101101110 +100011011011 +101000010001 +101001111000 +111101110010 +000101000011 +100100010100 +010101111101 +100110001011 +010011010111 +110111100101 +110010010101 +100010101101 +100110000110 +001101000001 +111001001000 +010111010011 +000110001111 +010101011010 +000000001000 +001001100100 +101111111001 +001110101000 +000110100100 +001111101111 +010100011000 +010000110110 +011101101110 +010100100100 +111110010101 +101100000110 +011010110000 +001001011101 +000000000101 +100101111001 +110101110110 +100111101010 +010010101101 +010100001111 +111111111110 +011111000000 +000001101111 +011001011001 +001101101000 +011010110110 +100101000110 +110001101110 +110100101011 +010001110100 +011110110101 +010001010001 +110110101000 +010000100011 +010101011001 +101111111010 +000011110010 +001000011101 +110001100010 +110110000011 +010000111011 +111010010000 +011001001000 +000111011010 +011111111100 +111001111100 +001101000100 +101110001011 +101110000111 +011010111111 +110011100111 +001101110010 +011111101111 +001110000110 +010111100001 +110100101001 +101010110010 +111011010100 +101001110010 +101101000100 +100111010001 +000011010110 +100110000100 +101000101010 +000000001010 +110100111010 +110010011010 +100110010100 +011101110010 +000111111010 +001000101001 +110100110010 +100100111011 +011001010111 +111000101010 +011001011011 +011010000000 +001101101110 +101010111000 +101010011000 +011000010101 +111001011010 +100111111111 +001101001100 +111011011010 +110110100011 +111010010100 +000110011101 +011100010011 +011111100111 +010110100000 +001100001000 +000110000110 +000101011011 +101011101011 +111101111110 +111111110000 +101101001100 +011000110110 +100111001000 +011011111100 +001111011110 +111011100100 +000101010010 +100011011000 +100000100110 +100000110011 +011000010110 +001010110100 +100111100010 +011110101011 +110111111010 +011100110110 +100100000000 +011010101101 +001101000010 +010110010111 +100010011100 +111101010101 +011011010111 +000000000110 +101001100000 +010100110011 +010101111111 +101110111001 +101101111000 +101110101000 +011011111110 +010001101010 +001000101010 +111100111111 +001011011110 +101010101001 +011111001010 +001001001111 +101000101101 +001111011000 +000100001101 +101101011000 +001100000100 +001000111101 +000001110100 +111101011111 +111010000010 +101111011111 +001100110101 +101010110001 +001110111010 +010010111110 +101101010011 +100001100110 +110010010001 +111100111001 +000100010001 +110010101010 +111010110101 +000001010110 +000111110110 +111010101100 +011110001100 +010110001001 +010111100011 +001010111000 +100111100111 +110110011001 +010100000000 +001011001111 +110010110000 +100011001111 +100111111011 +110001001001 +000100101111 +011010011011 +001001111101 +111110001100 +101111110010 +101100101110 +100110111001 +111010110011 +110010011110 +001111001101 +010011100111 +000111000011 +101101000000 +000001100101 +011101111001 +110100100110 +000110000001 +110111011101 +011100000110 +001011110100 +010001011011 +110000011110 +110001001011 +110100000001 +011010010100 +010010000101 +001010110111 +110001001111 +101100000001 +010000000000 +101110010001 +001100101110 +010000011010 +010100101011 +011010101100 +111101011011 +110111010000 +111111101111 +111011111011 +110001110111 +011100100011 +100001110101 +100111011001 +100110010000 +100110101110 +110101100001 +001010001101 +011101101000 +110001001110 +110010111011 +111100110100 +101011100011 +010100100101 +010001101111 +111000110101 +001000101011 +101101000101 +011000100111 +001111000011 +011000000011 +000011001111 +001010011111 +101001100010 +101010100001 +001001110010 +101010000111 +010111011010 +110101110111 +000110101111 +000110010011 +010110110010 +100111001011 +001100111111 +111110000001 +110110111000 +101010000100 +011100101010 +001000010101 +010010011001 +011111000110 +010011010011 +001011101101 +001001110100 +110101011100 +011000110100 +010101101000 +100000100000 +011011111010 +011010011111 +111011011101 +001111101110 +001000110101 +010001011100 +110101100010 +001100100100 +001100101011 +100110111000 +001100101101 +101000001011 +001100010101 +001100011010 +101011010101 +110101011111 +101111001011 +000010001111 +011110001111 +110000000100 +000110100001 +010010101111 +110000000110 +010011000000 +011001000101 +001101011010 +000011001101 +110100101010 +111001010111 +010011010101 +111010100101 +111110110101 +111110011100 +110010000110 +000110100011 +001000111000 +000101101100 +101110001010 +010010010110 +100001110111 +111010100010 +110110010111 +101000011000 +100100111010 +001000011011 +111101101011 +101001010111 +100110000011 +100001010001 +011011000001 +010110010101 +110001010000 +001110000000 +111001001110 +011011101100 +000100001111 +111000110011 +111101101101 +100110000000 +100011110110 +001000000010 +110011011000 +111000100110 +100110110000 +010011101010 +111011001010 +001101111000 +001100000111 +001110011110 +100001000100 +000010000111 +011010101001 +111110001001 +110110000010 +011011101101 +110001111010 +011001101110 +010011000010 +100101110100 +101000100001 +000111011101 +101100001011 +100000011010 +111001001001 +100000000001 +000101111001 +100101101101 +111001101111 +001011011011 +000010101000 +001010111010 +000100100011 +001110101101 +100000111000 +110110001110 +000111101101 +001010001111 +011000111011 +100000100100 +100011010110 +000010000000 +001000001101 +010001001110 +000111111011 +100110000001 +110010111000 +111100111100 +001000001100 +000010110100 +011010001110 +110001110101 +001100000101 +100010110100 +111000000010 +110100100101 +010010111011 +010110011001 +001001101100 +001010101010 +100001011100 +010001101001 +000000010010 +000101111010 +011000101011 +111111010101 +011110101111 +011110011001 +001101101101 +111110101110 +101111110100 +010101001111 +010010011101 +000110101100 +011100000011 +100011101001 +101101100111 +110011101100 +000110111010 +000011001000 +111101010011 +011011101110 +111101001100 +100100101111 +111010110111 +000001100110 +110100110101 +110100001011 +111010000001 +001011110011 +001010110101 +100001100000 +101000101100 +011011100001 +000011011011 +100101110001 +101100111100 +010000111110 +010100101101 +001111011111 +110101010000 +000110010100 +001001011011 +110111111011 +111100010110 +110000101011 +111001000100 +000100000111 +001011001110 +011110100010 +011011110101 +001100011001 +111010011111 +011011110110 +111101000000 +101111110000 +011100111000 +010010011011 +101000110010 +001101101111 +010001000011 +001010010110 +101000010010 +110111001111 +011111010101 +111111011001 +100011110011 +110001100100 +100000010100 +001111011010 +111001111000 +110101001011 +101000110001 +111001111111 +110000010111 +000000100100 +101011101110 +111001110111 +001110011010 +110011101000 +001011100100 +011001011111 +010100010101 +011111111010 +010010110000 +100011101110 +000011000110 +001001010111 +010111110100 +010110110101 +010000101000 +101010101010 +000100100010 +000110011000 +101010110101 +100000100001 +101100010010 +010110000110 +011011010011 +000001010010 +011101111110 +100010000100 +000100101110 +010110010001 +101100011011 +010111010000 +101100011111 +010011001010 +100010100000 +001001101001 +110010011001 +111000110100 +111111010000 +111100101110 +101010001010 +111111100100 +011110001110 +101100001111 +001010001100 +110100100011 +011100010101 +110001011000 +000010100001 +011000011110 +000000101101 +000011101101 +111010011000 +000101110100 +111100011010 +101100010110 +100001101011 +110100110100 +101100111010 +010000011110 +101001100011 +000101110001 +001101111111 +111101000101 +100101111101 +001101011110 +011111101011 +100000010101 +011010000001 +011000011101 +110101011110 +111010101000 +110111111100 +101111110011 +101101001001 +000111101001 +010110000011 +110011000000 +000001111101 +001011101000 +001001111011 +110110000111 +101100010101 +101100100111 +000010110001 +110000111011 +110111001000 +010010111111 +100010110000 +010000111100 +101001000111 +010100001100 +001111001010 +010100101010 +100001000010 +010011101111 +100011000001 +110000001101 +011001011110 +100111111001 +001100111101 +010110100110 +001000011001 +101000111110 +000100001011 +111110100111 +011100111001 +100011111001 +100001100001 +110110001011 +110011101111 +011010111011 +110101010110 +010111101001 +111110000011 +111100000111 +011111100100 +101001000001 +110111010100 +000011000000 +000100111101 +001100010011 +100000010011 +010010001001 +010111000100 +110110010100 +011100101110 +110110100010 +100111010111 +001111010011 +000110110110 +000010000110 +110100010001 +010100111101 +011001000110 +101011010100 +001110001101 +101111110101 +110011001010 +110100011100 +001101011000 +100101101110 +000001000111 +111001101011 +101011000010 +001001011111 +111000111010 +111011100110 +001001011100 +000010011000 +000101001001 +100110001111 +010100100010 +001101000101 +010111111100 +100010000001 +110101101111 +100010101010 +110110010001 +011101000111 +011110001010 +100110011110 +010011100100 +110101110100 +000000110010 +001111101100 +010011010010 +010000100000 +110001000100 +110110111111 +011100001111 +110110001101 +111110000010 +010001110010 +001101110101 +111111101101 +010101101101 +001011011100 +001011000001 +001011011101 +010001100010 +011110110011 +000101101011 +000110111000 +101101110000 +101011011001 +001001001110 +000001000000 +101011010010 +101110010111 +110011100001 +001011101001 +000000100001 +010000100110 +101111010000 +011000011100 +100011100110 +110111110011 +110010000100 +101110000000 +110010101101 +011101111000 +001111000110 +101001011100 +011111001111 +111011101010 +001110101110 +101001000011 +111101101111 +111001110101 +000110100110 +111111011011 +101011011011 +111100101101 +111111010100 +101010010000 +101000110011 +011110100000 +010100101001 +010011100011 +101000111001 +101100000111 +101010100010 +101110011111 +111011011110 +110011011001 +101001101101 +110010001011 +010100101000 +001010011010 +001100000000 +110000010000 +000110111011 +011101111111 +011001001001 +011011001001 +000100101001 +110010010010 +000110001001 +001000100011 +101011101111 +100111110010 +110010101011 +000000110110 +010111001101 +100100001111 +100010001011 +011101100100 +000011111000 +010100111011 +010101101100 +100110100110 +110100101110 +010111111001 +010010011110 +111110000100 +000110001101 +100100100001 +111011010111 +101001010101 +111011010010 +101001000000 +100111101100 +101010110000 +000111001101 +000100100110 +100100101000 +111000011001 +000110110101 +111010000011 +101100110001 +000001011000 +001110110011 +101000100110 +100110100101 +010001000111 +100011010001 +010100011101 +110100110110 +100010100110 +101100010001 +010011000100 +100100010101 +110000101101 +010101001100 +100011100100 +001111010100 +100111001001 +110000100000 +100100010111 +010101000010 +101101001010 +110101111101 +010100000110 +011101100110 +011011010010 \ No newline at end of file diff --git a/2021/03.py b/2021/03.py new file mode 100644 index 0000000..692d60b --- /dev/null +++ b/2021/03.py @@ -0,0 +1,88 @@ +with open('./2021/03.input', 'r') as input_file: +# with open('./2021/03.test', 'r') as input_file: + input_data = input_file.read() + +working_data = input_data.split('\n') + +working_dict = {} + +for one_row in working_data: + for i in range(len(working_data[0])): + if i not in working_dict.keys(): + working_dict[i] = {} + one_dict = {} + one_dict[0] = 0 + one_dict[1] = 1 + working_dict[i] = one_dict + + working_dict[i][int(one_row[i])] += 1 + +# Make gamma / epsilon +gamma = '' +epsilon = '' +for one_column, one_item in working_dict.items(): + if one_item[0] > one_item[1]: + gamma = gamma + '0' + epsilon = epsilon + '1' + else: + gamma = gamma + '1' + epsilon = epsilon + '0' +print(int(gamma, 2) * int(epsilon, 2)) + +# Part 2 +co2_data = working_data.copy() + +index = 0 +count_0 = 0 +count_1 = 1 +output = "" +while len(co2_data) > 1 and index < len(co2_data[0]): + # Get count at index + for i in range(len(co2_data)): + if co2_data[i][index] == "0": + count_0 += 1 + if co2_data[i][index] == "1": + count_1 += 1 + + # Get highest bit + if count_0 < count_1: + output = output + "0" + if count_0 > count_1: + output = output + "1" + if count_0 == count_1: + output = output + "0" + + # Filter out anything without this bit + co2_data = [x for x in co2_data if x[index] == output[index]] + + count_0 = 0 + count_1 = 0 + index += 1 + +o2_data = working_data.copy() +output = "" +index = 0 +while len(o2_data) > 1 and index < len(o2_data[0]): + count_0 = 0 + count_1 = 0 + + # Get count at index + for i in range(len(o2_data)): + if o2_data[i][index] == "0": + count_0 += 1 + if o2_data[i][index] == "1": + count_1 += 1 + + # Get highest bit + if count_0 < count_1: + output = output + "1" + if count_0 > count_1: + output = output + "0" + if count_0 == count_1: + output = output + "1" + + # Filter out anything without this bit + o2_data = [x for x in o2_data if x[index] == output[index]] + + index += 1 +print(int(o2_data[0], 2) * int(co2_data[0], 2)) \ No newline at end of file diff --git a/2021/03.test b/2021/03.test new file mode 100644 index 0000000..665fd57 --- /dev/null +++ b/2021/03.test @@ -0,0 +1,12 @@ +00100 +11110 +10110 +10111 +10101 +01111 +00111 +11100 +10000 +11001 +00010 +01010 \ No newline at end of file