From ca9736d8ec6d804276eee6fa5e5726e8f36d8ecb Mon Sep 17 00:00:00 2001 From: JISAUAY Date: Mon, 2 Dec 2024 09:58:35 -0600 Subject: [PATCH] init --- 2015/day1/input.text | 1 + 2015/day1/p1/main.py | 11 + 2015/day1/p2/main.py | 13 + 2015/day2/input.text | 1000 +++++++ 2015/day2/p1.py | 19 + 2015/day2/p2.py | 14 + 2015/day3/input.text | 1 + 2015/day3/p1.py | 20 + 2015/day3/p2.py | 25 + 2022/README.md | 5 + 2022/day1/p1/day1p1.c | 43 + 2022/day1/p1/input.txt | 2244 +++++++++++++++ 2022/day1/p2/day1p2.c | 80 + 2022/day1/p2/input.txt | 2244 +++++++++++++++ 2022/day2/p1/day2p1.c | 102 + 2022/day2/p1/input.txt | 2500 +++++++++++++++++ 2022/day2/p2/day2p2.c | 83 + 2022/day2/p2/input.txt | 2500 +++++++++++++++++ 2022/day3/p1/day3p1.c | 83 + 2022/day3/p1/input.txt | 300 ++ 2022/day3/p1/test.txt | 6 + 2022/day3/p2/day3p2.c | 135 + 2022/day3/p2/input.txt | 300 ++ 2022/day3/p2/test.txt | 6 + 2022/day4/p1/day4p1.c | 95 + 2022/day4/p1/input.text | 1000 +++++++ 2022/day4/p1/test.text | 6 + 2022/day4/p2/day4p2.c | 99 + 2022/day4/p2/input.text | 1000 +++++++ 2022/day4/p2/test.text | 6 + 2022/day5/p1/day5p1.c | 272 ++ 2022/day5/p1/input.text | 512 ++++ 2022/day5/p1/test.text | 9 + 2022/day5/p2/day5p2.c | 281 ++ 2022/day5/p2/input.text | 512 ++++ 2022/day5/p2/test.text | 9 + 2022/day6/p1/day6p1.c | 121 + 2022/day6/p1/input.text | 1 + 2022/day6/p1/test.text | 4 + 2022/day6/p2/day6p2.c | 121 + 2022/day6/p2/input.text | 1 + 2022/day6/p2/test.text | 5 + 2022/day7/p1/day7p1.c | 222 ++ 2022/day7/p1/input.text | 1105 ++++++++ 2022/day7/p1/run.bash | 3 + 2022/day7/p1/test.text | 23 + 2023/day1/p1/input.text | 1000 +++++++ 2023/day1/p1/main.rs | 41 + 2023/day1/p1/test.text | 4 + 2023/day1/p2/input.text | 1000 +++++++ 2023/day1/p2/main.rs | 112 + 2023/day1/p2/test.text | 7 + 2023/day10/p1/input.text | 140 + 2023/day10/p1/main.py | 118 + 2023/day10/p1/test.text | 5 + 2023/day10/p2/input.text | 140 + 2023/day10/p2/main.py | 160 ++ 2023/day10/p2/test.text | 10 + 2023/day11/p1/input.text | 140 + 2023/day11/p1/main.py | 147 + 2023/day11/p1/test.text | 10 + 2023/day11/p2/input.text | 140 + 2023/day11/p2/main.py | 116 + 2023/day11/p2/test.text | 10 + 2023/day12/p1/main.py | 25 + 2023/day12/p1/test.text | 6 + 2023/day2/p1/input.text | 100 + 2023/day2/p1/main.go | 54 + 2023/day2/p1/test.text | 5 + 2023/day2/p2/input.text | 100 + 2023/day2/p2/main.go | 52 + 2023/day2/p2/test.text | 5 + 2023/day3/p1/input.text | 140 + 2023/day3/p1/main.py | 83 + 2023/day3/p1/test.text | 10 + 2023/day3/p2/input.text | 140 + 2023/day3/p2/main.py | 125 + 2023/day3/p2/test.text | 10 + 2023/day4/p1/input.text | 213 ++ 2023/day4/p1/main.rs | 41 + 2023/day4/p1/test.text | 6 + 2023/day4/p2/input.text | 213 ++ 2023/day4/p2/main.rs | 65 + 2023/day4/p2/test.text | 6 + 2023/day5/p1/input.text | 243 ++ 2023/day5/p1/main.go | 98 + 2023/day5/p1/main.py | 102 + 2023/day5/p1/test.text | 33 + 2023/day5/p2/input.text | 243 ++ 2023/day5/p2/main.py | 151 + 2023/day5/p2/test.py | 31 + 2023/day5/p2/test.text | 33 + 2023/day6/p1/input.text | 2 + 2023/day6/p1/main.py | 37 + 2023/day6/p1/test.text | 2 + 2023/day6/p2/input.text | 2 + 2023/day6/p2/main.py | 28 + 2023/day6/p2/test.text | 2 + 2023/day7/p1/__pycache__/main.cpython-310.pyc | Bin 0 -> 2475 bytes 2023/day7/p1/__pycache__/main.cpython-311.pyc | Bin 0 -> 4809 bytes 2023/day7/p1/input.text | 1000 +++++++ 2023/day7/p1/main.py | 140 + 2023/day7/p1/main.rs | 86 + 2023/day7/p1/test.text | 5 + 2023/day7/p2/input.text | 1000 +++++++ 2023/day7/p2/main.py | 158 ++ 2023/day7/p2/test.text | 5 + 2023/day8/p1/input.text | 788 ++++++ 2023/day8/p1/main.py | 58 + 2023/day8/p1/test.text | 5 + 2023/day8/p2/input.text | 788 ++++++ 2023/day8/p2/main.py | 71 + 2023/day8/p2/test.text | 10 + 2023/day9/p1/input.text | 200 ++ 2023/day9/p1/main.py | 49 + 2023/day9/p1/test.text | 3 + 2023/day9/p2/input.text | 200 ++ 2023/day9/p2/main.py | 49 + 2023/day9/p2/test.text | 3 + 2024/day1/input.text | 1000 +++++++ 2024/day1/main.py | 42 + 2024/day1/test.text | 6 + 122 files changed, 28514 insertions(+) create mode 100644 2015/day1/input.text create mode 100644 2015/day1/p1/main.py create mode 100644 2015/day1/p2/main.py create mode 100644 2015/day2/input.text create mode 100644 2015/day2/p1.py create mode 100644 2015/day2/p2.py create mode 100644 2015/day3/input.text create mode 100644 2015/day3/p1.py create mode 100644 2015/day3/p2.py create mode 100644 2022/README.md create mode 100644 2022/day1/p1/day1p1.c create mode 100644 2022/day1/p1/input.txt create mode 100644 2022/day1/p2/day1p2.c create mode 100644 2022/day1/p2/input.txt create mode 100644 2022/day2/p1/day2p1.c create mode 100644 2022/day2/p1/input.txt create mode 100644 2022/day2/p2/day2p2.c create mode 100644 2022/day2/p2/input.txt create mode 100644 2022/day3/p1/day3p1.c create mode 100644 2022/day3/p1/input.txt create mode 100644 2022/day3/p1/test.txt create mode 100644 2022/day3/p2/day3p2.c create mode 100644 2022/day3/p2/input.txt create mode 100644 2022/day3/p2/test.txt create mode 100644 2022/day4/p1/day4p1.c create mode 100644 2022/day4/p1/input.text create mode 100644 2022/day4/p1/test.text create mode 100644 2022/day4/p2/day4p2.c create mode 100644 2022/day4/p2/input.text create mode 100644 2022/day4/p2/test.text create mode 100644 2022/day5/p1/day5p1.c create mode 100644 2022/day5/p1/input.text create mode 100644 2022/day5/p1/test.text create mode 100644 2022/day5/p2/day5p2.c create mode 100644 2022/day5/p2/input.text create mode 100644 2022/day5/p2/test.text create mode 100644 2022/day6/p1/day6p1.c create mode 100644 2022/day6/p1/input.text create mode 100644 2022/day6/p1/test.text create mode 100644 2022/day6/p2/day6p2.c create mode 100644 2022/day6/p2/input.text create mode 100644 2022/day6/p2/test.text create mode 100644 2022/day7/p1/day7p1.c create mode 100644 2022/day7/p1/input.text create mode 100644 2022/day7/p1/run.bash create mode 100644 2022/day7/p1/test.text create mode 100644 2023/day1/p1/input.text create mode 100644 2023/day1/p1/main.rs create mode 100644 2023/day1/p1/test.text create mode 100644 2023/day1/p2/input.text create mode 100644 2023/day1/p2/main.rs create mode 100644 2023/day1/p2/test.text create mode 100644 2023/day10/p1/input.text create mode 100644 2023/day10/p1/main.py create mode 100644 2023/day10/p1/test.text create mode 100644 2023/day10/p2/input.text create mode 100644 2023/day10/p2/main.py create mode 100644 2023/day10/p2/test.text create mode 100644 2023/day11/p1/input.text create mode 100644 2023/day11/p1/main.py create mode 100644 2023/day11/p1/test.text create mode 100644 2023/day11/p2/input.text create mode 100644 2023/day11/p2/main.py create mode 100644 2023/day11/p2/test.text create mode 100644 2023/day12/p1/main.py create mode 100644 2023/day12/p1/test.text create mode 100644 2023/day2/p1/input.text create mode 100644 2023/day2/p1/main.go create mode 100644 2023/day2/p1/test.text create mode 100644 2023/day2/p2/input.text create mode 100644 2023/day2/p2/main.go create mode 100644 2023/day2/p2/test.text create mode 100644 2023/day3/p1/input.text create mode 100644 2023/day3/p1/main.py create mode 100644 2023/day3/p1/test.text create mode 100644 2023/day3/p2/input.text create mode 100644 2023/day3/p2/main.py create mode 100644 2023/day3/p2/test.text create mode 100644 2023/day4/p1/input.text create mode 100644 2023/day4/p1/main.rs create mode 100644 2023/day4/p1/test.text create mode 100644 2023/day4/p2/input.text create mode 100644 2023/day4/p2/main.rs create mode 100644 2023/day4/p2/test.text create mode 100644 2023/day5/p1/input.text create mode 100644 2023/day5/p1/main.go create mode 100644 2023/day5/p1/main.py create mode 100644 2023/day5/p1/test.text create mode 100644 2023/day5/p2/input.text create mode 100644 2023/day5/p2/main.py create mode 100644 2023/day5/p2/test.py create mode 100644 2023/day5/p2/test.text create mode 100644 2023/day6/p1/input.text create mode 100644 2023/day6/p1/main.py create mode 100644 2023/day6/p1/test.text create mode 100644 2023/day6/p2/input.text create mode 100644 2023/day6/p2/main.py create mode 100644 2023/day6/p2/test.text create mode 100644 2023/day7/p1/__pycache__/main.cpython-310.pyc create mode 100644 2023/day7/p1/__pycache__/main.cpython-311.pyc create mode 100644 2023/day7/p1/input.text create mode 100644 2023/day7/p1/main.py create mode 100644 2023/day7/p1/main.rs create mode 100644 2023/day7/p1/test.text create mode 100644 2023/day7/p2/input.text create mode 100644 2023/day7/p2/main.py create mode 100644 2023/day7/p2/test.text create mode 100644 2023/day8/p1/input.text create mode 100644 2023/day8/p1/main.py create mode 100644 2023/day8/p1/test.text create mode 100644 2023/day8/p2/input.text create mode 100644 2023/day8/p2/main.py create mode 100644 2023/day8/p2/test.text create mode 100644 2023/day9/p1/input.text create mode 100644 2023/day9/p1/main.py create mode 100644 2023/day9/p1/test.text create mode 100644 2023/day9/p2/input.text create mode 100644 2023/day9/p2/main.py create mode 100644 2023/day9/p2/test.text create mode 100644 2024/day1/input.text create mode 100644 2024/day1/main.py create mode 100644 2024/day1/test.text diff --git a/2015/day1/input.text b/2015/day1/input.text new file mode 100644 index 0000000..71a7803 --- /dev/null +++ b/2015/day1/input.text @@ -0,0 +1 @@ +()(((()))(()()()((((()(((())(()(()((((((()(()(((())))((()(((()))((())(()((()()()()(((())(((((((())))()()(()(()(())(((((()()()((())(((((()()))))()(())(((())(())((((((())())))(()())))()))))()())()())((()()((()()()()(()((((((((()()())((()()(((((()(((())((())(()))()((((()((((((((())()((()())(())((()))())((((()())(((((((((((()()(((((()(()))())(((()(()))())((()(()())())())(()(((())(())())()()(()(()((()))((()))))((((()(((()))))((((()(()(()())())()(((()((((())((((()(((()()(())()()()())((()((((((()((()()))()((()))()(()()((())))(((()(((()))((()((()(()))(((()()(()(()()()))))()()(((()(((())())))))((()(((())()(()(())((()())))((((())))(()(()(()())()((()())))(((()((()(())()()((()((())(()()((())(())()))()))((()(())()))())(((((((()(()()(()(())())))))))(()((((((())((((())((())())(()()))))()(())(()())()())((())(()))))(()))(()((()))()(()((((((()()()()((((((((()(()(())((()()(()()))(())()())()((())))()))()())(((()))(())()(())()))()((()((()(()()())(())()()()((())())))((()()(()()((()(())()()())(((()(()()))))(())))(()(()())()))()()))))))()))))((((((())))())))(()(())())(()())))))(()))()))))))()((()))))()))))(()(()((()())())(()()))))(((())()))())())())(((()(()()))(())()(())(())((((((()()))))((()(()))))))(()))())(((()()(()))()())()()()())))))))))))))(())(()))(()))((()(())(()())(())())(()())(())()()(()())))()()()))(())())()))())())(())((())))))))(())))(())))))()))))((())(()(((()))))(()))()((()(())))(()())(((((()))()())()()))))()))))()))())(()(()()()))()))))))((()))))))))))()((()))((()(())((())()()(()()))()(()))))()()(()))()))(((())))(())()((())(())(()())()())())))))))())))()((())))()))(()))()()))(((((((()))())(()()))(()()(()))()(()((()())()))))))(((()()()())))(())()))()())(()()))()()))))))))(())))()))()()))))))()))()())))()(())(())))))()(())()()(()()))))())((()))))()))))(()(((((()))))))))())))())()(())()()))))(())))())()()())()()())()(()))))()))()))))))))())))((()))()))()))())))()())()()())))())))(()((())()((()))())))))())()(())((())))))))))))())()())(())())())(()))(()))()))())(()(())())()())()()(()))))(()(())))))))(())))())(())))))))())()()(())())())))(())))))()))()(()())()(()))())())))))()()(()))()))))())))))))))()))))()))))))())()())()()))))()())))())))))))))))()()))))()()(((()))()()(())()))))((()))))(()))(())())))(())()))))))(()))()))))(())())))))()))(()())))))))))))))())))))))))()((()())(()())))))))((()))))(())(())))()(()())())))())())(()()()())))()))))))())))))())()()())))))))))))()()(()))))()())()))((()())(()))))()(()))))))))))()())())(((())(()))))())()))()))()))))))()))))))(()))))()))))()(())))(())))(()))())()()(()()))()))(()()))))))))()))(()))())(()()(()(()())()()))()))))))))(())))))((()()(()))())())))))()))())(()())()()))())))()(()()()()))((())())))())()(()()))()))))))))(()))(())))()))))(()(()())(()))))()())())()))()()))())))))))))))())()))))))()))))))))())))))()))))())(()())))(())()))())())))))()()(()()())(()())))()()))(((()))(()()()))))()))))()))))((())))()((((((()()))))))())))))))))))(((()))))))))))))(())())))))())(()))))))(()))((()))())))()(()((()))()))()))))))))))())()))()(()()))))())))())(())()(()))()))())(()))()))))(()()))()()(())))))()))(())(()(()()))(()()())))))(((()))))))()))))))))))))(())(()))))()())())()()((()()))())))))(()))))())))))))()()()))))))))())))()(((()()))(())))))(((())())))))((()))()(()))(()))))(()())))(()))())))))()))))(())(())))()((()))(())())))()()))()))))))))()))(()()()(()()()(()))())(())()())(((()))(())))))))))(((()())))()()))))))))()(())(()))()((((())(())(()())))()))(((())()()()))((()))(()))())())))())))(()))())()())())(()(())())()()()(())))())(())))(())))(())()))()))(()((()))))))))())(()))))))())(()()))()()))()(()(()())))()()(()((()((((((()))(())))()()()))())()))((()()(()))())((()(()(()))(()()))))()())))()))()())))))))()()((()())(())))()))(()))(())(()))())(()(())))()()))))))(((()(((()()))()(()(())())((()()))()))()))()))()(()()()(()))((()())()(())))()()))(((())()()())(())()((()()()()(()(())(()()))()(((((()())))((())))))(()()()))))(((()(())))()))((()((()(())()(()((())))((()())()(()))(((()())()()(()))(())(((()((()())()((())()())(((()()))((()((())(()))(()())(()()()))((()))(())(()((()()())((()))(())))(())(())(())))(()())))(((((()(()(((((()())((((()(()())(())(()()(((())((()(((()()(((()()((((((())))())(()((((((()(()))()))()()((()((()))))()(()()(()((()()))))))(((((()(((((())()()()(())())))))))()))((()()(())))(())(()()()())))))(()((((())))))))()()(((()(()(()(()(()())()()()(((((((((()()())()(()))((()()()()()(((((((()())()((())()))((((((()(()(()(()())(((()(((((((()(((())(((((((((())(())())()))((()(()))(((()()())(())(()(()()(((()(())()))())))(())((((((())(()()())()()(((()(((())(()(((())(((((((()(((((((((()))(())(()(()(()))))((()))()(())())())((()(()((()()))((()()((()(())(())(()((())(((())(((()()()((((((()()(())((((())()))))(())((()(()((())))(((((()(()()())())((())())))((())((()((()()((((((())(((()()(()())())(()(()))(()(()))())())()(((((((()(((()(())()()((())((()(()()((()(()()(((((((((((())((())((((((())((()((((()(()((((()(((((((())()((()))))())()((()((((()(()(((()((()())))(())())(((()(((())((((((()(((((((((()()(())))(()(((((()((((()())))((()((()((()(()()(((())((((((((((((()(((())(()(((((()))(()()(()()()()()()((())(((((((())(((((())))))())()(()()(()(()(((()()(((((())(()((()((()(((()()((()((((())()))()((((())(())))()())(((())(())(()()((()(((()()((((((((((()()(()())())(((((((((())((((()))()()((((())(()((((()(((())())(((((((((((()((((())))(())(()(((()(((()((())(((((()((()()(()(()()((((((()((((()((()(()((()(()((((((()))))()()(((((()((()(()(())()))(())(((((((()((((()())(()((()((()(()))())))(())((()))))(((((((()()()())(()))(()()((()())()((()((()()()(()(()()))(()())(())(((((()(((((((((((()((()(((()(((((((()()((((((()(((((()(()((()(((((())((((((()))((((())((()()((())(((())()(((((()()(((((()((()(()(((((((()(((((()((()((()((())(())((())(()))()()))(()()(()(()()(((((((()(((()(((())()(((((()((((((()())((((())()((()((()(()()())(()))((((()()((((((()((()(()(()((((()((()((())((((((()(()(())((((((()((((((((((()((())()))()(()(()(((((()()()))((())))()(()((((((((((((((()(((()((((()((())((()((()(((()()(()(((()((())(()()())))()(()(()(((((()()(()(()((((()(((((())()(()(()))(((((()()(((()()(())((((((((((((((())((())(((((((((((())()()()(())()(()(()(((((((((())(((()))(()()())(()((((()(())(((((()())(())((((((((())()((((()((((((())(()((()(())(((()((((()))(((((((((()()))((((()(())()()()(())(()((())((()()))()(((())(((((())((((((()()))(((((((((()((((((())))(((((((()((()(()(())))())(()(()))()(((((()())(()))()(()(())(((()))))())()())))(((((()))())()((()(()))))((()()()((((((()))()()((((((((())((()(()(((()(()((())((()())(()((((())(()(((()()()(()(()()))())())((((((((((())())((()))()((())(())(())))())()(()()(())))())(()))(((()(()()(((()(((())))()(((()(())()((((((())()))()))()((((((()(()(((((()())))()))))())()()(((()(((((())((()()(()((()((()(()(()(())))(()()()()((()(())(((()((()))((((()))())(())))())(()))()()()())()))(((()()())()((())))(())(()()()()(()())((()(()()((((())))((()((()(())((()(()((())()(()()(((()())()()())((()))((())(((()()(())))()()))(((()((())()(((((()())(())((())()())())((((((()(()(((((()))(()( \ No newline at end of file diff --git a/2015/day1/p1/main.py b/2015/day1/p1/main.py new file mode 100644 index 0000000..b54de15 --- /dev/null +++ b/2015/day1/p1/main.py @@ -0,0 +1,11 @@ +with open('../input.text', 'r') as file: + data = file.read() + +floor = 0 +for char in data: + if char == '(': + floor += 1 + elif char == ')': + floor -= 1 + +print(f'The instructions took Santa to floor {floor}') diff --git a/2015/day1/p2/main.py b/2015/day1/p2/main.py new file mode 100644 index 0000000..1448617 --- /dev/null +++ b/2015/day1/p2/main.py @@ -0,0 +1,13 @@ +with open('../input.text', 'r') as file: + data: str = file.read() + +floor = 0 +for i, char in enumerate(data): + if char == '(': + floor += 1 + elif char == ')': + floor -= 1 + + if floor == -1: + print(f'The position of the character that causes Santa to first enter the basement is {i + 1}') + exit(0) diff --git a/2015/day2/input.text b/2015/day2/input.text new file mode 100644 index 0000000..879e522 --- /dev/null +++ b/2015/day2/input.text @@ -0,0 +1,1000 @@ +20x3x11 +15x27x5 +6x29x7 +30x15x9 +19x29x21 +10x4x15 +1x26x4 +1x5x18 +10x15x23 +10x14x20 +3x5x18 +29x23x30 +7x4x10 +22x24x29 +30x1x2 +19x2x5 +11x9x22 +23x15x10 +11x11x10 +30x28x5 +22x5x4 +6x26x20 +16x12x30 +10x20x5 +25x14x24 +16x17x22 +11x28x26 +1x11x10 +1x24x15 +13x17x21 +30x3x13 +20x25x17 +22x12x5 +22x20x24 +9x2x14 +6x18x8 +27x28x24 +11x17x1 +1x4x12 +5x20x13 +24x23x23 +22x1x25 +18x19x5 +5x23x13 +8x16x4 +20x21x9 +1x7x11 +8x30x17 +3x30x9 +6x16x18 +22x25x27 +9x20x26 +16x21x23 +5x24x17 +15x17x15 +26x15x10 +22x16x3 +20x24x24 +8x18x10 +23x19x16 +1x21x24 +23x23x9 +14x20x6 +25x5x5 +16x3x1 +29x29x20 +11x4x26 +10x23x24 +29x25x16 +27x27x22 +9x7x22 +6x21x18 +25x11x19 +14x13x3 +15x28x17 +14x3x12 +29x8x19 +30x14x20 +20x23x4 +8x16x5 +4x11x18 +20x8x24 +21x13x21 +14x26x29 +27x4x17 +27x4x25 +5x28x6 +23x24x11 +29x22x5 +30x20x6 +23x2x10 +11x4x7 +27x23x6 +10x20x19 +8x20x22 +5x29x22 +16x13x2 +2x11x14 +6x12x4 +3x13x6 +16x5x18 +25x3x28 +21x1x5 +20x16x19 +28x30x27 +26x7x18 +25x27x24 +11x19x7 +21x19x17 +2x12x27 +20x5x14 +8x5x8 +6x24x8 +7x28x20 +3x20x28 +5x20x30 +13x29x1 +26x29x5 +19x28x25 +5x19x11 +11x20x22 +4x23x1 +19x25x12 +3x10x6 +3x14x10 +28x16x12 +23x12x2 +23x12x19 +20x28x10 +9x10x25 +16x21x16 +1x18x20 +9x4x26 +3x25x8 +17x16x28 +9x28x16 +27x3x12 +17x24x12 +13x21x10 +7x17x13 +6x10x9 +7x29x25 +11x19x30 +1x24x5 +20x16x23 +24x28x21 +6x29x19 +25x2x19 +12x5x26 +25x29x12 +16x28x22 +26x26x15 +9x13x5 +10x29x7 +1x24x16 +22x2x2 +6x16x13 +3x12x28 +4x12x13 +14x27x21 +14x23x26 +7x5x18 +8x30x27 +15x9x18 +26x16x5 +3x29x17 +19x7x18 +16x18x1 +26x15x30 +24x30x21 +13x20x7 +4x12x10 +27x20x11 +28x29x21 +20x14x30 +28x12x3 +19x1x8 +4x8x6 +21x14x2 +27x19x21 +17x24x14 +15x18x11 +18x7x26 +25x28x29 +27x26x9 +18x12x17 +24x28x25 +13x24x14 +26x9x28 +9x3x30 +9x2x9 +8x1x29 +18x30x10 +18x14x5 +26x8x30 +12x1x1 +30x5x28 +26x17x21 +10x10x10 +20x7x27 +13x17x6 +21x13x17 +2x16x8 +7x9x9 +15x26x4 +11x28x25 +10x6x19 +21x6x29 +15x5x6 +28x9x16 +14x3x10 +12x29x5 +22x19x19 +25x15x22 +30x6x28 +11x23x13 +20x25x14 +26x1x13 +6x14x15 +16x25x17 +28x4x13 +10x24x25 +4x13x10 +9x15x16 +15x24x6 +22x9x19 +11x11x8 +4x19x12 +24x5x4 +27x12x13 +7x27x16 +2x6x9 +29x27x15 +18x26x23 +19x16x15 +14x5x25 +9x16x30 +4x6x4 +13x10x10 +1x8x29 +23x5x17 +19x20x20 +11x27x24 +27x15x5 +15x11x12 +21x11x3 +1x13x22 +17x8x8 +13x14x14 +17x22x7 +9x5x8 +2x6x3 +25x9x15 +11x8x13 +9x25x12 +3x16x12 +12x16x8 +16x24x17 +4x6x26 +22x29x11 +14x17x19 +28x2x27 +24x22x19 +22x20x30 +23x28x4 +16x12x14 +22x24x22 +29x1x28 +26x29x16 +3x25x30 +27x3x13 +22x24x26 +25x3x2 +7x24x2 +10x5x3 +28x8x29 +25x6x4 +12x17x14 +24x3x5 +23x27x7 +26x23x30 +11x10x19 +23x7x11 +26x14x15 +14x3x25 +12x24x14 +2x14x12 +9x12x16 +9x2x28 +3x8x2 +22x6x9 +2x30x2 +25x1x9 +20x11x2 +14x11x12 +7x14x12 +24x8x26 +13x21x23 +18x17x23 +13x6x17 +20x20x19 +13x17x29 +7x24x24 +23x8x6 +19x10x28 +3x8x21 +15x20x18 +11x27x1 +11x24x28 +13x20x11 +18x19x22 +27x22x12 +28x3x2 +13x4x29 +26x5x6 +14x29x25 +7x4x7 +5x17x7 +2x8x1 +22x30x24 +22x21x28 +1x28x13 +11x20x4 +25x29x19 +9x23x4 +30x6x11 +25x18x10 +28x10x24 +3x5x20 +19x28x10 +27x19x2 +26x20x4 +19x21x6 +2x12x30 +8x26x27 +11x27x10 +14x13x17 +4x3x21 +2x20x21 +22x30x3 +2x23x2 +3x16x12 +22x28x22 +3x23x29 +8x25x15 +9x30x4 +10x11x1 +24x8x20 +10x7x27 +7x22x4 +27x13x17 +5x28x5 +30x15x13 +10x8x17 +8x21x5 +8x17x26 +25x16x4 +9x7x25 +13x11x20 +6x30x9 +15x14x12 +30x1x23 +5x20x24 +22x7x6 +26x11x23 +29x7x5 +13x24x28 +22x20x10 +18x3x1 +15x19x23 +28x28x20 +7x26x2 +9x12x20 +15x4x6 +1x17x21 +3x22x17 +9x4x20 +25x19x5 +9x11x22 +14x1x17 +14x5x16 +30x5x18 +19x6x12 +28x16x22 +13x4x25 +29x23x18 +1x27x3 +12x14x4 +10x25x19 +15x19x30 +11x30x4 +11x22x26 +13x25x2 +17x13x27 +11x30x24 +15x1x14 +17x18x4 +26x11x3 +16x22x28 +13x20x9 +1x18x3 +25x11x12 +20x21x1 +22x27x4 +8x28x23 +7x13x27 +17x9x26 +27x27x20 +11x20x12 +26x21x11 +29x14x12 +27x25x1 +28x29x25 +21x23x28 +5x18x18 +19x5x4 +7x6x30 +27x8x11 +12x24x12 +16x25x22 +26x11x29 +25x22x17 +15x23x23 +17x9x6 +30x10x16 +21x3x5 +18x27x2 +28x21x14 +16x18x17 +4x18x2 +9x1x14 +9x1x9 +5x27x12 +8x16x30 +3x19x19 +16x26x24 +1x6x9 +15x14x3 +11x7x19 +8x19x3 +17x26x26 +6x18x11 +19x12x4 +29x20x16 +20x17x23 +6x6x5 +20x30x19 +18x25x18 +2x26x2 +3x1x1 +14x25x18 +3x1x6 +11x14x18 +17x23x27 +25x29x9 +6x25x20 +20x10x9 +17x5x18 +29x14x8 +14x25x26 +10x15x29 +23x19x11 +22x2x2 +4x5x5 +13x23x25 +19x13x19 +20x18x6 +30x7x28 +26x18x17 +29x18x10 +30x29x1 +12x26x24 +18x17x26 +29x28x15 +3x12x20 +24x10x8 +30x15x6 +28x23x15 +14x28x11 +10x27x19 +14x8x21 +24x1x23 +1x3x27 +6x15x6 +8x25x26 +13x10x25 +6x9x8 +10x29x29 +26x23x5 +14x24x1 +25x6x22 +17x11x18 +1x27x26 +18x25x23 +20x15x6 +2x21x28 +2x10x13 +12x25x14 +2x14x23 +30x5x23 +29x19x21 +29x10x25 +14x22x16 +17x11x26 +12x17x30 +8x17x7 +20x25x28 +20x11x30 +15x1x12 +13x3x24 +16x23x23 +27x3x3 +26x3x27 +18x5x12 +12x26x7 +19x27x12 +20x10x28 +30x12x25 +3x14x10 +21x26x1 +24x26x26 +7x21x30 +3x29x12 +29x28x5 +5x20x7 +27x11x2 +15x20x4 +16x15x15 +19x13x7 +7x17x15 +27x24x15 +9x17x28 +20x21x14 +14x29x29 +23x26x13 +27x23x21 +18x13x6 +26x16x21 +18x26x27 +9x3x12 +30x18x24 +12x11x29 +5x15x1 +1x16x3 +14x28x11 +2x18x1 +19x18x19 +18x28x21 +2x3x14 +22x16x5 +28x18x28 +24x16x18 +7x4x10 +19x26x19 +24x17x7 +25x9x6 +25x17x7 +20x22x20 +3x3x7 +23x19x15 +21x27x21 +1x23x11 +9x19x4 +22x4x18 +6x15x5 +15x25x2 +23x11x20 +27x16x6 +27x8x5 +10x10x19 +22x14x1 +7x1x29 +8x11x17 +27x9x27 +28x9x24 +17x7x3 +26x23x8 +7x6x30 +25x28x2 +1x30x25 +3x18x18 +28x27x15 +14x14x1 +10x25x29 +18x12x9 +20x28x16 +26x27x22 +8x26x1 +21x2x12 +25x16x14 +21x19x5 +12x9x22 +16x5x4 +5x4x16 +25x29x3 +4x29x13 +15x16x29 +8x11x24 +30x11x20 +17x21x14 +12x24x10 +10x12x6 +3x26x30 +15x14x25 +20x12x21 +13x11x16 +15x13x3 +5x17x29 +6x3x23 +9x26x11 +30x1x8 +14x10x30 +18x30x10 +13x19x19 +16x19x17 +28x7x10 +28x29x4 +3x21x10 +4x28x24 +7x28x9 +2x4x9 +25x27x13 +6x12x15 +4x18x20 +20x1x16 +5x13x24 +11x11x10 +12x9x23 +1x9x30 +17x28x24 +9x5x27 +21x15x16 +17x4x14 +8x14x4 +13x10x7 +17x12x14 +9x19x19 +2x7x21 +8x24x23 +19x5x12 +11x23x21 +13x3x1 +5x27x15 +12x25x25 +13x21x16 +9x17x11 +1x15x21 +4x26x17 +11x5x15 +23x10x15 +12x17x21 +27x15x1 +4x29x14 +5x24x25 +10x10x12 +18x12x9 +11x24x23 +24x23x3 +28x12x15 +29x9x14 +11x25x8 +5x12x2 +26x26x29 +9x21x2 +8x8x25 +1x16x30 +17x29x20 +9x22x13 +7x18x16 +3x3x23 +26x25x30 +15x23x24 +20x23x5 +20x16x10 +23x7x8 +20x18x26 +8x27x6 +30x23x23 +7x7x24 +21x11x15 +1x30x25 +26x27x22 +30x28x13 +20x13x13 +3x1x15 +16x7x1 +7x25x15 +12x7x18 +16x9x23 +16x12x18 +29x5x2 +17x7x7 +21x17x5 +9x9x17 +26x16x10 +29x29x23 +17x26x10 +5x19x17 +1x10x1 +14x21x20 +13x6x4 +13x13x3 +23x4x18 +4x16x3 +16x30x11 +2x11x2 +15x30x15 +20x30x22 +18x12x16 +23x5x16 +6x14x15 +9x4x11 +30x23x21 +20x7x12 +7x18x6 +15x6x5 +18x22x19 +16x10x22 +26x20x25 +9x25x25 +29x21x10 +9x21x24 +7x18x21 +14x3x15 +18x19x19 +4x29x17 +14x10x9 +2x26x14 +13x3x24 +4x4x17 +6x27x24 +2x18x3 +14x25x2 +30x14x17 +11x6x14 +4x10x18 +15x4x2 +27x7x10 +13x24x1 +7x12x6 +25x22x26 +19x2x18 +23x29x2 +2x15x4 +12x6x9 +16x14x29 +9x17x3 +21x9x12 +23x18x22 +10x8x4 +29x2x7 +19x27x15 +4x24x27 +25x20x14 +8x23x19 +1x24x19 +6x20x10 +15x8x5 +18x28x5 +17x23x22 +9x16x13 +30x24x4 +26x3x13 +12x22x18 +29x17x29 +26x4x16 +15x7x20 +9x15x30 +12x7x18 +28x19x18 +11x23x23 +24x20x1 +20x3x24 +1x26x1 +14x10x6 +5x27x24 +13x21x12 +20x20x5 +6x28x9 +11x26x11 +26x29x12 +21x4x11 +20x11x17 +22x27x20 +19x11x21 +2x11x11 +13x5x7 +12x10x25 +21x28x1 +15x30x17 +28x19x1 +4x19x12 +11x4x12 +4x10x30 +11x18x5 +22x20x12 +3x7x27 +20x26x4 +13x27x26 +23x14x13 +4x19x7 +26x27x16 +20x5x20 +18x5x8 +19x21x1 +22x8x1 +29x4x1 +24x10x15 +24x9x20 +10x3x8 +29x30x3 +2x8x24 +16x7x18 +2x11x23 +23x15x16 +21x12x6 +24x28x9 +6x1x13 +14x29x20 +27x24x13 +16x26x8 +5x6x17 +21x8x1 +28x19x21 +1x14x16 +18x2x9 +29x28x10 +22x26x27 +18x26x23 +22x24x2 +28x26x1 +27x29x12 +30x13x11 +1x25x5 +13x30x18 +3x13x22 +22x10x11 +2x7x7 +18x17x8 +9x22x26 +30x18x16 +10x2x3 +7x27x13 +3x20x16 +9x21x16 +1x18x15 +21x30x30 +4x25x23 +3x11x7 +5x6x12 +27x1x20 +13x15x24 +23x29x2 +13x5x24 +22x16x15 +28x14x3 +29x24x9 +2x20x4 +30x10x4 +23x7x20 +22x12x21 +3x19x11 +4x28x28 +5x4x7 +28x12x25 +2x16x26 +23x20x7 +5x21x29 +9x21x16 +9x6x10 +9x6x4 +24x14x29 +28x11x6 +10x22x1 +21x30x20 +13x17x8 +2x25x24 +19x21x3 +28x8x14 +6x29x28 +27x10x28 +30x11x12 +17x2x10 +14x19x17 +2x11x4 +26x1x2 +13x4x4 +23x20x18 +2x17x21 +28x7x15 +3x3x27 +24x17x30 +28x28x20 +21x5x29 +13x12x19 +24x29x29 +19x10x6 +19x12x14 +21x4x17 +27x16x1 +4x17x30 +23x23x18 +23x15x27 +26x2x11 +12x8x8 +15x23x26 +30x17x15 +17x17x15 +24x4x30 +9x9x10 +14x25x20 +25x11x19 +20x7x1 +9x21x3 +7x19x9 +10x6x19 +26x12x30 +21x9x20 +15x11x6 +30x21x9 +10x18x17 +22x9x8 +8x30x26 +28x12x27 +17x17x7 +11x13x8 +5x3x21 +24x1x29 +1x28x2 +18x28x10 +8x29x14 +26x26x27 +17x10x25 +22x30x3 +27x9x13 +21x21x4 +30x29x16 +22x7x20 +24x10x2 +16x29x17 +28x15x17 +19x19x22 +9x8x6 +26x23x24 +25x4x27 +16x12x2 +11x6x18 +19x14x8 +9x29x13 +23x30x19 +10x16x1 +4x21x28 +23x25x25 +19x9x16 +30x11x12 +24x3x9 +28x19x4 +18x12x9 +7x1x25 +28x7x1 +24x3x12 +30x24x22 +27x24x26 +9x30x30 +29x10x8 +4x6x18 +10x1x15 +10x4x26 +23x20x16 +6x3x14 +30x8x16 +25x14x20 +11x9x3 +15x23x25 +8x30x22 +22x19x18 +25x1x12 +27x25x7 +25x23x3 +13x20x8 +5x30x7 +18x19x27 +20x23x3 +1x17x21 +21x21x27 +13x1x24 +7x30x20 +21x9x18 +23x26x6 +22x9x29 +17x6x21 +28x28x29 +19x25x26 +9x27x21 +5x26x8 +11x19x1 +10x1x18 +29x4x8 +21x2x22 +14x12x8 \ No newline at end of file diff --git a/2015/day2/p1.py b/2015/day2/p1.py new file mode 100644 index 0000000..2cc6d13 --- /dev/null +++ b/2015/day2/p1.py @@ -0,0 +1,19 @@ +with open('input.text', 'r') as file: + data: list[str] = file.readlines() + +total = 0 +for line in data: + l, w, h = [int(s) for s in line.split('x')] + + sides = [2*l*w, 2*w*h, 2*h*l] + + area = 0 + lowest = float('inf') + for side in sides: + if side/2 < lowest: + lowest = side/2 + area += side + + total += area + lowest + +print(f'The total square feet of wrapping paper needed is {int(total)} sq. ft.') diff --git a/2015/day2/p2.py b/2015/day2/p2.py new file mode 100644 index 0000000..46c8aa4 --- /dev/null +++ b/2015/day2/p2.py @@ -0,0 +1,14 @@ +with open('input.text', 'r') as file: + data: list[str] = file.readlines() + +total = 0 +for line in data: + sides = [int(s) for s in line.split('x')] + sides.sort() + l, w, h = sides + + ribbon = (l * 2 + w * 2) + (l*w*h) + + total += ribbon + +print(f'Total Ribbon: {total}') diff --git a/2015/day3/input.text b/2015/day3/input.text new file mode 100644 index 0000000..a5954e7 --- /dev/null +++ b/2015/day3/input.text @@ -0,0 +1 @@ +v>vvv>v<<<^^^^^<<^^>v^>^>^>^>^>^<<^><<<^vvvv>^>^><^v^><^<>^^>^vvv^>^>^^<>><>^>vvv>>^vv>^<><>^^>^>><<^><><>^<^>>vvv>v>>>v<<^<><^v>^^v^^^<^v^^>>><^>^>v<>^<>>^>^^v^>>><>v^v<>>^>^<>v^>^<>^v^^^v^^>>vv<<^^><^^>^^<^>>^^^^^v^vv<>>v^v<^v^^<><^<^vv^><>><><>v>vvv^vv^^<<><<<^v^>vvv^<^>vvvv^>^>>^v^v>vv^<>><^^^>^>>v>^>v^<>v><^<^^^vv<^^<>v^v^vv<>>>>v^v<>><^^v>vv^^>v^v>v>v>>vv>^^>^v><<^<vv^^^v>v^^^>><^^>v>^^v>>v^^^<^^v>^v>><^<^<>>v<<^^vv>^^^v<^<^^vv^>>v^>><<<>^vv^<^<>v^^<<^><>>^^^<^vv<^^^>><^^v>^^v^^^^<^v<^<<<<^v^<^^<>^^>^><<>>^v><>><^<^^^>>vv>^>^^^^^v^vvv><><^<^>v>v^v^>^><><^<^><>v<><>^v^^v>^<<<>^v^>^<v^<>>^vv>v>>>^<^>>>>>v>>^v>v><>>vvv<^^><<^>^>v<^vvvv<^^^v^^^>v^v<>v<^^v>>><>v>v>>^^<^^v><<<<<^vv<^<>^>>>^v>^v>vv>^v<>v>v<^>>v>>^>^><^^v<><><^^>^^^^>vv^v^v>^v^^v^^v>><^v>>vv<>vvvv<>>^v^>^>>v^v^<<>>^v<^^vv^><>v>^>v><<<<<<<^>^^v^<<^^>>vvv^<><>><>^^v<<^^v<^^>v^>>>v^v>v^><>v<<>v>^^v><<<<><^v^v>>^<>^<<>^>v<<>><^<<<<^v>^<^v>v>vv^>v<^<<>v^v>><v>v>>v^vvv^^>>>v^<^<<^^<<<>v^<v<^^<>^>v>>v<>^>^^>>^v<<>v^^^>>>^vv<^v^>v>^><>v^^<>^^v^^vv^<^>^<<>><<^>^v>>><<<<><<^v>v^<^><^<>>v^>^^^<>>v<>>^>>v^><<>vvv><^>>v><>v>>^>v><<><<>^<>^^^vv>v^^>>^>^<^vv^>v^>^><^<^><><v<^^v^^<<<<^><^^<^><>>^v<<^<<^vv>v>>v<^<^vv>>v^v<>^>v<>^v<<>^^v>>>v^>^v^v>^^^v><^>vvv^<<<>v<>v>^>vv^<^^v^><^^^^^v<^>>vv^v^>^^<>>><^v^<v>^v>^^v<>>vv>>^v>>^<<<<^><<<><^^>>v<>^vvvv>v^^^>^^^>^<^^vv<^v^v<v^^<>^>^<^v>vvv><<^><><^^v<<><^^><>^v>^<><<^<^^<<>vv<>^^<<^>><<<>>vvv>^>v^^v^><<^>v>^>^<^<<>v<^>vv^v^v<>vv<vv<^>v^<>^vv^v^>>>v^v><^<><<>vv^>vvv^>v>>><^^vvv<^<^>>^^>^^vv>>><^v<>^v^<<>v^^^^>>^<^>^v<^^^^v>^>>v>^>^>>>v^<<^>^<<^^<>v<^v<^<>v^v>^^v^vv>vvv>v^<^>>vvvv<>>^^<>v^<><>v<^<>v<>^>v<>vv>v<^^>v>><>>^<^^<>>^>^>vvv^v>>^>^>v><><<>v<>^v<^vv^^^<>^^<<^^^v<>>v^>vvvv>^^v^>^>^<<><^^^^<<>^<>vv^<><^>^^<>v^<>>>v><>vvvvv>v>v^^>^<vv>>v<<^<>^^^v^<><>>^<<>>><>v>^>^^^^vv^^<<><^^<v>vv<<<^<v<>>^<^>^>>v>><^^<>><<<><<><^<^v<^^v<<>><<<<^>v^>v^v^<<>>v<><^<>><>>^><>v^v>v<<>v<>v^^><<>>>v<<>>>>^>v>>>>vv>v>^<^^^<>v^<^^v^vvv^>vv>^^<<>vvv<<^^<^>^>>v>v<<<<<>^^vv^>>v>^<^^v>>v>^v<><>^<^>v>v<<<^^^v>^<<<>vvv^v^^>^>>^>v>v<>^^><>>v>^>v<<<^^^v^><><^<^<>>^v>vv<^v<<^vv>v^<v>v>^v^>^v<<^v^vv>v^<<>>v<>>vvv^^vv^^v><^>v^vv<^^<<>v<><^><>^<><vv<>^vv>v><^^v<>><^v^v><><>>vv<>>>><<^>>><^^^vvv<<><>>>v<<<<<>v^^<<^vv^>vv>^<>^v^^<>^^^vv>v^^v>^v>^<>v^^^>v^^v<^>v^v^<>v>v>v<^^vv^v<^^^^vv<<><<^>>^^<v^>>^^^><^^>^v^v>^<^>>^v<>^<^>v>^>^v^<^^^<^vv<^^>>v^>^v^>>>>^v>^^<<^<^^v^<<<>>><>^<>>>v<<><<^^<^^>v^>^>v^v<><^^v>^<^v^v>>>^^<^^vv<<^><><^<>v>>>vv>><^^^v^^^v<^^v>v<>>^^<><>v>^^>>>><>v>^v>^vv^v>^>^^^><>^<<>>><<<><>^^<<v^>v>v^^^>^>^v<<>v>vv>><<^^^>>^><^>v<^<^v>><^^>v<><>^><<><>v^>v<><^^>><>^<^^v<^<><<<^^<><>>>^>v^<><^<<^vv<^v^v^v<>v^^v>v^<^>^vv^>>><<>v^vv^<>^v^><v^<><>>v^v^><>v^vvv^^^<<^<>v^v>^^><>v>>v^<>^>v>^>><<>v^v><^v>v>>><^<^^>vv<^>^<^>^^v><><^<<^^vvv^v>^>^<>>vv>v^^v^^vv<^^>><^v>v^<vvv<>>^v><<>^v<<<>^><^vv><<^^v<^vv<>^v>>>><<<<^^<^v>^<^^<^<^^>>^^v>^^^^v^^^<<>^^vv<><^<<><>^>v<>>v^^^>^v^^v^v>>>>>^v>^>^^v>><^^^v<<^^>^<^<^><^<<>v>v>^v<><^>vv^vv><^><>^><<^^>v>v>^^^<>v>^v^^>vv^vv<^^>><>^>^<>v>><>^v<v>^><^^^v^<<^v^>v^>vv>v^<>v><^v>v<>^v<>^v>^^<>vvv^>^<><^>><^<>^v<<^v^><<^<^v>^vv^v>v<^^vv<><>vv^>v<<>v>v>^^>>><<<^>^vv>>^^^>v<^vv<>v<<>>>^<^^^^>v<^^<>v>vvv^>v>v<^>^v^<>v>>vvv>^^><^vvv>><>>>^<<^>>v^^>>^><>v<^^v^<<>^<>>><^v^v>>>^vvvv^<><<>v>^v^v>v><^<<^>^^>v<^v^<^>v>^<v^<>v^<>vv^<>^>^>v^>^vv<>^^<<>>v<>^v<><><<v>v^>vv^><<<^v<><>^^v^^v^^^>^<>>>>^><>>v>>v<<>v<<<<<<<^v<<^^^v<^v<>v^^<<<^<>>v^vv^<^^<^^<<^>vv><^<^^v<<<^><^v<^><>v^v^^>>><<^<<^<>>^>>^<<<>>v>^v>><>v>>v>><>v>><^^>^^vv<^^<^>vv><<^>><<>^vvv><^v^>vvv^>>^<><^>^<<>>v^v>v<<>^>>^>v<^^<^<<>^^v^^v>v<>^<^^<v^^vvv^^v>^vv^<>v<^v^>^vv<v^<<^>^><^^<^^<^>vv^<>^<>^>^^<^v><<<^>vv^vv>v^v<>^^v^<^^^vvv^>v^<><>v>vv<^v^>>^v<^^vv>vv>^>><<<<>^><>>v<>>v>^v<^vv>^^>^<^<>v^v<^^v<^^>^^<>^^^^>^vv<^>><^>vv^>v^>^vv>^>v^^<>>^v<>>v<^>^v>vv^>^>>>vvv>vv>^><^v<<<>^^v>v^v<^^^v^^>^><<^^>^><^^^^^^^<^v<^>>vv>>^v^vv<>><>^>>>^^^^^><^<<^v<>vv^>>v<^vv<^v<>v<>^v^<<>>>>v^^>^vv<<><<>v^v<^<^>>^^><^>^><<><^<><>vv>>>>^><<^^^<^v^>^>^^>^<^><^^<^^<>><>><<<>^>^^v<>^<<>vv>^>>^>^<>>vv<^^vv<>v<>^^>^v^v^v>^^^v<<<^vv^><>^>^^vv>v^<<^><>>vv^^^^^>v>>v<<<>^<><^v<^v<^>^<>^vvv>^>v><<v>vv^<^^>v^v>^<^v^<^v<<^>^<><>^^<>>^^<^v^<^<<^>v^^>v^v^^^<^v<<^v>^>>^^^^^><<>v^><>v^^<^v<^<v^^^><^^^><<<<<>^<<^<>>v<^>><^^^<>>>>vvv>v<>>>v^v^v<^<<^>^<<>v>>^>^^><^><<^v^^<^<>v^v>vv<>>>>>>v<<>>^^>v<<<>^<<^><<^v>vv>>>><><>v^<^v><^>v>>^^^v<^>>^>>v<<^<<>vvv>>^v<>>^v><<<^v^v<>^vvv^^^<>vvv^^^>>v>^>^<><<>vv>^v^>>^<v><><<>^^><>^<<>^v<<>>v^vv<<>^^v^v^v><^>v>v<^<<^<^>vv>^v<<^>^>>v^<v^^v^^>><<<>^v>><>v<>><^v>^^v<<<<^v^vv<<<<><><^<^<^v><<^^v^<<<<<^^><^^>vvv<^><>vvv^v^>^>^^^v<<^<^^>vv^vv^><^v^<<>v<^^>^vv<<>^<<><^>v^<<^<>v><><>v<<^^><^^^v>>v>^vv>^v^^<><<<<<^>^v^<^<^^>^vv<^>v^^v^<>v<>v^v>vvv><><<><>vv^^>^^^<><^>^^^>vvv><>v<>>v^>v^^vv^>v>>>><^^>^v^v>>vv<^>><<<^>><^<^>^<^>^>>v^<^<>^<^^<>^<>>><^<^<^<<^><^^>vv<>^^>v^>>v>>>v<<^vv^<><>>>^^<^v^>>^>>><<^<>^>>^v>>><^^^<<^vv><><<>^^^<>^^^>><>>>^>vv>^<^<>>^<^^>v^>vv><><>>><><<^^v<<^vvv<><><<^v>^v<>^<^^^v^>^<^><^v>v>^v<>><^^v^^^^^<>>vvvv>>>>^<<><^v>vv>>^^><<><><^^^<^<^<<^v>^^^>>>>><v^^^<>>vv^^^v<><^>v>><<><>v<^><<>>><>v>^<>>^>v^v<<<<>^vv<<>>>>>vv<><>^<^v>vv^<>><<>^<>><^>>>><<>^^>><<<^^^^^v>>^<<>>vvvv<^v^vvv<<<^><>>>>vv^<^v>v<^<>^v>>^<^^v^>>><>^^<^v>>v<<>vvvv>^><>v^<>^<<^vv<^>>^v^>^^<<<^>>^^>^<^^<^<<v^^v^^<^v<^>>><<>vv<<^><^>vv<^>>^vv>>>^>>><^<<<>>^<<>><^<<^^^>>v^^>v<<<>v>v>v^<>>>^vvv><<^^<<><^v>>>>vv^^v^v<>v>v<<<<><<>vv<><^^^<>>v>>>>^^<><^<^v^>>^^v>^<v>^^>^v^<>>v^^<^v^^<<>^^>v^^>><<<<^<^^v>^^v>v<^>v^<>vv>>^^v>v^^>vvvvv<<>vv>vvvvvv>>v>>^^^vv^^><>v^^^^v>vv>v<^v>>>>^>^>^v>^>>><<>>^vv>>>><><<^<^><^vv^v>>>>>v>^>^^v^>v<^v^<^<v<>>^vv<<>^v^v>><><<>>v^^<<>^^<>v<<^^<^^>^^>^<^><>>v<>>^^<^>><<>>^v^>v>v<<^^<<^>v>v^^v^^<<>^v>v>v<^^>^v<><^<<v<^<<<<^^>v^v^^><<><^^^v^^>>>vvv><>vv<>>^^v^v<<^>v^^v^>vv>^<^^<^v^^<^^v<<>>vv<^>>^><><>v>>v<>^<<>>> \ No newline at end of file diff --git a/2015/day3/p1.py b/2015/day3/p1.py new file mode 100644 index 0000000..c481d40 --- /dev/null +++ b/2015/day3/p1.py @@ -0,0 +1,20 @@ +with open('input.text', 'r') as file: + data: str = file.read() + +been = [] +pos = [0, 0] +for char in data: + match char: + case '^': + pos[1] += 1 + case 'v': + pos[1] -= 1 + case '>': + pos[0] += 1 + case '<': + pos[0] -= 1 + + if not pos in been: + been.append(pos.copy()) + +print(f'Santa has been to {len(been)} houses.') diff --git a/2015/day3/p2.py b/2015/day3/p2.py new file mode 100644 index 0000000..fa04b7f --- /dev/null +++ b/2015/day3/p2.py @@ -0,0 +1,25 @@ +with open('input.text', 'r') as file: + data: str = file.read() + +been = [] +santas = [[0, 0], [0, 0]] +robo_santa = False + +for char in data: + + match char: + case '^': + santas[robo_santa][1] += 1 + case 'v': + santas[robo_santa][1] -= 1 + case '>': + santas[robo_santa][0] += 1 + case '<': + santas[robo_santa][0] -= 1 + + if not santas[robo_santa] in been: + been.append(santas[robo_santa].copy()) + + robo_santa = not robo_santa + +print(f'Santa has been to {len(been)} houses.') diff --git a/2022/README.md b/2022/README.md new file mode 100644 index 0000000..c1f85f7 --- /dev/null +++ b/2022/README.md @@ -0,0 +1,5 @@ +# AOC2022 +My Advent of Code 2022 + +All done in C. +My goals with this were to write readible code that worked with varying inputs. diff --git a/2022/day1/p1/day1p1.c b/2022/day1/p1/day1p1.c new file mode 100644 index 0000000..c56e9d8 --- /dev/null +++ b/2022/day1/p1/day1p1.c @@ -0,0 +1,43 @@ +#include +#include +#include + +int main() +{ + + FILE *File; + char *Line = malloc(256); + + int CurrentCal, MaxCalories, ElfNum, ElfLargest = 0; + + File = fopen("input.txt","r"); + + + while(fgets(Line, 10, File)) + { + + if (atoi(Line) == 0) + { + + if (CurrentCal > MaxCalories) + { + MaxCalories = CurrentCal; + ElfLargest = ElfNum; + } + + CurrentCal = 0; + ElfNum++; + + } + else + CurrentCal += atoi(Line); + + + } + + printf("Elf %d is carrying %d calories of food.", ElfLargest, MaxCalories); + + fclose(File); + + return 0; +} \ No newline at end of file diff --git a/2022/day1/p1/input.txt b/2022/day1/p1/input.txt new file mode 100644 index 0000000..9831e31 --- /dev/null +++ b/2022/day1/p1/input.txt @@ -0,0 +1,2244 @@ +8890 +13468 +5519 +4939 + +4580 +3529 +2917 +1329 +4004 +3553 +5457 +1907 +2515 +4055 +4626 +3776 +1982 +2967 + +10118 +2688 +4629 +3054 +3911 +6680 +6988 +6471 + +2836 +7494 +7963 +8528 +8732 +1743 +4794 +1685 +1406 +2575 + +7606 +11935 +4792 +7040 +8684 +1131 +3000 + +5799 +4398 +3837 +2155 +1889 +5560 +6684 +2045 +1194 +1280 +4009 +6944 +4754 + +3932 +10114 +9039 +10597 +6889 +5807 +8786 +5376 + +5666 +8741 +2305 +3914 +4521 +6449 +6590 +5933 +2765 + +1417 +3584 +3304 +5605 +6249 +3195 +5905 +5308 +3920 +2912 +4028 +2897 +4737 +6224 + +4498 +6139 +6716 +9309 +6210 +4120 +6244 +9313 +3275 + +5602 +4336 +5174 +4592 +3676 +6700 +1903 +4623 +5393 +3743 +2397 +5207 +3445 + +2219 +3393 +4442 +5142 +4466 +6851 +1877 +4005 +4792 +1370 + +11433 +10337 +11711 +4342 +6693 +2626 +6245 + +10039 +11192 +7335 +13284 +13507 + +1989 +5218 +4411 +4440 +3563 +1714 +3617 +3068 +1167 +1222 +3567 +3888 +2634 +2289 +3410 + +6518 +5391 +12964 +13103 +9070 +9803 + +22560 + +4229 +2789 +2219 +1940 +2848 +4053 +5849 +5518 +1088 +6297 +6603 + +2889 +3452 +4254 +3624 +4293 +1511 +5150 +2890 +5834 +6345 +6399 +1164 +3561 + +46632 + +19171 + +2510 +21303 +15390 + +54375 + +22699 +36690 + +2240 +3329 +3299 +5978 +4641 +3499 +3515 +4915 +4613 +2785 +4757 +5394 +2339 +2574 +5073 + +1321 +3132 +5429 +5664 +4451 +1397 +3284 +6077 +4117 +4818 +4430 +3163 +2432 +3894 + +6726 +2851 +9582 + +32549 + +17153 +18102 +11467 +20051 + +7167 +4819 +4283 +1900 +1524 +3228 +1712 +7107 +7453 +1137 +1927 +3876 + +14437 +7952 + +5253 +7062 +1107 +5023 +2353 +7335 +2819 +4925 +2439 +5186 +3602 +2016 + +4129 +26383 + +3665 +5169 +6365 +4399 +3518 +2176 +6185 +1150 +1490 +3818 +6223 +2104 +4006 +1142 + +1138 +11986 +5920 +6371 +7888 +8197 +10859 + +4338 +4292 +1523 +1044 +2498 +2514 +3160 +5049 +2113 +5867 +1916 +5458 +4686 +2012 +5455 + +15587 + +4040 +4077 +5272 +4914 +6755 +6297 +2240 +1925 +2940 +2346 +5688 +5501 + +1476 +4270 +1252 +4783 +3661 +5353 +4596 +5400 +5916 +1685 +3307 +3915 +5624 +1371 +2001 + +42703 + +1250 +2902 +6414 +6487 +6368 +1200 +2759 +3307 +5551 +1216 +4097 +3174 +3758 +2470 + +4997 +1199 +4598 +2443 +2931 +4287 +1606 +5156 +4750 +4117 +2487 +3399 +4283 +4991 +4441 + +1789 + +4379 +10889 +6020 +1102 +5043 +10061 +11276 + +7586 +13962 + +10039 +2029 + +2150 +2431 +3646 +4601 +5105 +4254 +5469 +5844 +6856 +4529 +3557 +3043 +4944 + +6797 +1605 +6624 +4966 +1452 +2260 +6281 +3273 +5754 +6576 +6326 +6391 +4892 + +9772 +16686 +1032 +14594 + +2978 +4118 +2292 +6107 +7428 +2954 +3516 +2464 +4726 +5438 +3292 +2812 + +6953 +7372 +5775 +7550 +8449 +7315 +2872 +2442 + +2581 +7301 +1256 +3467 +2348 +6254 +5231 +3225 +8275 + +3065 +4110 +5259 +8646 +4515 +7431 +7086 +3650 +2445 + +5714 +4659 +6401 +1647 +7071 +1302 +8529 +1570 +7288 + +49901 + +6687 +1879 +4661 +6048 +6920 +5048 +1537 +3786 +1634 +3274 +4277 +2712 +2647 + +5597 +4194 +4058 +5329 +2484 +3420 +2607 +2953 +2580 +1093 +2609 +2299 +4805 +3426 +4101 + +2833 +6833 +1455 +9758 +2307 +3045 +10558 + +3380 +4149 +8715 +5262 +7564 +9620 +3331 +6581 +7674 + +3389 +2996 +1250 +9915 +1731 +7254 +3784 +10198 + +4210 +6612 +6253 +6874 +5858 +4349 +4845 +1119 +4695 +4496 +6276 +4234 +6679 + +16077 +6437 +18269 +14173 + +19739 +5489 +3345 +5798 + +4150 +5984 +5293 +5741 +3166 +5279 +5244 +5215 +5010 +3367 +1828 +4310 +4335 +3973 + +2144 +12157 +9069 +1615 +1826 +7195 + +12924 +6962 +11433 +3150 +7863 +7387 + +3113 +3604 +7814 +10587 +3098 +10913 + +4513 +9048 +10027 +3587 +7837 +3906 +2299 + +4370 +6152 +5473 +5866 +5358 +4265 +4487 +6664 +2347 +6075 +1481 +4074 +1962 + +7409 +7332 +11378 +7740 +8090 +3036 +1310 + +8351 +6202 +1420 +9306 +7410 +11169 +9201 + +6951 +2037 +8682 +5075 +9709 +4678 +8347 + +10537 +13081 +5447 +8707 +11933 + +10454 +2543 +10319 +8133 +2072 +9299 +1929 + +7770 +4904 +8452 +8625 +7675 +4126 +1015 +4921 +8517 +2709 + +10877 +7192 +9475 +4555 +5625 +5261 +5756 + +6150 +9451 +11426 +11464 +6334 +10003 +8686 + +1959 +1711 +5018 +4235 +4920 +4257 +2511 +2572 +1347 +1871 +2102 +4203 +6334 + +12058 +8690 +1875 +7697 +12351 +7669 + +32887 + +31015 + +6024 +2966 +3311 +7248 +6280 +4727 +6071 +6771 +1599 +1958 +7649 + +9066 +13179 +1857 +12410 +1404 +11676 + +6262 +7283 +4418 +1207 +7099 +2798 +6994 +5267 +7810 +6521 + +7144 +3828 +5528 +4676 +2311 +6429 +7064 +6601 +2846 +1611 +3188 + +4151 +6232 +5706 +7003 +3470 +8349 +8189 +4137 + +3055 +6091 +2008 +5977 +1909 +1192 +2149 +2983 +1219 +1025 +1537 +2635 +5461 +5570 +5620 + +25514 + +19363 +16402 + +6908 +4670 +3407 +4541 +5027 +5640 +1008 +5737 +2336 +2994 +3908 + +2788 +5117 +18397 +5362 + +2285 +1597 +1556 +1505 +1317 +1136 +3387 +4936 +6798 +7103 +5537 + +7045 +4354 +6071 +6734 +11077 +5863 +7177 + +5625 +3990 +6473 +3191 +1023 +3673 +2520 +5998 +2726 +5421 +1907 +7129 + +1302 +1703 +6858 +1329 +1933 +3438 +4088 +7955 + +8593 + +6686 +3483 +5829 +2240 +6810 +2964 +5400 +3826 +4753 +5525 +5395 +5127 +6010 + +9254 +37116 + +1487 +18037 +9573 +14918 + +6570 +3119 +1689 +3785 +4436 +6237 +4394 +4042 +1242 +7143 +1621 +5211 + +3851 +1651 +2177 +5699 +4866 +5048 +5174 +1271 +3971 +2695 +1051 +1670 +1372 +3959 +1264 + +8039 +1858 +9989 +8870 +7618 +5662 + +1059 +8999 +2214 +5310 +8052 +5807 +1963 +4282 +8489 + +1444 +2736 +3879 +2437 +3539 +3657 +2351 +4513 +4299 +4166 +5665 +4164 +3622 +1907 + +3638 +4328 +4562 +3285 +3200 +5909 +2542 +5197 +5104 +3570 +4323 + +1631 +2406 +2788 +1838 +4639 +2469 +6718 +3731 +2375 +4325 +3952 +1012 +1076 + +10733 +9085 +5074 +9984 +9990 +10107 +9274 +10464 + +13249 +10020 +4881 +12806 +11865 + +9852 +6248 +4916 +7066 +5297 +5475 +6530 +10364 + +2415 +5519 +2200 +3556 +5815 +2426 +6180 +2142 +6627 +7369 +6353 +4170 + +5507 +15832 +15699 +10635 +7997 + +1742 +4641 +4628 +4867 +8860 +1133 +3575 +7128 +8774 + +2808 +6117 +3760 +1327 +1224 +4959 +5456 +2801 +5944 +1961 +1194 +3734 +2937 +3793 +1888 + +21943 +35720 + +6563 +5000 +1710 +4021 +3273 +6155 +3198 +3661 +6309 +2331 +1631 +5646 +5734 + +9646 +3457 +8620 +5965 +3440 +6433 +1753 +9062 +8301 + +9192 +3284 +9181 +8566 +3759 +10184 +8911 +6998 + +19491 +10283 +13574 +12306 + +2916 +9083 +13398 +13239 +4749 +12853 + +7223 +3154 +2911 +7004 +3110 +3584 +6619 +5960 +8429 + +5878 +4929 +4709 +4932 +3023 +1011 +2193 +4264 +5282 +1657 +4360 +6109 +5031 +3785 +5017 + +16065 +2923 +11281 + +7340 +3319 +5766 +1660 +7947 +7012 +2739 +1395 +8273 + +3887 +5538 +4771 +3770 +1504 +2681 +4066 +3406 +3487 +3098 +3611 +6234 +3449 + +12281 +11291 +11367 +10405 +4223 + +17411 +8453 + +36173 + +3431 +3627 +4047 +2512 +6628 +1229 +4812 +3961 +2389 +4747 +1799 +4291 + +2176 +7287 +6468 +3056 +9632 +1027 +3251 +1517 +1853 + +4727 +2417 +4544 +5949 +4289 +2237 +2861 +4284 +6912 +2843 +5773 +4423 + +3093 +6501 +1259 +4975 +4357 +2940 +2435 +2939 +1772 +3876 +5008 +2909 +5641 +5710 + +4559 +6522 +5781 +1343 +2062 +2392 +1852 +5135 +7668 +7240 +3028 + +11607 +9525 +7332 +11307 + +4941 +5277 +2311 +5738 +3029 +2709 +5448 +1724 +2982 +1082 +1515 +1854 +4762 +4514 +2015 + +51097 + +2814 +5593 +6576 +10591 +4809 +4469 +3790 +8186 + +7656 +10163 +19430 + +1928 +5626 +3418 +6785 +2781 +3549 +2884 +6656 +6210 +4950 +3598 +2669 +5185 + +8768 +5221 +7404 +9630 +3371 +9450 +1837 +3100 +4494 + +3987 +3179 +2415 +2074 +1172 +3192 +5874 +5869 +4404 +5842 +1987 +2526 +4094 + +5792 +6056 +1689 +5643 +4068 +2259 +1461 +1764 +3453 +2344 +6118 +5844 +2014 +1184 + +13505 +8242 +1358 +3817 +12030 +11105 + +7333 +9427 +10385 +3458 +6340 +10804 + +3152 +1364 +3371 +6000 +3032 +3326 +4046 +1890 +4321 +3986 +3309 +4021 +1683 +2198 +2003 + +2592 +8354 +13452 +12440 +7966 + +1593 +1143 +6246 +4105 +6164 +6425 +3904 +1143 +5966 +3100 +5215 +4256 +2090 +3413 + +4382 +6229 +2368 +1780 +5658 +1452 +6359 +1802 +3800 +6433 +3866 +3038 +4699 +4137 + +5395 +2426 +5621 +9156 +6250 +9008 +2966 +3226 +6709 + +5387 +7267 +6067 +6468 +5833 +5241 +7204 +1419 +6037 +5938 + +2390 +4300 +4787 +3656 +5976 +1879 +3964 +3314 +3076 +5158 +5612 +2846 +5231 + +2205 +3652 +5211 +1711 +2113 +5988 +1310 +5333 +2253 +2897 +5234 +3809 +3640 +2995 +2197 + +6695 +5930 +6118 +5463 +3750 +2440 +7006 +4073 +5663 +1369 +2721 +1961 + +5270 +4851 +5199 +1976 +4128 +5527 +2998 +1567 +6398 +4163 +1484 +6077 +3035 +3860 + +6698 +3081 +6805 + +13122 +4106 +6919 +6595 + +1608 +7971 +10279 +7856 +3503 + +7405 +6658 +3512 +3913 +6137 +2617 +2776 +8255 +7034 + +8368 +5163 +6566 +5481 +4059 +10560 + +5801 +5394 +2081 +2927 +1775 +1635 +1180 +5834 +7652 +2365 +6525 + +7192 +13806 +12580 +6935 +3136 +7820 + +2371 +7237 +5197 +1561 +2418 +1742 +5540 +7836 +1613 +4012 + +45767 + +6825 +6014 +7571 +3393 +2050 +8230 +4178 +5378 +4878 +5446 + +1412 +2156 +4877 +5604 +3149 +7585 +7922 +6811 +6971 +4493 + +12948 +32336 + +2512 +13073 +12030 +12851 +8951 + +3070 +10259 +2650 +6091 +5889 +4857 + +5483 +6813 +4208 +4999 +3708 +1955 +8588 +5416 +6235 +7920 + +2521 +7180 +7558 + +8285 +2208 +6058 +2839 +9653 +8078 +5862 +5711 +4847 + +3792 +1778 +3755 +13541 +12325 +9599 + +7431 +2814 +3828 +2468 +5499 +6822 +5190 +7279 +7939 +8488 + +5469 +3086 +8098 +12450 + +3182 +4307 +4150 +2802 +3857 +5331 +1045 +1111 +3983 +2606 +1077 + +3219 +2931 +4166 +2250 +5225 +1704 +3895 +6286 +1394 +5564 +1498 +3343 +5912 +2884 + +3874 +5309 +2941 +2109 +5322 +2994 +3922 +7538 +4666 +6223 +4754 + +4409 +6975 +8829 +4301 +1730 +2092 +2385 +1288 +9627 + +8849 +7371 +3259 +8823 +8963 +3901 +7003 +2250 +7492 + +7619 +16991 +7511 +5747 + +6361 +2401 +6509 +3429 +1276 +5120 +1852 +1706 +2373 +6117 +1967 +4655 +6193 + +3186 +10336 +12548 +7692 +1422 +7148 + +8898 +15230 +7468 +2349 +7214 + +18114 +7557 +10634 + +6755 +1045 +7326 +6511 +1691 +4966 +7367 +3305 +7083 +3105 +4262 + +6806 +8767 +6339 +4159 +11619 +8959 +10729 + +9070 +9027 +8532 + +2493 +1949 +5519 + +4637 +5893 +6617 +2710 +4712 +3514 +2828 +5131 +4756 +4772 +2488 +2540 +6593 + +4500 +9306 +3847 +8792 +4766 +10598 +5259 +1837 + +7936 +7125 +5091 + +4087 +6428 +3093 +5529 +2092 +5734 +1532 +1615 +5175 +4149 +6050 +2863 + +10505 +11702 +13870 +6381 + +12380 +6172 +16863 +9492 + +2406 +7906 +1139 +6866 +3963 +8280 +3315 +1645 +7885 +8315 + +2744 +10964 +9192 +6889 +11554 +4587 +5537 + +27485 +2819 + +67997 + +6372 +1910 +7440 +9638 +5161 +9354 +1063 +7999 +2712 + +6375 +6398 +2185 +11875 +1458 +11978 +9621 + +7326 +6319 +4988 +5326 +7844 +3876 +7311 +1920 +2865 +7959 +6890 + +5086 +3457 +3398 +6534 +5661 +1592 +4249 +1477 +3174 +3134 +6130 +2097 +5922 + +1854 +7848 +10289 +9261 +9692 +4814 +7798 +2634 + +13448 +10236 +11977 +4645 +12188 +11118 + +1681 +2162 +7349 +3198 +5725 +1151 +4940 +3481 +5896 +7245 +7424 +5630 + +3626 +3856 +4655 +1412 +2466 +5810 +4395 +1762 +4465 +3614 +3439 +6441 +4400 + +5037 +2450 +1870 +2191 +2145 +9754 +4259 +5762 + +9373 +3564 +7177 +1445 +8672 +4098 +6468 +1394 + +1675 +6754 +1996 +5894 +6449 +4644 +5642 +1338 +1087 +4989 +2467 +1192 +6368 + +34156 +12437 + +4394 +5648 +7691 +5598 +5720 +6414 +10089 +2116 + +9460 +2078 +7811 +13011 +5597 +1628 + +3772 +1201 +1174 +5884 +3720 +1120 +3830 +5809 +6269 +2548 +3212 +1924 +3951 +5178 + +1543 +7155 +5204 +7480 +9747 + +4029 +10517 +6776 +6978 +3517 +5746 +7683 +5939 + +5484 +1669 +1250 +3036 +3822 +5246 +1648 +5676 +1591 +1624 +3525 +4862 +2834 +5814 +4006 + +9610 +10230 +1473 +8541 +2163 +4706 +6919 +10514 + +46165 + +4618 +4867 +3750 +4578 +5498 +3468 +2663 +3003 +2777 +4434 +7386 + +18475 +5479 +15616 + +4810 +6199 +5905 +7014 +3903 +2404 +6955 +1290 +6328 +4729 +1567 +2070 + +1426 +6652 +7274 +3535 +1873 +8830 +6465 +3091 + +11667 +1824 +1749 + +6031 +1589 +6764 +5294 +2658 +7540 +2285 +5290 +3052 +4809 + +9275 +3219 +9205 +9367 +6695 +1620 +1418 +9589 +6985 + +4961 +1893 +4204 +4158 +2488 +6562 +6862 +7443 +5180 +6382 +5930 +2819 + +9225 +17113 +2562 +11634 + +9490 +5720 +2413 +13607 +12761 +4473 + +10788 +18449 +9511 + +11498 +3288 +9304 +4951 +10878 + +13888 +23233 +18690 + +5112 +9811 +9336 +4030 +11021 +3585 +1534 + +6026 +5618 +3065 +2909 +8887 +8052 +3524 +7783 +5793 + +3573 +5391 +1887 +6295 +3311 +8235 +3985 +2222 +2594 + +2807 +3623 +2622 +6466 +2272 +2181 +5550 +4568 +1172 +2579 +1020 +5542 +2653 +1080 + +4874 +10296 +5421 + +3743 +5053 +5510 +1401 +4173 +7968 +5999 +6482 +7019 +7916 +3752 + +8718 +7969 +6072 +3223 +5924 +2642 +8274 +1985 +3342 +2036 + +1706 +8655 +3521 +7502 +7955 + +1915 +5083 +1668 +11457 +2011 +9998 +9885 + +10592 +25078 +17582 + +2596 +2198 +8811 +7464 +5711 +7197 +8744 +5382 +6179 +3769 + +3713 +6012 +7951 +10750 +5580 +3426 +11019 + +5536 +7943 +5163 +7703 +14144 + +3169 +5475 +2367 +3666 +6042 +4279 +1699 +3129 +3294 +1813 +6465 +3591 +3332 +2155 + +1305 +9537 +9805 +2172 +8665 +8386 +7718 +10709 + +4645 +6242 +8462 +6619 +3165 +7797 +5664 +5058 +1339 +3749 + +3365 +5018 +3278 +3403 +4138 +4521 +1797 +3791 +1401 +3748 +6039 +1513 +2696 \ No newline at end of file diff --git a/2022/day1/p2/day1p2.c b/2022/day1/p2/day1p2.c new file mode 100644 index 0000000..996b5ad --- /dev/null +++ b/2022/day1/p2/day1p2.c @@ -0,0 +1,80 @@ +#include +#include +#include + + +int FindSmallest(int Array[3]) +{ + + int SmallestNumberPosition = 0; + int SmallestNumber = Array[0]; + + for (int i = 1; i < 3; i++) + { + + if (Array[i] < SmallestNumber) + { + SmallestNumber = Array[i]; + SmallestNumberPosition = i; + } + + } + + return SmallestNumberPosition; +} + + +int main() +{ + + FILE *File; + char *Line = malloc(256); + + int TopThree[3] = {0,0,0}; + int CurrentCal = 0; + + + File = fopen("input.txt","r"); + + while(fgets(Line, 10, File)) + { + + if (atoi(Line) == 0) + { + + for (int i=0; i < 3; i++) + { + + bool ZeroCheck = false; + + if (CurrentCal > TopThree[i]) + { + int SmallestPos = FindSmallest(TopThree); + TopThree[SmallestPos] = CurrentCal; + break; + } + + } + + CurrentCal = 0; + + } + else + CurrentCal += atoi(Line); + + } + + int Total = 0; + + + for (int i = 0; i < 3; i++) + Total += TopThree[i]; + + + printf("Total of the top three elves: %d\n", Total); + + fclose(File); + + return 0; + +} diff --git a/2022/day1/p2/input.txt b/2022/day1/p2/input.txt new file mode 100644 index 0000000..9831e31 --- /dev/null +++ b/2022/day1/p2/input.txt @@ -0,0 +1,2244 @@ +8890 +13468 +5519 +4939 + +4580 +3529 +2917 +1329 +4004 +3553 +5457 +1907 +2515 +4055 +4626 +3776 +1982 +2967 + +10118 +2688 +4629 +3054 +3911 +6680 +6988 +6471 + +2836 +7494 +7963 +8528 +8732 +1743 +4794 +1685 +1406 +2575 + +7606 +11935 +4792 +7040 +8684 +1131 +3000 + +5799 +4398 +3837 +2155 +1889 +5560 +6684 +2045 +1194 +1280 +4009 +6944 +4754 + +3932 +10114 +9039 +10597 +6889 +5807 +8786 +5376 + +5666 +8741 +2305 +3914 +4521 +6449 +6590 +5933 +2765 + +1417 +3584 +3304 +5605 +6249 +3195 +5905 +5308 +3920 +2912 +4028 +2897 +4737 +6224 + +4498 +6139 +6716 +9309 +6210 +4120 +6244 +9313 +3275 + +5602 +4336 +5174 +4592 +3676 +6700 +1903 +4623 +5393 +3743 +2397 +5207 +3445 + +2219 +3393 +4442 +5142 +4466 +6851 +1877 +4005 +4792 +1370 + +11433 +10337 +11711 +4342 +6693 +2626 +6245 + +10039 +11192 +7335 +13284 +13507 + +1989 +5218 +4411 +4440 +3563 +1714 +3617 +3068 +1167 +1222 +3567 +3888 +2634 +2289 +3410 + +6518 +5391 +12964 +13103 +9070 +9803 + +22560 + +4229 +2789 +2219 +1940 +2848 +4053 +5849 +5518 +1088 +6297 +6603 + +2889 +3452 +4254 +3624 +4293 +1511 +5150 +2890 +5834 +6345 +6399 +1164 +3561 + +46632 + +19171 + +2510 +21303 +15390 + +54375 + +22699 +36690 + +2240 +3329 +3299 +5978 +4641 +3499 +3515 +4915 +4613 +2785 +4757 +5394 +2339 +2574 +5073 + +1321 +3132 +5429 +5664 +4451 +1397 +3284 +6077 +4117 +4818 +4430 +3163 +2432 +3894 + +6726 +2851 +9582 + +32549 + +17153 +18102 +11467 +20051 + +7167 +4819 +4283 +1900 +1524 +3228 +1712 +7107 +7453 +1137 +1927 +3876 + +14437 +7952 + +5253 +7062 +1107 +5023 +2353 +7335 +2819 +4925 +2439 +5186 +3602 +2016 + +4129 +26383 + +3665 +5169 +6365 +4399 +3518 +2176 +6185 +1150 +1490 +3818 +6223 +2104 +4006 +1142 + +1138 +11986 +5920 +6371 +7888 +8197 +10859 + +4338 +4292 +1523 +1044 +2498 +2514 +3160 +5049 +2113 +5867 +1916 +5458 +4686 +2012 +5455 + +15587 + +4040 +4077 +5272 +4914 +6755 +6297 +2240 +1925 +2940 +2346 +5688 +5501 + +1476 +4270 +1252 +4783 +3661 +5353 +4596 +5400 +5916 +1685 +3307 +3915 +5624 +1371 +2001 + +42703 + +1250 +2902 +6414 +6487 +6368 +1200 +2759 +3307 +5551 +1216 +4097 +3174 +3758 +2470 + +4997 +1199 +4598 +2443 +2931 +4287 +1606 +5156 +4750 +4117 +2487 +3399 +4283 +4991 +4441 + +1789 + +4379 +10889 +6020 +1102 +5043 +10061 +11276 + +7586 +13962 + +10039 +2029 + +2150 +2431 +3646 +4601 +5105 +4254 +5469 +5844 +6856 +4529 +3557 +3043 +4944 + +6797 +1605 +6624 +4966 +1452 +2260 +6281 +3273 +5754 +6576 +6326 +6391 +4892 + +9772 +16686 +1032 +14594 + +2978 +4118 +2292 +6107 +7428 +2954 +3516 +2464 +4726 +5438 +3292 +2812 + +6953 +7372 +5775 +7550 +8449 +7315 +2872 +2442 + +2581 +7301 +1256 +3467 +2348 +6254 +5231 +3225 +8275 + +3065 +4110 +5259 +8646 +4515 +7431 +7086 +3650 +2445 + +5714 +4659 +6401 +1647 +7071 +1302 +8529 +1570 +7288 + +49901 + +6687 +1879 +4661 +6048 +6920 +5048 +1537 +3786 +1634 +3274 +4277 +2712 +2647 + +5597 +4194 +4058 +5329 +2484 +3420 +2607 +2953 +2580 +1093 +2609 +2299 +4805 +3426 +4101 + +2833 +6833 +1455 +9758 +2307 +3045 +10558 + +3380 +4149 +8715 +5262 +7564 +9620 +3331 +6581 +7674 + +3389 +2996 +1250 +9915 +1731 +7254 +3784 +10198 + +4210 +6612 +6253 +6874 +5858 +4349 +4845 +1119 +4695 +4496 +6276 +4234 +6679 + +16077 +6437 +18269 +14173 + +19739 +5489 +3345 +5798 + +4150 +5984 +5293 +5741 +3166 +5279 +5244 +5215 +5010 +3367 +1828 +4310 +4335 +3973 + +2144 +12157 +9069 +1615 +1826 +7195 + +12924 +6962 +11433 +3150 +7863 +7387 + +3113 +3604 +7814 +10587 +3098 +10913 + +4513 +9048 +10027 +3587 +7837 +3906 +2299 + +4370 +6152 +5473 +5866 +5358 +4265 +4487 +6664 +2347 +6075 +1481 +4074 +1962 + +7409 +7332 +11378 +7740 +8090 +3036 +1310 + +8351 +6202 +1420 +9306 +7410 +11169 +9201 + +6951 +2037 +8682 +5075 +9709 +4678 +8347 + +10537 +13081 +5447 +8707 +11933 + +10454 +2543 +10319 +8133 +2072 +9299 +1929 + +7770 +4904 +8452 +8625 +7675 +4126 +1015 +4921 +8517 +2709 + +10877 +7192 +9475 +4555 +5625 +5261 +5756 + +6150 +9451 +11426 +11464 +6334 +10003 +8686 + +1959 +1711 +5018 +4235 +4920 +4257 +2511 +2572 +1347 +1871 +2102 +4203 +6334 + +12058 +8690 +1875 +7697 +12351 +7669 + +32887 + +31015 + +6024 +2966 +3311 +7248 +6280 +4727 +6071 +6771 +1599 +1958 +7649 + +9066 +13179 +1857 +12410 +1404 +11676 + +6262 +7283 +4418 +1207 +7099 +2798 +6994 +5267 +7810 +6521 + +7144 +3828 +5528 +4676 +2311 +6429 +7064 +6601 +2846 +1611 +3188 + +4151 +6232 +5706 +7003 +3470 +8349 +8189 +4137 + +3055 +6091 +2008 +5977 +1909 +1192 +2149 +2983 +1219 +1025 +1537 +2635 +5461 +5570 +5620 + +25514 + +19363 +16402 + +6908 +4670 +3407 +4541 +5027 +5640 +1008 +5737 +2336 +2994 +3908 + +2788 +5117 +18397 +5362 + +2285 +1597 +1556 +1505 +1317 +1136 +3387 +4936 +6798 +7103 +5537 + +7045 +4354 +6071 +6734 +11077 +5863 +7177 + +5625 +3990 +6473 +3191 +1023 +3673 +2520 +5998 +2726 +5421 +1907 +7129 + +1302 +1703 +6858 +1329 +1933 +3438 +4088 +7955 + +8593 + +6686 +3483 +5829 +2240 +6810 +2964 +5400 +3826 +4753 +5525 +5395 +5127 +6010 + +9254 +37116 + +1487 +18037 +9573 +14918 + +6570 +3119 +1689 +3785 +4436 +6237 +4394 +4042 +1242 +7143 +1621 +5211 + +3851 +1651 +2177 +5699 +4866 +5048 +5174 +1271 +3971 +2695 +1051 +1670 +1372 +3959 +1264 + +8039 +1858 +9989 +8870 +7618 +5662 + +1059 +8999 +2214 +5310 +8052 +5807 +1963 +4282 +8489 + +1444 +2736 +3879 +2437 +3539 +3657 +2351 +4513 +4299 +4166 +5665 +4164 +3622 +1907 + +3638 +4328 +4562 +3285 +3200 +5909 +2542 +5197 +5104 +3570 +4323 + +1631 +2406 +2788 +1838 +4639 +2469 +6718 +3731 +2375 +4325 +3952 +1012 +1076 + +10733 +9085 +5074 +9984 +9990 +10107 +9274 +10464 + +13249 +10020 +4881 +12806 +11865 + +9852 +6248 +4916 +7066 +5297 +5475 +6530 +10364 + +2415 +5519 +2200 +3556 +5815 +2426 +6180 +2142 +6627 +7369 +6353 +4170 + +5507 +15832 +15699 +10635 +7997 + +1742 +4641 +4628 +4867 +8860 +1133 +3575 +7128 +8774 + +2808 +6117 +3760 +1327 +1224 +4959 +5456 +2801 +5944 +1961 +1194 +3734 +2937 +3793 +1888 + +21943 +35720 + +6563 +5000 +1710 +4021 +3273 +6155 +3198 +3661 +6309 +2331 +1631 +5646 +5734 + +9646 +3457 +8620 +5965 +3440 +6433 +1753 +9062 +8301 + +9192 +3284 +9181 +8566 +3759 +10184 +8911 +6998 + +19491 +10283 +13574 +12306 + +2916 +9083 +13398 +13239 +4749 +12853 + +7223 +3154 +2911 +7004 +3110 +3584 +6619 +5960 +8429 + +5878 +4929 +4709 +4932 +3023 +1011 +2193 +4264 +5282 +1657 +4360 +6109 +5031 +3785 +5017 + +16065 +2923 +11281 + +7340 +3319 +5766 +1660 +7947 +7012 +2739 +1395 +8273 + +3887 +5538 +4771 +3770 +1504 +2681 +4066 +3406 +3487 +3098 +3611 +6234 +3449 + +12281 +11291 +11367 +10405 +4223 + +17411 +8453 + +36173 + +3431 +3627 +4047 +2512 +6628 +1229 +4812 +3961 +2389 +4747 +1799 +4291 + +2176 +7287 +6468 +3056 +9632 +1027 +3251 +1517 +1853 + +4727 +2417 +4544 +5949 +4289 +2237 +2861 +4284 +6912 +2843 +5773 +4423 + +3093 +6501 +1259 +4975 +4357 +2940 +2435 +2939 +1772 +3876 +5008 +2909 +5641 +5710 + +4559 +6522 +5781 +1343 +2062 +2392 +1852 +5135 +7668 +7240 +3028 + +11607 +9525 +7332 +11307 + +4941 +5277 +2311 +5738 +3029 +2709 +5448 +1724 +2982 +1082 +1515 +1854 +4762 +4514 +2015 + +51097 + +2814 +5593 +6576 +10591 +4809 +4469 +3790 +8186 + +7656 +10163 +19430 + +1928 +5626 +3418 +6785 +2781 +3549 +2884 +6656 +6210 +4950 +3598 +2669 +5185 + +8768 +5221 +7404 +9630 +3371 +9450 +1837 +3100 +4494 + +3987 +3179 +2415 +2074 +1172 +3192 +5874 +5869 +4404 +5842 +1987 +2526 +4094 + +5792 +6056 +1689 +5643 +4068 +2259 +1461 +1764 +3453 +2344 +6118 +5844 +2014 +1184 + +13505 +8242 +1358 +3817 +12030 +11105 + +7333 +9427 +10385 +3458 +6340 +10804 + +3152 +1364 +3371 +6000 +3032 +3326 +4046 +1890 +4321 +3986 +3309 +4021 +1683 +2198 +2003 + +2592 +8354 +13452 +12440 +7966 + +1593 +1143 +6246 +4105 +6164 +6425 +3904 +1143 +5966 +3100 +5215 +4256 +2090 +3413 + +4382 +6229 +2368 +1780 +5658 +1452 +6359 +1802 +3800 +6433 +3866 +3038 +4699 +4137 + +5395 +2426 +5621 +9156 +6250 +9008 +2966 +3226 +6709 + +5387 +7267 +6067 +6468 +5833 +5241 +7204 +1419 +6037 +5938 + +2390 +4300 +4787 +3656 +5976 +1879 +3964 +3314 +3076 +5158 +5612 +2846 +5231 + +2205 +3652 +5211 +1711 +2113 +5988 +1310 +5333 +2253 +2897 +5234 +3809 +3640 +2995 +2197 + +6695 +5930 +6118 +5463 +3750 +2440 +7006 +4073 +5663 +1369 +2721 +1961 + +5270 +4851 +5199 +1976 +4128 +5527 +2998 +1567 +6398 +4163 +1484 +6077 +3035 +3860 + +6698 +3081 +6805 + +13122 +4106 +6919 +6595 + +1608 +7971 +10279 +7856 +3503 + +7405 +6658 +3512 +3913 +6137 +2617 +2776 +8255 +7034 + +8368 +5163 +6566 +5481 +4059 +10560 + +5801 +5394 +2081 +2927 +1775 +1635 +1180 +5834 +7652 +2365 +6525 + +7192 +13806 +12580 +6935 +3136 +7820 + +2371 +7237 +5197 +1561 +2418 +1742 +5540 +7836 +1613 +4012 + +45767 + +6825 +6014 +7571 +3393 +2050 +8230 +4178 +5378 +4878 +5446 + +1412 +2156 +4877 +5604 +3149 +7585 +7922 +6811 +6971 +4493 + +12948 +32336 + +2512 +13073 +12030 +12851 +8951 + +3070 +10259 +2650 +6091 +5889 +4857 + +5483 +6813 +4208 +4999 +3708 +1955 +8588 +5416 +6235 +7920 + +2521 +7180 +7558 + +8285 +2208 +6058 +2839 +9653 +8078 +5862 +5711 +4847 + +3792 +1778 +3755 +13541 +12325 +9599 + +7431 +2814 +3828 +2468 +5499 +6822 +5190 +7279 +7939 +8488 + +5469 +3086 +8098 +12450 + +3182 +4307 +4150 +2802 +3857 +5331 +1045 +1111 +3983 +2606 +1077 + +3219 +2931 +4166 +2250 +5225 +1704 +3895 +6286 +1394 +5564 +1498 +3343 +5912 +2884 + +3874 +5309 +2941 +2109 +5322 +2994 +3922 +7538 +4666 +6223 +4754 + +4409 +6975 +8829 +4301 +1730 +2092 +2385 +1288 +9627 + +8849 +7371 +3259 +8823 +8963 +3901 +7003 +2250 +7492 + +7619 +16991 +7511 +5747 + +6361 +2401 +6509 +3429 +1276 +5120 +1852 +1706 +2373 +6117 +1967 +4655 +6193 + +3186 +10336 +12548 +7692 +1422 +7148 + +8898 +15230 +7468 +2349 +7214 + +18114 +7557 +10634 + +6755 +1045 +7326 +6511 +1691 +4966 +7367 +3305 +7083 +3105 +4262 + +6806 +8767 +6339 +4159 +11619 +8959 +10729 + +9070 +9027 +8532 + +2493 +1949 +5519 + +4637 +5893 +6617 +2710 +4712 +3514 +2828 +5131 +4756 +4772 +2488 +2540 +6593 + +4500 +9306 +3847 +8792 +4766 +10598 +5259 +1837 + +7936 +7125 +5091 + +4087 +6428 +3093 +5529 +2092 +5734 +1532 +1615 +5175 +4149 +6050 +2863 + +10505 +11702 +13870 +6381 + +12380 +6172 +16863 +9492 + +2406 +7906 +1139 +6866 +3963 +8280 +3315 +1645 +7885 +8315 + +2744 +10964 +9192 +6889 +11554 +4587 +5537 + +27485 +2819 + +67997 + +6372 +1910 +7440 +9638 +5161 +9354 +1063 +7999 +2712 + +6375 +6398 +2185 +11875 +1458 +11978 +9621 + +7326 +6319 +4988 +5326 +7844 +3876 +7311 +1920 +2865 +7959 +6890 + +5086 +3457 +3398 +6534 +5661 +1592 +4249 +1477 +3174 +3134 +6130 +2097 +5922 + +1854 +7848 +10289 +9261 +9692 +4814 +7798 +2634 + +13448 +10236 +11977 +4645 +12188 +11118 + +1681 +2162 +7349 +3198 +5725 +1151 +4940 +3481 +5896 +7245 +7424 +5630 + +3626 +3856 +4655 +1412 +2466 +5810 +4395 +1762 +4465 +3614 +3439 +6441 +4400 + +5037 +2450 +1870 +2191 +2145 +9754 +4259 +5762 + +9373 +3564 +7177 +1445 +8672 +4098 +6468 +1394 + +1675 +6754 +1996 +5894 +6449 +4644 +5642 +1338 +1087 +4989 +2467 +1192 +6368 + +34156 +12437 + +4394 +5648 +7691 +5598 +5720 +6414 +10089 +2116 + +9460 +2078 +7811 +13011 +5597 +1628 + +3772 +1201 +1174 +5884 +3720 +1120 +3830 +5809 +6269 +2548 +3212 +1924 +3951 +5178 + +1543 +7155 +5204 +7480 +9747 + +4029 +10517 +6776 +6978 +3517 +5746 +7683 +5939 + +5484 +1669 +1250 +3036 +3822 +5246 +1648 +5676 +1591 +1624 +3525 +4862 +2834 +5814 +4006 + +9610 +10230 +1473 +8541 +2163 +4706 +6919 +10514 + +46165 + +4618 +4867 +3750 +4578 +5498 +3468 +2663 +3003 +2777 +4434 +7386 + +18475 +5479 +15616 + +4810 +6199 +5905 +7014 +3903 +2404 +6955 +1290 +6328 +4729 +1567 +2070 + +1426 +6652 +7274 +3535 +1873 +8830 +6465 +3091 + +11667 +1824 +1749 + +6031 +1589 +6764 +5294 +2658 +7540 +2285 +5290 +3052 +4809 + +9275 +3219 +9205 +9367 +6695 +1620 +1418 +9589 +6985 + +4961 +1893 +4204 +4158 +2488 +6562 +6862 +7443 +5180 +6382 +5930 +2819 + +9225 +17113 +2562 +11634 + +9490 +5720 +2413 +13607 +12761 +4473 + +10788 +18449 +9511 + +11498 +3288 +9304 +4951 +10878 + +13888 +23233 +18690 + +5112 +9811 +9336 +4030 +11021 +3585 +1534 + +6026 +5618 +3065 +2909 +8887 +8052 +3524 +7783 +5793 + +3573 +5391 +1887 +6295 +3311 +8235 +3985 +2222 +2594 + +2807 +3623 +2622 +6466 +2272 +2181 +5550 +4568 +1172 +2579 +1020 +5542 +2653 +1080 + +4874 +10296 +5421 + +3743 +5053 +5510 +1401 +4173 +7968 +5999 +6482 +7019 +7916 +3752 + +8718 +7969 +6072 +3223 +5924 +2642 +8274 +1985 +3342 +2036 + +1706 +8655 +3521 +7502 +7955 + +1915 +5083 +1668 +11457 +2011 +9998 +9885 + +10592 +25078 +17582 + +2596 +2198 +8811 +7464 +5711 +7197 +8744 +5382 +6179 +3769 + +3713 +6012 +7951 +10750 +5580 +3426 +11019 + +5536 +7943 +5163 +7703 +14144 + +3169 +5475 +2367 +3666 +6042 +4279 +1699 +3129 +3294 +1813 +6465 +3591 +3332 +2155 + +1305 +9537 +9805 +2172 +8665 +8386 +7718 +10709 + +4645 +6242 +8462 +6619 +3165 +7797 +5664 +5058 +1339 +3749 + +3365 +5018 +3278 +3403 +4138 +4521 +1797 +3791 +1401 +3748 +6039 +1513 +2696 \ No newline at end of file diff --git a/2022/day2/p1/day2p1.c b/2022/day2/p1/day2p1.c new file mode 100644 index 0000000..bc79be0 --- /dev/null +++ b/2022/day2/p1/day2p1.c @@ -0,0 +1,102 @@ +#include +#include + +/* +KEY + +A, X R 1 +B, Y P 2 +C, Z S 3 + +win 6 +lose 0 +draw 3 + +3 6 You: Scissors; Them: Paper (win) +3 3 You: Scissors; Them: Scissors (tie) +2 0 You: Paper; Them: Scissors (lose) +9+6+2 +*/ + + + +int main() +{ + + FILE *File; + char Line[6]; + + int TotalScore = 0; + + File = fopen("input.txt", "r"); + + while (fgets(Line, 6, File) != NULL) + { + + int Score = 0; + + char Me = Line[2]; + char Opponent = Line[0]; + + printf("%c %c\n", Me, Opponent); + + if (Me == 'X') + { + Score += 1; + + printf("You played Rock! +1\n"); + + if (Opponent == 'C') // Scissors (win) + { + Score += 6; + printf("You won! +6\n"); + } + else if (Opponent == 'A') // Rock (tie) + { + Score += 3; + printf("Tie! +3\n"); + } + } + else if (Me == 'Y') + { + Score += 2; + + printf("You played Paper! +2\n"); + + if (Opponent == 'A') // Rock (win) + { + Score += 6; + printf("You won! +6\n"); + } + else if (Opponent == 'B') // Paper (tie) + { + Score += 3; + printf("Tie! +3\n"); + } + } + else if (Me == 'Z') + { + Score += 3; + + printf("You played Scissors! +3\n"); + + if (Opponent == 'B') // Paper (win) + { + Score += 6; + printf("You won! +6\n"); + } + else if (Opponent == 'C') // Scissors (tie) + { + Score += 3; + printf("Tie! +3\n"); + } + } + TotalScore += Score; + } + + printf("Total score was %d\n",TotalScore); + + fclose(File); + + return 0; +} \ No newline at end of file diff --git a/2022/day2/p1/input.txt b/2022/day2/p1/input.txt new file mode 100644 index 0000000..d4af73c --- /dev/null +++ b/2022/day2/p1/input.txt @@ -0,0 +1,2500 @@ +C Y +C Z +B Z +A Z +A Z +A Y +A Z +C Y +C Z +A Y +A Y +B X +A Y +C Z +C Z +B X +C Z +A Z +B Y +C Z +A Y +C X +B Y +A Z +B Y +C Z +B Z +B Y +C Z +A Z +A Z +B Z +C Z +A X +B X +C Y +C Z +C Z +C Z +A Y +C Z +C Z +C Z +C X +A Z +A Z +C Y +A Z +C Z +C Z +C Z +A Z +B Y +C Z +A Z +B Z +A Z +A Y +B X +B X +C Z +C X +C Z +C Z +A Z +B Z +B X +B X +B Y +C X +C Y +A Y +C Z +A Y +C Z +A X +B X +B X +C X +B X +B X +A Y +B Y +C Y +A Z +C Y +B Y +B X +B X +B Z +B X +B Z +A Z +B Y +C Z +B Z +B Z +B Y +A Y +C Z +A Z +C Y +C Z +B Z +C Z +C Z +B Y +A Z +C Z +C Z +A Z +A Z +B X +C Y +A Y +C Z +B Y +C Z +A Y +C X +C X +B Y +C Z +C X +C Z +B Y +A Y +B Z +C Z +B Y +C Y +C Z +C Z +B Z +C Z +A Z +A Y +C Z +C Z +B Y +A Z +C Z +C Z +C Y +B Y +C Z +C Z +C Z +C Z +A X +B Y +C Z +B Y +C Z +B Y +C X +C Y +A X +C Z +B X +B X +A Z +A Z +A Z +B Y +C Z +B Z +A Z +B Y +C Y +C Z +C Z +C Z +C Y +C Z +B Y +C Z +C Z +B Z +A Y +B Z +C Z +C Y +A Z +C X +B Z +C Y +B Y +C Z +C Z +A Z +C Y +C Y +C Y +B Y +C Z +C X +B Y +C Z +C Y +B Z +A Y +C Z +A Y +B Z +A Y +A Y +B Z +A Z +C Z +C Z +B X +C Z +C Z +B X +B Y +C Z +C X +A X +C Z +C Z +C Z +B X +B X +A Z +C Z +C X +A Z +C Z +C Z +A Z +B Z +C Z +B Y +C Z +A Y +B Z +C Z +C Z +C Z +C X +A X +A Y +B Y +C Z +B Y +C X +A Y +C Z +C Z +B Y +B Z +C Z +B Y +B Y +B Y +A Y +C Z +B Z +A X +B Y +C Z +C Z +C X +A Y +C Z +A X +B Y +A X +A Z +B X +B X +C Z +C Z +A X +C Z +A Y +B Y +B Z +C X +C Y +B X +C Z +C Y +B Y +C Z +C X +B Z +C Z +C Z +C X +C Y +C Z +A Y +C Z +C Z +C Z +C Z +C Z +C Y +B Y +C Z +A X +A Z +C Y +B Z +B X +A Z +C Z +C Y +C Z +C X +A Y +C Z +A Z +B Y +B Z +C Z +B Z +A Y +C Z +B Y +C Z +C Y +C Z +C X +A Y +A Y +C Y +C Z +C Z +B Y +A Z +C Z +C Y +A Y +A Z +A Z +C X +C Z +B X +C Y +C Z +C Z +B Y +C Z +B X +C Z +B Z +B Y +C X +C X +A X +B Y +A Z +C X +B X +A Z +C Z +C Z +A X +A Y +B X +C Z +A X +C Z +B Y +C Z +A Y +B Y +C Z +B Z +B Y +A Z +C Z +A X +B Z +C Y +B Z +B Y +A Z +A Y +A Z +A X +C X +A X +C Y +C Z +A Y +C Y +B X +A X +A Y +C Y +B Y +C Z +C Z +B Z +C Z +C Z +C Z +C Z +C Z +C Z +C Z +B Y +C Z +A Y +B Y +C Y +C X +C Z +B Z +B Y +C Y +C Z +A Z +C Y +B Z +C Z +A Z +C X +B Y +B Y +B Y +C Z +B Y +A Y +C Z +C Z +A Z +A Z +C Z +B Z +B Y +C Z +B Y +B Z +C Z +A X +A X +C X +C Y +A Y +C Z +A Y +A Z +C Z +C Z +C Z +B Y +A Z +B Z +C X +B X +C X +B Y +C Z +A Z +C Z +A X +B Z +B Z +B Y +A Y +C Z +B X +C Z +B Z +C X +A X +C Z +C Z +B Z +B Y +C Z +C Z +A Z +C Y +C Z +B Y +A Y +B Y +A Y +C Z +C Y +B Z +A Y +C Z +B X +B X +B X +C Y +C Z +A Y +C Z +C Z +C Z +A Y +C Z +B X +A Z +C Z +C Z +A Y +C Z +C Z +B X +C Z +B Y +A Z +C X +C Y +C Y +C Z +C Y +A Y +B Z +C Z +C Z +C Z +B Y +C Z +C Z +A Y +A X +A Y +C Y +C Z +C Z +A X +B Z +C Z +C Z +B Z +B Y +C Z +A X +C X +A Z +B Z +C Z +A X +C X +C Z +B Y +A X +A X +C Z +C Z +B X +C Z +B Z +B Y +A X +C Y +C Z +C X +A Y +B Y +C Z +C Z +C Z +C Z +B Z +A Y +C Z +C Z +B Z +C Y +B Z +B X +B Y +A Z +C Z +A Z +B Y +C Y +C Z +C Z +C Z +B Z +C Z +C X +C Z +B X +C Y +B Y +C Z +C Z +C Z +C Z +B Y +B Y +C Z +B Y +C X +B Z +A X +C X +C Z +B X +C Z +C X +C Z +A X +A Z +B X +C Z +C Z +B Y +C Z +A Y +C Z +C Z +C Y +C Z +A Z +A X +C X +B Y +A Y +B Y +A X +C Z +B Y +B Y +C Z +C Z +B Y +B X +A Y +C Z +B Y +C Y +C Z +C Z +C X +B Y +A Z +C Z +A Z +A X +C X +A Z +C Z +C Z +A X +B Z +C Z +B Y +A Z +A Y +A X +A Y +A X +C Z +A X +B Y +A Y +B Z +C Y +C Z +B Z +C X +A Y +A Y +C Z +C Y +C Z +B Y +B Y +B Y +B X +C Z +C X +B Y +C Z +C Z +B Y +C Z +C Z +B Y +C Z +C Y +C Z +C Y +C Z +C Y +A Y +A Y +C Y +C Y +C Y +C Y +C Z +C X +B Z +B Z +C X +C Z +B Y +B Y +A Z +C Y +C Z +C Z +C X +C Z +C Z +A Z +B Y +C Z +A Y +C Z +C Z +C Z +A Z +C X +C Y +B Y +A Z +B Z +C Z +B Y +C Z +B Z +C X +A X +C Y +A Y +B Z +B Y +A X +C Z +B Z +C Z +C Z +C X +B Z +C X +A Z +B Z +C Z +C Z +C Z +B Y +A X +C Z +C Y +C Y +C Z +A Z +C Z +C Z +A X +C Y +B Y +A Y +A Z +A Z +B Z +C Z +A Z +B Y +B Y +A Y +A Z +A Z +C Z +C Z +C Z +A X +C Z +B Z +B X +C Y +A Z +B Y +C Z +B Y +A X +C Z +A Z +C Z +B Z +C Y +C Z +B Y +A Z +B Z +A Y +B X +C Z +B Y +C Z +C Z +C X +C Y +C Z +B X +C X +A Y +A Y +C Z +C Y +B Y +C Y +C Y +C Z +A Y +A Z +B Y +C Z +C Z +A X +C Z +C Y +C Z +B X +C Y +A Z +A Y +A Z +C X +C Z +C Z +C Z +B Z +C Y +B Z +C Z +B Y +C Z +B Y +A Y +B X +C Z +A Y +C Z +A Y +A Z +A Z +B Z +A Y +C Z +A X +B Y +C Z +B Z +C Z +A Y +A Y +B Z +B X +B X +C Y +C Z +C Z +C Y +A X +B Z +C X +B Y +C X +B X +C X +C X +C Z +A Y +C Y +C Z +B Z +A Z +A Z +C Z +A Z +C Z +A Z +A X +B Y +A X +A Y +C X +B Y +C Z +A X +B X +C Z +C Z +C X +B X +A Z +B X +C Z +B Y +C Z +C X +C Z +C X +C Z +B Z +B Y +C Z +B X +C X +C Z +C Y +A Z +B Z +A X +B X +B X +C Z +B Z +C X +A Y +C Z +C Z +B Y +C X +C Z +A X +B Y +C Z +C Z +C Z +C Z +C Z +A X +A Z +C X +A Z +C Z +A Z +C Z +B Y +B Z +A X +C X +C Z +B Z +A Z +C Z +C Y +C Z +C Z +C X +A Y +B Y +C Z +A Y +C Z +B Z +C X +B Z +B Z +B X +B Z +C Y +C Z +C Y +B Y +C Y +C Z +C X +C X +A Z +B Y +C Z +A Y +B X +C Y +A Y +A Z +B Y +B Y +A Y +B Y +B Z +A X +C Z +B Y +A X +C Z +C Z +C X +B Y +A Z +A X +B Y +A Z +C Z +B Z +B Z +B Y +B Y +A Z +A Z +A Y +C Z +C Z +A Z +C Z +C Z +C Z +A X +C Z +A Y +C Y +A Z +C Z +B Y +C X +B Y +C Z +C Z +C Z +A Z +B Z +B X +C Z +C Z +A Y +B Z +B X +C Z +C Y +A Y +C Y +C Y +C Z +C Y +C X +C Y +B Z +B Y +C Z +A Z +A Y +C Z +C Z +B Y +B Y +A Z +A Z +A X +C Z +C Z +A Y +B Y +C X +C Z +C Z +A Z +C Z +B X +B Y +A Y +C Z +A X +A Y +C Z +B X +C X +B Z +C Y +C X +B Y +B Y +C Z +C Z +C X +C Z +A Y +A Z +C Y +C Z +A Z +C Z +C Y +A X +C X +C Z +B X +C Z +B X +C Z +C Z +C Z +B X +B Y +B Y +B Y +C X +B Y +C Z +C Y +C Z +C Z +B X +C Y +B Z +C Z +C Y +C X +C Z +A X +A Z +C Z +C Y +C X +C Z +B Y +C X +C Y +C Z +C X +A Z +B Y +B X +C X +C Y +B Z +C Z +C Y +B Z +C X +A Z +A Y +C Z +C Z +C X +B Y +C Y +C Z +A Z +B Z +B Y +B Y +B Z +C Z +A X +B Y +A Z +A Y +C Z +C Z +B Y +C Y +C Z +B Z +A Z +B Z +C Z +C Z +B Y +B X +C Z +C Y +C Z +A Y +C Z +A X +C X +B Y +B X +C X +C Z +C X +B Z +C Z +A Z +B Z +C Z +A X +C Z +C Z +A Y +B Y +B Z +B X +B Z +C X +B Y +C Z +C Z +C Z +A Z +C Z +C X +C X +B Y +C X +C X +C Z +C Z +A Z +C Y +C Z +C Z +B Z +C Z +A Y +B Y +C Z +C Z +B Y +B Y +C X +C Z +B X +A Y +B Z +A Y +A Y +A Y +C Y +C Y +C Z +B X +B Z +C Z +C X +C X +B Z +A Z +A X +B Y +C Z +B Z +A Z +B X +C Z +A Y +C Z +A Z +A Z +C Z +C X +C Z +C Y +A X +B Y +C Z +C Z +C Z +C Z +C Z +A Y +C X +C Z +A Y +B X +C Z +A Y +C Z +C Z +C Y +B Z +B X +C Z +A X +B Y +C Z +C Z +A X +A Y +C Z +C Y +B Y +C Z +C Z +A Y +A Y +A Y +A Y +C Z +A X +A Z +B Y +B Z +A Z +C Y +C Z +C Z +C Z +A Z +C Z +A Z +C Z +C Z +A Z +C Z +C Z +A Z +B X +C Z +A Y +B Y +C Z +A X +C Z +A Y +C Z +C Z +C Y +C Z +A X +B Y +C Z +A Z +C Z +A Z +A Z +B Y +C X +B Y +C X +C X +C Z +A Y +B Z +A Y +C Z +C Z +B Z +A Y +C Z +B Y +C Z +A X +C Z +C Z +C Z +B Z +A X +B Y +C Z +A X +C Z +C X +B Y +C Z +A Y +C Y +B Y +A Y +C Z +A X +B Y +A Y +A Z +C Z +C Z +C X +A Z +C Z +C Z +B Y +B X +A Z +C Z +B X +C Z +C Y +C Z +C Z +C Z +C Y +A Y +C Z +C Y +C Z +C Z +B Y +B Y +B X +C Y +B Z +C Z +B Y +C Z +C Z +C Z +A Z +A Y +C Y +C Z +C Z +A Z +C Z +C Z +C Z +B Y +B X +B Y +A Y +C Z +B Z +C Z +B Y +B Z +A Y +C Z +C Z +C Y +A Y +C Z +C Z +B Y +A Z +A Y +C Z +C Z +B Y +C Z +B Y +B Z +C X +C Y +C Z +A Y +C Z +A Z +A X +B X +C Z +C Y +C Z +C X +B X +B Y +B Y +C Z +C Z +C Z +A X +B Z +C Z +A Z +A Z +C Z +B Y +B X +B Y +C Z +B Z +C Z +B X +B Z +C Z +B X +A X +C Z +C X +B Z +C Y +C X +C Z +C X +A X +A X +C Z +C Z +C Z +B X +B X +C Z +C Z +C X +C X +C Z +A Y +B Y +B Y +B Y +C Z +C Y +C Z +C Z +C Z +B Y +C Y +C Z +B X +C Z +A X +C Y +A Y +C X +A Y +A Z +C Z +B Y +B Y +A Z +C Y +B Z +B Z +A X +B Y +C Z +B X +A Z +A Z +C Z +B Z +A Z +C X +B Z +C Z +C Z +C Z +C Z +B X +B Y +C Z +C Z +C X +C Y +A Z +B X +B Y +B Z +C Z +B Z +C Z +C Z +C Z +C Z +A Y +C X +C Z +A Y +C Z +C Z +B Z +C Z +A Z +C Z +A Y +C X +C Z +A X +C X +C Z +C Z +B Y +C Z +A Z +C X +C Z +B Y +A Y +B Y +C Z +B X +A X +C Z +B Y +C Z +B Y +A Z +A Z +C Z +A Z +B Y +C Z +C Y +B X +C Z +A Z +B Z +C Z +C Y +C Z +B Z +A X +A X +A Z +C Z +C Z +C Y +C X +C X +A X +C X +B X +C X +A Y +C Y +C Z +C Z +C Z +C Z +C X +A Y +C Y +A Y +B X +C Y +C Z +A X +A Z +C Z +C Z +B Y +C Z +B Z +C Z +C Z +A Y +A Y +C Z +C Z +A Z +C Z +C Z +B X +C Y +C Z +C Z +C Z +C Z +A X +B Y +B X +B Z +C Z +A Z +A Z +B Z +A Z +B X +C Z +B Z +C Z +A Z +C Z +C Z +A Y +B Y +C Y +B X +A Z +C X +C Z +C X +B Y +B Z +C Z +C Z +C Z +C Y +C Z +A X +A X +A Y +C X +C X +A Y +B Y +C X +C Z +C Z +B X +B Z +B X +C X +B X +A Y +C Z +A Z +C Z +C Z +C Z +C Z +C X +A Z +B Y +C Z +C X +A Y +A Y +C Z +C Z +B Z +B X +C Z +A Z +B Y +C Z +C Z +B Y +A Y +C Z +B Z +B Z +A Z +C X +C Z +B Z +C Z +C Z +B Y +C X +B Y +A Z +C Z +A X +C Z +B Y +C Z +A Z +B Z +C Z +A Z +A Y +C Y +B X +C Z +A Y +C Y +A X +A Z +A Y +C X +C Z +C Z +B Z +A Z +C Z +C Z +C Y +C X +C Y +B Y +C Z +B Y +C Y +C Y +C Y +A X +C Z +C Z +B X +B Y +C Z +A Y +C Z +A Y +B Z +C Z +C Z +C Z +A Y +A X +B Z +B Y +A Y +A Y +B Y +B Z +C X +A Y +B Y +C X +C Z +C Z +B Y +C Z +C X +C Z +C X +C Z +A Y +A Y +B Y +C Z +A Z +C Y +C Z +A X +C Y +C Y +C Y +A Z +C X +C Z +C Z +A Z +C Z +B Y +C Y +C Z +C Z +C Z +B Z +C X +C Z +C Z +C X +C Z +C Z +C X +C Z +C X +B Z +B X +A X +C Z +A Y +C Z +B X +C Y +A X +C X +B Z +C Z +A Y +A X +C X +B Z +B Z +C X +A Y +C Y +A Y +C Z +C Y +A X +C Z +A Y +A Z +C Z +B Y +C X +A Y +A Y +C Y +B Y +A Z +B Y +C X +A Y +B Z +B Z +C Z +C Y +C Z +B Y +C X +C Z +C Z +A Y +C Z +C X +A Y +C Z +C Z +B X +C Z +A X +C Z +A Y +C Y +A Y +B X +C Y +C Y +A Y +C Z +A Z +C Z +C Y +C Z +A Z +A Z +C Z +C Z +C Z +C Z +C Z +A Y +A Z +B Y +C Z +A Y +C Y +C Z +A Y +C X +C Z +A Z +C Z +C Y +C X +C Z +C Y +A X +B Y +C Z +A Y +A Z +C X +C X +C Z +A Z +C Z +C Z +C Z +C Z +A X +C Z +C Z +C X +C Z +A Y +C Z +C Z +B X +B Y +C Y +B Z +C Y +C Z +B Y +A Y +A Y +B Y +A Z +B Z +B Y +A X +C Z +B X +A Y +C X +C Z +C X +C Z +C Z +C X +A Z +B Y +A X +C Z +C Z +B Z +C X +C X +B Z +A Y +A Y +A Y +A Z +C Y +C Z +A X +B Y +C Z +B Y +B Y +C Y +C Z +C Y +B Y +C Z +B Z +C X +C X +A X +C Z +C Z +B Z +A Y +A Z +B X +B Z +B Y +C Z +A Z +C X +A Z +B Y +C Z +B Y +A Y +C Z +A Y +B Z +C Z +A Z +B Z +B Y +B Y +A X +B Y +B Y +C Z +B Y +C Z +B Z +A Z +A Y +C Z +B Y +C Z +C Z +C X +C X +C Y +B Y +C Y +A Z +C Z +A Z +C Z +B Z +C Y +C Z +A X +B X +A Z +A Y +A Y +C Z +C Z +C Z +C Y +C Z +C Z +A Z +A X +B X +A Z +C Y +C Z +B Y +A Y +A Y +B X +B X +C Z +C Z +C Z +C X +C Z +C Y +C Z +A Y +C Z +C Z +C Y +A Z +B Y +A Y +B Y +B Y +A Y +A Y +B Z +C Z +C X +B Y +C Z +C Z +C X +A Z +B Y +A Z +C Z +C Z +B Y +C X +C Z +C Y +A Y +C Z +A Y +B Y +A Y +C X +C Y +C Y +B Y +B Z +A Z +C Z +C Y +B Z +B Y +A Y +A Z +A Y +A Y +B X +C Z +A X +B Y +B Y +C Z +B Y +B Y +B Z +C Z +A Y +C X +A X +A Y +C X +A Y +A Z +C Z +B Y +B Y +B Y +C Y +A Y +B Z +C Z +C Z +B Z +C Z +B X +C Y +B Y +A Z +C X +A Z +C Z +B X +C Z +C Z +B Z +C Z +A Z +A Z +B Y +C Z +A Z +C Y +B Y +B Z +C Z +C X +C Z +A Z +C Z +C Y +C X +A Y +B Y +B X +C X +C Z +A Z +C X +B Z +C Z +A Y +C Y +C Z +A Z +C Z +A Z +C Y +C X +C Y +B Z +B Y +A Z +A Y +B X +A Z +C X +C Y +C X +C Z +C X +A X +C Z +B Y +C Z +A Y +B Z +C X +B Y +C Z +A Z +C Z +C Z +C Y +A Y +A Z +A Y +C X +B Z +A Z +C Z +C Z +C Z +A X +C Z +A Z +A Y +C X +B X +C Z +C Z +A X +A Y +C Z +C X +C Z +A Z +C Y +C Z +B Z +C Y +C X +A Y +A X +A Z +C Z +C Z +C Z +C Z +A Y +C Z +A Z +A Y +C Z +B Z +B Y +C X +C Z +C X +C Z +B X +A Y +C Z +B Z +A Z +A Z +B Z +B Z +C Z +C Z +B Y +C Z +A Y +C X +A X +A X +C X +C X +B Y +B X +A Y +C Z +B X +B Y +A Z +B Z +A Z +A Z +C X +C Z +A X +A Y +C X +C Y +C Y +C X +A Z +C Z +C X +C X +A Y +A X +C Z +C Z +B Y +B Z +C X +C X +C Z +B Z +B Z +B Z +B Z +B Y +B X +C Z +C Z +C Z +C X +C Z +C Z +B Y +C Z +C X +B Y +C Z +C Y +B Z +C Y +C Z +C Z +C Z +C Z +C Z +C Z +C Z +A X +A Y +C Y +C Z +A Y +B X +C Z +B Y +C Y +C Z +C Z +C Z +C Y +C Z +A Z +B Y +A Z +C Z +B Z +C X +C X +A Z +C Z +C X +C Z +B Z +C Z +C Y +B X +C Z +A Z +C X +B Y +B Y +C Z +C Z +C Z +B Y +C Z +B Y +A Y +B Z +B Z +B Y +C Z +B Z +A X +C Z +C Z +C Z +B Y +B Y +C Z +C Y +C Z +B Y +C Z +B X +B Z +C X +B Y +C Y +B Y +C Z +A Y +B Z +C X +B Y +A Z +C Z +C X +A Z +B Z +A Y +C Z +C X +B Y +C Z +C Z +B Y +B Z +C X +C X +C Z +C Z +C X +B Z +A Y +C Z +C X +A Z +C Z +C Z +C Z +C Y +B Z +A X +B Z +B Z +C Z +C Z +B Z +C Z +B Z +A X +B Z +B Y +B Z +B Z +B Y +C X +A Y +B Y +B X +B X +A X +C Z +C Y +C Y +C Y +C Y +B Y +A X +C Y +A X +C Z +B Z +C Z +C Y +B Y +A Z +C Y +A Z +B Y +B X +C Z +A X +A Z +C Z +C Z +A X +C Z +C X +A Z +C Y +B Z +C Y +B Z +A Y +A Z +C Z +A Y +C Z +C Z +A X +C Z +C Z +C Z +B Y +C X +C Y +C Z +B X +A Z +C Z +C X +B Y +A Y +B Y +C Z +C Z +C Z +A Y +A X +C Z +C Z +C Z +C Z +B Y +A Z +C Z +A X +A Y +B Z \ No newline at end of file diff --git a/2022/day2/p2/day2p2.c b/2022/day2/p2/day2p2.c new file mode 100644 index 0000000..a39e96b --- /dev/null +++ b/2022/day2/p2/day2p2.c @@ -0,0 +1,83 @@ +#include +#include + +int main() +{ + + FILE *File; + char Line[6]; + + int TotalScore = 0; + + File = fopen("input.txt", "r"); + + while (fgets(Line, 6, File) != NULL) + { + + int Score = 0; + + char Me = Line[2]; + char Opponent = Line[0]; + + if (Me == 'X') // Lose + { + // O: Rock, Y: Scissors + if (Opponent == 'A') + Score += 3; + + // O: Paper, Y: Rock + else if (Opponent == 'B') + Score += 1; + + // O: Scissors, Y: Paper + else if (Opponent == 'C') + Score += 2; + + } + else if (Me == 'Y') // Draw + { + + Score += 3; + + // O: Rock, Y: Rock + if (Opponent == 'A') + Score += 1; + + // O: Paper, Y: Paper + else if (Opponent == 'B') + Score += 2; + + // O: Scissors, Y: Scissors + else if (Opponent == 'C') + Score += 3; + + } + else if (Me == 'Z') // Win + { + + Score+=6; + + // O: Rock, Y: Paper + if (Opponent == 'A') + Score += 2; + + // O: Paper, Y: Scissors + else if (Opponent == 'B') + Score += 3; + + // O: Scissors, Y: Rock + else if (Opponent == 'C') + Score += 1; + + } + + TotalScore += Score; + } + + + printf("Total score was %d\n",TotalScore); + + fclose(File); + + return 0; +} \ No newline at end of file diff --git a/2022/day2/p2/input.txt b/2022/day2/p2/input.txt new file mode 100644 index 0000000..d4af73c --- /dev/null +++ b/2022/day2/p2/input.txt @@ -0,0 +1,2500 @@ +C Y +C Z +B Z +A Z +A Z +A Y +A Z +C Y +C Z +A Y +A Y +B X +A Y +C Z +C Z +B X +C Z +A Z +B Y +C Z +A Y +C X +B Y +A Z +B Y +C Z +B Z +B Y +C Z +A Z +A Z +B Z +C Z +A X +B X +C Y +C Z +C Z +C Z +A Y +C Z +C Z +C Z +C X +A Z +A Z +C Y +A Z +C Z +C Z +C Z +A Z +B Y +C Z +A Z +B Z +A Z +A Y +B X +B X +C Z +C X +C Z +C Z +A Z +B Z +B X +B X +B Y +C X +C Y +A Y +C Z +A Y +C Z +A X +B X +B X +C X +B X +B X +A Y +B Y +C Y +A Z +C Y +B Y +B X +B X +B Z +B X +B Z +A Z +B Y +C Z +B Z +B Z +B Y +A Y +C Z +A Z +C Y +C Z +B Z +C Z +C Z +B Y +A Z +C Z +C Z +A Z +A Z +B X +C Y +A Y +C Z +B Y +C Z +A Y +C X +C X +B Y +C Z +C X +C Z +B Y +A Y +B Z +C Z +B Y +C Y +C Z +C Z +B Z +C Z +A Z +A Y +C Z +C Z +B Y +A Z +C Z +C Z +C Y +B Y +C Z +C Z +C Z +C Z +A X +B Y +C Z +B Y +C Z +B Y +C X +C Y +A X +C Z +B X +B X +A Z +A Z +A Z +B Y +C Z +B Z +A Z +B Y +C Y +C Z +C Z +C Z +C Y +C Z +B Y +C Z +C Z +B Z +A Y +B Z +C Z +C Y +A Z +C X +B Z +C Y +B Y +C Z +C Z +A Z +C Y +C Y +C Y +B Y +C Z +C X +B Y +C Z +C Y +B Z +A Y +C Z +A Y +B Z +A Y +A Y +B Z +A Z +C Z +C Z +B X +C Z +C Z +B X +B Y +C Z +C X +A X +C Z +C Z +C Z +B X +B X +A Z +C Z +C X +A Z +C Z +C Z +A Z +B Z +C Z +B Y +C Z +A Y +B Z +C Z +C Z +C Z +C X +A X +A Y +B Y +C Z +B Y +C X +A Y +C Z +C Z +B Y +B Z +C Z +B Y +B Y +B Y +A Y +C Z +B Z +A X +B Y +C Z +C Z +C X +A Y +C Z +A X +B Y +A X +A Z +B X +B X +C Z +C Z +A X +C Z +A Y +B Y +B Z +C X +C Y +B X +C Z +C Y +B Y +C Z +C X +B Z +C Z +C Z +C X +C Y +C Z +A Y +C Z +C Z +C Z +C Z +C Z +C Y +B Y +C Z +A X +A Z +C Y +B Z +B X +A Z +C Z +C Y +C Z +C X +A Y +C Z +A Z +B Y +B Z +C Z +B Z +A Y +C Z +B Y +C Z +C Y +C Z +C X +A Y +A Y +C Y +C Z +C Z +B Y +A Z +C Z +C Y +A Y +A Z +A Z +C X +C Z +B X +C Y +C Z +C Z +B Y +C Z +B X +C Z +B Z +B Y +C X +C X +A X +B Y +A Z +C X +B X +A Z +C Z +C Z +A X +A Y +B X +C Z +A X +C Z +B Y +C Z +A Y +B Y +C Z +B Z +B Y +A Z +C Z +A X +B Z +C Y +B Z +B Y +A Z +A Y +A Z +A X +C X +A X +C Y +C Z +A Y +C Y +B X +A X +A Y +C Y +B Y +C Z +C Z +B Z +C Z +C Z +C Z +C Z +C Z +C Z +C Z +B Y +C Z +A Y +B Y +C Y +C X +C Z +B Z +B Y +C Y +C Z +A Z +C Y +B Z +C Z +A Z +C X +B Y +B Y +B Y +C Z +B Y +A Y +C Z +C Z +A Z +A Z +C Z +B Z +B Y +C Z +B Y +B Z +C Z +A X +A X +C X +C Y +A Y +C Z +A Y +A Z +C Z +C Z +C Z +B Y +A Z +B Z +C X +B X +C X +B Y +C Z +A Z +C Z +A X +B Z +B Z +B Y +A Y +C Z +B X +C Z +B Z +C X +A X +C Z +C Z +B Z +B Y +C Z +C Z +A Z +C Y +C Z +B Y +A Y +B Y +A Y +C Z +C Y +B Z +A Y +C Z +B X +B X +B X +C Y +C Z +A Y +C Z +C Z +C Z +A Y +C Z +B X +A Z +C Z +C Z +A Y +C Z +C Z +B X +C Z +B Y +A Z +C X +C Y +C Y +C Z +C Y +A Y +B Z +C Z +C Z +C Z +B Y +C Z +C Z +A Y +A X +A Y +C Y +C Z +C Z +A X +B Z +C Z +C Z +B Z +B Y +C Z +A X +C X +A Z +B Z +C Z +A X +C X +C Z +B Y +A X +A X +C Z +C Z +B X +C Z +B Z +B Y +A X +C Y +C Z +C X +A Y +B Y +C Z +C Z +C Z +C Z +B Z +A Y +C Z +C Z +B Z +C Y +B Z +B X +B Y +A Z +C Z +A Z +B Y +C Y +C Z +C Z +C Z +B Z +C Z +C X +C Z +B X +C Y +B Y +C Z +C Z +C Z +C Z +B Y +B Y +C Z +B Y +C X +B Z +A X +C X +C Z +B X +C Z +C X +C Z +A X +A Z +B X +C Z +C Z +B Y +C Z +A Y +C Z +C Z +C Y +C Z +A Z +A X +C X +B Y +A Y +B Y +A X +C Z +B Y +B Y +C Z +C Z +B Y +B X +A Y +C Z +B Y +C Y +C Z +C Z +C X +B Y +A Z +C Z +A Z +A X +C X +A Z +C Z +C Z +A X +B Z +C Z +B Y +A Z +A Y +A X +A Y +A X +C Z +A X +B Y +A Y +B Z +C Y +C Z +B Z +C X +A Y +A Y +C Z +C Y +C Z +B Y +B Y +B Y +B X +C Z +C X +B Y +C Z +C Z +B Y +C Z +C Z +B Y +C Z +C Y +C Z +C Y +C Z +C Y +A Y +A Y +C Y +C Y +C Y +C Y +C Z +C X +B Z +B Z +C X +C Z +B Y +B Y +A Z +C Y +C Z +C Z +C X +C Z +C Z +A Z +B Y +C Z +A Y +C Z +C Z +C Z +A Z +C X +C Y +B Y +A Z +B Z +C Z +B Y +C Z +B Z +C X +A X +C Y +A Y +B Z +B Y +A X +C Z +B Z +C Z +C Z +C X +B Z +C X +A Z +B Z +C Z +C Z +C Z +B Y +A X +C Z +C Y +C Y +C Z +A Z +C Z +C Z +A X +C Y +B Y +A Y +A Z +A Z +B Z +C Z +A Z +B Y +B Y +A Y +A Z +A Z +C Z +C Z +C Z +A X +C Z +B Z +B X +C Y +A Z +B Y +C Z +B Y +A X +C Z +A Z +C Z +B Z +C Y +C Z +B Y +A Z +B Z +A Y +B X +C Z +B Y +C Z +C Z +C X +C Y +C Z +B X +C X +A Y +A Y +C Z +C Y +B Y +C Y +C Y +C Z +A Y +A Z +B Y +C Z +C Z +A X +C Z +C Y +C Z +B X +C Y +A Z +A Y +A Z +C X +C Z +C Z +C Z +B Z +C Y +B Z +C Z +B Y +C Z +B Y +A Y +B X +C Z +A Y +C Z +A Y +A Z +A Z +B Z +A Y +C Z +A X +B Y +C Z +B Z +C Z +A Y +A Y +B Z +B X +B X +C Y +C Z +C Z +C Y +A X +B Z +C X +B Y +C X +B X +C X +C X +C Z +A Y +C Y +C Z +B Z +A Z +A Z +C Z +A Z +C Z +A Z +A X +B Y +A X +A Y +C X +B Y +C Z +A X +B X +C Z +C Z +C X +B X +A Z +B X +C Z +B Y +C Z +C X +C Z +C X +C Z +B Z +B Y +C Z +B X +C X +C Z +C Y +A Z +B Z +A X +B X +B X +C Z +B Z +C X +A Y +C Z +C Z +B Y +C X +C Z +A X +B Y +C Z +C Z +C Z +C Z +C Z +A X +A Z +C X +A Z +C Z +A Z +C Z +B Y +B Z +A X +C X +C Z +B Z +A Z +C Z +C Y +C Z +C Z +C X +A Y +B Y +C Z +A Y +C Z +B Z +C X +B Z +B Z +B X +B Z +C Y +C Z +C Y +B Y +C Y +C Z +C X +C X +A Z +B Y +C Z +A Y +B X +C Y +A Y +A Z +B Y +B Y +A Y +B Y +B Z +A X +C Z +B Y +A X +C Z +C Z +C X +B Y +A Z +A X +B Y +A Z +C Z +B Z +B Z +B Y +B Y +A Z +A Z +A Y +C Z +C Z +A Z +C Z +C Z +C Z +A X +C Z +A Y +C Y +A Z +C Z +B Y +C X +B Y +C Z +C Z +C Z +A Z +B Z +B X +C Z +C Z +A Y +B Z +B X +C Z +C Y +A Y +C Y +C Y +C Z +C Y +C X +C Y +B Z +B Y +C Z +A Z +A Y +C Z +C Z +B Y +B Y +A Z +A Z +A X +C Z +C Z +A Y +B Y +C X +C Z +C Z +A Z +C Z +B X +B Y +A Y +C Z +A X +A Y +C Z +B X +C X +B Z +C Y +C X +B Y +B Y +C Z +C Z +C X +C Z +A Y +A Z +C Y +C Z +A Z +C Z +C Y +A X +C X +C Z +B X +C Z +B X +C Z +C Z +C Z +B X +B Y +B Y +B Y +C X +B Y +C Z +C Y +C Z +C Z +B X +C Y +B Z +C Z +C Y +C X +C Z +A X +A Z +C Z +C Y +C X +C Z +B Y +C X +C Y +C Z +C X +A Z +B Y +B X +C X +C Y +B Z +C Z +C Y +B Z +C X +A Z +A Y +C Z +C Z +C X +B Y +C Y +C Z +A Z +B Z +B Y +B Y +B Z +C Z +A X +B Y +A Z +A Y +C Z +C Z +B Y +C Y +C Z +B Z +A Z +B Z +C Z +C Z +B Y +B X +C Z +C Y +C Z +A Y +C Z +A X +C X +B Y +B X +C X +C Z +C X +B Z +C Z +A Z +B Z +C Z +A X +C Z +C Z +A Y +B Y +B Z +B X +B Z +C X +B Y +C Z +C Z +C Z +A Z +C Z +C X +C X +B Y +C X +C X +C Z +C Z +A Z +C Y +C Z +C Z +B Z +C Z +A Y +B Y +C Z +C Z +B Y +B Y +C X +C Z +B X +A Y +B Z +A Y +A Y +A Y +C Y +C Y +C Z +B X +B Z +C Z +C X +C X +B Z +A Z +A X +B Y +C Z +B Z +A Z +B X +C Z +A Y +C Z +A Z +A Z +C Z +C X +C Z +C Y +A X +B Y +C Z +C Z +C Z +C Z +C Z +A Y +C X +C Z +A Y +B X +C Z +A Y +C Z +C Z +C Y +B Z +B X +C Z +A X +B Y +C Z +C Z +A X +A Y +C Z +C Y +B Y +C Z +C Z +A Y +A Y +A Y +A Y +C Z +A X +A Z +B Y +B Z +A Z +C Y +C Z +C Z +C Z +A Z +C Z +A Z +C Z +C Z +A Z +C Z +C Z +A Z +B X +C Z +A Y +B Y +C Z +A X +C Z +A Y +C Z +C Z +C Y +C Z +A X +B Y +C Z +A Z +C Z +A Z +A Z +B Y +C X +B Y +C X +C X +C Z +A Y +B Z +A Y +C Z +C Z +B Z +A Y +C Z +B Y +C Z +A X +C Z +C Z +C Z +B Z +A X +B Y +C Z +A X +C Z +C X +B Y +C Z +A Y +C Y +B Y +A Y +C Z +A X +B Y +A Y +A Z +C Z +C Z +C X +A Z +C Z +C Z +B Y +B X +A Z +C Z +B X +C Z +C Y +C Z +C Z +C Z +C Y +A Y +C Z +C Y +C Z +C Z +B Y +B Y +B X +C Y +B Z +C Z +B Y +C Z +C Z +C Z +A Z +A Y +C Y +C Z +C Z +A Z +C Z +C Z +C Z +B Y +B X +B Y +A Y +C Z +B Z +C Z +B Y +B Z +A Y +C Z +C Z +C Y +A Y +C Z +C Z +B Y +A Z +A Y +C Z +C Z +B Y +C Z +B Y +B Z +C X +C Y +C Z +A Y +C Z +A Z +A X +B X +C Z +C Y +C Z +C X +B X +B Y +B Y +C Z +C Z +C Z +A X +B Z +C Z +A Z +A Z +C Z +B Y +B X +B Y +C Z +B Z +C Z +B X +B Z +C Z +B X +A X +C Z +C X +B Z +C Y +C X +C Z +C X +A X +A X +C Z +C Z +C Z +B X +B X +C Z +C Z +C X +C X +C Z +A Y +B Y +B Y +B Y +C Z +C Y +C Z +C Z +C Z +B Y +C Y +C Z +B X +C Z +A X +C Y +A Y +C X +A Y +A Z +C Z +B Y +B Y +A Z +C Y +B Z +B Z +A X +B Y +C Z +B X +A Z +A Z +C Z +B Z +A Z +C X +B Z +C Z +C Z +C Z +C Z +B X +B Y +C Z +C Z +C X +C Y +A Z +B X +B Y +B Z +C Z +B Z +C Z +C Z +C Z +C Z +A Y +C X +C Z +A Y +C Z +C Z +B Z +C Z +A Z +C Z +A Y +C X +C Z +A X +C X +C Z +C Z +B Y +C Z +A Z +C X +C Z +B Y +A Y +B Y +C Z +B X +A X +C Z +B Y +C Z +B Y +A Z +A Z +C Z +A Z +B Y +C Z +C Y +B X +C Z +A Z +B Z +C Z +C Y +C Z +B Z +A X +A X +A Z +C Z +C Z +C Y +C X +C X +A X +C X +B X +C X +A Y +C Y +C Z +C Z +C Z +C Z +C X +A Y +C Y +A Y +B X +C Y +C Z +A X +A Z +C Z +C Z +B Y +C Z +B Z +C Z +C Z +A Y +A Y +C Z +C Z +A Z +C Z +C Z +B X +C Y +C Z +C Z +C Z +C Z +A X +B Y +B X +B Z +C Z +A Z +A Z +B Z +A Z +B X +C Z +B Z +C Z +A Z +C Z +C Z +A Y +B Y +C Y +B X +A Z +C X +C Z +C X +B Y +B Z +C Z +C Z +C Z +C Y +C Z +A X +A X +A Y +C X +C X +A Y +B Y +C X +C Z +C Z +B X +B Z +B X +C X +B X +A Y +C Z +A Z +C Z +C Z +C Z +C Z +C X +A Z +B Y +C Z +C X +A Y +A Y +C Z +C Z +B Z +B X +C Z +A Z +B Y +C Z +C Z +B Y +A Y +C Z +B Z +B Z +A Z +C X +C Z +B Z +C Z +C Z +B Y +C X +B Y +A Z +C Z +A X +C Z +B Y +C Z +A Z +B Z +C Z +A Z +A Y +C Y +B X +C Z +A Y +C Y +A X +A Z +A Y +C X +C Z +C Z +B Z +A Z +C Z +C Z +C Y +C X +C Y +B Y +C Z +B Y +C Y +C Y +C Y +A X +C Z +C Z +B X +B Y +C Z +A Y +C Z +A Y +B Z +C Z +C Z +C Z +A Y +A X +B Z +B Y +A Y +A Y +B Y +B Z +C X +A Y +B Y +C X +C Z +C Z +B Y +C Z +C X +C Z +C X +C Z +A Y +A Y +B Y +C Z +A Z +C Y +C Z +A X +C Y +C Y +C Y +A Z +C X +C Z +C Z +A Z +C Z +B Y +C Y +C Z +C Z +C Z +B Z +C X +C Z +C Z +C X +C Z +C Z +C X +C Z +C X +B Z +B X +A X +C Z +A Y +C Z +B X +C Y +A X +C X +B Z +C Z +A Y +A X +C X +B Z +B Z +C X +A Y +C Y +A Y +C Z +C Y +A X +C Z +A Y +A Z +C Z +B Y +C X +A Y +A Y +C Y +B Y +A Z +B Y +C X +A Y +B Z +B Z +C Z +C Y +C Z +B Y +C X +C Z +C Z +A Y +C Z +C X +A Y +C Z +C Z +B X +C Z +A X +C Z +A Y +C Y +A Y +B X +C Y +C Y +A Y +C Z +A Z +C Z +C Y +C Z +A Z +A Z +C Z +C Z +C Z +C Z +C Z +A Y +A Z +B Y +C Z +A Y +C Y +C Z +A Y +C X +C Z +A Z +C Z +C Y +C X +C Z +C Y +A X +B Y +C Z +A Y +A Z +C X +C X +C Z +A Z +C Z +C Z +C Z +C Z +A X +C Z +C Z +C X +C Z +A Y +C Z +C Z +B X +B Y +C Y +B Z +C Y +C Z +B Y +A Y +A Y +B Y +A Z +B Z +B Y +A X +C Z +B X +A Y +C X +C Z +C X +C Z +C Z +C X +A Z +B Y +A X +C Z +C Z +B Z +C X +C X +B Z +A Y +A Y +A Y +A Z +C Y +C Z +A X +B Y +C Z +B Y +B Y +C Y +C Z +C Y +B Y +C Z +B Z +C X +C X +A X +C Z +C Z +B Z +A Y +A Z +B X +B Z +B Y +C Z +A Z +C X +A Z +B Y +C Z +B Y +A Y +C Z +A Y +B Z +C Z +A Z +B Z +B Y +B Y +A X +B Y +B Y +C Z +B Y +C Z +B Z +A Z +A Y +C Z +B Y +C Z +C Z +C X +C X +C Y +B Y +C Y +A Z +C Z +A Z +C Z +B Z +C Y +C Z +A X +B X +A Z +A Y +A Y +C Z +C Z +C Z +C Y +C Z +C Z +A Z +A X +B X +A Z +C Y +C Z +B Y +A Y +A Y +B X +B X +C Z +C Z +C Z +C X +C Z +C Y +C Z +A Y +C Z +C Z +C Y +A Z +B Y +A Y +B Y +B Y +A Y +A Y +B Z +C Z +C X +B Y +C Z +C Z +C X +A Z +B Y +A Z +C Z +C Z +B Y +C X +C Z +C Y +A Y +C Z +A Y +B Y +A Y +C X +C Y +C Y +B Y +B Z +A Z +C Z +C Y +B Z +B Y +A Y +A Z +A Y +A Y +B X +C Z +A X +B Y +B Y +C Z +B Y +B Y +B Z +C Z +A Y +C X +A X +A Y +C X +A Y +A Z +C Z +B Y +B Y +B Y +C Y +A Y +B Z +C Z +C Z +B Z +C Z +B X +C Y +B Y +A Z +C X +A Z +C Z +B X +C Z +C Z +B Z +C Z +A Z +A Z +B Y +C Z +A Z +C Y +B Y +B Z +C Z +C X +C Z +A Z +C Z +C Y +C X +A Y +B Y +B X +C X +C Z +A Z +C X +B Z +C Z +A Y +C Y +C Z +A Z +C Z +A Z +C Y +C X +C Y +B Z +B Y +A Z +A Y +B X +A Z +C X +C Y +C X +C Z +C X +A X +C Z +B Y +C Z +A Y +B Z +C X +B Y +C Z +A Z +C Z +C Z +C Y +A Y +A Z +A Y +C X +B Z +A Z +C Z +C Z +C Z +A X +C Z +A Z +A Y +C X +B X +C Z +C Z +A X +A Y +C Z +C X +C Z +A Z +C Y +C Z +B Z +C Y +C X +A Y +A X +A Z +C Z +C Z +C Z +C Z +A Y +C Z +A Z +A Y +C Z +B Z +B Y +C X +C Z +C X +C Z +B X +A Y +C Z +B Z +A Z +A Z +B Z +B Z +C Z +C Z +B Y +C Z +A Y +C X +A X +A X +C X +C X +B Y +B X +A Y +C Z +B X +B Y +A Z +B Z +A Z +A Z +C X +C Z +A X +A Y +C X +C Y +C Y +C X +A Z +C Z +C X +C X +A Y +A X +C Z +C Z +B Y +B Z +C X +C X +C Z +B Z +B Z +B Z +B Z +B Y +B X +C Z +C Z +C Z +C X +C Z +C Z +B Y +C Z +C X +B Y +C Z +C Y +B Z +C Y +C Z +C Z +C Z +C Z +C Z +C Z +C Z +A X +A Y +C Y +C Z +A Y +B X +C Z +B Y +C Y +C Z +C Z +C Z +C Y +C Z +A Z +B Y +A Z +C Z +B Z +C X +C X +A Z +C Z +C X +C Z +B Z +C Z +C Y +B X +C Z +A Z +C X +B Y +B Y +C Z +C Z +C Z +B Y +C Z +B Y +A Y +B Z +B Z +B Y +C Z +B Z +A X +C Z +C Z +C Z +B Y +B Y +C Z +C Y +C Z +B Y +C Z +B X +B Z +C X +B Y +C Y +B Y +C Z +A Y +B Z +C X +B Y +A Z +C Z +C X +A Z +B Z +A Y +C Z +C X +B Y +C Z +C Z +B Y +B Z +C X +C X +C Z +C Z +C X +B Z +A Y +C Z +C X +A Z +C Z +C Z +C Z +C Y +B Z +A X +B Z +B Z +C Z +C Z +B Z +C Z +B Z +A X +B Z +B Y +B Z +B Z +B Y +C X +A Y +B Y +B X +B X +A X +C Z +C Y +C Y +C Y +C Y +B Y +A X +C Y +A X +C Z +B Z +C Z +C Y +B Y +A Z +C Y +A Z +B Y +B X +C Z +A X +A Z +C Z +C Z +A X +C Z +C X +A Z +C Y +B Z +C Y +B Z +A Y +A Z +C Z +A Y +C Z +C Z +A X +C Z +C Z +C Z +B Y +C X +C Y +C Z +B X +A Z +C Z +C X +B Y +A Y +B Y +C Z +C Z +C Z +A Y +A X +C Z +C Z +C Z +C Z +B Y +A Z +C Z +A X +A Y +B Z \ No newline at end of file diff --git a/2022/day3/p1/day3p1.c b/2022/day3/p1/day3p1.c new file mode 100644 index 0000000..6b03eb0 --- /dev/null +++ b/2022/day3/p1/day3p1.c @@ -0,0 +1,83 @@ +#include +#include +#include + +/* +A-Z : 65-90 ; - 38 +a-z : 97-122 ; - 96 +*/ + +void PrintLine(char Line[], int Start, int End) +{ + for (int i = Start; i < End; i++) { + printf("%c", Line[i]); + } + printf("\n"); +} + +int main() +{ + + FILE *File; + char *Line = malloc(256); + int Total = 0; + int Priority = 0; + + File = fopen("input.txt", "r"); + + while (fgets(Line, 256, File) != NULL) + { + + int Size = strlen(Line); + int Compartment1End = Size/2; // compartment 1 end + + char Shared = ' '; + + + PrintLine(Line, 0, Compartment1End); + PrintLine(Line, Compartment1End, Size); + + + for (int i = 0; i < Compartment1End; i++) + { + char Current = Line[i]; + + for (int y = Compartment1End; y < Size; y++) + { + if (Current == Line[y]) + { + Shared = Line[y]; + break; + } + } + + if (Shared != ' ') + { + break; + } + } + + + printf("Shared Item: %c\n", Shared); + printf("\n"); + + + int n = (int) Shared; + + if (n >= 65 && n <= 90) + Priority = n-38; + + else if (n >= 97 && n <= 122) + Priority = n-96; + + + Total += Priority; + + } + + printf("Total priority is %d\n", Total); + + fclose(File); + + return 0; +} \ No newline at end of file diff --git a/2022/day3/p1/input.txt b/2022/day3/p1/input.txt new file mode 100644 index 0000000..c49aedf --- /dev/null +++ b/2022/day3/p1/input.txt @@ -0,0 +1,300 @@ +dWlhclDHdFvDCCDfFq +mGdZBZBwRGjZMFgvTvgtvv +jwwJrzdzGdSbGGnNlzWczHzPHPhn +cczcbMBszhzzDBTBPPPGjtvtlt +LqJLfpwdLnvQLRGQjGtj +gSgnSJJCGSGpGSrwgfhchmmmHzcrHDmbrmMm +bVjstCsSstCLCrbSLnMpdMndcLddcqcpHR +wPZJQJwtBfJZmgBwPTcpTdcnfHMppcGMdG +gmFJzwPJJtszvNhCNC +DmjZDMZWDqGRqqRpHmmRLTTNTPTfCQJQQLJHTClc +FtzfvrfFwVgtzztgBLJNcNlTcTVNNQLN +vgsdbzzrwtqWfWRpZDdZ +rJhqRhLHhdcQqdHqfQGfPGstgGPlWttM +DzCpDDmnNCmBZBZnVBmZzBGPfsbglfNPwgPGPMWsWWft +BZFnlmpBpBzDzVZmhFHFrrrchhRqTdrc +DWCCWFNqdGFdPVcb +HllttQsTRlJlsblrHlhdmPLVcVcTccndLvPLmL +HSlstHgJltghhRrzNBNDzSwMjNZwNb +dzGSHCWSsGVVSdHVHHWWVVDCgJDpQqLTTRJpgmTLRmJTTpTR +BvNjMPZMBtBBMvvNMNttlhLQqCJpLmhTRQqQJgRJLQQg +llNncBlMCwwMnwPZrGsVHzcfFGdHGFGs +JfZhphMMQmFzDTDjSdrQjQ +sqHCbCwBVtbqbCqtrWdjzlSJTlrTSWBn +bHcwbGCGRssNscwtHNbwvmRFvpFFJFvLZMmPLFfv +qBCrzznVmDCmMMDNgrgcrvHHcgbQcW +TTTsdJRTRhhlsgbvbdCFdbWvbQ +JhGGlfRlJsnCMDMqjmfV +rqLLvDLtStDLQhQDQrQhhNdsmWdmmjjnssPnTMnTzfTsWT +ZRFFpgCgppcBcnjTsjTMTfPFMP +GCZpGlwJwBgGHcJhSSHLDDrNqrMtNq +FsPFqsDNZFNnZrcBmWfWWQ +lSnRlRTvgrWtctTmft +SMbGbbvnGlnSDwGqLwNCqNVD +dPQDcBwJJDgDTPgGgQTBVjSsmLhLTrLmjSLpjSLh +MvvZRHtMtbCNvCNCNtNvbRfBSMSrjmLpjnjmVhrVSLsnnmSh +qHZtbBZfRztbHbCzNRHPQgJPJgGgglFPPFqdQD +MsBsVDspRPfPlhMl +zWnCFzHbSCwqNmPSjmGlsmfN +FnHnFbFzsHHCCgzCzbBptVppgvvVgVrpBrJt +pTLntptZjQLfVDjQTDlVJCSWNCPSCCsSNmFlNslm +BBHbqGHHqgwSWSCCWwZWWZ +qRzbhhbzzrHdRRHhRHvzZjfrVTrppVQttDfcQTfp +DHsdHPHHsHMsRmhMZZQBtljgZGtC +NFnCbFznLVJbVrjhQthjGBLZBjGL +wNrfFJJbCpNnfbdwDSDHsvsHmsmH +jLZRjnMMjJhJnvtQbdHfHZbvHQ +mBzwptCWlcFCwsHSTpQfQHQfrpTb +mNltzmsCNmFzGwCBllGRgRgqjgLMnGqjnPjV +ZqqcqmVVtbcBMFfFMcQfgphJ +HLWLDvWjjLwTWzzvGLThQQshQllgJDJgfbffJQ +vHzLvrwwzGzTRGzzLLRPRwRdSVdnBBdSbBSVStbNmnrmZS +TWVVvPSgwWSqcRgRwbRRcqshsfFzzzChTGNHzHhhhCsG +njZrjMLlpmDmGfSGtrNttzCF +ZQBmZdDBZRRPRSBgcb +TpntvdpnZDptnbnTDGtSFSlFmzCzzmSFRjqlZj +MWrNcWRMlgqzMjzq +NPwsPNrBNcVHNNcJHBNBcJwwttDvGVnDptVRtbnTtGvVGtGG +tsbbvvSfnqvzQLLBjfMLdd +gJRmRNmJNchgmmrFJhFgWJQMwBnjwrMBVQwQTBdLdVQj +GcGpGGRGJgqstvpbnCqb +rsHcrbZHBTTtLtNSwwHLLJ +mFqhWVsjsVCjQlNJGMwMlMMGMh +QggzffQRCfgVFWzzCQffqfZpZDcRvTTBTvvZnsdnddcn +bPFMFFBpMlFfMZMpHGNSrNctJcPSSchJchPt +zCgwnmgzQDnQgdWWQRgqSrqLSqSgssLNJhgJ +rQCQQTrRRmDBFfbHBFHZbT +fzfPQsGrrMMjtHtBHs +SwNNDqwhWpVTwbDGGDmwSVhZRZHdbCtgBjCRjMtbBHtRMd +vVTGvVGNvPPvQvfncJ +cwzMJbclHDPqfJQPfq +rrqjjTBrqqBjRCgTjrRjNrsGPDhDFGCfWGfPFfFPGWfD +BZTTSTZgjbSwVptvpq +PPPPJpvpJsJwPHHPsJdTNZRZZZjTFFmRRRNjZd +qbWVfChDCDnVVDGfnSFNNjRLmNfBNLQjLjmBRm +DhFDhbnWCDhGcbJPPwrsrMwrvlvc +lFSDTwHTSwlTNwFFlwNcFFpjLZvZqvnqLPnnWbgngbbncqbZ +rzQfMzRGrRGJCffBMGdGsJZWWnqWVqdPPgNvvVZWPWWn +RJrttBtNQCsNzTpShhHFDwFlth +QNzQFjNFrQPNbmPpqTTDGswWmB +ggHRcSlcCVCSzMVqDGwgqTWpsmqwqG +cltzCZtLClHRRtMZZLQjfNvtrJfhvrddvNNd +mcfWHffBFnQRQlTFdv +wssSLVbbzDVbzbggzSzNshNMnvnljRdvQRlMBjvQdnCj +bhDzVSSJDDJhDLBwtbDzzbbWppfpcmWGmprqqGtqprcHPp +rpVFrZpgHWSZrFPqhzwcqPwmcVBD +vMTnQJjQLCbljvvQzTMbTjPNdBLwwDhmhNNqPwmmhhBh +jvGjjQJnrspGHgFz +sjssjtZlcphZHwWvcrHTwWJH +qDdzzrFNNNDGdFDzzVBVVvfWJPfgPmgWPgvwVH +nqMQGDrnLGnqqLNqjtCZZjsMhZhCMbtl +JJJsLFmzsrFlSpzPscjgHhnRnmvcjqRvvj +fCMQbCbTjjqTGhjc +bfdbWdCddfBbtCfbfbqVWQQpPlBrJLJJSSLwppFssFzLzp +pdbbzlffWtJbgQwhcphQcCCg +vHvLFvVLvSfFRLnRFRNHjPjggcssQcjjsnwhsPCC +vGVGGFFVHLTvDRHDmBbTzfZWMdJZlfMm +wjCbjQgjTQhNNzgWQCWrDFMZmZDZDCrrMDpLpL +czGSPznnRGGJGGlVVRVBGGlBmDDcMDFDDZLqfffZFrrZqFpZ +JPGlvBSJHVGnVsjvQjjzwdwjzd +MFlWQHDTpnpsFNNQllWFWlhzjGgrgDzGGhGGjvmZDZrh +PtTPcTLbBCVPTRVcvhjmmhVhSZGGgvZg +JLPfCwPbTbBPJCfblplMpqWsMpMwWHQn +QbHVBBzWtzHBNtBwQSgqhqSbFgRLjhmqqj +ZnCnMcdsDnJTncggFJwRmSwgRFmL +sTMZpGDvsZcMpcvTCPHwzrfzrpzHpWBrWz +PMdJWwJWHFWJnNzbDlfbCfMvbl +rZgttrFptFFcBtccbbCDvgfbGCGGgGDz +QsZBmsrFscrVrjQJjJQRJWWLwq +GwNNJwwRThwrWfhh +SmQqmzsjHssQzCbvsmSSzsQTjWpFTTfFfThchhFTBBfppB +mmbHbmtmCzzQZzQRdZJhNMdMlRMglh +rrsPbncQvvgnnrTdGDVcCdpZHHZp +RwwwhjLLqtJFwjzwtwmwwGpDZVdGDVdZBZDFHdHZCp +zhzwLhhfffLtjNChgWbbrbnMvPrMrrfv +tQMtQtTSBFtSmQSttMggMtbtnTnPrZvrnzNNTGZvrZZdLdnL +HqhwDpDcwlHqpVrrFzvFGpZrrzrP +RwlhhjwRCjVfjDbMtFWBWJMgWjWm +WpWVlWzsGlBJpspNclNlhhhmgzrdtzQMQttzMmtt +RfnPRLTPDHRdPbwvvntnSrFgmvnmtm +CwqRDCCwqCwbCTqJcJBNcZqdVcBlpJ +tpfnNBsGGNRppRCgfgRRCRQJGMPPWdwMJdWFFwjVzGPJ +chLSchLTbLqvqcZLlvvLqbmldMzFFWdzVSFWFMzQVJwjQjdM +rLqqcjDrcvhRsDfHDtNNnN +DjZjvTTDqrtTZZSMcdRdmRJrcJNc +HWgPGVhFPgnSVtnJcdMs +FPLfBwCWGPfCwfLHCCDBZlbDpBjvqTtDzzDj +FJNqNFgNFssqGGqBsTlMVcgVrCwLwlhcrw +fRZzDmDZvvDdZbtdpDZmbrThrLMCvcChwwlSTrvMSr +zmfZmtZmpDmbfWRDDZdqFljqnNQjGWnsjFqGsG +rMdMWddmJmvdSdmWfWMddpVRqRFVHRRqMRRPQMRqRq +tDGtGGhLjLLZNLjjNgNthGtqHTVqRVVpPDRpHHVRQVRPPR +ZlLtzNjgsZZlssLgtjNpfWfJvlJrrvCJfBmBfn +hqpWvFJsJFNHhqMWNhWvWRmmDcDMLcwZnjcwnjRnjn +LdrlgCCrSSTrTnwRjmwRQZwdwG +PVlfClrLlLlfggtBPzHHhHFbWzJNbvqJFNqF +TbbQtnDtbGGjGlGsGHpJJmFWFJJrBWWFlWrS +CZzzNzzhddNchhMhhRVjpCBwBrCvJvpmSCvrwJ +fhZZhddRjRgZzMZRzPjPTsLGQtHLTHTbDPQTtqPT +nHnWsQNQQWTWQshwjBJJJmHwFBwm +VZZpfbffZVvbSbGfBhSwmtmmJlmjJFJJ +bpphpMfMvMzDbMGZgQNrrngzdTsNqWdd +VPNddVTPPmdnVcPVZcdTmcDbQTFjMpjtFzbMtFjzsFTssT +lJCllWCrgvRlgwlJfRRvSzjSjQpbzMHpbwMQpszM +fRhGBBJJCgrNLsNPNVVhNq +pLrVDgbNbjVplpsltHBqWSqhSQcHDttH +MCdCwCGTmnTmmmvTTCwCqNhHQhRWcwHWBRHSqSQH +TNTFFPfffTvFTJvTPCPTFfGdzVjspVLZglJbsbZpVblrzjlb +cdPzFrldgcdCrnlznPzrBNRssLLBbVNVZsLHRHdm +wTQQwvvtqwqcGvTZmVHBbVLLBbRV +GWJSGfJWcjQwhQQWjqJhhGfgpMnMzDnpMlPpMnDlMrzl +pMhqTTsSpdBPpNBshsdMMTQFvFlQtQWCRQlCllVFqVqG +dfcbnmrnjzRFvGQQGvfv +mDrjLLLcJjLhpZSSJMdpph +NGZNwqFqZhhcFSCfRzwdzRfCzVRw +QTTmBTsWQWJPPCvzvpHPzdvVFR +bsmWTBbQDbmbLQQMsWWQchgqLqhGGGGZLhSFjhqS +HgmGlgsvBBDgBGCdHHvHwCGwhZJWhTjSdhTSFFFhJtSJTJhT +RQfVrfQNszMQfpMzpNnfLbtjhtSbWJWFWtFFtFJtFSZq +PNzLfnLnBCPHgsgC +mTZGgCdNSNmCQLLpPnDhRlGhpV +vWJHWFsfHMWBBFbBsjfjHrFfLRRLPPnpLthttRVPLSnhSPbS +fzMrBjWfBrzsZCZmSTgQzcNN +mgmCZCMgmnZmZgBZpgpJfbQfwSQPDTdfdwSDfwhn +sHhcrWLcFlzHcHRNNFvNFcFPwDDTWdddDdqWbSTWDPTTQS +RNsslsRrNcRNvNRFFNvVsghZBJtVCCtCtGghjhGBGG +gchrcRRdnRwPPnvQ +CVCCSrDjFHjVDbBLFGGBSvwnwNMnMsPPNsNPvwPQVM +lHLCTHGDCbbjFTTzdWlpcqfgcrdzZg +fRDPsDsqqJttttJSzPDgJWQCbQQbGMWCCnGGPVGVQQ +rTTBvZhrvBnWWDWCbZWW +cwLlTLpjTwBFLLhgfRRfmRqRDmRdjq +sprGGPTrJTsGPzszqGzNtTtpfbQddQSQSDFDFvvbZvwFbbfN +LWWCMVmwMmgWFQfFDDvZDgdF +mlMmRVCWVMmmHRjVCmjHWRhMzpTtlrlPzrtzwlsGPrpwtrJp +tsfwwfjfdfrtrClfvwvvLnTHNmvLHcNccRNcvNWH +qQSqZqFQRBzghDFncHgmccHNmWcNmM +SQJphFJzRDSsdpVlllrCrw +vGQqLQFvBvLvdNnvjnvNDc +TRJwmWmZWlCCmzznbNhhbDhRgj +CCTtDTlmDTWTmDmZZlVLLsFfstfFFLsBLQfF +cfWflMmWWlWfPWBhBlQtLmmvrrrvCLjvRTjLLwwr +gSgbsbgHdsjzHbqbdVDLZLvTZwLTvSrZrFvZLw +sdbJqDNdjJNdsJBpBWpJlMcfcB +FHlMHPqDLlPctgHSnttCSC +zhrmBrTwJTjBmQcSQvQqbtwGvg +jBjmBmJjjjRZTBzhhrBJLDdZqfpDMdfWWlDDLMlV +zPVdbsBzZdwqJGhrLTvNNJqH +tmmCgCPCDDnptHDjNvGvhrDvLv +pRWRlpSpPllClnpbQVQwFFVSQFVBZz +nDrCvmvMnMSmsCvblBzzCZplbJlTbZ +FNRtFWRfcGqFGQbzlZTQqQTBbd +GRwFfNtwFRNFGMvBsnnwMMMBjn +LVTBjjlJCDrnJzJNQR +GsGGsggGpfhgpchgdqzbMzzhzQRnnMRrNzzR +PwWFqFGpwWpdWgfsGggdmjCVHPHlCCCVZNCjVmVj +qVTsCWwbCsPlCVfcbvfPDgLzbzDDhrzRrjgZghgr +ntmHmNpSQNGtntNttmSdSdBdjrrDLQZQLLhRrFFFRDTFZhDF +mtMtBNTSNBpNJStMGSdHppNcVWPsWvqVcsVJfwwqlqWqlc +vvWzLvvdpZDvhTpcrLcTTLpdwSPnCfJwCMnQSMwSnCGJrnwr +ttHVmVNNsHBBRsHbMMwwnjnjBfjJwCMP +tsVllgNVqbRlfplldDvDWT +mLjLsQqLQqsBRvvlRBLRlT +bhgtDDhCtmptmTTS +nfmdbggwGWrfsPzfWq +JpWDcSGJpGzsHPSSlbbd +wVRqVZwwRwPDwbDddH +VtVVVLthLVtVgfQLRTNtqDcCcJBmmWMWWprpFrcBJWNp +dhhhDtmLdttdPlslGlRFjfzBBpzzRpGJ +QMrVMwbVrrbvVVCrvcnqQQrrSMBJfpjFSzfjJFMFRWSpjjFG +cwvbHHbCqVchRDHgDsPTdt +CgVNCtDsDtJGZZGqMMGhDq +cLRnSHgWcRdLHWSSRLjQdlHBTTPcPwwhzqzTMBPTwhPPwP +HnnnglnWWgdRjlmQNsNFmJCFJFvsJsNN +hfccLbjhfSRbfDZjFRJzrlvlwwlnnFrWwzqr +TCsPLNtQdpdQQVtVNvJNJWlzJzwlrvJl +pHtPsPtPtCQfbRHHDHhMLh +nWRWgLtWnfTcZNNsscfd +JMGzMVJwMVTvzVQFGHMMmPdddsPsCjldlHPcScNPsP +vGrMQQmmvTQzMJpghWRWgpbbBqLbLR +WSbhFbPTpRfTfPdhpfbhSbfPQLzlQlzlHvtQsvlltlsgHdgQ +pZcGJDZNGcVrJwrDrrnvtNvlNzsgtgzvvsgt +qmJZZJcBqwrMJcVbWfSPPWpmpjmSCF +jHVjjCcpNrDgjsfB +ndqllRvJQtqlQQTRWllFNDrsMZBfDBLvNMNDfsbZ +qTFnWJqdWRdqWRlnTRnQGnTmwwSHCzpcGNmHNcPVcHGmCz +pZCpBhDfvgBVZQGMMVZVlq +sLsLTTSssjPnTNbFGRGFPVHqMMRF +TsNSccnjLdcsLjdmjWvWvBhfmvWpCGhGhD +VWFFFPMpPVSMbTppHTnHTbRH +DtvfNdBNddDNSLjsvDTTHnzzHwrTrwsrwqbT +dgBLNffdgjjtfBQSvgNjNDlvMcQJmJJmZCMmVVVZFPFcPMGG +VWsQLHMVVSNRShWLhNSNLjbbbddbpDZDddcbZdDRztpd +FPlhhgPvThGFJndnnCCnJzzdCp +qrTfmllGvfvGqwNMMMsffsQsNh +NsmFqNlmnQRbCFsmJgSffpPcbvSfrVvpgS +LhZGDZhhwtDHMwDdHGhDjDpTzzPdzgTvcPvpSSpPrdrv +jgHMjBLhwtZMHMHmJNNJNFlBqlBJNn +bznSQggscgMcSTTfJbSQzQFwClMhmCmthClvMwFLwhZL +BRWBPBVVPjPNVHpVqlqrvtwFqmmLqltZmL +WDVddNHNvRgccgsDsgbT +sNgnQLtLLLPPnsPpqdqjBclpGWjcWjBG +rVCChSZhVrrwqVDVHSHmMjldGfJGfHddJGJlfGjGJj +CVZmDvZCmmhFVVrCgTNbbnQFgbsqNqNQ +WmMmSSfJNRRPfJRMRMtllCgdStgbgttgCdDd +QGBrvzwBczlgqCtDbvDq +QQpBGFrLQjQzGVVRNjPmNNWMbW +gGljnJhnJtllpNVCHWcccdTdjdmB +bLfSQDSMSHmBnwCB +LFMDrbFfFQZQRzLZnbgtlsRGtltpgNhgPpPG +cRThZZchCThtgTRhZTRtjWFjWNwqCjGmwFjqqffC +DPDPGzPMHDbrpqjfwrjqmjmp +JVHHDdVdVbvGMdnVdQVdDbHcRZllhRtgStRLThRSTcBTvc +lQWPSBrrPZGgPglGssDfHnWsfDFHHvHh +TDCqpttptJNLtwNpbwTqzqHshsvsMMFnmHMNfssmvmvf +JCjqVpDtrBjQjrlj +wFGWGpFLvCczNSWWsz +tlfgtftjlbtHHlDBsBzmQQnsQDQsCn +gjfrsVqVgPlfqhvLdvdwZhGq +pHpZHBSvRvRCBBZCTMngRnWndnRmWcgg +jsfrfrjJFDwDDMMggMCGWGcfmG +qbCszCjtCjQsQrtZVBHBHvBvqLZvlp +scFzsPScNgNPNgQzpttlCBCwpLrMLCrDdljLwq +TjfGZZjVwMZwMLwr +vnGbWTvTmFRjQFQPsb +bVLrzqrzJVgJbbtVrWJVgppcBCzBvdzwBCCBHDcBvc +hflPQnMQmQSRlQMPNRTHwwHHHqpHpdfwdBCp +hFhZMhqSNMNbrZgWWGWJjZ +NJsgNjJlMHQrwnRgSRPwrP +tqpQtTFpFvbGpzTTWSrnSbrhwChCnRfrCf +GtcvGqQpttzcqdFzWppDsZMJjBBsBJcBNmBjMsLJ +lGfZGZhFfhdSWqmFFWSS +wDRDPLcDnjtWbSmqrSCSLC +MPwmtVnVMjztznHPgQhQfJfvvHHGggQZ +llTspLllCHmLHHndldqHdlLQQPSBQczZSFDDQZSNGcGG +jMhwvVrRjbRhFBZNGPcGNN +wVtrrtRwrfrwftjVjwWvMrRpsqsnsHsBglslCmTsdWdHTd +vPvmTGgDPRvGpDPGPqGHQnWJQJMBBzJBlBQWlHWl +bfbwNsmwFdLjbfrrLsSfLNQtMllznBzJQZMQtMlZZnnF +frssSscssNfScCjfSCwjsDmRDpGmDRDvvvVcvRDvRp +LtlPZPjBTbWsWJVJVzdT +nnprqhrqmzfrSrphqfCChVVGVDJWgSHHWgWsRDVHWd +nrmppNqhcCrfMchcMCncqbzPZvlvlwbBNjPjtNjZjL +FPWsFdSspVbbbtWVvl +CCHnnfHHvCwtVMhzlzDllC +LrGnjGfgfvcwfgrLrBjrBLgwdBTSRBFsRZdRsSqFFSFSSPPp +whGCLqsrjgGhhGFqrCCFGCGzTRTZJcNnzlLTnznNHcnzTH +ddvVmbfvdvVbDVQdvvdSzpNcnJzlzSRHNJpnJcSc +BPdvfQdWtPDDPfDvDQVVPmbhssCGGMqgFCFMqGMWgMjrRw +PSLbGmWPSPLQbMTPWGFWltthdDdrmBDHhdDdczzDRh +VfCngVfgsZwCftrZdhcZrdNDzz +CjVJJJqnJwQhWPPLQlGj +ntnnQmTQTQGVWGNGNNlClG +jDffjMSvqjHzHHzwNVwNVcCddPVNdD +ZszJsrrZMjsHqqvZJLRQCbTRQbJmThbt +BgLHgFDsJNWgQgflWd +mnVVcCHnCGRcVnZSjmlthftMQddlfhQctNfW +qbSGqmHSTFprvpvTTL +dvdTMvvpdLpTcSLvdLLMmhfFBftwCNhRwRNjtCTRCf +lshQWgsgrHHqlFfRqFjRFfFwCB +rsgHQbJbrsGHHlgQHgJrlHrPZdhdpMZGDSDpdPLcZhdvhZ \ No newline at end of file diff --git a/2022/day3/p1/test.txt b/2022/day3/p1/test.txt new file mode 100644 index 0000000..9919ffa --- /dev/null +++ b/2022/day3/p1/test.txt @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw \ No newline at end of file diff --git a/2022/day3/p2/day3p2.c b/2022/day3/p2/day3p2.c new file mode 100644 index 0000000..727efc7 --- /dev/null +++ b/2022/day3/p2/day3p2.c @@ -0,0 +1,135 @@ +#include +#include +#include + + + +int CountLines(char *FileName) +{ + char *Line = malloc(256); + int LineCount = 0; + + FILE *File; + File = fopen(FileName, "r"); + + while (fgets(Line, 256, File) != NULL) + { + LineCount++; + } + + fclose(File); + + return LineCount; +} + + +void GetLine(char *FileName, int LineNumber, char* Line) +{ + int CurrentLineNumber = 1; + + FILE *File; + File = fopen(FileName, "r"); + + while (fgets(Line, 256, File) != NULL) + { + + if (CurrentLineNumber == LineNumber) + break; + + else + CurrentLineNumber++; + + } + + fclose(File); + +} + + +int main() +{ + + char FileName[] = "input.txt"; + + int Total = 0; + int Priority = 0; + + int CurrentLine = 1; + int CurrentGroup = 1; + + + int LineCount = CountLines(FileName); + + while (CurrentLine <= LineCount) + { + + char SharedItem = ' '; + + char *Member1 = malloc(256); + char *Member2 = malloc(256); + char *Member3 = malloc(256); + + GetLine(FileName, CurrentLine, Member1); + GetLine(FileName, CurrentLine + 1, Member2); + GetLine(FileName, CurrentLine + 2, Member3); + + for (int a = 0; a < strlen(Member1); a++) + { + + char Item1 = Member1[a]; + + // Loop through each member looking for a shared character + for (int b = 0; b < strlen(Member2); b++) + { + + char Item2 = Member2[b]; + + if (Item1 == Item2) + { + for (int c = 0; c < strlen(Member3); c++) + { + + char Item3 = Member3[c]; + + if ((Item1 == Item3) && (Item2 == Item3)) + { + SharedItem = Item3; + } + + } + + } + + // Don't bother searching through the rest if a shared character is found + if (SharedItem != ' ') + break; + } + + } + + printf("Shared Item of Group %d was %c\n", CurrentGroup, SharedItem); + + // Convert character to integer value + int n = (int) SharedItem; + + // A-Z ; - 38 to get values 27-52 + if (n >= 65 && n <= 90) + Priority = n-38; + + // a-z ; - 96 to get values 1-26 + else if (n >= 97 && n <= 122) + Priority = n-96; + + + Total += Priority; + + // Each group is three lines, so iterate by three. + CurrentLine += 3; + CurrentGroup++; + + } + + printf("Total Group Item Priority: %d\n", Total); + + return 0; +} \ No newline at end of file diff --git a/2022/day3/p2/input.txt b/2022/day3/p2/input.txt new file mode 100644 index 0000000..c49aedf --- /dev/null +++ b/2022/day3/p2/input.txt @@ -0,0 +1,300 @@ +dWlhclDHdFvDCCDfFq +mGdZBZBwRGjZMFgvTvgtvv +jwwJrzdzGdSbGGnNlzWczHzPHPhn +cczcbMBszhzzDBTBPPPGjtvtlt +LqJLfpwdLnvQLRGQjGtj +gSgnSJJCGSGpGSrwgfhchmmmHzcrHDmbrmMm +bVjstCsSstCLCrbSLnMpdMndcLddcqcpHR +wPZJQJwtBfJZmgBwPTcpTdcnfHMppcGMdG +gmFJzwPJJtszvNhCNC +DmjZDMZWDqGRqqRpHmmRLTTNTPTfCQJQQLJHTClc +FtzfvrfFwVgtzztgBLJNcNlTcTVNNQLN +vgsdbzzrwtqWfWRpZDdZ +rJhqRhLHhdcQqdHqfQGfPGstgGPlWttM +DzCpDDmnNCmBZBZnVBmZzBGPfsbglfNPwgPGPMWsWWft +BZFnlmpBpBzDzVZmhFHFrrrchhRqTdrc +DWCCWFNqdGFdPVcb +HllttQsTRlJlsblrHlhdmPLVcVcTccndLvPLmL +HSlstHgJltghhRrzNBNDzSwMjNZwNb +dzGSHCWSsGVVSdHVHHWWVVDCgJDpQqLTTRJpgmTLRmJTTpTR +BvNjMPZMBtBBMvvNMNttlhLQqCJpLmhTRQqQJgRJLQQg +llNncBlMCwwMnwPZrGsVHzcfFGdHGFGs +JfZhphMMQmFzDTDjSdrQjQ +sqHCbCwBVtbqbCqtrWdjzlSJTlrTSWBn +bHcwbGCGRssNscwtHNbwvmRFvpFFJFvLZMmPLFfv +qBCrzznVmDCmMMDNgrgcrvHHcgbQcW +TTTsdJRTRhhlsgbvbdCFdbWvbQ +JhGGlfRlJsnCMDMqjmfV +rqLLvDLtStDLQhQDQrQhhNdsmWdmmjjnssPnTMnTzfTsWT +ZRFFpgCgppcBcnjTsjTMTfPFMP +GCZpGlwJwBgGHcJhSSHLDDrNqrMtNq +FsPFqsDNZFNnZrcBmWfWWQ +lSnRlRTvgrWtctTmft +SMbGbbvnGlnSDwGqLwNCqNVD +dPQDcBwJJDgDTPgGgQTBVjSsmLhLTrLmjSLpjSLh +MvvZRHtMtbCNvCNCNtNvbRfBSMSrjmLpjnjmVhrVSLsnnmSh +qHZtbBZfRztbHbCzNRHPQgJPJgGgglFPPFqdQD +MsBsVDspRPfPlhMl +zWnCFzHbSCwqNmPSjmGlsmfN +FnHnFbFzsHHCCgzCzbBptVppgvvVgVrpBrJt +pTLntptZjQLfVDjQTDlVJCSWNCPSCCsSNmFlNslm +BBHbqGHHqgwSWSCCWwZWWZ +qRzbhhbzzrHdRRHhRHvzZjfrVTrppVQttDfcQTfp +DHsdHPHHsHMsRmhMZZQBtljgZGtC +NFnCbFznLVJbVrjhQthjGBLZBjGL +wNrfFJJbCpNnfbdwDSDHsvsHmsmH +jLZRjnMMjJhJnvtQbdHfHZbvHQ +mBzwptCWlcFCwsHSTpQfQHQfrpTb +mNltzmsCNmFzGwCBllGRgRgqjgLMnGqjnPjV +ZqqcqmVVtbcBMFfFMcQfgphJ +HLWLDvWjjLwTWzzvGLThQQshQllgJDJgfbffJQ +vHzLvrwwzGzTRGzzLLRPRwRdSVdnBBdSbBSVStbNmnrmZS +TWVVvPSgwWSqcRgRwbRRcqshsfFzzzChTGNHzHhhhCsG +njZrjMLlpmDmGfSGtrNttzCF +ZQBmZdDBZRRPRSBgcb +TpntvdpnZDptnbnTDGtSFSlFmzCzzmSFRjqlZj +MWrNcWRMlgqzMjzq +NPwsPNrBNcVHNNcJHBNBcJwwttDvGVnDptVRtbnTtGvVGtGG +tsbbvvSfnqvzQLLBjfMLdd +gJRmRNmJNchgmmrFJhFgWJQMwBnjwrMBVQwQTBdLdVQj +GcGpGGRGJgqstvpbnCqb +rsHcrbZHBTTtLtNSwwHLLJ +mFqhWVsjsVCjQlNJGMwMlMMGMh +QggzffQRCfgVFWzzCQffqfZpZDcRvTTBTvvZnsdnddcn +bPFMFFBpMlFfMZMpHGNSrNctJcPSSchJchPt +zCgwnmgzQDnQgdWWQRgqSrqLSqSgssLNJhgJ +rQCQQTrRRmDBFfbHBFHZbT +fzfPQsGrrMMjtHtBHs +SwNNDqwhWpVTwbDGGDmwSVhZRZHdbCtgBjCRjMtbBHtRMd +vVTGvVGNvPPvQvfncJ +cwzMJbclHDPqfJQPfq +rrqjjTBrqqBjRCgTjrRjNrsGPDhDFGCfWGfPFfFPGWfD +BZTTSTZgjbSwVptvpq +PPPPJpvpJsJwPHHPsJdTNZRZZZjTFFmRRRNjZd +qbWVfChDCDnVVDGfnSFNNjRLmNfBNLQjLjmBRm +DhFDhbnWCDhGcbJPPwrsrMwrvlvc +lFSDTwHTSwlTNwFFlwNcFFpjLZvZqvnqLPnnWbgngbbncqbZ +rzQfMzRGrRGJCffBMGdGsJZWWnqWVqdPPgNvvVZWPWWn +RJrttBtNQCsNzTpShhHFDwFlth +QNzQFjNFrQPNbmPpqTTDGswWmB +ggHRcSlcCVCSzMVqDGwgqTWpsmqwqG +cltzCZtLClHRRtMZZLQjfNvtrJfhvrddvNNd +mcfWHffBFnQRQlTFdv +wssSLVbbzDVbzbggzSzNshNMnvnljRdvQRlMBjvQdnCj +bhDzVSSJDDJhDLBwtbDzzbbWppfpcmWGmprqqGtqprcHPp +rpVFrZpgHWSZrFPqhzwcqPwmcVBD +vMTnQJjQLCbljvvQzTMbTjPNdBLwwDhmhNNqPwmmhhBh +jvGjjQJnrspGHgFz +sjssjtZlcphZHwWvcrHTwWJH +qDdzzrFNNNDGdFDzzVBVVvfWJPfgPmgWPgvwVH +nqMQGDrnLGnqqLNqjtCZZjsMhZhCMbtl +JJJsLFmzsrFlSpzPscjgHhnRnmvcjqRvvj +fCMQbCbTjjqTGhjc +bfdbWdCddfBbtCfbfbqVWQQpPlBrJLJJSSLwppFssFzLzp +pdbbzlffWtJbgQwhcphQcCCg +vHvLFvVLvSfFRLnRFRNHjPjggcssQcjjsnwhsPCC +vGVGGFFVHLTvDRHDmBbTzfZWMdJZlfMm +wjCbjQgjTQhNNzgWQCWrDFMZmZDZDCrrMDpLpL +czGSPznnRGGJGGlVVRVBGGlBmDDcMDFDDZLqfffZFrrZqFpZ +JPGlvBSJHVGnVsjvQjjzwdwjzd +MFlWQHDTpnpsFNNQllWFWlhzjGgrgDzGGhGGjvmZDZrh +PtTPcTLbBCVPTRVcvhjmmhVhSZGGgvZg +JLPfCwPbTbBPJCfblplMpqWsMpMwWHQn +QbHVBBzWtzHBNtBwQSgqhqSbFgRLjhmqqj +ZnCnMcdsDnJTncggFJwRmSwgRFmL +sTMZpGDvsZcMpcvTCPHwzrfzrpzHpWBrWz +PMdJWwJWHFWJnNzbDlfbCfMvbl +rZgttrFptFFcBtccbbCDvgfbGCGGgGDz +QsZBmsrFscrVrjQJjJQRJWWLwq +GwNNJwwRThwrWfhh +SmQqmzsjHssQzCbvsmSSzsQTjWpFTTfFfThchhFTBBfppB +mmbHbmtmCzzQZzQRdZJhNMdMlRMglh +rrsPbncQvvgnnrTdGDVcCdpZHHZp +RwwwhjLLqtJFwjzwtwmwwGpDZVdGDVdZBZDFHdHZCp +zhzwLhhfffLtjNChgWbbrbnMvPrMrrfv +tQMtQtTSBFtSmQSttMggMtbtnTnPrZvrnzNNTGZvrZZdLdnL +HqhwDpDcwlHqpVrrFzvFGpZrrzrP +RwlhhjwRCjVfjDbMtFWBWJMgWjWm +WpWVlWzsGlBJpspNclNlhhhmgzrdtzQMQttzMmtt +RfnPRLTPDHRdPbwvvntnSrFgmvnmtm +CwqRDCCwqCwbCTqJcJBNcZqdVcBlpJ +tpfnNBsGGNRppRCgfgRRCRQJGMPPWdwMJdWFFwjVzGPJ +chLSchLTbLqvqcZLlvvLqbmldMzFFWdzVSFWFMzQVJwjQjdM +rLqqcjDrcvhRsDfHDtNNnN +DjZjvTTDqrtTZZSMcdRdmRJrcJNc +HWgPGVhFPgnSVtnJcdMs +FPLfBwCWGPfCwfLHCCDBZlbDpBjvqTtDzzDj +FJNqNFgNFssqGGqBsTlMVcgVrCwLwlhcrw +fRZzDmDZvvDdZbtdpDZmbrThrLMCvcChwwlSTrvMSr +zmfZmtZmpDmbfWRDDZdqFljqnNQjGWnsjFqGsG +rMdMWddmJmvdSdmWfWMddpVRqRFVHRRqMRRPQMRqRq +tDGtGGhLjLLZNLjjNgNthGtqHTVqRVVpPDRpHHVRQVRPPR +ZlLtzNjgsZZlssLgtjNpfWfJvlJrrvCJfBmBfn +hqpWvFJsJFNHhqMWNhWvWRmmDcDMLcwZnjcwnjRnjn +LdrlgCCrSSTrTnwRjmwRQZwdwG +PVlfClrLlLlfggtBPzHHhHFbWzJNbvqJFNqF +TbbQtnDtbGGjGlGsGHpJJmFWFJJrBWWFlWrS +CZzzNzzhddNchhMhhRVjpCBwBrCvJvpmSCvrwJ +fhZZhddRjRgZzMZRzPjPTsLGQtHLTHTbDPQTtqPT +nHnWsQNQQWTWQshwjBJJJmHwFBwm +VZZpfbffZVvbSbGfBhSwmtmmJlmjJFJJ +bpphpMfMvMzDbMGZgQNrrngzdTsNqWdd +VPNddVTPPmdnVcPVZcdTmcDbQTFjMpjtFzbMtFjzsFTssT +lJCllWCrgvRlgwlJfRRvSzjSjQpbzMHpbwMQpszM +fRhGBBJJCgrNLsNPNVVhNq +pLrVDgbNbjVplpsltHBqWSqhSQcHDttH +MCdCwCGTmnTmmmvTTCwCqNhHQhRWcwHWBRHSqSQH +TNTFFPfffTvFTJvTPCPTFfGdzVjspVLZglJbsbZpVblrzjlb +cdPzFrldgcdCrnlznPzrBNRssLLBbVNVZsLHRHdm +wTQQwvvtqwqcGvTZmVHBbVLLBbRV +GWJSGfJWcjQwhQQWjqJhhGfgpMnMzDnpMlPpMnDlMrzl +pMhqTTsSpdBPpNBshsdMMTQFvFlQtQWCRQlCllVFqVqG +dfcbnmrnjzRFvGQQGvfv +mDrjLLLcJjLhpZSSJMdpph +NGZNwqFqZhhcFSCfRzwdzRfCzVRw +QTTmBTsWQWJPPCvzvpHPzdvVFR +bsmWTBbQDbmbLQQMsWWQchgqLqhGGGGZLhSFjhqS +HgmGlgsvBBDgBGCdHHvHwCGwhZJWhTjSdhTSFFFhJtSJTJhT +RQfVrfQNszMQfpMzpNnfLbtjhtSbWJWFWtFFtFJtFSZq +PNzLfnLnBCPHgsgC +mTZGgCdNSNmCQLLpPnDhRlGhpV +vWJHWFsfHMWBBFbBsjfjHrFfLRRLPPnpLthttRVPLSnhSPbS +fzMrBjWfBrzsZCZmSTgQzcNN +mgmCZCMgmnZmZgBZpgpJfbQfwSQPDTdfdwSDfwhn +sHhcrWLcFlzHcHRNNFvNFcFPwDDTWdddDdqWbSTWDPTTQS +RNsslsRrNcRNvNRFFNvVsghZBJtVCCtCtGghjhGBGG +gchrcRRdnRwPPnvQ +CVCCSrDjFHjVDbBLFGGBSvwnwNMnMsPPNsNPvwPQVM +lHLCTHGDCbbjFTTzdWlpcqfgcrdzZg +fRDPsDsqqJttttJSzPDgJWQCbQQbGMWCCnGGPVGVQQ +rTTBvZhrvBnWWDWCbZWW +cwLlTLpjTwBFLLhgfRRfmRqRDmRdjq +sprGGPTrJTsGPzszqGzNtTtpfbQddQSQSDFDFvvbZvwFbbfN +LWWCMVmwMmgWFQfFDDvZDgdF +mlMmRVCWVMmmHRjVCmjHWRhMzpTtlrlPzrtzwlsGPrpwtrJp +tsfwwfjfdfrtrClfvwvvLnTHNmvLHcNccRNcvNWH +qQSqZqFQRBzghDFncHgmccHNmWcNmM +SQJphFJzRDSsdpVlllrCrw +vGQqLQFvBvLvdNnvjnvNDc +TRJwmWmZWlCCmzznbNhhbDhRgj +CCTtDTlmDTWTmDmZZlVLLsFfstfFFLsBLQfF +cfWflMmWWlWfPWBhBlQtLmmvrrrvCLjvRTjLLwwr +gSgbsbgHdsjzHbqbdVDLZLvTZwLTvSrZrFvZLw +sdbJqDNdjJNdsJBpBWpJlMcfcB +FHlMHPqDLlPctgHSnttCSC +zhrmBrTwJTjBmQcSQvQqbtwGvg +jBjmBmJjjjRZTBzhhrBJLDdZqfpDMdfWWlDDLMlV +zPVdbsBzZdwqJGhrLTvNNJqH +tmmCgCPCDDnptHDjNvGvhrDvLv +pRWRlpSpPllClnpbQVQwFFVSQFVBZz +nDrCvmvMnMSmsCvblBzzCZplbJlTbZ +FNRtFWRfcGqFGQbzlZTQqQTBbd +GRwFfNtwFRNFGMvBsnnwMMMBjn +LVTBjjlJCDrnJzJNQR +GsGGsggGpfhgpchgdqzbMzzhzQRnnMRrNzzR +PwWFqFGpwWpdWgfsGggdmjCVHPHlCCCVZNCjVmVj +qVTsCWwbCsPlCVfcbvfPDgLzbzDDhrzRrjgZghgr +ntmHmNpSQNGtntNttmSdSdBdjrrDLQZQLLhRrFFFRDTFZhDF +mtMtBNTSNBpNJStMGSdHppNcVWPsWvqVcsVJfwwqlqWqlc +vvWzLvvdpZDvhTpcrLcTTLpdwSPnCfJwCMnQSMwSnCGJrnwr +ttHVmVNNsHBBRsHbMMwwnjnjBfjJwCMP +tsVllgNVqbRlfplldDvDWT +mLjLsQqLQqsBRvvlRBLRlT +bhgtDDhCtmptmTTS +nfmdbggwGWrfsPzfWq +JpWDcSGJpGzsHPSSlbbd +wVRqVZwwRwPDwbDddH +VtVVVLthLVtVgfQLRTNtqDcCcJBmmWMWWprpFrcBJWNp +dhhhDtmLdttdPlslGlRFjfzBBpzzRpGJ +QMrVMwbVrrbvVVCrvcnqQQrrSMBJfpjFSzfjJFMFRWSpjjFG +cwvbHHbCqVchRDHgDsPTdt +CgVNCtDsDtJGZZGqMMGhDq +cLRnSHgWcRdLHWSSRLjQdlHBTTPcPwwhzqzTMBPTwhPPwP +HnnnglnWWgdRjlmQNsNFmJCFJFvsJsNN +hfccLbjhfSRbfDZjFRJzrlvlwwlnnFrWwzqr +TCsPLNtQdpdQQVtVNvJNJWlzJzwlrvJl +pHtPsPtPtCQfbRHHDHhMLh +nWRWgLtWnfTcZNNsscfd +JMGzMVJwMVTvzVQFGHMMmPdddsPsCjldlHPcScNPsP +vGrMQQmmvTQzMJpghWRWgpbbBqLbLR +WSbhFbPTpRfTfPdhpfbhSbfPQLzlQlzlHvtQsvlltlsgHdgQ +pZcGJDZNGcVrJwrDrrnvtNvlNzsgtgzvvsgt +qmJZZJcBqwrMJcVbWfSPPWpmpjmSCF +jHVjjCcpNrDgjsfB +ndqllRvJQtqlQQTRWllFNDrsMZBfDBLvNMNDfsbZ +qTFnWJqdWRdqWRlnTRnQGnTmwwSHCzpcGNmHNcPVcHGmCz +pZCpBhDfvgBVZQGMMVZVlq +sLsLTTSssjPnTNbFGRGFPVHqMMRF +TsNSccnjLdcsLjdmjWvWvBhfmvWpCGhGhD +VWFFFPMpPVSMbTppHTnHTbRH +DtvfNdBNddDNSLjsvDTTHnzzHwrTrwsrwqbT +dgBLNffdgjjtfBQSvgNjNDlvMcQJmJJmZCMmVVVZFPFcPMGG +VWsQLHMVVSNRShWLhNSNLjbbbddbpDZDddcbZdDRztpd +FPlhhgPvThGFJndnnCCnJzzdCp +qrTfmllGvfvGqwNMMMsffsQsNh +NsmFqNlmnQRbCFsmJgSffpPcbvSfrVvpgS +LhZGDZhhwtDHMwDdHGhDjDpTzzPdzgTvcPvpSSpPrdrv +jgHMjBLhwtZMHMHmJNNJNFlBqlBJNn +bznSQggscgMcSTTfJbSQzQFwClMhmCmthClvMwFLwhZL +BRWBPBVVPjPNVHpVqlqrvtwFqmmLqltZmL +WDVddNHNvRgccgsDsgbT +sNgnQLtLLLPPnsPpqdqjBclpGWjcWjBG +rVCChSZhVrrwqVDVHSHmMjldGfJGfHddJGJlfGjGJj +CVZmDvZCmmhFVVrCgTNbbnQFgbsqNqNQ +WmMmSSfJNRRPfJRMRMtllCgdStgbgttgCdDd +QGBrvzwBczlgqCtDbvDq +QQpBGFrLQjQzGVVRNjPmNNWMbW +gGljnJhnJtllpNVCHWcccdTdjdmB +bLfSQDSMSHmBnwCB +LFMDrbFfFQZQRzLZnbgtlsRGtltpgNhgPpPG +cRThZZchCThtgTRhZTRtjWFjWNwqCjGmwFjqqffC +DPDPGzPMHDbrpqjfwrjqmjmp +JVHHDdVdVbvGMdnVdQVdDbHcRZllhRtgStRLThRSTcBTvc +lQWPSBrrPZGgPglGssDfHnWsfDFHHvHh +TDCqpttptJNLtwNpbwTqzqHshsvsMMFnmHMNfssmvmvf +JCjqVpDtrBjQjrlj +wFGWGpFLvCczNSWWsz +tlfgtftjlbtHHlDBsBzmQQnsQDQsCn +gjfrsVqVgPlfqhvLdvdwZhGq +pHpZHBSvRvRCBBZCTMngRnWndnRmWcgg +jsfrfrjJFDwDDMMggMCGWGcfmG +qbCszCjtCjQsQrtZVBHBHvBvqLZvlp +scFzsPScNgNPNgQzpttlCBCwpLrMLCrDdljLwq +TjfGZZjVwMZwMLwr +vnGbWTvTmFRjQFQPsb +bVLrzqrzJVgJbbtVrWJVgppcBCzBvdzwBCCBHDcBvc +hflPQnMQmQSRlQMPNRTHwwHHHqpHpdfwdBCp +hFhZMhqSNMNbrZgWWGWJjZ +NJsgNjJlMHQrwnRgSRPwrP +tqpQtTFpFvbGpzTTWSrnSbrhwChCnRfrCf +GtcvGqQpttzcqdFzWppDsZMJjBBsBJcBNmBjMsLJ +lGfZGZhFfhdSWqmFFWSS +wDRDPLcDnjtWbSmqrSCSLC +MPwmtVnVMjztznHPgQhQfJfvvHHGggQZ +llTspLllCHmLHHndldqHdlLQQPSBQczZSFDDQZSNGcGG +jMhwvVrRjbRhFBZNGPcGNN +wVtrrtRwrfrwftjVjwWvMrRpsqsnsHsBglslCmTsdWdHTd +vPvmTGgDPRvGpDPGPqGHQnWJQJMBBzJBlBQWlHWl +bfbwNsmwFdLjbfrrLsSfLNQtMllznBzJQZMQtMlZZnnF +frssSscssNfScCjfSCwjsDmRDpGmDRDvvvVcvRDvRp +LtlPZPjBTbWsWJVJVzdT +nnprqhrqmzfrSrphqfCChVVGVDJWgSHHWgWsRDVHWd +nrmppNqhcCrfMchcMCncqbzPZvlvlwbBNjPjtNjZjL +FPWsFdSspVbbbtWVvl +CCHnnfHHvCwtVMhzlzDllC +LrGnjGfgfvcwfgrLrBjrBLgwdBTSRBFsRZdRsSqFFSFSSPPp +whGCLqsrjgGhhGFqrCCFGCGzTRTZJcNnzlLTnznNHcnzTH +ddvVmbfvdvVbDVQdvvdSzpNcnJzlzSRHNJpnJcSc +BPdvfQdWtPDDPfDvDQVVPmbhssCGGMqgFCFMqGMWgMjrRw +PSLbGmWPSPLQbMTPWGFWltthdDdrmBDHhdDdczzDRh +VfCngVfgsZwCftrZdhcZrdNDzz +CjVJJJqnJwQhWPPLQlGj +ntnnQmTQTQGVWGNGNNlClG +jDffjMSvqjHzHHzwNVwNVcCddPVNdD +ZszJsrrZMjsHqqvZJLRQCbTRQbJmThbt +BgLHgFDsJNWgQgflWd +mnVVcCHnCGRcVnZSjmlthftMQddlfhQctNfW +qbSGqmHSTFprvpvTTL +dvdTMvvpdLpTcSLvdLLMmhfFBftwCNhRwRNjtCTRCf +lshQWgsgrHHqlFfRqFjRFfFwCB +rsgHQbJbrsGHHlgQHgJrlHrPZdhdpMZGDSDpdPLcZhdvhZ \ No newline at end of file diff --git a/2022/day3/p2/test.txt b/2022/day3/p2/test.txt new file mode 100644 index 0000000..9919ffa --- /dev/null +++ b/2022/day3/p2/test.txt @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw \ No newline at end of file diff --git a/2022/day4/p1/day4p1.c b/2022/day4/p1/day4p1.c new file mode 100644 index 0000000..e0cf915 --- /dev/null +++ b/2022/day4/p1/day4p1.c @@ -0,0 +1,95 @@ +#include +#include +#include +#include + + +bool IntRangeInIntRange(int * a, int * b, int * c, int * d) +{ + if (c <= a && d >= b) + return true; + + else + return false; +} + + +int main() +{ + + FILE * File; + + File = fopen("input.text", "r"); + + + char * Line = malloc(256); + + int Total = 0; + + + char ** Elves; + + Elves = malloc(2); + + int * ElfRanges[4]; + + while(fgets(Line, 256, File) != NULL) + { + + for (int i = 0; i < 4; i++) + ElfRanges[i] = NULL; + + + // Splits the line by the comma in the middle of the line to get each elf's range + Elves[0] = strtok(Line, ","); + Elves[1] = strtok(NULL, ","); + + + // Loop through both elves + for (int a = 0; a < 2; a++) + { + + printf(Elves[a]); + printf(" "); + + char *Task = strtok(Elves[a], "-"); + + while (Task != NULL) + { + + for (int i = 0; i < 4; i++) + { + if (ElfRanges[i] == NULL) + { + ElfRanges[i] = (int *) strtol(Task, NULL, 10); + break; + } + } + + Task = strtok(NULL, "-"); + + } + + } + + + printf("Elf Pair Ranges: "); + for (int i = 0; i < 4; i++) + printf("%d ", ElfRanges[i]); + + + printf("\n\n"); + + + if (IntRangeInIntRange(ElfRanges[0], ElfRanges[1], ElfRanges[2], ElfRanges[3]) || IntRangeInIntRange(ElfRanges[2], ElfRanges[3], ElfRanges[0], ElfRanges[1])) + Total++; + + } + + printf("Total Pairs Fully Contained in Other: %d\n", Total); + + fclose(File); + + return 0; + +} \ No newline at end of file diff --git a/2022/day4/p1/input.text b/2022/day4/p1/input.text new file mode 100644 index 0000000..29559d0 --- /dev/null +++ b/2022/day4/p1/input.text @@ -0,0 +1,1000 @@ +7-50,8-33 +76-83,77-87 +68-73,55-68 +13-37,12-25 +7-7,12-96 +9-22,10-12 +52-77,12-52 +43-83,44-60 +33-90,78-89 +10-10,9-50 +6-89,7-98 +10-11,11-60 +8-75,7-94 +23-23,23-23 +65-78,23-64 +5-97,96-96 +93-96,76-80 +15-47,14-16 +16-17,17-43 +28-39,8-41 +40-70,40-41 +32-89,57-88 +39-76,40-64 +13-96,55-69 +56-80,57-81 +57-82,58-82 +57-57,44-58 +33-54,33-53 +9-91,91-96 +58-68,33-57 +6-65,4-5 +2-88,3-88 +23-69,23-98 +1-99,2-60 +15-70,15-71 +45-67,2-68 +37-64,5-59 +3-79,2-79 +38-83,38-83 +4-4,5-98 +43-74,43-75 +4-99,2-5 +31-42,42-42 +24-28,27-30 +2-80,2-81 +33-66,30-62 +80-93,80-80 +30-81,81-93 +17-96,16-84 +48-86,47-62 +62-74,61-74 +8-37,37-67 +22-98,21-98 +29-29,29-58 +27-85,5-85 +95-98,1-96 +99-99,24-97 +19-22,21-83 +34-82,82-83 +13-76,31-92 +44-86,77-85 +15-47,15-47 +25-54,26-55 +20-38,3-37 +3-15,4-74 +78-78,19-78 +15-25,18-24 +71-87,86-86 +9-99,99-99 +25-68,24-24 +42-89,31-42 +47-67,48-74 +34-61,20-34 +2-80,1-3 +5-6,5-74 +4-67,5-53 +20-20,21-88 +7-48,5-8 +14-62,14-14 +49-79,42-78 +23-28,22-22 +21-87,21-86 +57-95,57-95 +36-53,12-77 +12-46,13-57 +52-84,85-88 +41-73,73-73 +84-94,64-95 +93-94,12-94 +1-99,1-99 +6-6,6-70 +3-99,7-98 +96-99,3-97 +18-84,17-85 +56-99,8-57 +7-83,8-84 +51-82,50-83 +7-77,7-8 +58-76,59-77 +13-79,14-79 +7-7,8-85 +15-17,16-28 +17-79,16-79 +74-74,1-73 +28-28,28-65 +59-62,59-66 +48-69,46-47 +14-23,3-24 +35-83,83-98 +55-84,55-83 +10-20,7-19 +13-88,21-88 +62-62,62-85 +32-32,33-33 +49-86,15-90 +2-3,2-38 +1-1,2-93 +40-52,22-41 +41-82,82-92 +42-79,41-59 +53-99,52-99 +52-68,6-55 +30-65,31-65 +56-90,8-91 +83-93,17-82 +5-84,4-70 +56-56,56-97 +5-44,4-81 +85-91,90-90 +23-51,22-22 +12-15,14-68 +28-28,28-84 +1-6,10-32 +5-86,50-88 +8-20,19-19 +62-80,62-81 +50-77,76-97 +3-97,3-96 +14-77,37-39 +82-84,29-82 +6-31,1-24 +62-71,46-61 +13-13,11-15 +3-9,4-17 +32-97,11-98 +89-90,23-89 +51-59,48-60 +53-74,53-74 +30-30,29-71 +8-70,8-9 +65-65,65-66 +34-85,96-99 +36-40,36-36 +42-42,42-72 +2-43,33-69 +4-31,30-77 +69-84,70-92 +26-95,27-98 +3-3,6-89 +34-88,51-79 +63-63,3-63 +8-8,8-61 +30-87,13-84 +38-38,37-50 +24-87,10-93 +6-88,3-4 +19-70,19-69 +36-92,31-37 +17-94,14-18 +56-61,49-74 +30-62,29-62 +20-25,21-87 +12-76,12-12 +94-96,54-95 +1-99,4-77 +40-40,16-41 +72-90,14-73 +8-93,7-92 +10-95,41-98 +29-36,19-51 +79-93,70-94 +11-18,17-95 +3-97,2-98 +52-67,53-53 +13-46,12-45 +5-68,4-94 +16-73,15-15 +11-40,33-33 +76-83,82-85 +28-35,40-92 +53-93,12-83 +2-61,58-60 +4-51,4-4 +18-43,17-56 +93-93,14-93 +95-98,16-96 +32-39,36-41 +9-73,6-9 +55-55,36-56 +20-98,20-99 +2-58,18-99 +5-6,9-75 +21-90,77-82 +88-99,7-89 +21-44,14-38 +82-97,69-82 +12-12,13-87 +46-81,98-99 +15-82,14-83 +12-51,11-12 +3-94,4-94 +9-33,10-86 +20-93,19-50 +27-84,53-83 +79-80,3-79 +73-90,78-89 +96-96,93-98 +93-98,54-93 +33-82,6-33 +1-9,9-27 +14-14,15-63 +4-94,5-95 +16-90,15-90 +47-78,47-79 +4-75,3-75 +3-96,96-99 +38-66,19-92 +16-56,12-14 +37-47,46-47 +4-70,1-70 +26-58,48-72 +38-97,43-93 +76-84,76-78 +13-55,5-14 +66-78,62-92 +42-87,41-86 +3-21,4-62 +10-63,9-63 +9-67,8-67 +10-92,92-92 +96-98,79-95 +19-53,99-99 +4-64,4-63 +46-60,14-59 +2-90,1-89 +16-25,9-11 +8-98,8-97 +3-92,3-91 +65-87,64-88 +4-67,3-4 +66-88,78-87 +14-82,76-81 +12-85,11-84 +30-53,12-52 +53-60,7-61 +73-73,5-73 +55-55,55-57 +14-16,10-15 +23-29,22-22 +64-82,38-63 +38-68,69-69 +9-79,10-56 +43-87,42-88 +30-63,31-62 +25-25,24-83 +31-31,31-75 +2-96,17-99 +31-37,35-36 +3-42,2-43 +82-97,19-82 +38-94,95-97 +1-87,88-99 +47-87,46-84 +4-54,53-55 +80-96,3-81 +5-5,4-98 +35-50,24-36 +7-78,12-94 +45-70,69-73 +32-32,32-63 +61-71,39-72 +35-35,34-35 +80-81,22-82 +34-62,5-34 +19-21,18-19 +24-87,25-87 +34-97,34-98 +5-91,64-92 +19-49,19-98 +27-50,49-51 +10-70,69-71 +10-66,66-66 +66-99,65-66 +3-33,32-53 +23-32,8-34 +90-91,37-90 +41-77,53-76 +57-57,30-57 +35-37,36-48 +46-86,46-67 +60-83,60-61 +15-21,35-56 +60-91,60-91 +12-30,3-29 +89-90,82-92 +24-53,25-53 +13-60,14-61 +44-45,41-48 +24-94,93-94 +28-59,60-85 +94-98,66-93 +11-94,46-93 +89-93,44-89 +72-93,30-72 +22-40,23-35 +14-94,15-97 +51-86,48-76 +90-90,66-91 +58-74,10-71 +27-34,36-42 +1-96,96-97 +25-94,24-24 +9-28,1-10 +14-15,15-92 +5-26,25-25 +98-99,32-98 +12-71,11-11 +77-81,80-96 +30-66,40-65 +26-54,33-53 +17-78,18-18 +9-94,9-10 +87-95,37-88 +15-93,86-92 +30-82,29-82 +58-93,57-71 +20-75,60-67 +1-89,88-88 +19-95,19-94 +13-95,12-14 +34-67,33-67 +35-97,31-35 +54-99,54-98 +6-92,18-36 +31-59,30-30 +1-75,74-81 +44-47,45-45 +26-75,3-26 +35-36,36-71 +7-7,8-29 +32-88,33-74 +11-66,47-65 +29-93,28-94 +79-85,20-78 +8-60,52-60 +39-41,40-80 +4-90,6-90 +49-86,87-87 +8-8,9-99 +7-59,10-92 +30-93,11-30 +16-31,30-30 +33-62,33-33 +10-25,10-24 +15-59,40-85 +16-94,94-95 +1-2,1-99 +77-91,54-78 +10-76,34-72 +2-90,2-89 +26-54,23-58 +3-82,2-99 +20-65,21-21 +42-67,31-43 +18-51,3-19 +9-73,52-72 +19-40,18-41 +53-66,65-72 +3-99,76-97 +73-73,15-73 +11-15,11-11 +20-71,20-72 +60-74,54-75 +6-91,8-90 +35-52,35-53 +17-94,96-96 +8-84,30-65 +21-82,16-22 +84-89,43-90 +41-81,41-80 +39-48,38-94 +13-59,13-60 +39-40,40-86 +11-11,10-90 +76-76,68-76 +26-93,25-27 +78-94,68-77 +88-95,7-88 +3-20,19-74 +88-93,25-65 +6-6,6-51 +12-15,22-97 +18-22,18-19 +65-84,65-84 +37-94,34-35 +8-28,7-36 +53-83,53-55 +3-99,4-79 +2-43,31-43 +52-68,52-84 +12-53,11-11 +69-74,64-75 +4-5,5-98 +11-47,12-21 +61-87,88-89 +3-3,4-98 +24-80,83-86 +2-55,1-54 +92-92,46-92 +14-26,14-27 +3-57,1-4 +57-64,56-92 +78-78,11-78 +48-48,49-90 +79-80,53-80 +7-53,8-47 +48-81,47-75 +28-88,27-87 +12-66,12-66 +29-92,37-92 +10-99,98-99 +58-72,57-73 +24-78,77-83 +1-24,23-83 +30-57,57-82 +39-72,40-46 +8-85,7-86 +24-43,24-40 +1-98,1-99 +35-79,35-80 +54-68,67-76 +6-89,4-90 +99-99,13-69 +5-5,6-42 +3-88,27-89 +91-91,2-92 +32-69,34-68 +53-79,53-85 +21-22,22-88 +10-69,7-11 +3-81,9-68 +7-42,3-86 +52-58,57-69 +44-74,42-74 +3-22,4-18 +20-62,62-92 +84-87,20-85 +3-69,3-3 +40-48,47-67 +9-9,8-99 +3-92,2-10 +20-20,18-20 +5-93,7-93 +52-76,15-77 +14-87,14-88 +43-46,44-49 +2-3,6-92 +28-66,24-82 +2-88,3-87 +43-87,42-92 +2-3,3-95 +45-49,44-50 +30-83,29-82 +24-81,25-57 +76-77,77-77 +18-85,4-90 +57-57,19-57 +9-99,3-10 +45-50,44-50 +3-99,2-79 +38-61,41-62 +63-87,64-87 +1-86,98-98 +51-58,50-54 +31-41,31-31 +20-85,10-19 +8-97,8-8 +16-64,64-89 +1-4,3-92 +12-68,13-69 +45-46,46-90 +84-98,53-84 +32-49,46-48 +55-93,55-92 +3-4,6-21 +6-99,3-7 +52-90,19-88 +7-7,8-85 +53-95,53-53 +69-87,68-88 +33-34,15-34 +22-38,4-39 +67-83,68-68 +52-89,53-68 +30-85,53-84 +26-94,26-95 +11-37,11-96 +86-92,17-93 +33-78,33-78 +9-81,80-80 +46-53,53-53 +44-63,62-98 +1-78,1-78 +31-61,16-29 +16-88,16-96 +9-51,9-50 +34-53,35-54 +18-98,18-18 +31-66,6-16 +28-35,36-52 +98-99,60-97 +25-35,25-25 +60-90,84-89 +13-15,1-21 +2-23,2-24 +2-91,90-93 +25-32,31-80 +55-62,56-63 +24-43,42-91 +63-82,62-84 +5-9,31-87 +47-63,48-76 +62-88,62-87 +26-73,26-72 +25-41,26-42 +10-77,76-76 +82-87,2-83 +1-96,1-97 +9-56,18-55 +2-93,3-92 +58-94,62-97 +71-97,12-69 +15-91,90-90 +49-60,50-60 +73-84,83-83 +57-91,10-58 +12-70,11-69 +3-53,52-67 +13-94,94-96 +90-92,2-68 +4-74,74-82 +16-95,20-97 +17-30,17-31 +41-50,5-28 +18-34,17-98 +37-66,15-99 +2-43,1-1 +1-58,38-70 +5-7,6-24 +38-54,54-63 +6-20,5-7 +72-93,83-90 +89-90,34-89 +8-18,7-14 +1-54,2-53 +45-87,45-46 +6-24,5-5 +5-81,1-3 +4-5,4-97 +38-38,38-70 +4-91,5-98 +52-69,51-53 +18-45,18-44 +99-99,4-99 +32-93,35-93 +25-95,15-30 +35-38,34-75 +25-29,26-64 +30-51,30-52 +36-37,37-40 +14-81,13-15 +19-85,18-85 +15-88,16-16 +21-96,22-95 +29-31,30-68 +22-85,22-48 +19-84,18-79 +63-63,24-64 +51-79,51-80 +21-38,37-44 +19-72,4-18 +30-95,30-94 +1-88,89-98 +4-5,4-83 +95-97,74-95 +2-83,83-83 +89-94,93-98 +27-93,19-28 +43-43,44-88 +86-89,87-87 +1-3,5-66 +98-99,59-97 +4-80,5-21 +5-5,4-85 +15-82,16-97 +49-50,48-49 +8-89,89-90 +14-15,15-25 +42-48,47-49 +9-48,8-10 +21-84,21-83 +97-99,1-97 +22-90,90-95 +18-73,72-76 +87-91,68-80 +21-22,22-44 +5-91,90-97 +25-97,96-98 +8-22,1-7 +4-77,4-30 +43-43,44-64 +43-43,43-88 +39-56,40-57 +15-90,16-71 +25-78,85-97 +27-78,26-79 +61-70,66-67 +8-94,96-98 +11-16,30-89 +9-55,9-54 +53-92,53-54 +1-98,1-99 +29-30,31-76 +81-83,27-80 +75-85,75-85 +18-94,11-12 +2-11,11-93 +1-4,3-84 +2-62,1-61 +2-96,2-95 +1-87,86-88 +71-78,75-75 +96-96,6-97 +6-8,8-44 +64-86,85-99 +3-11,9-11 +31-92,14-92 +8-96,14-97 +6-94,5-93 +5-67,5-66 +10-14,13-92 +14-74,13-73 +21-96,96-97 +56-66,62-65 +7-77,7-77 +88-92,18-73 +9-63,19-93 +1-84,18-84 +12-85,9-12 +28-28,29-94 +18-37,17-36 +20-93,93-94 +33-52,4-60 +35-93,65-82 +27-27,27-67 +22-92,22-77 +45-50,45-64 +8-99,8-98 +1-1,2-90 +4-62,5-63 +22-44,4-45 +92-94,14-95 +3-95,39-94 +29-96,95-95 +21-96,21-95 +65-71,66-91 +88-94,58-89 +13-84,1-83 +13-87,12-86 +29-48,28-36 +6-90,6-89 +37-70,36-38 +20-79,21-80 +32-89,30-89 +8-76,8-8 +52-74,51-75 +6-89,5-89 +59-77,60-76 +35-83,35-35 +52-78,49-98 +39-88,22-35 +27-32,27-27 +13-50,12-13 +61-61,61-61 +13-85,12-14 +17-25,26-95 +57-71,41-73 +50-76,49-49 +87-87,18-88 +95-95,41-96 +53-54,52-53 +6-44,5-98 +1-88,88-93 +13-29,29-81 +9-70,3-6 +92-97,41-92 +14-48,3-5 +2-5,3-20 +39-83,55-83 +83-83,8-83 +14-52,2-15 +7-64,8-63 +50-76,50-77 +1-78,1-77 +3-80,2-2 +96-96,47-96 +99-99,65-99 +52-74,9-53 +25-53,25-54 +18-18,18-73 +47-52,16-48 +83-88,83-88 +3-7,6-75 +8-93,9-76 +57-57,30-59 +61-61,62-96 +73-88,73-88 +17-41,11-40 +49-49,48-69 +1-62,1-54 +15-26,15-45 +6-56,5-5 +4-99,2-3 +15-89,88-93 +22-22,17-22 +12-85,12-12 +89-99,62-90 +53-95,53-95 +4-64,10-74 +6-42,4-6 +11-41,20-22 +49-50,48-49 +11-85,12-84 +32-32,26-31 +40-67,8-39 +17-17,16-93 +12-54,13-55 +43-44,43-43 +33-35,34-93 +2-8,7-64 +30-91,31-91 +70-70,15-74 +36-36,36-80 +23-23,3-24 +18-40,25-40 +36-99,35-45 +45-83,83-84 +90-90,9-91 +24-25,23-23 +12-91,11-90 +30-37,30-38 +24-94,25-98 +30-67,29-29 +4-50,8-51 +63-95,14-85 +14-14,15-32 +2-3,2-86 +27-41,26-42 +6-86,86-86 +34-70,34-69 +89-97,2-90 +59-75,59-74 +58-94,58-93 +6-75,2-75 +44-73,43-45 +50-61,50-70 +6-92,7-7 +34-88,35-92 +2-96,97-99 +10-91,10-91 +1-94,2-23 +21-40,21-39 +19-87,87-95 +6-75,2-18 +22-72,15-73 +9-96,42-96 +16-16,16-87 +27-84,26-83 +94-97,2-94 +45-58,56-56 +10-16,22-71 +34-55,43-78 +94-98,9-99 +1-90,89-95 +1-84,29-85 +13-70,70-71 +58-86,4-87 +1-41,41-55 +36-71,37-72 +65-68,45-69 +30-30,31-31 +35-69,35-68 +58-94,58-95 +10-94,93-98 +53-94,23-54 +47-51,48-48 +7-86,7-7 +28-44,23-29 +7-73,6-7 +5-88,5-88 +10-92,9-9 +18-71,17-72 +7-16,15-78 +41-42,42-78 +9-32,8-96 +51-52,32-52 +24-76,23-87 +2-99,2-2 +95-95,1-95 +42-92,92-92 +21-85,88-93 +75-75,1-75 +70-71,3-72 +39-87,32-42 +1-1,3-85 +55-57,56-70 +16-39,15-16 +25-26,26-87 +14-79,33-73 +53-64,14-53 +96-99,2-97 +32-91,33-95 +85-92,25-86 +4-96,1-3 +69-98,51-69 +24-76,75-75 +60-93,68-85 +51-51,52-90 +25-30,30-34 +10-90,11-89 +1-96,1-97 +42-61,42-62 +30-71,29-31 +26-35,17-36 +7-84,7-83 +18-25,18-24 +9-86,21-87 +3-27,26-51 +56-97,55-56 +47-74,48-96 +5-35,6-92 +35-70,27-37 +2-2,2-90 +18-64,18-63 +1-3,3-78 +14-36,13-42 +12-53,19-58 +55-91,56-62 +14-24,23-64 +9-32,33-86 +40-64,40-63 +25-92,25-92 +49-51,55-69 +13-46,13-45 +46-75,45-76 +2-77,2-76 +21-88,3-96 +7-12,12-92 +46-91,45-92 +7-78,57-79 +2-2,1-97 +78-87,8-79 +28-75,27-74 +5-81,80-83 +30-63,29-64 +69-80,32-70 +2-78,1-79 +13-15,14-74 +79-84,83-84 +68-69,11-69 +9-43,9-44 +92-99,92-92 +90-97,35-90 +13-68,13-13 +3-87,1-3 +47-52,48-53 +27-94,8-28 +46-93,44-52 +8-56,8-95 +50-57,44-58 +4-18,2-2 +3-77,76-76 +17-17,18-83 +2-93,20-23 +94-94,5-95 +73-82,3-74 +31-49,48-81 +40-43,9-41 +74-74,74-85 +10-95,3-95 +14-22,21-78 +2-96,1-4 +26-66,11-66 +48-48,6-49 +12-86,85-94 +81-83,80-83 +3-29,30-77 +55-90,47-91 +5-83,1-6 +7-19,6-6 +36-39,37-43 +11-60,17-45 +8-83,3-21 +11-11,11-79 +25-31,35-97 +30-46,46-47 +24-24,25-78 +6-96,5-7 +73-83,13-84 +15-99,14-82 +84-98,84-99 +7-61,42-61 +2-37,37-37 +9-9,9-34 +40-42,41-85 +11-33,10-32 +2-9,8-64 +92-92,86-93 +7-38,7-37 +16-92,2-17 +2-3,3-50 +1-95,2-96 +38-87,67-87 +5-21,21-22 +38-47,24-70 +4-44,3-81 +84-85,1-84 +22-99,21-96 +70-72,59-72 +15-96,16-96 +6-76,6-6 +83-83,78-83 +26-37,25-25 +9-43,3-43 +81-81,80-80 +47-51,49-53 +97-97,29-98 +23-47,46-46 +28-84,29-85 +1-94,1-95 +14-72,13-15 +61-95,4-78 +9-89,9-9 +10-12,11-90 +50-54,19-50 +97-98,9-98 +15-94,16-28 +77-77,25-76 +20-74,19-28 +1-99,2-41 +29-79,79-79 +30-88,30-87 +24-98,75-91 +15-65,14-65 +67-77,67-78 +5-86,2-4 +3-81,4-82 +40-90,39-91 +19-51,19-19 +48-67,42-67 +17-60,24-47 +27-81,18-82 +48-87,66-87 +35-96,34-89 +16-23,22-50 +7-85,85-85 +7-43,6-42 +26-75,27-27 +6-10,9-64 +18-38,14-39 +45-85,84-89 +30-98,98-98 +84-93,14-85 +8-57,8-56 +24-91,23-92 +79-93,79-94 +37-60,16-37 +2-81,5-80 +80-92,81-99 +5-40,5-40 +10-44,44-48 +5-15,14-42 +8-68,2-6 +30-78,53-77 +81-88,29-80 +98-99,6-98 +42-99,98-98 +63-63,17-63 +41-98,41-97 +1-99,2-98 diff --git a/2022/day4/p1/test.text b/2022/day4/p1/test.text new file mode 100644 index 0000000..99a66c5 --- /dev/null +++ b/2022/day4/p1/test.text @@ -0,0 +1,6 @@ +2-4,6-8 +2-3,4-5 +5-7,7-9 +2-8,3-7 +6-6,4-6 +2-6,4-8 \ No newline at end of file diff --git a/2022/day4/p2/day4p2.c b/2022/day4/p2/day4p2.c new file mode 100644 index 0000000..e53d261 --- /dev/null +++ b/2022/day4/p2/day4p2.c @@ -0,0 +1,99 @@ +#include +#include +#include +#include + + +bool Overlap(int * Ranges[4]) +{ + + for (int * x = Ranges[0]; x <= Ranges[1]; x++) + { + for (int * y = Ranges[2]; y <= Ranges[3]; y++) + { + if (x == y) + { + return true; + } + } + } + + return false; + +} + + +int main() +{ + + FILE * File; + + File = fopen("input.text", "r"); + + + char * Line = malloc(256); + + int Total = 0; + + + char ** Elves; + + Elves = malloc(2); + + int * ElfRanges[4]; + //exit(1); + while(fgets(Line, 256, File) != NULL) + { + + for (int i = 0; i < 4; i++) + ElfRanges[i] = NULL; + + + // Splits the line by the comma in the middle of the line to get each elf's range + Elves[0] = strtok(Line, ","); + Elves[1] = strtok(NULL, ","); + + + // Loop through both elves + for (int a = 0; a < 2; a++) + { + + printf(Elves[a]); + printf(" "); + + char *Task = strtok(Elves[a], "-"); + + while (Task != NULL) + { + + for (int i = 0; i < 4; i++) + { + if (ElfRanges[i] == NULL) + { + ElfRanges[i] = (int *) strtol(Task, NULL, 10); + break; + } + } + + Task = strtok(NULL, "-"); + + } + + } + + printf("Elf Pair Ranges: "); + for (int i = 0; i < 4; i++) + printf("%d ", ElfRanges[i]); + + printf("\n\n"); + + + if (Overlap(ElfRanges)) + Total++; + + } + + printf("Total Overlaps: %d\n", Total); + + fclose(File); +} \ No newline at end of file diff --git a/2022/day4/p2/input.text b/2022/day4/p2/input.text new file mode 100644 index 0000000..29559d0 --- /dev/null +++ b/2022/day4/p2/input.text @@ -0,0 +1,1000 @@ +7-50,8-33 +76-83,77-87 +68-73,55-68 +13-37,12-25 +7-7,12-96 +9-22,10-12 +52-77,12-52 +43-83,44-60 +33-90,78-89 +10-10,9-50 +6-89,7-98 +10-11,11-60 +8-75,7-94 +23-23,23-23 +65-78,23-64 +5-97,96-96 +93-96,76-80 +15-47,14-16 +16-17,17-43 +28-39,8-41 +40-70,40-41 +32-89,57-88 +39-76,40-64 +13-96,55-69 +56-80,57-81 +57-82,58-82 +57-57,44-58 +33-54,33-53 +9-91,91-96 +58-68,33-57 +6-65,4-5 +2-88,3-88 +23-69,23-98 +1-99,2-60 +15-70,15-71 +45-67,2-68 +37-64,5-59 +3-79,2-79 +38-83,38-83 +4-4,5-98 +43-74,43-75 +4-99,2-5 +31-42,42-42 +24-28,27-30 +2-80,2-81 +33-66,30-62 +80-93,80-80 +30-81,81-93 +17-96,16-84 +48-86,47-62 +62-74,61-74 +8-37,37-67 +22-98,21-98 +29-29,29-58 +27-85,5-85 +95-98,1-96 +99-99,24-97 +19-22,21-83 +34-82,82-83 +13-76,31-92 +44-86,77-85 +15-47,15-47 +25-54,26-55 +20-38,3-37 +3-15,4-74 +78-78,19-78 +15-25,18-24 +71-87,86-86 +9-99,99-99 +25-68,24-24 +42-89,31-42 +47-67,48-74 +34-61,20-34 +2-80,1-3 +5-6,5-74 +4-67,5-53 +20-20,21-88 +7-48,5-8 +14-62,14-14 +49-79,42-78 +23-28,22-22 +21-87,21-86 +57-95,57-95 +36-53,12-77 +12-46,13-57 +52-84,85-88 +41-73,73-73 +84-94,64-95 +93-94,12-94 +1-99,1-99 +6-6,6-70 +3-99,7-98 +96-99,3-97 +18-84,17-85 +56-99,8-57 +7-83,8-84 +51-82,50-83 +7-77,7-8 +58-76,59-77 +13-79,14-79 +7-7,8-85 +15-17,16-28 +17-79,16-79 +74-74,1-73 +28-28,28-65 +59-62,59-66 +48-69,46-47 +14-23,3-24 +35-83,83-98 +55-84,55-83 +10-20,7-19 +13-88,21-88 +62-62,62-85 +32-32,33-33 +49-86,15-90 +2-3,2-38 +1-1,2-93 +40-52,22-41 +41-82,82-92 +42-79,41-59 +53-99,52-99 +52-68,6-55 +30-65,31-65 +56-90,8-91 +83-93,17-82 +5-84,4-70 +56-56,56-97 +5-44,4-81 +85-91,90-90 +23-51,22-22 +12-15,14-68 +28-28,28-84 +1-6,10-32 +5-86,50-88 +8-20,19-19 +62-80,62-81 +50-77,76-97 +3-97,3-96 +14-77,37-39 +82-84,29-82 +6-31,1-24 +62-71,46-61 +13-13,11-15 +3-9,4-17 +32-97,11-98 +89-90,23-89 +51-59,48-60 +53-74,53-74 +30-30,29-71 +8-70,8-9 +65-65,65-66 +34-85,96-99 +36-40,36-36 +42-42,42-72 +2-43,33-69 +4-31,30-77 +69-84,70-92 +26-95,27-98 +3-3,6-89 +34-88,51-79 +63-63,3-63 +8-8,8-61 +30-87,13-84 +38-38,37-50 +24-87,10-93 +6-88,3-4 +19-70,19-69 +36-92,31-37 +17-94,14-18 +56-61,49-74 +30-62,29-62 +20-25,21-87 +12-76,12-12 +94-96,54-95 +1-99,4-77 +40-40,16-41 +72-90,14-73 +8-93,7-92 +10-95,41-98 +29-36,19-51 +79-93,70-94 +11-18,17-95 +3-97,2-98 +52-67,53-53 +13-46,12-45 +5-68,4-94 +16-73,15-15 +11-40,33-33 +76-83,82-85 +28-35,40-92 +53-93,12-83 +2-61,58-60 +4-51,4-4 +18-43,17-56 +93-93,14-93 +95-98,16-96 +32-39,36-41 +9-73,6-9 +55-55,36-56 +20-98,20-99 +2-58,18-99 +5-6,9-75 +21-90,77-82 +88-99,7-89 +21-44,14-38 +82-97,69-82 +12-12,13-87 +46-81,98-99 +15-82,14-83 +12-51,11-12 +3-94,4-94 +9-33,10-86 +20-93,19-50 +27-84,53-83 +79-80,3-79 +73-90,78-89 +96-96,93-98 +93-98,54-93 +33-82,6-33 +1-9,9-27 +14-14,15-63 +4-94,5-95 +16-90,15-90 +47-78,47-79 +4-75,3-75 +3-96,96-99 +38-66,19-92 +16-56,12-14 +37-47,46-47 +4-70,1-70 +26-58,48-72 +38-97,43-93 +76-84,76-78 +13-55,5-14 +66-78,62-92 +42-87,41-86 +3-21,4-62 +10-63,9-63 +9-67,8-67 +10-92,92-92 +96-98,79-95 +19-53,99-99 +4-64,4-63 +46-60,14-59 +2-90,1-89 +16-25,9-11 +8-98,8-97 +3-92,3-91 +65-87,64-88 +4-67,3-4 +66-88,78-87 +14-82,76-81 +12-85,11-84 +30-53,12-52 +53-60,7-61 +73-73,5-73 +55-55,55-57 +14-16,10-15 +23-29,22-22 +64-82,38-63 +38-68,69-69 +9-79,10-56 +43-87,42-88 +30-63,31-62 +25-25,24-83 +31-31,31-75 +2-96,17-99 +31-37,35-36 +3-42,2-43 +82-97,19-82 +38-94,95-97 +1-87,88-99 +47-87,46-84 +4-54,53-55 +80-96,3-81 +5-5,4-98 +35-50,24-36 +7-78,12-94 +45-70,69-73 +32-32,32-63 +61-71,39-72 +35-35,34-35 +80-81,22-82 +34-62,5-34 +19-21,18-19 +24-87,25-87 +34-97,34-98 +5-91,64-92 +19-49,19-98 +27-50,49-51 +10-70,69-71 +10-66,66-66 +66-99,65-66 +3-33,32-53 +23-32,8-34 +90-91,37-90 +41-77,53-76 +57-57,30-57 +35-37,36-48 +46-86,46-67 +60-83,60-61 +15-21,35-56 +60-91,60-91 +12-30,3-29 +89-90,82-92 +24-53,25-53 +13-60,14-61 +44-45,41-48 +24-94,93-94 +28-59,60-85 +94-98,66-93 +11-94,46-93 +89-93,44-89 +72-93,30-72 +22-40,23-35 +14-94,15-97 +51-86,48-76 +90-90,66-91 +58-74,10-71 +27-34,36-42 +1-96,96-97 +25-94,24-24 +9-28,1-10 +14-15,15-92 +5-26,25-25 +98-99,32-98 +12-71,11-11 +77-81,80-96 +30-66,40-65 +26-54,33-53 +17-78,18-18 +9-94,9-10 +87-95,37-88 +15-93,86-92 +30-82,29-82 +58-93,57-71 +20-75,60-67 +1-89,88-88 +19-95,19-94 +13-95,12-14 +34-67,33-67 +35-97,31-35 +54-99,54-98 +6-92,18-36 +31-59,30-30 +1-75,74-81 +44-47,45-45 +26-75,3-26 +35-36,36-71 +7-7,8-29 +32-88,33-74 +11-66,47-65 +29-93,28-94 +79-85,20-78 +8-60,52-60 +39-41,40-80 +4-90,6-90 +49-86,87-87 +8-8,9-99 +7-59,10-92 +30-93,11-30 +16-31,30-30 +33-62,33-33 +10-25,10-24 +15-59,40-85 +16-94,94-95 +1-2,1-99 +77-91,54-78 +10-76,34-72 +2-90,2-89 +26-54,23-58 +3-82,2-99 +20-65,21-21 +42-67,31-43 +18-51,3-19 +9-73,52-72 +19-40,18-41 +53-66,65-72 +3-99,76-97 +73-73,15-73 +11-15,11-11 +20-71,20-72 +60-74,54-75 +6-91,8-90 +35-52,35-53 +17-94,96-96 +8-84,30-65 +21-82,16-22 +84-89,43-90 +41-81,41-80 +39-48,38-94 +13-59,13-60 +39-40,40-86 +11-11,10-90 +76-76,68-76 +26-93,25-27 +78-94,68-77 +88-95,7-88 +3-20,19-74 +88-93,25-65 +6-6,6-51 +12-15,22-97 +18-22,18-19 +65-84,65-84 +37-94,34-35 +8-28,7-36 +53-83,53-55 +3-99,4-79 +2-43,31-43 +52-68,52-84 +12-53,11-11 +69-74,64-75 +4-5,5-98 +11-47,12-21 +61-87,88-89 +3-3,4-98 +24-80,83-86 +2-55,1-54 +92-92,46-92 +14-26,14-27 +3-57,1-4 +57-64,56-92 +78-78,11-78 +48-48,49-90 +79-80,53-80 +7-53,8-47 +48-81,47-75 +28-88,27-87 +12-66,12-66 +29-92,37-92 +10-99,98-99 +58-72,57-73 +24-78,77-83 +1-24,23-83 +30-57,57-82 +39-72,40-46 +8-85,7-86 +24-43,24-40 +1-98,1-99 +35-79,35-80 +54-68,67-76 +6-89,4-90 +99-99,13-69 +5-5,6-42 +3-88,27-89 +91-91,2-92 +32-69,34-68 +53-79,53-85 +21-22,22-88 +10-69,7-11 +3-81,9-68 +7-42,3-86 +52-58,57-69 +44-74,42-74 +3-22,4-18 +20-62,62-92 +84-87,20-85 +3-69,3-3 +40-48,47-67 +9-9,8-99 +3-92,2-10 +20-20,18-20 +5-93,7-93 +52-76,15-77 +14-87,14-88 +43-46,44-49 +2-3,6-92 +28-66,24-82 +2-88,3-87 +43-87,42-92 +2-3,3-95 +45-49,44-50 +30-83,29-82 +24-81,25-57 +76-77,77-77 +18-85,4-90 +57-57,19-57 +9-99,3-10 +45-50,44-50 +3-99,2-79 +38-61,41-62 +63-87,64-87 +1-86,98-98 +51-58,50-54 +31-41,31-31 +20-85,10-19 +8-97,8-8 +16-64,64-89 +1-4,3-92 +12-68,13-69 +45-46,46-90 +84-98,53-84 +32-49,46-48 +55-93,55-92 +3-4,6-21 +6-99,3-7 +52-90,19-88 +7-7,8-85 +53-95,53-53 +69-87,68-88 +33-34,15-34 +22-38,4-39 +67-83,68-68 +52-89,53-68 +30-85,53-84 +26-94,26-95 +11-37,11-96 +86-92,17-93 +33-78,33-78 +9-81,80-80 +46-53,53-53 +44-63,62-98 +1-78,1-78 +31-61,16-29 +16-88,16-96 +9-51,9-50 +34-53,35-54 +18-98,18-18 +31-66,6-16 +28-35,36-52 +98-99,60-97 +25-35,25-25 +60-90,84-89 +13-15,1-21 +2-23,2-24 +2-91,90-93 +25-32,31-80 +55-62,56-63 +24-43,42-91 +63-82,62-84 +5-9,31-87 +47-63,48-76 +62-88,62-87 +26-73,26-72 +25-41,26-42 +10-77,76-76 +82-87,2-83 +1-96,1-97 +9-56,18-55 +2-93,3-92 +58-94,62-97 +71-97,12-69 +15-91,90-90 +49-60,50-60 +73-84,83-83 +57-91,10-58 +12-70,11-69 +3-53,52-67 +13-94,94-96 +90-92,2-68 +4-74,74-82 +16-95,20-97 +17-30,17-31 +41-50,5-28 +18-34,17-98 +37-66,15-99 +2-43,1-1 +1-58,38-70 +5-7,6-24 +38-54,54-63 +6-20,5-7 +72-93,83-90 +89-90,34-89 +8-18,7-14 +1-54,2-53 +45-87,45-46 +6-24,5-5 +5-81,1-3 +4-5,4-97 +38-38,38-70 +4-91,5-98 +52-69,51-53 +18-45,18-44 +99-99,4-99 +32-93,35-93 +25-95,15-30 +35-38,34-75 +25-29,26-64 +30-51,30-52 +36-37,37-40 +14-81,13-15 +19-85,18-85 +15-88,16-16 +21-96,22-95 +29-31,30-68 +22-85,22-48 +19-84,18-79 +63-63,24-64 +51-79,51-80 +21-38,37-44 +19-72,4-18 +30-95,30-94 +1-88,89-98 +4-5,4-83 +95-97,74-95 +2-83,83-83 +89-94,93-98 +27-93,19-28 +43-43,44-88 +86-89,87-87 +1-3,5-66 +98-99,59-97 +4-80,5-21 +5-5,4-85 +15-82,16-97 +49-50,48-49 +8-89,89-90 +14-15,15-25 +42-48,47-49 +9-48,8-10 +21-84,21-83 +97-99,1-97 +22-90,90-95 +18-73,72-76 +87-91,68-80 +21-22,22-44 +5-91,90-97 +25-97,96-98 +8-22,1-7 +4-77,4-30 +43-43,44-64 +43-43,43-88 +39-56,40-57 +15-90,16-71 +25-78,85-97 +27-78,26-79 +61-70,66-67 +8-94,96-98 +11-16,30-89 +9-55,9-54 +53-92,53-54 +1-98,1-99 +29-30,31-76 +81-83,27-80 +75-85,75-85 +18-94,11-12 +2-11,11-93 +1-4,3-84 +2-62,1-61 +2-96,2-95 +1-87,86-88 +71-78,75-75 +96-96,6-97 +6-8,8-44 +64-86,85-99 +3-11,9-11 +31-92,14-92 +8-96,14-97 +6-94,5-93 +5-67,5-66 +10-14,13-92 +14-74,13-73 +21-96,96-97 +56-66,62-65 +7-77,7-77 +88-92,18-73 +9-63,19-93 +1-84,18-84 +12-85,9-12 +28-28,29-94 +18-37,17-36 +20-93,93-94 +33-52,4-60 +35-93,65-82 +27-27,27-67 +22-92,22-77 +45-50,45-64 +8-99,8-98 +1-1,2-90 +4-62,5-63 +22-44,4-45 +92-94,14-95 +3-95,39-94 +29-96,95-95 +21-96,21-95 +65-71,66-91 +88-94,58-89 +13-84,1-83 +13-87,12-86 +29-48,28-36 +6-90,6-89 +37-70,36-38 +20-79,21-80 +32-89,30-89 +8-76,8-8 +52-74,51-75 +6-89,5-89 +59-77,60-76 +35-83,35-35 +52-78,49-98 +39-88,22-35 +27-32,27-27 +13-50,12-13 +61-61,61-61 +13-85,12-14 +17-25,26-95 +57-71,41-73 +50-76,49-49 +87-87,18-88 +95-95,41-96 +53-54,52-53 +6-44,5-98 +1-88,88-93 +13-29,29-81 +9-70,3-6 +92-97,41-92 +14-48,3-5 +2-5,3-20 +39-83,55-83 +83-83,8-83 +14-52,2-15 +7-64,8-63 +50-76,50-77 +1-78,1-77 +3-80,2-2 +96-96,47-96 +99-99,65-99 +52-74,9-53 +25-53,25-54 +18-18,18-73 +47-52,16-48 +83-88,83-88 +3-7,6-75 +8-93,9-76 +57-57,30-59 +61-61,62-96 +73-88,73-88 +17-41,11-40 +49-49,48-69 +1-62,1-54 +15-26,15-45 +6-56,5-5 +4-99,2-3 +15-89,88-93 +22-22,17-22 +12-85,12-12 +89-99,62-90 +53-95,53-95 +4-64,10-74 +6-42,4-6 +11-41,20-22 +49-50,48-49 +11-85,12-84 +32-32,26-31 +40-67,8-39 +17-17,16-93 +12-54,13-55 +43-44,43-43 +33-35,34-93 +2-8,7-64 +30-91,31-91 +70-70,15-74 +36-36,36-80 +23-23,3-24 +18-40,25-40 +36-99,35-45 +45-83,83-84 +90-90,9-91 +24-25,23-23 +12-91,11-90 +30-37,30-38 +24-94,25-98 +30-67,29-29 +4-50,8-51 +63-95,14-85 +14-14,15-32 +2-3,2-86 +27-41,26-42 +6-86,86-86 +34-70,34-69 +89-97,2-90 +59-75,59-74 +58-94,58-93 +6-75,2-75 +44-73,43-45 +50-61,50-70 +6-92,7-7 +34-88,35-92 +2-96,97-99 +10-91,10-91 +1-94,2-23 +21-40,21-39 +19-87,87-95 +6-75,2-18 +22-72,15-73 +9-96,42-96 +16-16,16-87 +27-84,26-83 +94-97,2-94 +45-58,56-56 +10-16,22-71 +34-55,43-78 +94-98,9-99 +1-90,89-95 +1-84,29-85 +13-70,70-71 +58-86,4-87 +1-41,41-55 +36-71,37-72 +65-68,45-69 +30-30,31-31 +35-69,35-68 +58-94,58-95 +10-94,93-98 +53-94,23-54 +47-51,48-48 +7-86,7-7 +28-44,23-29 +7-73,6-7 +5-88,5-88 +10-92,9-9 +18-71,17-72 +7-16,15-78 +41-42,42-78 +9-32,8-96 +51-52,32-52 +24-76,23-87 +2-99,2-2 +95-95,1-95 +42-92,92-92 +21-85,88-93 +75-75,1-75 +70-71,3-72 +39-87,32-42 +1-1,3-85 +55-57,56-70 +16-39,15-16 +25-26,26-87 +14-79,33-73 +53-64,14-53 +96-99,2-97 +32-91,33-95 +85-92,25-86 +4-96,1-3 +69-98,51-69 +24-76,75-75 +60-93,68-85 +51-51,52-90 +25-30,30-34 +10-90,11-89 +1-96,1-97 +42-61,42-62 +30-71,29-31 +26-35,17-36 +7-84,7-83 +18-25,18-24 +9-86,21-87 +3-27,26-51 +56-97,55-56 +47-74,48-96 +5-35,6-92 +35-70,27-37 +2-2,2-90 +18-64,18-63 +1-3,3-78 +14-36,13-42 +12-53,19-58 +55-91,56-62 +14-24,23-64 +9-32,33-86 +40-64,40-63 +25-92,25-92 +49-51,55-69 +13-46,13-45 +46-75,45-76 +2-77,2-76 +21-88,3-96 +7-12,12-92 +46-91,45-92 +7-78,57-79 +2-2,1-97 +78-87,8-79 +28-75,27-74 +5-81,80-83 +30-63,29-64 +69-80,32-70 +2-78,1-79 +13-15,14-74 +79-84,83-84 +68-69,11-69 +9-43,9-44 +92-99,92-92 +90-97,35-90 +13-68,13-13 +3-87,1-3 +47-52,48-53 +27-94,8-28 +46-93,44-52 +8-56,8-95 +50-57,44-58 +4-18,2-2 +3-77,76-76 +17-17,18-83 +2-93,20-23 +94-94,5-95 +73-82,3-74 +31-49,48-81 +40-43,9-41 +74-74,74-85 +10-95,3-95 +14-22,21-78 +2-96,1-4 +26-66,11-66 +48-48,6-49 +12-86,85-94 +81-83,80-83 +3-29,30-77 +55-90,47-91 +5-83,1-6 +7-19,6-6 +36-39,37-43 +11-60,17-45 +8-83,3-21 +11-11,11-79 +25-31,35-97 +30-46,46-47 +24-24,25-78 +6-96,5-7 +73-83,13-84 +15-99,14-82 +84-98,84-99 +7-61,42-61 +2-37,37-37 +9-9,9-34 +40-42,41-85 +11-33,10-32 +2-9,8-64 +92-92,86-93 +7-38,7-37 +16-92,2-17 +2-3,3-50 +1-95,2-96 +38-87,67-87 +5-21,21-22 +38-47,24-70 +4-44,3-81 +84-85,1-84 +22-99,21-96 +70-72,59-72 +15-96,16-96 +6-76,6-6 +83-83,78-83 +26-37,25-25 +9-43,3-43 +81-81,80-80 +47-51,49-53 +97-97,29-98 +23-47,46-46 +28-84,29-85 +1-94,1-95 +14-72,13-15 +61-95,4-78 +9-89,9-9 +10-12,11-90 +50-54,19-50 +97-98,9-98 +15-94,16-28 +77-77,25-76 +20-74,19-28 +1-99,2-41 +29-79,79-79 +30-88,30-87 +24-98,75-91 +15-65,14-65 +67-77,67-78 +5-86,2-4 +3-81,4-82 +40-90,39-91 +19-51,19-19 +48-67,42-67 +17-60,24-47 +27-81,18-82 +48-87,66-87 +35-96,34-89 +16-23,22-50 +7-85,85-85 +7-43,6-42 +26-75,27-27 +6-10,9-64 +18-38,14-39 +45-85,84-89 +30-98,98-98 +84-93,14-85 +8-57,8-56 +24-91,23-92 +79-93,79-94 +37-60,16-37 +2-81,5-80 +80-92,81-99 +5-40,5-40 +10-44,44-48 +5-15,14-42 +8-68,2-6 +30-78,53-77 +81-88,29-80 +98-99,6-98 +42-99,98-98 +63-63,17-63 +41-98,41-97 +1-99,2-98 diff --git a/2022/day4/p2/test.text b/2022/day4/p2/test.text new file mode 100644 index 0000000..99a66c5 --- /dev/null +++ b/2022/day4/p2/test.text @@ -0,0 +1,6 @@ +2-4,6-8 +2-3,4-5 +5-7,7-9 +2-8,3-7 +6-6,4-6 +2-6,4-8 \ No newline at end of file diff --git a/2022/day5/p1/day5p1.c b/2022/day5/p1/day5p1.c new file mode 100644 index 0000000..685fee5 --- /dev/null +++ b/2022/day5/p1/day5p1.c @@ -0,0 +1,272 @@ +#include +#include +#include +#include + +struct Node { + char Letter; + struct Node * Next; +}; + + +int CountLines(char *FileName) +{ + char *Line = malloc(256); + int LineCount = 0; + + FILE *File; + File = fopen(FileName, "r"); + + while (fgets(Line, 256, File) != NULL) + { + LineCount++; + } + + fclose(File); + + return LineCount; +} + + +void GetLine(char *FileName, int LineNumber, char* Line) +{ + + int CurrentLineNumber = 1; + + FILE *File; + File = fopen(FileName, "r"); + + while (fgets(Line, 256, File) != NULL) + { + + if (CurrentLineNumber == LineNumber) + break; + + else + CurrentLineNumber++; + + } + + fclose(File); + +} + + + + +int main() +{ + + char FileName[] = "input.text"; + + int CollumnNumberLine; + + int Collumns; + + int CurrentLine = 1; + char * Line = malloc(256); + + do + { + + GetLine(FileName, CurrentLine, Line); + + + if (isdigit(Line[1])) + { + CollumnNumberLine = CurrentLine; + break; + } + else + CurrentLine++; + + } + while (Line != NULL); + + + + Collumns = strlen(Line) / 4; + + + + + + + // Parsing the starting positions + struct Node * Stacks[Collumns]; + + for (int i = 0; i < Collumns; i++) + { + struct Node * TempNode = malloc(sizeof(char) + sizeof(void *)); + TempNode->Letter = '0'; + TempNode->Next = NULL; + + Stacks[i] = TempNode; + } + + + int CurrentCollumn = 0; // Actual Collumn Number is this +1 + int Place; + // char * CollumnContent; + char ContainerLetter; + + while (CurrentCollumn < Collumns) + { + CurrentLine = CollumnNumberLine-1; + Place = (CurrentCollumn * 4) + 1; + + while (CurrentLine > 0) + { + GetLine(FileName, CurrentLine, Line); + + ContainerLetter = Line[Place]; + + if (ContainerLetter == ' ') + break; + + struct Node * Current = Stacks[CurrentCollumn]; + + while (Current->Next != NULL) + Current = Current->Next; + + + if (Current->Letter == '0') + { + Current->Letter = ContainerLetter; + } + else if (Current->Letter != ContainerLetter) + { + struct Node * TempNode = malloc(sizeof(char) + sizeof(void *)); + TempNode->Letter = ContainerLetter; + TempNode->Next = NULL; + + Current->Next = TempNode; + } + + CurrentLine--; + } + + + CurrentCollumn++; + } + + + + // Parsing the movements + CurrentLine = CollumnNumberLine + 2; // Line where movements start + + int Lines = CountLines(FileName); + + // Move the crates + while (CurrentLine <= Lines) + { + GetLine(FileName, CurrentLine, Line); + + int CurrentToken = 0; // Delimiter Token + + // The numbers in the movement line, move x number of crates from a to b + int Number; // Number of containers to move + int Src; // Source + int Dest; // Destination + + char * Token = strtok(Line, " "); + + while (Token != NULL) + { + if (CurrentToken == 1) + Number = atoi(Token); + + else if (CurrentToken == 3) + Src = atoi(Token) - 1; + + else if (CurrentToken == 5) + Dest = atoi(Token) - 1; + + Token = strtok(NULL, " "); + + CurrentToken++; + } + + // Containers that are being moved + char TempContainers[Number]; + + // Take x off of a and put into letters TempContainers + for (int i = 0; i < Number; i++) + { + struct Node * Current = Stacks[Src]; + + while (Current != NULL) + { + if (Current->Next == NULL) + { + TempContainers[i] = Current->Letter; + Stacks[Src] = NULL; + break; + } + else if (Current->Next->Next == NULL) + { + TempContainers[i] = Current->Next->Letter; + Current->Next = NULL; + break; + } + + Current = Current->Next; + } + + } + + // Take the letters from TempContainers and put them in b + for (int i = 0; i < Number; i++) + { + struct Node * Current = Stacks[Dest]; + + while (1) + { + if (Current == NULL) + { + struct Node * TempNode = malloc(sizeof(char) + sizeof(void *)); + TempNode->Letter = TempContainers[i]; + TempNode->Next = NULL; + + Stacks[Dest] = TempNode; + break; + } + else if (Current->Next == NULL) + { + struct Node * TempNode = malloc(sizeof(char) + sizeof(void *)); + TempNode->Letter = TempContainers[i]; + TempNode->Next = NULL; + + Current->Next = TempNode; + break; + } + + Current = Current->Next; + } + } + + CurrentLine++; + } + + + printf("\nTop containers of each stack: "); + + for (int i = 0; i < Collumns; i++) + { + struct Node * Current = Stacks[i]; + + while (Current->Next != NULL) + { + Current = Current->Next; + } + + printf("%c", Current->Letter); + } + printf("\n"); + + + // Should print out the stacks with the top character CMZ + + return 0; + +} \ No newline at end of file diff --git a/2022/day5/p1/input.text b/2022/day5/p1/input.text new file mode 100644 index 0000000..adc0bbc --- /dev/null +++ b/2022/day5/p1/input.text @@ -0,0 +1,512 @@ + [H] [D] [P] +[W] [B] [C] [Z] [D] +[T] [J] [T] [J] [D] [J] +[H] [Z] [H] [H] [W] [S] [M] +[P] [F] [R] [P] [Z] [F] [W] [F] +[J] [V] [T] [N] [F] [G] [Z] [S] [S] +[C] [R] [P] [S] [V] [M] [V] [D] [Z] +[F] [G] [H] [Z] [N] [P] [M] [N] [D] + 1 2 3 4 5 6 7 8 9 + +move 2 from 8 to 2 +move 3 from 9 to 2 +move 1 from 3 to 8 +move 5 from 1 to 7 +move 2 from 9 to 2 +move 8 from 2 to 4 +move 6 from 7 to 2 +move 2 from 1 to 7 +move 4 from 5 to 9 +move 4 from 5 to 6 +move 1 from 8 to 3 +move 1 from 8 to 5 +move 2 from 9 to 8 +move 8 from 6 to 4 +move 4 from 3 to 6 +move 10 from 2 to 3 +move 1 from 5 to 1 +move 1 from 7 to 4 +move 2 from 9 to 8 +move 18 from 4 to 8 +move 1 from 1 to 6 +move 4 from 7 to 3 +move 12 from 8 to 4 +move 4 from 7 to 9 +move 5 from 6 to 9 +move 2 from 2 to 7 +move 3 from 9 to 5 +move 3 from 5 to 9 +move 1 from 2 to 8 +move 10 from 3 to 1 +move 2 from 7 to 8 +move 10 from 1 to 9 +move 1 from 3 to 5 +move 16 from 9 to 8 +move 1 from 3 to 2 +move 3 from 8 to 3 +move 1 from 5 to 9 +move 3 from 6 to 7 +move 2 from 7 to 2 +move 1 from 3 to 8 +move 5 from 4 to 1 +move 4 from 9 to 5 +move 2 from 2 to 5 +move 2 from 1 to 9 +move 23 from 8 to 4 +move 6 from 5 to 2 +move 5 from 2 to 6 +move 1 from 9 to 6 +move 2 from 2 to 4 +move 35 from 4 to 9 +move 1 from 6 to 1 +move 2 from 8 to 7 +move 1 from 6 to 8 +move 3 from 1 to 7 +move 1 from 7 to 1 +move 3 from 6 to 2 +move 4 from 3 to 7 +move 6 from 7 to 9 +move 1 from 6 to 9 +move 1 from 8 to 1 +move 2 from 2 to 9 +move 2 from 8 to 2 +move 3 from 7 to 3 +move 2 from 1 to 9 +move 5 from 9 to 3 +move 1 from 4 to 2 +move 1 from 1 to 4 +move 7 from 3 to 9 +move 1 from 3 to 4 +move 2 from 4 to 7 +move 24 from 9 to 4 +move 12 from 9 to 3 +move 1 from 3 to 1 +move 1 from 1 to 2 +move 2 from 2 to 6 +move 1 from 6 to 5 +move 1 from 6 to 8 +move 3 from 2 to 4 +move 1 from 7 to 4 +move 1 from 5 to 3 +move 1 from 9 to 8 +move 23 from 4 to 8 +move 17 from 8 to 5 +move 12 from 9 to 8 +move 10 from 8 to 7 +move 1 from 8 to 6 +move 5 from 4 to 3 +move 3 from 5 to 1 +move 3 from 1 to 6 +move 6 from 5 to 4 +move 10 from 3 to 1 +move 9 from 1 to 7 +move 2 from 4 to 9 +move 1 from 1 to 6 +move 4 from 8 to 1 +move 4 from 3 to 7 +move 4 from 6 to 5 +move 1 from 9 to 6 +move 1 from 9 to 2 +move 1 from 1 to 7 +move 1 from 2 to 7 +move 3 from 1 to 7 +move 9 from 5 to 9 +move 7 from 9 to 7 +move 2 from 9 to 1 +move 3 from 5 to 9 +move 3 from 4 to 8 +move 1 from 1 to 2 +move 1 from 2 to 6 +move 1 from 1 to 6 +move 5 from 8 to 7 +move 1 from 8 to 1 +move 1 from 3 to 9 +move 1 from 1 to 6 +move 2 from 9 to 5 +move 2 from 3 to 9 +move 4 from 6 to 3 +move 1 from 9 to 4 +move 2 from 4 to 8 +move 1 from 4 to 8 +move 1 from 9 to 5 +move 1 from 6 to 8 +move 23 from 7 to 8 +move 27 from 8 to 2 +move 2 from 8 to 1 +move 23 from 2 to 6 +move 3 from 5 to 3 +move 4 from 2 to 5 +move 2 from 3 to 1 +move 2 from 9 to 3 +move 4 from 1 to 4 +move 13 from 7 to 9 +move 1 from 5 to 6 +move 2 from 5 to 9 +move 1 from 5 to 3 +move 3 from 9 to 3 +move 5 from 9 to 5 +move 2 from 4 to 2 +move 1 from 4 to 9 +move 11 from 6 to 9 +move 9 from 6 to 1 +move 17 from 9 to 5 +move 3 from 7 to 4 +move 3 from 6 to 3 +move 14 from 5 to 2 +move 5 from 3 to 1 +move 2 from 9 to 4 +move 2 from 3 to 8 +move 5 from 5 to 9 +move 2 from 5 to 4 +move 7 from 1 to 8 +move 2 from 9 to 5 +move 3 from 9 to 8 +move 8 from 4 to 2 +move 2 from 7 to 8 +move 10 from 2 to 9 +move 10 from 2 to 6 +move 8 from 9 to 7 +move 2 from 3 to 9 +move 3 from 9 to 8 +move 5 from 3 to 9 +move 7 from 7 to 9 +move 3 from 2 to 9 +move 10 from 8 to 5 +move 1 from 7 to 6 +move 1 from 2 to 3 +move 4 from 1 to 6 +move 2 from 8 to 4 +move 1 from 4 to 6 +move 2 from 6 to 3 +move 2 from 3 to 1 +move 1 from 4 to 9 +move 4 from 1 to 5 +move 2 from 5 to 2 +move 2 from 8 to 4 +move 1 from 3 to 5 +move 3 from 5 to 7 +move 2 from 2 to 9 +move 3 from 7 to 6 +move 3 from 8 to 5 +move 10 from 5 to 7 +move 3 from 6 to 4 +move 11 from 6 to 1 +move 3 from 6 to 2 +move 12 from 1 to 3 +move 1 from 7 to 5 +move 9 from 7 to 3 +move 5 from 5 to 1 +move 4 from 4 to 6 +move 2 from 1 to 7 +move 1 from 2 to 6 +move 2 from 7 to 8 +move 1 from 2 to 4 +move 1 from 9 to 5 +move 3 from 6 to 7 +move 1 from 5 to 2 +move 9 from 9 to 5 +move 1 from 2 to 8 +move 1 from 4 to 8 +move 1 from 1 to 8 +move 1 from 4 to 2 +move 1 from 7 to 2 +move 1 from 6 to 2 +move 1 from 6 to 8 +move 6 from 9 to 6 +move 1 from 3 to 4 +move 9 from 3 to 5 +move 1 from 1 to 3 +move 2 from 2 to 6 +move 1 from 3 to 5 +move 14 from 5 to 1 +move 1 from 2 to 6 +move 5 from 6 to 4 +move 3 from 8 to 2 +move 5 from 6 to 1 +move 5 from 4 to 6 +move 1 from 7 to 1 +move 3 from 9 to 3 +move 7 from 5 to 7 +move 1 from 4 to 6 +move 2 from 7 to 5 +move 3 from 6 to 1 +move 3 from 8 to 1 +move 14 from 3 to 4 +move 8 from 4 to 2 +move 1 from 6 to 1 +move 15 from 1 to 6 +move 7 from 1 to 6 +move 6 from 1 to 3 +move 3 from 3 to 1 +move 2 from 4 to 5 +move 1 from 4 to 2 +move 19 from 6 to 8 +move 2 from 1 to 8 +move 4 from 5 to 4 +move 7 from 8 to 2 +move 2 from 3 to 1 +move 13 from 8 to 6 +move 4 from 4 to 9 +move 2 from 4 to 8 +move 2 from 1 to 6 +move 1 from 3 to 5 +move 19 from 2 to 3 +move 13 from 3 to 1 +move 1 from 4 to 9 +move 1 from 2 to 8 +move 3 from 7 to 1 +move 14 from 6 to 9 +move 2 from 6 to 4 +move 18 from 9 to 4 +move 3 from 7 to 2 +move 15 from 1 to 4 +move 2 from 1 to 8 +move 5 from 3 to 1 +move 1 from 3 to 6 +move 5 from 8 to 9 +move 3 from 9 to 5 +move 1 from 9 to 5 +move 1 from 8 to 9 +move 1 from 6 to 2 +move 3 from 9 to 4 +move 2 from 6 to 7 +move 30 from 4 to 6 +move 22 from 6 to 9 +move 6 from 9 to 4 +move 4 from 6 to 7 +move 1 from 1 to 6 +move 1 from 9 to 8 +move 1 from 7 to 6 +move 3 from 5 to 3 +move 5 from 6 to 5 +move 2 from 7 to 9 +move 4 from 1 to 5 +move 1 from 6 to 4 +move 1 from 8 to 7 +move 2 from 6 to 4 +move 17 from 9 to 8 +move 2 from 2 to 7 +move 2 from 3 to 1 +move 8 from 4 to 8 +move 1 from 3 to 8 +move 8 from 4 to 2 +move 2 from 1 to 2 +move 1 from 4 to 6 +move 4 from 7 to 1 +move 1 from 6 to 8 +move 19 from 8 to 3 +move 5 from 5 to 1 +move 5 from 5 to 9 +move 2 from 9 to 3 +move 6 from 1 to 9 +move 1 from 7 to 5 +move 1 from 7 to 4 +move 2 from 5 to 7 +move 2 from 2 to 4 +move 4 from 9 to 8 +move 12 from 8 to 7 +move 2 from 1 to 9 +move 1 from 7 to 4 +move 4 from 4 to 5 +move 3 from 9 to 3 +move 9 from 2 to 6 +move 2 from 7 to 5 +move 1 from 1 to 9 +move 5 from 9 to 7 +move 9 from 6 to 2 +move 6 from 2 to 8 +move 21 from 3 to 2 +move 12 from 2 to 9 +move 3 from 5 to 9 +move 3 from 3 to 8 +move 5 from 9 to 6 +move 13 from 2 to 3 +move 3 from 6 to 2 +move 10 from 9 to 8 +move 6 from 3 to 1 +move 3 from 2 to 9 +move 2 from 6 to 7 +move 5 from 3 to 9 +move 4 from 1 to 9 +move 3 from 8 to 5 +move 1 from 1 to 7 +move 6 from 5 to 7 +move 12 from 9 to 7 +move 1 from 1 to 8 +move 11 from 8 to 5 +move 9 from 5 to 7 +move 1 from 3 to 1 +move 4 from 8 to 7 +move 1 from 1 to 7 +move 2 from 8 to 3 +move 42 from 7 to 4 +move 3 from 7 to 9 +move 4 from 7 to 5 +move 1 from 7 to 8 +move 1 from 8 to 5 +move 1 from 7 to 5 +move 1 from 3 to 4 +move 1 from 3 to 9 +move 1 from 9 to 6 +move 1 from 6 to 4 +move 1 from 3 to 5 +move 3 from 9 to 2 +move 16 from 4 to 8 +move 3 from 2 to 4 +move 1 from 5 to 4 +move 30 from 4 to 6 +move 15 from 8 to 3 +move 2 from 4 to 5 +move 1 from 8 to 7 +move 13 from 3 to 6 +move 1 from 7 to 8 +move 1 from 3 to 8 +move 1 from 3 to 8 +move 4 from 5 to 2 +move 6 from 5 to 2 +move 2 from 8 to 6 +move 43 from 6 to 2 +move 1 from 6 to 1 +move 18 from 2 to 4 +move 24 from 2 to 6 +move 19 from 6 to 3 +move 4 from 6 to 3 +move 2 from 6 to 3 +move 3 from 3 to 2 +move 1 from 1 to 3 +move 23 from 3 to 6 +move 12 from 4 to 3 +move 7 from 3 to 9 +move 13 from 2 to 9 +move 1 from 8 to 4 +move 4 from 3 to 8 +move 6 from 4 to 2 +move 10 from 9 to 3 +move 6 from 2 to 9 +move 8 from 3 to 5 +move 3 from 5 to 3 +move 13 from 6 to 5 +move 4 from 3 to 9 +move 1 from 4 to 2 +move 4 from 8 to 3 +move 1 from 2 to 5 +move 14 from 9 to 5 +move 2 from 5 to 4 +move 2 from 4 to 3 +move 1 from 9 to 5 +move 4 from 6 to 1 +move 1 from 6 to 2 +move 6 from 3 to 2 +move 5 from 6 to 8 +move 2 from 3 to 7 +move 1 from 8 to 1 +move 25 from 5 to 7 +move 3 from 7 to 9 +move 5 from 2 to 9 +move 12 from 9 to 8 +move 3 from 1 to 6 +move 16 from 8 to 2 +move 1 from 9 to 2 +move 1 from 6 to 2 +move 1 from 1 to 3 +move 21 from 7 to 3 +move 2 from 7 to 1 +move 1 from 7 to 8 +move 2 from 2 to 1 +move 2 from 6 to 3 +move 18 from 2 to 9 +move 2 from 5 to 1 +move 1 from 2 to 1 +move 3 from 5 to 2 +move 13 from 9 to 1 +move 3 from 9 to 2 +move 1 from 8 to 7 +move 3 from 2 to 6 +move 2 from 5 to 1 +move 17 from 3 to 8 +move 3 from 3 to 8 +move 2 from 9 to 1 +move 1 from 7 to 5 +move 1 from 5 to 3 +move 2 from 6 to 4 +move 1 from 6 to 1 +move 15 from 8 to 2 +move 2 from 3 to 6 +move 1 from 8 to 5 +move 2 from 6 to 8 +move 13 from 2 to 9 +move 4 from 9 to 8 +move 9 from 8 to 9 +move 3 from 3 to 4 +move 4 from 9 to 7 +move 1 from 8 to 6 +move 1 from 7 to 5 +move 2 from 5 to 1 +move 1 from 6 to 3 +move 4 from 4 to 5 +move 1 from 4 to 6 +move 1 from 3 to 7 +move 1 from 5 to 6 +move 2 from 7 to 2 +move 4 from 2 to 3 +move 3 from 2 to 7 +move 1 from 3 to 6 +move 1 from 9 to 6 +move 2 from 5 to 2 +move 3 from 9 to 5 +move 1 from 6 to 1 +move 3 from 5 to 4 +move 12 from 1 to 2 +move 2 from 2 to 4 +move 2 from 7 to 8 +move 2 from 3 to 9 +move 1 from 4 to 7 +move 1 from 5 to 2 +move 1 from 8 to 3 +move 2 from 3 to 6 +move 7 from 2 to 8 +move 3 from 4 to 1 +move 7 from 8 to 5 +move 7 from 9 to 2 +move 1 from 4 to 5 +move 3 from 7 to 6 +move 5 from 6 to 9 +move 6 from 9 to 5 +move 4 from 9 to 6 +move 1 from 8 to 5 +move 1 from 7 to 4 +move 1 from 4 to 2 +move 2 from 2 to 9 +move 2 from 9 to 2 +move 11 from 5 to 3 +move 2 from 5 to 2 +move 1 from 2 to 9 +move 4 from 6 to 9 +move 1 from 2 to 9 +move 4 from 3 to 7 +move 3 from 6 to 4 +move 1 from 5 to 7 +move 18 from 1 to 3 +move 11 from 3 to 2 +move 1 from 7 to 9 +move 1 from 5 to 9 +move 14 from 3 to 6 +move 15 from 2 to 4 +move 5 from 2 to 5 +move 1 from 2 to 5 +move 1 from 1 to 9 +move 8 from 4 to 1 +move 5 from 5 to 9 +move 9 from 4 to 9 +move 4 from 7 to 4 +move 5 from 4 to 8 +move 2 from 9 to 6 +move 8 from 1 to 8 +move 1 from 5 to 3 +move 1 from 3 to 4 +move 1 from 1 to 8 +move 13 from 6 to 3 +move 9 from 9 to 5 +move 1 from 2 to 8 +move 8 from 5 to 1 +move 1 from 2 to 7 \ No newline at end of file diff --git a/2022/day5/p1/test.text b/2022/day5/p1/test.text new file mode 100644 index 0000000..e98aba4 --- /dev/null +++ b/2022/day5/p1/test.text @@ -0,0 +1,9 @@ + [D] +[N] [C] +[Z] [M] [P] + 1 2 3 + +move 1 from 2 to 1 +move 3 from 1 to 3 +move 2 from 2 to 1 +move 1 from 1 to 2 \ No newline at end of file diff --git a/2022/day5/p2/day5p2.c b/2022/day5/p2/day5p2.c new file mode 100644 index 0000000..1bd8250 --- /dev/null +++ b/2022/day5/p2/day5p2.c @@ -0,0 +1,281 @@ +#include +#include +#include +#include + + +/* +The second part of day 5's problem is that when moving them the order does not change. +My solution to this is to use the exact same code except I reverse the order of them as I put them into my TempContainers array, +so that they are put into each stack in the correct order. +*/ + + +struct Node { + char Letter; + struct Node * Next; +}; + + +int CountLines(char *FileName) +{ + char *Line = malloc(256); + int LineCount = 0; + + FILE *File; + File = fopen(FileName, "r"); + + while (fgets(Line, 256, File) != NULL) + { + LineCount++; + } + + fclose(File); + + return LineCount; +} + + +void GetLine(char *FileName, int LineNumber, char* Line) +{ + + int CurrentLineNumber = 1; + + FILE *File; + File = fopen(FileName, "r"); + + while (fgets(Line, 256, File) != NULL) + { + + if (CurrentLineNumber == LineNumber) + break; + + else + CurrentLineNumber++; + + } + + fclose(File); + +} + + + + +int main() +{ + + char FileName[] = "input.text"; + + int CollumnNumberLine; + + int Collumns; + + int CurrentLine = 1; + char * Line = malloc(256); + + do + { + + GetLine(FileName, CurrentLine, Line); + + printf("%s", Line); + + if (isdigit(Line[1])) + { + CollumnNumberLine = CurrentLine; + break; + } + else + CurrentLine++; + + } + while (Line != NULL); + + printf("Collumn Number Line : %d\n", CollumnNumberLine); + + Collumns = strlen(Line) / 4; + printf("Collumns : %d\n\n", Collumns); + + + + + + // Parsing the starting positions + struct Node * Stacks[Collumns]; + + for (int i = 0; i < Collumns; i++) + { + struct Node * TempNode = malloc(sizeof(char) + sizeof(void *)); + TempNode->Letter = '0'; + TempNode->Next = NULL; + + Stacks[i] = TempNode; + } + + + int CurrentCollumn = 0; // Actual Collumn Number is this +1 + int Place; + // char * CollumnContent; + char ContainerLetter; + + while (CurrentCollumn < Collumns) + { + CurrentLine = CollumnNumberLine-1; + Place = (CurrentCollumn * 4) + 1; + + while (CurrentLine > 0) + { + GetLine(FileName, CurrentLine, Line); + + ContainerLetter = Line[Place]; + + if (ContainerLetter == ' ') + break; + + struct Node * Current = Stacks[CurrentCollumn]; + + while (Current->Next != NULL) + Current = Current->Next; + + + if (Current->Letter == '0') + { + Current->Letter = ContainerLetter; + } + else if (Current->Letter != ContainerLetter) + { + struct Node * TempNode = malloc(sizeof(char) + sizeof(void *)); + TempNode->Letter = ContainerLetter; + TempNode->Next = NULL; + + Current->Next = TempNode; + } + + CurrentLine--; + } + + + CurrentCollumn++; + } + + + + // Parsing the movements + CurrentLine = CollumnNumberLine + 2; // Line where movements start + + int Lines = CountLines(FileName); + + // Move the crates + while (CurrentLine <= Lines) + { + GetLine(FileName, CurrentLine, Line); + + int CurrentToken = 0; // Delimiter Token + + // The numbers in the movement line, move x number of crates from a to b + int Number; // Number of containers to move + int Src; // Source + int Dest; // Destination + + char * Token = strtok(Line, " "); + + while (Token != NULL) + { + if (CurrentToken == 1) + Number = atoi(Token); + + else if (CurrentToken == 3) + Src = atoi(Token) - 1; + + else if (CurrentToken == 5) + Dest = atoi(Token) - 1; + + Token = strtok(NULL, " "); + + CurrentToken++; + } + + // Containers that are being moved + char TempContainers[Number]; + + // Take x off of a and put into letters TempContainers + for (int i = 0; i < Number; i++) + { + struct Node * Current = Stacks[Src]; + + while (Current != NULL) + { + if (Current->Next == NULL) + { + TempContainers[i] = Current->Letter; + Stacks[Src] = NULL; + break; + } + else if (Current->Next->Next == NULL) + { + TempContainers[i] = Current->Next->Letter; + Current->Next = NULL; + break; + } + + Current = Current->Next; + } + + } + + // Take the letters from TempContainers and put them in b + for (int i = Number-1; i >= 0; i--) + { + struct Node * Current = Stacks[Dest]; + + while (1) + { + if (Current == NULL) + { + struct Node * TempNode = malloc(sizeof(char) + sizeof(void *)); + TempNode->Letter = TempContainers[i]; + TempNode->Next = NULL; + + Stacks[Dest] = TempNode; + break; + } + else if (Current->Next == NULL) + { + struct Node * TempNode = malloc(sizeof(char) + sizeof(void *)); + TempNode->Letter = TempContainers[i]; + TempNode->Next = NULL; + + Current->Next = TempNode; + break; + } + + Current = Current->Next; + } + } + + CurrentLine++; + } + + + printf("\nTop containers of each stack: "); + + for (int i = 0; i < Collumns; i++) + { + struct Node * Current = Stacks[i]; + + while (Current->Next != NULL) + { + Current = Current->Next; + } + + printf("%c", Current->Letter); + } + printf("\n"); + + + // Should print out the stacks with the top character CMZ + + return 0; + +} \ No newline at end of file diff --git a/2022/day5/p2/input.text b/2022/day5/p2/input.text new file mode 100644 index 0000000..adc0bbc --- /dev/null +++ b/2022/day5/p2/input.text @@ -0,0 +1,512 @@ + [H] [D] [P] +[W] [B] [C] [Z] [D] +[T] [J] [T] [J] [D] [J] +[H] [Z] [H] [H] [W] [S] [M] +[P] [F] [R] [P] [Z] [F] [W] [F] +[J] [V] [T] [N] [F] [G] [Z] [S] [S] +[C] [R] [P] [S] [V] [M] [V] [D] [Z] +[F] [G] [H] [Z] [N] [P] [M] [N] [D] + 1 2 3 4 5 6 7 8 9 + +move 2 from 8 to 2 +move 3 from 9 to 2 +move 1 from 3 to 8 +move 5 from 1 to 7 +move 2 from 9 to 2 +move 8 from 2 to 4 +move 6 from 7 to 2 +move 2 from 1 to 7 +move 4 from 5 to 9 +move 4 from 5 to 6 +move 1 from 8 to 3 +move 1 from 8 to 5 +move 2 from 9 to 8 +move 8 from 6 to 4 +move 4 from 3 to 6 +move 10 from 2 to 3 +move 1 from 5 to 1 +move 1 from 7 to 4 +move 2 from 9 to 8 +move 18 from 4 to 8 +move 1 from 1 to 6 +move 4 from 7 to 3 +move 12 from 8 to 4 +move 4 from 7 to 9 +move 5 from 6 to 9 +move 2 from 2 to 7 +move 3 from 9 to 5 +move 3 from 5 to 9 +move 1 from 2 to 8 +move 10 from 3 to 1 +move 2 from 7 to 8 +move 10 from 1 to 9 +move 1 from 3 to 5 +move 16 from 9 to 8 +move 1 from 3 to 2 +move 3 from 8 to 3 +move 1 from 5 to 9 +move 3 from 6 to 7 +move 2 from 7 to 2 +move 1 from 3 to 8 +move 5 from 4 to 1 +move 4 from 9 to 5 +move 2 from 2 to 5 +move 2 from 1 to 9 +move 23 from 8 to 4 +move 6 from 5 to 2 +move 5 from 2 to 6 +move 1 from 9 to 6 +move 2 from 2 to 4 +move 35 from 4 to 9 +move 1 from 6 to 1 +move 2 from 8 to 7 +move 1 from 6 to 8 +move 3 from 1 to 7 +move 1 from 7 to 1 +move 3 from 6 to 2 +move 4 from 3 to 7 +move 6 from 7 to 9 +move 1 from 6 to 9 +move 1 from 8 to 1 +move 2 from 2 to 9 +move 2 from 8 to 2 +move 3 from 7 to 3 +move 2 from 1 to 9 +move 5 from 9 to 3 +move 1 from 4 to 2 +move 1 from 1 to 4 +move 7 from 3 to 9 +move 1 from 3 to 4 +move 2 from 4 to 7 +move 24 from 9 to 4 +move 12 from 9 to 3 +move 1 from 3 to 1 +move 1 from 1 to 2 +move 2 from 2 to 6 +move 1 from 6 to 5 +move 1 from 6 to 8 +move 3 from 2 to 4 +move 1 from 7 to 4 +move 1 from 5 to 3 +move 1 from 9 to 8 +move 23 from 4 to 8 +move 17 from 8 to 5 +move 12 from 9 to 8 +move 10 from 8 to 7 +move 1 from 8 to 6 +move 5 from 4 to 3 +move 3 from 5 to 1 +move 3 from 1 to 6 +move 6 from 5 to 4 +move 10 from 3 to 1 +move 9 from 1 to 7 +move 2 from 4 to 9 +move 1 from 1 to 6 +move 4 from 8 to 1 +move 4 from 3 to 7 +move 4 from 6 to 5 +move 1 from 9 to 6 +move 1 from 9 to 2 +move 1 from 1 to 7 +move 1 from 2 to 7 +move 3 from 1 to 7 +move 9 from 5 to 9 +move 7 from 9 to 7 +move 2 from 9 to 1 +move 3 from 5 to 9 +move 3 from 4 to 8 +move 1 from 1 to 2 +move 1 from 2 to 6 +move 1 from 1 to 6 +move 5 from 8 to 7 +move 1 from 8 to 1 +move 1 from 3 to 9 +move 1 from 1 to 6 +move 2 from 9 to 5 +move 2 from 3 to 9 +move 4 from 6 to 3 +move 1 from 9 to 4 +move 2 from 4 to 8 +move 1 from 4 to 8 +move 1 from 9 to 5 +move 1 from 6 to 8 +move 23 from 7 to 8 +move 27 from 8 to 2 +move 2 from 8 to 1 +move 23 from 2 to 6 +move 3 from 5 to 3 +move 4 from 2 to 5 +move 2 from 3 to 1 +move 2 from 9 to 3 +move 4 from 1 to 4 +move 13 from 7 to 9 +move 1 from 5 to 6 +move 2 from 5 to 9 +move 1 from 5 to 3 +move 3 from 9 to 3 +move 5 from 9 to 5 +move 2 from 4 to 2 +move 1 from 4 to 9 +move 11 from 6 to 9 +move 9 from 6 to 1 +move 17 from 9 to 5 +move 3 from 7 to 4 +move 3 from 6 to 3 +move 14 from 5 to 2 +move 5 from 3 to 1 +move 2 from 9 to 4 +move 2 from 3 to 8 +move 5 from 5 to 9 +move 2 from 5 to 4 +move 7 from 1 to 8 +move 2 from 9 to 5 +move 3 from 9 to 8 +move 8 from 4 to 2 +move 2 from 7 to 8 +move 10 from 2 to 9 +move 10 from 2 to 6 +move 8 from 9 to 7 +move 2 from 3 to 9 +move 3 from 9 to 8 +move 5 from 3 to 9 +move 7 from 7 to 9 +move 3 from 2 to 9 +move 10 from 8 to 5 +move 1 from 7 to 6 +move 1 from 2 to 3 +move 4 from 1 to 6 +move 2 from 8 to 4 +move 1 from 4 to 6 +move 2 from 6 to 3 +move 2 from 3 to 1 +move 1 from 4 to 9 +move 4 from 1 to 5 +move 2 from 5 to 2 +move 2 from 8 to 4 +move 1 from 3 to 5 +move 3 from 5 to 7 +move 2 from 2 to 9 +move 3 from 7 to 6 +move 3 from 8 to 5 +move 10 from 5 to 7 +move 3 from 6 to 4 +move 11 from 6 to 1 +move 3 from 6 to 2 +move 12 from 1 to 3 +move 1 from 7 to 5 +move 9 from 7 to 3 +move 5 from 5 to 1 +move 4 from 4 to 6 +move 2 from 1 to 7 +move 1 from 2 to 6 +move 2 from 7 to 8 +move 1 from 2 to 4 +move 1 from 9 to 5 +move 3 from 6 to 7 +move 1 from 5 to 2 +move 9 from 9 to 5 +move 1 from 2 to 8 +move 1 from 4 to 8 +move 1 from 1 to 8 +move 1 from 4 to 2 +move 1 from 7 to 2 +move 1 from 6 to 2 +move 1 from 6 to 8 +move 6 from 9 to 6 +move 1 from 3 to 4 +move 9 from 3 to 5 +move 1 from 1 to 3 +move 2 from 2 to 6 +move 1 from 3 to 5 +move 14 from 5 to 1 +move 1 from 2 to 6 +move 5 from 6 to 4 +move 3 from 8 to 2 +move 5 from 6 to 1 +move 5 from 4 to 6 +move 1 from 7 to 1 +move 3 from 9 to 3 +move 7 from 5 to 7 +move 1 from 4 to 6 +move 2 from 7 to 5 +move 3 from 6 to 1 +move 3 from 8 to 1 +move 14 from 3 to 4 +move 8 from 4 to 2 +move 1 from 6 to 1 +move 15 from 1 to 6 +move 7 from 1 to 6 +move 6 from 1 to 3 +move 3 from 3 to 1 +move 2 from 4 to 5 +move 1 from 4 to 2 +move 19 from 6 to 8 +move 2 from 1 to 8 +move 4 from 5 to 4 +move 7 from 8 to 2 +move 2 from 3 to 1 +move 13 from 8 to 6 +move 4 from 4 to 9 +move 2 from 4 to 8 +move 2 from 1 to 6 +move 1 from 3 to 5 +move 19 from 2 to 3 +move 13 from 3 to 1 +move 1 from 4 to 9 +move 1 from 2 to 8 +move 3 from 7 to 1 +move 14 from 6 to 9 +move 2 from 6 to 4 +move 18 from 9 to 4 +move 3 from 7 to 2 +move 15 from 1 to 4 +move 2 from 1 to 8 +move 5 from 3 to 1 +move 1 from 3 to 6 +move 5 from 8 to 9 +move 3 from 9 to 5 +move 1 from 9 to 5 +move 1 from 8 to 9 +move 1 from 6 to 2 +move 3 from 9 to 4 +move 2 from 6 to 7 +move 30 from 4 to 6 +move 22 from 6 to 9 +move 6 from 9 to 4 +move 4 from 6 to 7 +move 1 from 1 to 6 +move 1 from 9 to 8 +move 1 from 7 to 6 +move 3 from 5 to 3 +move 5 from 6 to 5 +move 2 from 7 to 9 +move 4 from 1 to 5 +move 1 from 6 to 4 +move 1 from 8 to 7 +move 2 from 6 to 4 +move 17 from 9 to 8 +move 2 from 2 to 7 +move 2 from 3 to 1 +move 8 from 4 to 8 +move 1 from 3 to 8 +move 8 from 4 to 2 +move 2 from 1 to 2 +move 1 from 4 to 6 +move 4 from 7 to 1 +move 1 from 6 to 8 +move 19 from 8 to 3 +move 5 from 5 to 1 +move 5 from 5 to 9 +move 2 from 9 to 3 +move 6 from 1 to 9 +move 1 from 7 to 5 +move 1 from 7 to 4 +move 2 from 5 to 7 +move 2 from 2 to 4 +move 4 from 9 to 8 +move 12 from 8 to 7 +move 2 from 1 to 9 +move 1 from 7 to 4 +move 4 from 4 to 5 +move 3 from 9 to 3 +move 9 from 2 to 6 +move 2 from 7 to 5 +move 1 from 1 to 9 +move 5 from 9 to 7 +move 9 from 6 to 2 +move 6 from 2 to 8 +move 21 from 3 to 2 +move 12 from 2 to 9 +move 3 from 5 to 9 +move 3 from 3 to 8 +move 5 from 9 to 6 +move 13 from 2 to 3 +move 3 from 6 to 2 +move 10 from 9 to 8 +move 6 from 3 to 1 +move 3 from 2 to 9 +move 2 from 6 to 7 +move 5 from 3 to 9 +move 4 from 1 to 9 +move 3 from 8 to 5 +move 1 from 1 to 7 +move 6 from 5 to 7 +move 12 from 9 to 7 +move 1 from 1 to 8 +move 11 from 8 to 5 +move 9 from 5 to 7 +move 1 from 3 to 1 +move 4 from 8 to 7 +move 1 from 1 to 7 +move 2 from 8 to 3 +move 42 from 7 to 4 +move 3 from 7 to 9 +move 4 from 7 to 5 +move 1 from 7 to 8 +move 1 from 8 to 5 +move 1 from 7 to 5 +move 1 from 3 to 4 +move 1 from 3 to 9 +move 1 from 9 to 6 +move 1 from 6 to 4 +move 1 from 3 to 5 +move 3 from 9 to 2 +move 16 from 4 to 8 +move 3 from 2 to 4 +move 1 from 5 to 4 +move 30 from 4 to 6 +move 15 from 8 to 3 +move 2 from 4 to 5 +move 1 from 8 to 7 +move 13 from 3 to 6 +move 1 from 7 to 8 +move 1 from 3 to 8 +move 1 from 3 to 8 +move 4 from 5 to 2 +move 6 from 5 to 2 +move 2 from 8 to 6 +move 43 from 6 to 2 +move 1 from 6 to 1 +move 18 from 2 to 4 +move 24 from 2 to 6 +move 19 from 6 to 3 +move 4 from 6 to 3 +move 2 from 6 to 3 +move 3 from 3 to 2 +move 1 from 1 to 3 +move 23 from 3 to 6 +move 12 from 4 to 3 +move 7 from 3 to 9 +move 13 from 2 to 9 +move 1 from 8 to 4 +move 4 from 3 to 8 +move 6 from 4 to 2 +move 10 from 9 to 3 +move 6 from 2 to 9 +move 8 from 3 to 5 +move 3 from 5 to 3 +move 13 from 6 to 5 +move 4 from 3 to 9 +move 1 from 4 to 2 +move 4 from 8 to 3 +move 1 from 2 to 5 +move 14 from 9 to 5 +move 2 from 5 to 4 +move 2 from 4 to 3 +move 1 from 9 to 5 +move 4 from 6 to 1 +move 1 from 6 to 2 +move 6 from 3 to 2 +move 5 from 6 to 8 +move 2 from 3 to 7 +move 1 from 8 to 1 +move 25 from 5 to 7 +move 3 from 7 to 9 +move 5 from 2 to 9 +move 12 from 9 to 8 +move 3 from 1 to 6 +move 16 from 8 to 2 +move 1 from 9 to 2 +move 1 from 6 to 2 +move 1 from 1 to 3 +move 21 from 7 to 3 +move 2 from 7 to 1 +move 1 from 7 to 8 +move 2 from 2 to 1 +move 2 from 6 to 3 +move 18 from 2 to 9 +move 2 from 5 to 1 +move 1 from 2 to 1 +move 3 from 5 to 2 +move 13 from 9 to 1 +move 3 from 9 to 2 +move 1 from 8 to 7 +move 3 from 2 to 6 +move 2 from 5 to 1 +move 17 from 3 to 8 +move 3 from 3 to 8 +move 2 from 9 to 1 +move 1 from 7 to 5 +move 1 from 5 to 3 +move 2 from 6 to 4 +move 1 from 6 to 1 +move 15 from 8 to 2 +move 2 from 3 to 6 +move 1 from 8 to 5 +move 2 from 6 to 8 +move 13 from 2 to 9 +move 4 from 9 to 8 +move 9 from 8 to 9 +move 3 from 3 to 4 +move 4 from 9 to 7 +move 1 from 8 to 6 +move 1 from 7 to 5 +move 2 from 5 to 1 +move 1 from 6 to 3 +move 4 from 4 to 5 +move 1 from 4 to 6 +move 1 from 3 to 7 +move 1 from 5 to 6 +move 2 from 7 to 2 +move 4 from 2 to 3 +move 3 from 2 to 7 +move 1 from 3 to 6 +move 1 from 9 to 6 +move 2 from 5 to 2 +move 3 from 9 to 5 +move 1 from 6 to 1 +move 3 from 5 to 4 +move 12 from 1 to 2 +move 2 from 2 to 4 +move 2 from 7 to 8 +move 2 from 3 to 9 +move 1 from 4 to 7 +move 1 from 5 to 2 +move 1 from 8 to 3 +move 2 from 3 to 6 +move 7 from 2 to 8 +move 3 from 4 to 1 +move 7 from 8 to 5 +move 7 from 9 to 2 +move 1 from 4 to 5 +move 3 from 7 to 6 +move 5 from 6 to 9 +move 6 from 9 to 5 +move 4 from 9 to 6 +move 1 from 8 to 5 +move 1 from 7 to 4 +move 1 from 4 to 2 +move 2 from 2 to 9 +move 2 from 9 to 2 +move 11 from 5 to 3 +move 2 from 5 to 2 +move 1 from 2 to 9 +move 4 from 6 to 9 +move 1 from 2 to 9 +move 4 from 3 to 7 +move 3 from 6 to 4 +move 1 from 5 to 7 +move 18 from 1 to 3 +move 11 from 3 to 2 +move 1 from 7 to 9 +move 1 from 5 to 9 +move 14 from 3 to 6 +move 15 from 2 to 4 +move 5 from 2 to 5 +move 1 from 2 to 5 +move 1 from 1 to 9 +move 8 from 4 to 1 +move 5 from 5 to 9 +move 9 from 4 to 9 +move 4 from 7 to 4 +move 5 from 4 to 8 +move 2 from 9 to 6 +move 8 from 1 to 8 +move 1 from 5 to 3 +move 1 from 3 to 4 +move 1 from 1 to 8 +move 13 from 6 to 3 +move 9 from 9 to 5 +move 1 from 2 to 8 +move 8 from 5 to 1 +move 1 from 2 to 7 \ No newline at end of file diff --git a/2022/day5/p2/test.text b/2022/day5/p2/test.text new file mode 100644 index 0000000..e98aba4 --- /dev/null +++ b/2022/day5/p2/test.text @@ -0,0 +1,9 @@ + [D] +[N] [C] +[Z] [M] [P] + 1 2 3 + +move 1 from 2 to 1 +move 3 from 1 to 3 +move 2 from 2 to 1 +move 1 from 1 to 2 \ No newline at end of file diff --git a/2022/day6/p1/day6p1.c b/2022/day6/p1/day6p1.c new file mode 100644 index 0000000..cbe0c46 --- /dev/null +++ b/2022/day6/p1/day6p1.c @@ -0,0 +1,121 @@ +#include +#include +#include +#include + +int MARKER_LENGTH = 4; +int MAX_LENGTH = 4095; + +int CountLines(char * FileName) +{ + char *Line = malloc(MAX_LENGTH); + int LineCount = 0; + + FILE *File; + File = fopen(FileName, "r"); + + while (fgets(Line, MAX_LENGTH, File) != NULL) + { + LineCount++; + } + + fclose(File); + + return LineCount; +} + + + +void GetLine(char * FileName, int LineNumber, char * Line) +{ + + int CurrentLineNumber = 1; + + FILE * File; + File = fopen(FileName, "r"); + + while (fgets(Line, MAX_LENGTH, File) != NULL) + { + if (CurrentLineNumber == LineNumber) + break; + + else + CurrentLineNumber++; + + } + + fclose(File); +} + + + +int main() +{ + char Marker[MARKER_LENGTH]; + + char FileName[] = "input.text"; + int LineCount = CountLines(FileName); + int CurrentLine = 1; + char * Line = malloc(MAX_LENGTH); + + do + { + // Clear Marker for new line + for (int i = 0; i < MARKER_LENGTH; i++) + Marker[i] = '\0'; + + GetLine(FileName, CurrentLine, Line); + + for (int i = 0; i < strlen(Line); i++) + { + if (i < MARKER_LENGTH) + { + if (!Marker[i]) + { + Marker[i] = Line[i]; + } + } + else + { + bool Repeat = false; + + for (int a = 0; a < MARKER_LENGTH; a++) + { + for (int b = 0; b < MARKER_LENGTH; b++) + { + if (Marker[a] == Marker[b] && a != b) + { + Repeat = true; + break; + } + } + } + + if (!Repeat) + { + printf("Marker starts at character %d\n", i); + for (int x = 0; x < MARKER_LENGTH; x++) + printf("%c", Marker[x]); + printf("\n"); + break; + } + else + { + // Shift everything in Marker to the left by one + Marker[0] = '\0'; + + for (int x = 1; x < MARKER_LENGTH; x++) + Marker[x-1] = Marker[x]; + + Marker[3] = Line[i]; + } + } + } + + CurrentLine++; + + } + while (CurrentLine <= LineCount); + + return 1; +} \ No newline at end of file diff --git a/2022/day6/p1/input.text b/2022/day6/p1/input.text new file mode 100644 index 0000000..fa3b80f --- /dev/null +++ b/2022/day6/p1/input.text @@ -0,0 +1 @@ +bhzhtzzsczszsjjjzddfzdfzfjfzfbbnntnzznwzzvfvrrqmrmmdzzfqfhqhsqqpwpgwpppbtbnnstthmhrrsmmvsmmhjmjfmfsfjfnfnjjvcjjszjszjsszbznzbnzndzzmlldsdgdcddmqmfqqlcllbvllztzctzczdzttlmtlthtmhtmhmmszsllvzvdzzzsqzqbqccvfvcffzsfslfsllcglclwlvwvzzdsslggtzzgzdzmzddjljvvztttsgscsstztjztjztzvzwwthtftppnmpmmcpmmjlmjjjsfjsjppgcgwcggzffzwzbbmbrbprpqqpccfncfnffvcffsqqtzqzqwzwvzwwwbjbfbcbfblltnlnhhcthtvvzzfcfgfddlggbbshsggplglqqbrbggsvvzdvvlfvlvpvhhmggbrrnppjfjhffttfpffbdfbfvfqvvtcvvbvnnhbhhglgjgzzghhwrrtntrtwwfdfdmmcmtctftpptllzqllzflfrrgqgvgdvdfdbddprrrgccqvqnnmtmvmffpzzqggfbfnfwwqdqldqqlnqnttnbttrffnmmzwzjjtrjtrtmmqsmqmffqmfqfhhbthbhdhvdhvdvmvdmdhdshsqslldzztvvmzzdcccmbbhfhshrrrpsrrqqmdmmgdmmwdmdjdqqmcmttpgtgwgpwpprbrprhrsrllhsllprlplhppfzpffbhbccwdwbbrpbpvpqqmsspjssmbbmfmrmnrnwwgbwwbpwpjwwhqqgcqcvqccgffzpfftcffqlqjjznnlflhhlcczhzvhzhmzhmhfhnnqznntstwtggqjgjhggsvslltjlttfjjgffjzjwzzqzrrhlhzhbhphmhlmlzmzsmzmccvllgrrpbrbfbjfjttqjttdrdhhggqgddppqgpqgpgtptjptpllwccmwcmcpmcppdrrtstqqczqzvvlsltlddnvdvggcqqblqqsjqjttzhtzzszllqsqfqddqdbqddwqddfzzlczcscfsfpfdpdrpddsggcqchcfcpcssstwstwtggghvhqhzzqssjddwjwbjjsnjnfnwwglwwfnfhnnscsggzgjzzhzmmqfqsqwqrwqqqdtdcttzvvnbngbbcdbdggddnmddgzghhzgghwwbjbttlwlcctlccwwdhhrqrvrjjlglssgttpllwclwwtptwptwtvthtbhbzhbzhhrsrwwwnrwrfwfnwnhhnqqdjqjpqqwdwttzhttcdttvztzltzlzmzddrsdsfdsfftdfffmwffrjrffqrfqfsfqqqgqjggwzzrnnqfnqffdbfbtbbrpbrpbptpwttjmjjzrrhhqppdzdtdjttqwwtddjdzzmgzzhwwwdsdgssprsrgsgbbphhdpdwppnfppdqqwzzpbzzqwqpqsqhqdhqqtwwjnnmvmwvmmwwgjgzjjvcjcvcjcnjcncmmphmmvmwmwpwbbtbffhnhshgssgvgvrrbwbtbddqmqfqvvfqvqdvvdbvdbdcdfdlflmffrwwgmmttrztrrfrqrpqrrzjrjpjdpjprrnhhbhcbbcwwqlwwcssbddfrfjrfjfrjfjvvdmdtdzzlvzlzhzmhmhphchnnfqnffvccfpfbfpfqpprrmttzrzzjzmjmzjmmfvmmrzrqqdllgjlglcchssgllsbllrbrlrjlrrhhfwwsqwsstpssznzcznzqzssvtvtrrqwqvvtssgfsfhssljjnwjnjddjdggclcrrfsfhsstgtdtctfttvvsbvvbtbttcgcssjlslhlpljpppwzwnwdnngmgjjbzznwwdllrrfppshhvdhhldhdbbdbjbdjjrnjjzhzfhhsqqbqgmsbvnjsptlrsszlqfmgprvscphmqztbgtlrqvcgdzcptcqjncrdtfqnghnbmwwmcjgtjlbvqqzslgbbntrdfnvfjvfgcgngndjcspgwmpnsrqzzvzljbzlzzrwflrqqqmhsvqwbmdftnhwwzgqrlhddbbtwvbphljmstcjzvpjqwcnhlvpqvqdgvntgqzqwrlwbwvngwtqgrhznlzcvbwqmwncccjctrdzrmzjsvrmcfpjjcczhbvdfwhqvczggfmrspvprvvthvtqnsphpcsdmbrtbdqljvssdrhwjsrrlzprstpgqcbpmnpdgzgjttwcfrgjnsghmszlclgvmlsjrqfvflbnhwwphtvrnrbhdvdglcvgpzfsjpwwhtlvvdzthsrldfzhnlrblzsjjnwclqsqzgdbflhvpwcrtfbfbjcjttbjpvfgvfcswnqqwshbmqlscdzzwshfqwsvwnwzltbnrmzzhzvtwpzqcgwshpvzgtcmwrtrwctnpzbznnwqphnrgwljtrcwlqmvlndwrdrctztnmswslqmbjcmtlrmcpjvzccqszrnflqnqzttbhqlrhbmqdpscqvfgtdbnwjdcljwcbgbgjfzgrgpwqzqgbnrtpntfthhdbqmswvhnmwmszpghgjjzrbnbbfjblpstdfslmmmqfdcrhblqjqfphnldrvvfpnfrcvprjnqbzbspfpjtgqhnjbhnrwzcjvdbshhqpgrmzqpmjfmqwqvvdbddbsldwzzsrhnhsjjnvljrbwcnjrnjpmrrvfthftgptgtlpbgqffthflgftwcrqcqwqwrmrcmfrcqgmrnqjbscdcgrqlhjzthvzdgjbvpswflqcgsnlmgmvcsttsgmnqdtvwdvrndvfdcvrcwmqlmlhtrvthsndsrmnsfmdmfnpfmfhzjqmtcjzcrnsjdztztvgdtlrmbdmmstbfgpmmzthcslpvgrpgfljfgqlqhldfwvvvdvbzjtdtppbtrnqwsqztjrsjhtfrgmvsdngvsdzjgpwrldqpzdpvhljzpjvttwltdwcrhcbrgrvdrmpwvdwjchqsjfprbgtjtzggvgrgmlvvwqrjfprbbgjjqrtdfnrdffwbswbvqtqtfsrhsgrjhftqldhmcnmsnfflmdrzqdjmbqqgqsttdmtrrvfsjnccnhcpcvqtrzdjzrpwswmjvvgsgwvnmdgqwlctrlhqnsmczbwsjhmtgvdcgsndzlstcwchcztqqbtdwfvlljdvdlzljslgnzpmqvzfcvqhdzvgchffqgfwrnmwqzwgbzblpmvddlvnhglrhdnwzqwztzgjczjpwcjwmpnrnrhncfjfggrbphrjztwtfqmfjlwfhnqfftfghbnvtwgtmdzzrdrtmfrwhrrbhzmcllsgqzwzzqtgdggvzptvtdcpzmtmsfcfbjtzlbdrwhdbtdhhrgggmddnzsvjwgcdcqfppqwphfvlhmgqsznlhmgpnjvcvrwwppnphchgsrhjwjcpjggsrcwrvnllfgrmjltfzwhmbqwpwwzmrtlqcprrqztcgnghcbvzrbfptjmhtdcfhhffdbrswqpnpppnpqwtflrrmqgjzctmmvvvwzllbsfdvpqjtmvpjcpmjztscsgbdznfgcmtjzdqzwqrsvstnnvddcstzqjtnbsnlptpmbmfqmhppgnjrffqrtchgptbmwlwbwbcqqfngpbwtwdmlmdstmqwcwjtbwbbbhghgptmvhfmvqfvpwqzwnbjdhpwlgjgvprdjbnlzhnllssbpvzfzspwsscfpqtpdvtzvqncfrfrgddsdglqvpblmpcczlqfdmwzmgvrljhqtcglcvfhbdwhbttqqrjbqwhsrhrbjwmtqwqddvdggdwfsmnpbpvvgsqnvvrqntwmbzdnqpmmqtbnlsbmslpfmqjtgvbddhwvlvjtlrhqdpfnjwtbhwjwdrpgctbbrdqvbbnvgqwngrhqfvwzmlqtmhfqphnmczlbdpnbmpvwrsjbcnjnvcfgnsvlhpzdgdzgvfbgwdcrswznrggnghzssdwqvvlwftqhbnwdvghhvjlqqmcnqmvbwhrrnsswlwmwbsmpcpdzzgmcmqnzpvjpzqbwcsgdhqtqhcpbtqftvscmntsbdcbrndvlfhprpblzbjcpqhfljtvnvtgvrcgqbsgl \ No newline at end of file diff --git a/2022/day6/p1/test.text b/2022/day6/p1/test.text new file mode 100644 index 0000000..361d057 --- /dev/null +++ b/2022/day6/p1/test.text @@ -0,0 +1,4 @@ +bvwbjplbgvbhsrlpgdmjqwftvncz +nppdvjthqldpwncqszvftbrmjlhg +nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg +zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw \ No newline at end of file diff --git a/2022/day6/p2/day6p2.c b/2022/day6/p2/day6p2.c new file mode 100644 index 0000000..c4906a8 --- /dev/null +++ b/2022/day6/p2/day6p2.c @@ -0,0 +1,121 @@ +#include +#include +#include +#include + +int MARKER_LENGTH = 14; +int MAX_LENGTH = 4095; + +int CountLines(char * FileName) +{ + char *Line = malloc(MAX_LENGTH); + int LineCount = 0; + + FILE *File; + File = fopen(FileName, "r"); + + while (fgets(Line, MAX_LENGTH, File) != NULL) + { + LineCount++; + } + + fclose(File); + + return LineCount; +} + + + +void GetLine(char * FileName, int LineNumber, char * Line) +{ + + int CurrentLineNumber = 1; + + FILE * File; + File = fopen(FileName, "r"); + + while (fgets(Line, MAX_LENGTH, File) != NULL) + { + if (CurrentLineNumber == LineNumber) + break; + + else + CurrentLineNumber++; + + } + + fclose(File); +} + + + +int main() +{ + char Marker[MARKER_LENGTH]; + + char FileName[] = "input.text"; + int LineCount = CountLines(FileName); + int CurrentLine = 1; + char * Line = malloc(MAX_LENGTH); + + do + { + // Clear Marker for new line + for (int i = 0; i < MARKER_LENGTH; i++) + Marker[i] = '\0'; + + GetLine(FileName, CurrentLine, Line); + + for (int i = 0; i < strlen(Line); i++) + { + if (i < MARKER_LENGTH) + { + if (!Marker[i]) + { + Marker[i] = Line[i]; + } + } + else + { + bool Repeat = false; + + for (int a = 0; a < MARKER_LENGTH; a++) + { + for (int b = 0; b < MARKER_LENGTH; b++) + { + if (Marker[a] == Marker[b] && a != b) + { + Repeat = true; + break; + } + } + } + + if (!Repeat) + { + printf("Marker starts at character %d\n", i); + for (int x = 0; x < MARKER_LENGTH; x++) + printf("%c", Marker[x]); + printf("\n"); + break; + } + else + { + // Shift everything in Marker to the left by one + Marker[0] = '\0'; + + for (int x = 1; x < MARKER_LENGTH; x++) + Marker[x-1] = Marker[x]; + + Marker[MARKER_LENGTH-1] = Line[i]; + } + } + } + + CurrentLine++; + + } + while (CurrentLine <= LineCount); + + return 1; +} \ No newline at end of file diff --git a/2022/day6/p2/input.text b/2022/day6/p2/input.text new file mode 100644 index 0000000..fa3b80f --- /dev/null +++ b/2022/day6/p2/input.text @@ -0,0 +1 @@ +bhzhtzzsczszsjjjzddfzdfzfjfzfbbnntnzznwzzvfvrrqmrmmdzzfqfhqhsqqpwpgwpppbtbnnstthmhrrsmmvsmmhjmjfmfsfjfnfnjjvcjjszjszjsszbznzbnzndzzmlldsdgdcddmqmfqqlcllbvllztzctzczdzttlmtlthtmhtmhmmszsllvzvdzzzsqzqbqccvfvcffzsfslfsllcglclwlvwvzzdsslggtzzgzdzmzddjljvvztttsgscsstztjztjztzvzwwthtftppnmpmmcpmmjlmjjjsfjsjppgcgwcggzffzwzbbmbrbprpqqpccfncfnffvcffsqqtzqzqwzwvzwwwbjbfbcbfblltnlnhhcthtvvzzfcfgfddlggbbshsggplglqqbrbggsvvzdvvlfvlvpvhhmggbrrnppjfjhffttfpffbdfbfvfqvvtcvvbvnnhbhhglgjgzzghhwrrtntrtwwfdfdmmcmtctftpptllzqllzflfrrgqgvgdvdfdbddprrrgccqvqnnmtmvmffpzzqggfbfnfwwqdqldqqlnqnttnbttrffnmmzwzjjtrjtrtmmqsmqmffqmfqfhhbthbhdhvdhvdvmvdmdhdshsqslldzztvvmzzdcccmbbhfhshrrrpsrrqqmdmmgdmmwdmdjdqqmcmttpgtgwgpwpprbrprhrsrllhsllprlplhppfzpffbhbccwdwbbrpbpvpqqmsspjssmbbmfmrmnrnwwgbwwbpwpjwwhqqgcqcvqccgffzpfftcffqlqjjznnlflhhlcczhzvhzhmzhmhfhnnqznntstwtggqjgjhggsvslltjlttfjjgffjzjwzzqzrrhlhzhbhphmhlmlzmzsmzmccvllgrrpbrbfbjfjttqjttdrdhhggqgddppqgpqgpgtptjptpllwccmwcmcpmcppdrrtstqqczqzvvlsltlddnvdvggcqqblqqsjqjttzhtzzszllqsqfqddqdbqddwqddfzzlczcscfsfpfdpdrpddsggcqchcfcpcssstwstwtggghvhqhzzqssjddwjwbjjsnjnfnwwglwwfnfhnnscsggzgjzzhzmmqfqsqwqrwqqqdtdcttzvvnbngbbcdbdggddnmddgzghhzgghwwbjbttlwlcctlccwwdhhrqrvrjjlglssgttpllwclwwtptwptwtvthtbhbzhbzhhrsrwwwnrwrfwfnwnhhnqqdjqjpqqwdwttzhttcdttvztzltzlzmzddrsdsfdsfftdfffmwffrjrffqrfqfsfqqqgqjggwzzrnnqfnqffdbfbtbbrpbrpbptpwttjmjjzrrhhqppdzdtdjttqwwtddjdzzmgzzhwwwdsdgssprsrgsgbbphhdpdwppnfppdqqwzzpbzzqwqpqsqhqdhqqtwwjnnmvmwvmmwwgjgzjjvcjcvcjcnjcncmmphmmvmwmwpwbbtbffhnhshgssgvgvrrbwbtbddqmqfqvvfqvqdvvdbvdbdcdfdlflmffrwwgmmttrztrrfrqrpqrrzjrjpjdpjprrnhhbhcbbcwwqlwwcssbddfrfjrfjfrjfjvvdmdtdzzlvzlzhzmhmhphchnnfqnffvccfpfbfpfqpprrmttzrzzjzmjmzjmmfvmmrzrqqdllgjlglcchssgllsbllrbrlrjlrrhhfwwsqwsstpssznzcznzqzssvtvtrrqwqvvtssgfsfhssljjnwjnjddjdggclcrrfsfhsstgtdtctfttvvsbvvbtbttcgcssjlslhlpljpppwzwnwdnngmgjjbzznwwdllrrfppshhvdhhldhdbbdbjbdjjrnjjzhzfhhsqqbqgmsbvnjsptlrsszlqfmgprvscphmqztbgtlrqvcgdzcptcqjncrdtfqnghnbmwwmcjgtjlbvqqzslgbbntrdfnvfjvfgcgngndjcspgwmpnsrqzzvzljbzlzzrwflrqqqmhsvqwbmdftnhwwzgqrlhddbbtwvbphljmstcjzvpjqwcnhlvpqvqdgvntgqzqwrlwbwvngwtqgrhznlzcvbwqmwncccjctrdzrmzjsvrmcfpjjcczhbvdfwhqvczggfmrspvprvvthvtqnsphpcsdmbrtbdqljvssdrhwjsrrlzprstpgqcbpmnpdgzgjttwcfrgjnsghmszlclgvmlsjrqfvflbnhwwphtvrnrbhdvdglcvgpzfsjpwwhtlvvdzthsrldfzhnlrblzsjjnwclqsqzgdbflhvpwcrtfbfbjcjttbjpvfgvfcswnqqwshbmqlscdzzwshfqwsvwnwzltbnrmzzhzvtwpzqcgwshpvzgtcmwrtrwctnpzbznnwqphnrgwljtrcwlqmvlndwrdrctztnmswslqmbjcmtlrmcpjvzccqszrnflqnqzttbhqlrhbmqdpscqvfgtdbnwjdcljwcbgbgjfzgrgpwqzqgbnrtpntfthhdbqmswvhnmwmszpghgjjzrbnbbfjblpstdfslmmmqfdcrhblqjqfphnldrvvfpnfrcvprjnqbzbspfpjtgqhnjbhnrwzcjvdbshhqpgrmzqpmjfmqwqvvdbddbsldwzzsrhnhsjjnvljrbwcnjrnjpmrrvfthftgptgtlpbgqffthflgftwcrqcqwqwrmrcmfrcqgmrnqjbscdcgrqlhjzthvzdgjbvpswflqcgsnlmgmvcsttsgmnqdtvwdvrndvfdcvrcwmqlmlhtrvthsndsrmnsfmdmfnpfmfhzjqmtcjzcrnsjdztztvgdtlrmbdmmstbfgpmmzthcslpvgrpgfljfgqlqhldfwvvvdvbzjtdtppbtrnqwsqztjrsjhtfrgmvsdngvsdzjgpwrldqpzdpvhljzpjvttwltdwcrhcbrgrvdrmpwvdwjchqsjfprbgtjtzggvgrgmlvvwqrjfprbbgjjqrtdfnrdffwbswbvqtqtfsrhsgrjhftqldhmcnmsnfflmdrzqdjmbqqgqsttdmtrrvfsjnccnhcpcvqtrzdjzrpwswmjvvgsgwvnmdgqwlctrlhqnsmczbwsjhmtgvdcgsndzlstcwchcztqqbtdwfvlljdvdlzljslgnzpmqvzfcvqhdzvgchffqgfwrnmwqzwgbzblpmvddlvnhglrhdnwzqwztzgjczjpwcjwmpnrnrhncfjfggrbphrjztwtfqmfjlwfhnqfftfghbnvtwgtmdzzrdrtmfrwhrrbhzmcllsgqzwzzqtgdggvzptvtdcpzmtmsfcfbjtzlbdrwhdbtdhhrgggmddnzsvjwgcdcqfppqwphfvlhmgqsznlhmgpnjvcvrwwppnphchgsrhjwjcpjggsrcwrvnllfgrmjltfzwhmbqwpwwzmrtlqcprrqztcgnghcbvzrbfptjmhtdcfhhffdbrswqpnpppnpqwtflrrmqgjzctmmvvvwzllbsfdvpqjtmvpjcpmjztscsgbdznfgcmtjzdqzwqrsvstnnvddcstzqjtnbsnlptpmbmfqmhppgnjrffqrtchgptbmwlwbwbcqqfngpbwtwdmlmdstmqwcwjtbwbbbhghgptmvhfmvqfvpwqzwnbjdhpwlgjgvprdjbnlzhnllssbpvzfzspwsscfpqtpdvtzvqncfrfrgddsdglqvpblmpcczlqfdmwzmgvrljhqtcglcvfhbdwhbttqqrjbqwhsrhrbjwmtqwqddvdggdwfsmnpbpvvgsqnvvrqntwmbzdnqpmmqtbnlsbmslpfmqjtgvbddhwvlvjtlrhqdpfnjwtbhwjwdrpgctbbrdqvbbnvgqwngrhqfvwzmlqtmhfqphnmczlbdpnbmpvwrsjbcnjnvcfgnsvlhpzdgdzgvfbgwdcrswznrggnghzssdwqvvlwftqhbnwdvghhvjlqqmcnqmvbwhrrnsswlwmwbsmpcpdzzgmcmqnzpvjpzqbwcsgdhqtqhcpbtqftvscmntsbdcbrndvlfhprpblzbjcpqhfljtvnvtgvrcgqbsgl \ No newline at end of file diff --git a/2022/day6/p2/test.text b/2022/day6/p2/test.text new file mode 100644 index 0000000..698fdf2 --- /dev/null +++ b/2022/day6/p2/test.text @@ -0,0 +1,5 @@ +mjqjpqmgbljsphdztnvjfqwrcgsmlb +bvwbjplbgvbhsrlpgdmjqwftvncz +nppdvjthqldpwncqszvftbrmjlhg +nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg +zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw \ No newline at end of file diff --git a/2022/day7/p1/day7p1.c b/2022/day7/p1/day7p1.c new file mode 100644 index 0000000..310ced7 --- /dev/null +++ b/2022/day7/p1/day7p1.c @@ -0,0 +1,222 @@ +#include +#include +#include +#include +#include +#include + +struct File { + char * Name; + int size; +}; + +struct Dir { + char * Name; + int size; + struct Dir * Parent; + int ChildrenAmount; + struct Dir ** Children; + int FileCount; + struct File ** Files; +}; + +struct Dir * FindDir(struct Dir * CurrentDir, char * target_name) +{ + for (int index = 0; index < CurrentDir->ChildrenAmount; index++) + { + char * current_child_name = CurrentDir->Children[index]->Name; + if (strcmp(current_child_name, target_name) == 0) + return CurrentDir->Children[index]; + } + return NULL; +} + +char * RemoveLastChar(char * Str) +{ + size_t length = strlen(Str); + char * NewString = malloc(length * sizeof(char)); + for (int index = 0; index < length - 1; index++) + NewString[index] = Str[index]; + return NewString; +} + +int CountLines(char * FileName) +{ + char *Line = malloc(256); + int LineCount = 0; + + FILE *File; + File = fopen(FileName, "r"); + + while (fgets(Line, 256, File) != NULL) + { + LineCount++; + } + + fclose(File); + + return LineCount; +} + +void GetLine(char * FileName, int LineNumber, char * Line) +{ + + int CurrentLineNumber = 1; + + FILE *File; + File = fopen(FileName, "r"); + + while (fgets(Line, 256, File) != NULL) + { + + if (CurrentLineNumber == LineNumber) + break; + + else + CurrentLineNumber++; + + } + + fclose(File); + +} + + + +void PrintDir(struct Dir * Current) +{ + printf("Name: %s, ", Current->Name); + printf("Children: %d, ", Current->ChildrenAmount); + printf("Size: %d, ", Current->size); + + if (Current->Parent) + printf("Parent: %s", Current->Parent->Name); + + printf("\n"); + + for (int i = 0; i < Current->ChildrenAmount; i++) + { + PrintDir(Current->Children[i]); + } +} + + + +int main() +{ + struct Dir Root; + Root.Name = "Root"; + Root.size = 0; + Root.Parent = NULL; + Root.ChildrenAmount = 0; + Root.FileCount = 0; + struct Dir * CurrentDirectory = &Root; + + char FileName[] = "test.text"; + int LineCount = CountLines(FileName); + int CurrentLine = 2; // Skipping line one + char * Line = malloc(256); + char * Command = malloc(256); + + while (CurrentLine <= LineCount) + { + GetLine(FileName, CurrentLine, Line); + + if (Line[0] == '$') + { + Command = strtok(Line, " "); + Command = strtok(NULL, " "); + + while (Command != NULL) + { + if (strcmp(Command, "cd") == 0) + { + char * target_dir_name = strtok(NULL, " "); + CurrentDirectory = FindDir(CurrentDirectory, target_dir_name); + Command = strtok(NULL, " "); + } + else if (strcmp(Command, "ls\n") == 0) + { + // Find how many items we need to put into an array + int Directories = 0; + int LineOffset = 1; + + do + { + printf("get line %d\n", CurrentLine+LineOffset); + GetLine(FileName, CurrentLine + LineOffset, Line); + + if (Line[0] == '$') + break; + + char * FirstWord = strtok(Line, " "); + + if (strcmp(FirstWord, "dir") == 0) + Directories++; + + else if (isdigit(Line[0])) + { + int add = atoi(FirstWord); + printf("Adding size %d to %s\n", add, CurrentDirectory->Name); + CurrentDirectory->size += add; + printf("CurrentDirectory Size is %d\n", CurrentDirectory->size); + } + + LineOffset++; + } + while (1); + + printf("%d Directories found\n", Directories); + + // CurrentLine += LineOffset; + + printf("Getting directories...\n"); + if (Directories > 0) + { + LineOffset = 1; + + struct Dir ** TempChildren = malloc(sizeof(struct Dir) * Directories); + + for (int i = 0; i < Directories; i++) + { + while (1) + { + GetLine(FileName, CurrentLine + LineOffset, Line); + printf("get line %d\n", CurrentLine + LineOffset); + + char * FirstWord = malloc(256); + FirstWord = strtok(Line, " "); + + LineOffset++; + if (strcmp(FirstWord, "dir") == 0) + { + FirstWord = strtok(NULL, " "); + + struct Dir * TempDirectory = malloc(sizeof(struct Dir)); + + TempDirectory->Name = RemoveLastChar(FirstWord); + TempDirectory->Parent = CurrentDirectory; + + TempChildren[i] = TempDirectory; + break; + } + } + } + + CurrentDirectory->Children = TempChildren; + CurrentDirectory->ChildrenAmount = Directories; + } + } + + Command = strtok(NULL, " "); + } + } + + if (CurrentLine == 13) + break; + + CurrentLine++; + } + + PrintDir(&Root); +} \ No newline at end of file diff --git a/2022/day7/p1/input.text b/2022/day7/p1/input.text new file mode 100644 index 0000000..3601b1e --- /dev/null +++ b/2022/day7/p1/input.text @@ -0,0 +1,1105 @@ +$ cd / +$ ls +dir hdwsmn +dir lmlsvqsw +dir rlfgcqz +dir sjq +dir tpnspw +$ cd hdwsmn +$ ls +dir mrrqnc +dir qst +dir rlfgcqz +$ cd mrrqnc +$ ls +227398 rwhw +$ cd .. +$ cd qst +$ ls +152795 bblss.hnl +dir lvs +$ cd lvs +$ ls +81813 jwvtjgjb.sss +$ cd .. +$ cd .. +$ cd rlfgcqz +$ ls +dir hlltch +dir jqpnnmwc +$ cd hlltch +$ ls +219753 rtgdsbz.qlg +$ cd .. +$ cd jqpnnmwc +$ ls +164333 dmvchsd.ncw +141721 njsfs.pmd +dir rlfgcqz +$ cd rlfgcqz +$ ls +278398 vhh.jtr +dir wfnpcnr +$ cd wfnpcnr +$ ls +dir njsfs +$ cd njsfs +$ ls +46895 twfg.gzb +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd lmlsvqsw +$ ls +81577 bblss +12519 dlghs.dcz +260260 gphgq.ztw +dir mldg +6570 qgbg +61210 twfg.gzb +$ cd mldg +$ ls +152240 bgddpvj.cgb +dir rlfgcqz +$ cd rlfgcqz +$ ls +dir dbvjfgff +dir dnnd +112649 qwhmdlf +dir wcqpzpp +$ cd dbvjfgff +$ ls +dir rlfgcqz +$ cd rlfgcqz +$ ls +278899 wmclvlvq.fbf +$ cd .. +$ cd .. +$ cd dnnd +$ ls +17486 zhqjt.dwq +$ cd .. +$ cd wcqpzpp +$ ls +195207 cvqtfn +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd rlfgcqz +$ ls +63895 gbwqg +35085 lllv.jpl +155195 nhrbwg.dcf +84099 wsh.sps +$ cd .. +$ cd sjq +$ ls +48652 dmvchsd.ncw +$ cd .. +$ cd tpnspw +$ ls +81312 ftjrpmr.mfd +dir gcwq +dir lvvztw +dir msrdg +dir ncgljn +dir njsfs +dir ptncs +263168 rwglhrm +192446 twfg.gzb +$ cd gcwq +$ ls +dir bblss +dir hlmm +$ cd bblss +$ ls +120988 qgbg.tcm +326021 tbvgfdnc.cvl +$ cd .. +$ cd hlmm +$ ls +287707 dmvchsd.ncw +319996 gpvfhpnr.jjl +$ cd .. +$ cd .. +$ cd lvvztw +$ ls +dir bdsvzhbm +155345 ftjrpmr.mfd +112094 qwhmdlf +9917 vnmtgsq.gcj +$ cd bdsvzhbm +$ ls +dir jmmltt +dir zgcjl +$ cd jmmltt +$ ls +130686 zsp.dcc +$ cd .. +$ cd zgcjl +$ ls +318547 dmvchsd.ncw +$ cd .. +$ cd .. +$ cd .. +$ cd msrdg +$ ls +dir wjp +$ cd wjp +$ ls +301898 bjccpf +97684 mcnqbl.bwn +160132 qwhmdlf +315893 twfg.gzb +$ cd .. +$ cd .. +$ cd ncgljn +$ ls +dir bblss +119737 gdc.mrs +196706 ggljwvgj.blh +162440 mlgnvbhj.gbw +163186 qwqlfwfw.mfj +167447 twfg.gzb +$ cd bblss +$ ls +dir bblss +dir njsfs +137986 nlmbnm +dir qgbg +229544 zhqjt.dwq +$ cd bblss +$ ls +186733 wcqpzpp.mmr +$ cd .. +$ cd njsfs +$ ls +dir tjbrtt +$ cd tjbrtt +$ ls +284955 rlfgcqz.ltq +$ cd .. +$ cd .. +$ cd qgbg +$ ls +dir dmcmw +15196 ftjrpmr.mfd +dir gbpqj +236891 ghlm.wlm +156863 qgbg +dir wfvqv +$ cd dmcmw +$ ls +116526 dhzhmj.qpw +251858 dmvchsd.ncw +dir ffqghmp +dir njsfs +148820 njsfs.zvm +290169 twfg.gzb +186117 wcqpzpp.vsd +$ cd ffqghmp +$ ls +dir wcqpzpp +$ cd wcqpzpp +$ ls +dir rfmsdjr +$ cd rfmsdjr +$ ls +291669 psmg.ldm +$ cd .. +$ cd .. +$ cd .. +$ cd njsfs +$ ls +35762 dmvchsd.ncw +97427 njsfs +261675 twfg.gzb +15426 wcqpzpp +dir zvnjrnrw +$ cd zvnjrnrw +$ ls +18370 dmvchsd.ncw +10620 wsgd.fjt +$ cd .. +$ cd .. +$ cd .. +$ cd gbpqj +$ ls +10204 fdlpjd.tgr +117954 rlfgcqz +$ cd .. +$ cd wfvqv +$ ls +dir fsq +133485 twfg.gzb +$ cd fsq +$ ls +156862 qwhmdlf +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd njsfs +$ ls +dir bblss +dir bzlpqv +dir cvm +dir dbbngm +dir gbtmsjgl +224200 nrffnj +$ cd bblss +$ ls +dir dhmwcmf +280202 hmp +66351 ndnr.wjh +85218 qhrhjb +dir tcqnf +dir wjv +dir zwlpqrb +$ cd dhmwcmf +$ ls +dir qtdf +dir scsllc +$ cd qtdf +$ ls +dir fmbsgvr +$ cd fmbsgvr +$ ls +1641 jdtcd.qhw +109819 qwhmdlf +$ cd .. +$ cd .. +$ cd scsllc +$ ls +dir brthfcm +dir qqgh +81391 rlfgcqz.pcj +192835 rlfgcqz.rnf +$ cd brthfcm +$ ls +135591 qwhmdlf +$ cd .. +$ cd qqgh +$ ls +270614 djjq +dir njsfs +$ cd njsfs +$ ls +18629 fngbfvr +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd tcqnf +$ ls +25594 gvqjrdlr.fps +314758 rlfgcqz.ndb +269846 wcqpzpp.gvz +$ cd .. +$ cd wjv +$ ls +dir dtddhqbj +dir njsfs +dir pgfrd +95552 pjzgwggg.hpc +29427 rlfgcqz +dir shhzzrf +$ cd dtddhqbj +$ ls +dir fmzhtfd +36982 ftjrpmr.mfd +dir gqsg +dir wcqpzpp +$ cd fmzhtfd +$ ls +dir psqnghl +226561 rttdhnnm +220713 tsfcpzzv +$ cd psqnghl +$ ls +136028 qwhmdlf +280539 rlfgcqz.nzf +129468 zhqjt.dwq +dir zlb +$ cd zlb +$ ls +dir qgbg +$ cd qgbg +$ ls +188576 ftjrpmr.mfd +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd gqsg +$ ls +302134 dmvchsd.ncw +161569 drzt.pmq +$ cd .. +$ cd wcqpzpp +$ ls +254804 bblss.sqp +280941 dbvw.mdw +dir gfs +317925 njsfs.wpr +dir qgbg +$ cd gfs +$ ls +dir jrctzlg +dir lrnzq +233927 njsfs.bmd +45942 twfg.gzb +125290 vbtr.wvj +dir wcqpzpp +$ cd jrctzlg +$ ls +88635 qwhmdlf +204938 vlnwcv +$ cd .. +$ cd lrnzq +$ ls +253736 bblss.ddj +272769 vsrvgsc.cwl +$ cd .. +$ cd wcqpzpp +$ ls +301739 ftjrpmr.mfd +63733 qwhmdlf +$ cd .. +$ cd .. +$ cd qgbg +$ ls +dir cpr +196886 hgj +188348 lqvq +132024 twfg.gzb +213866 zhqjt.dwq +$ cd cpr +$ ls +dir wznlzpzj +115532 zhqjt.dwq +$ cd wznlzpzj +$ ls +dir bcwnrc +$ cd bcwnrc +$ ls +289013 dmvchsd.ncw +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd njsfs +$ ls +296178 mpprqbgc +128104 zhqjt.dwq +$ cd .. +$ cd pgfrd +$ ls +dir slgztr +$ cd slgztr +$ ls +dir htjd +dir rlfgcqz +243751 twfg.gzb +dir wcqpzpp +$ cd htjd +$ ls +216650 ftjrpmr.mfd +$ cd .. +$ cd rlfgcqz +$ ls +144834 qwchd.qtn +$ cd .. +$ cd wcqpzpp +$ ls +133476 qwhmdlf +$ cd .. +$ cd .. +$ cd .. +$ cd shhzzrf +$ ls +dir hbp +dir jqfhdn +dir qgbg +dir tftrnfpd +dir zppjlf +$ cd hbp +$ ls +158562 fbwsrbbg +297036 zph.mbd +$ cd .. +$ cd jqfhdn +$ ls +166463 bblss.sgd +125240 dmq +48389 ftjrpmr.mfd +dir njsfs +dir rlfgcqz +$ cd njsfs +$ ls +dir tbjp +307427 zhqjt.dwq +$ cd tbjp +$ ls +76200 rcfv.bgh +$ cd .. +$ cd .. +$ cd rlfgcqz +$ ls +294331 bblss.vwj +$ cd .. +$ cd .. +$ cd qgbg +$ ls +dir qnpdnjdl +dir rdmj +$ cd qnpdnjdl +$ ls +dir sblj +$ cd sblj +$ ls +39051 twfg.gzb +2405 zhqjt.dwq +$ cd .. +$ cd .. +$ cd rdmj +$ ls +213965 zhqjt.dwq +$ cd .. +$ cd .. +$ cd tftrnfpd +$ ls +294450 chbgd.vjv +318594 hvwbj +dir nznzzw +96252 twfg.gzb +dir vlfdtwj +dir vsvj +dir wvnjtmt +dir zlj +dir zwqff +$ cd nznzzw +$ ls +115971 nndbd.rhl +$ cd .. +$ cd vlfdtwj +$ ls +167648 ddvqzlh.cpw +$ cd .. +$ cd vsvj +$ ls +dir dfzcrmt +dir ffpvbczr +110196 njsfs.zsh +257204 qrgnw.mhw +dir rptmp +131871 zhqjt.dwq +$ cd dfzcrmt +$ ls +dir hqbthjc +dir hztrwjr +11874 rsd +252800 zhqjt.dwq +$ cd hqbthjc +$ ls +135533 bblss.clm +231343 rlfgcqz.zfh +176061 rrzqhdp +$ cd .. +$ cd hztrwjr +$ ls +dir zmpm +$ cd zmpm +$ ls +297930 rpb +$ cd .. +$ cd .. +$ cd .. +$ cd ffpvbczr +$ ls +dir qdvppt +dir qgbg +$ cd qdvppt +$ ls +323419 bblss.lnl +$ cd .. +$ cd qgbg +$ ls +158408 dmvchsd.ncw +$ cd .. +$ cd .. +$ cd rptmp +$ ls +280342 rqlbtpw +$ cd .. +$ cd .. +$ cd wvnjtmt +$ ls +dir bblss +249330 fgc.ftp +dir gtbbfzzn +dir wcqpzpp +$ cd bblss +$ ls +1570 zhqjt.dwq +$ cd .. +$ cd gtbbfzzn +$ ls +65850 lmbrdhc.jbz +$ cd .. +$ cd wcqpzpp +$ ls +62362 qwhmdlf +$ cd .. +$ cd .. +$ cd zlj +$ ls +103758 lrhflmsw.qhq +163919 qwhmdlf +$ cd .. +$ cd zwqff +$ ls +dir ghfc +dir njsfs +$ cd ghfc +$ ls +131979 hpcgrvms +$ cd .. +$ cd njsfs +$ ls +126387 wcqpzpp +$ cd .. +$ cd .. +$ cd .. +$ cd zppjlf +$ ls +241176 rlfgcqz.ctz +$ cd .. +$ cd .. +$ cd .. +$ cd zwlpqrb +$ ls +272627 bblss.gpv +261635 blczb.srs +dir lnhzzl +153210 njsfs +55633 twfg.gzb +$ cd lnhzzl +$ ls +dir dtwcsvzf +$ cd dtwcsvzf +$ ls +74858 dtz.rpc +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd bzlpqv +$ ls +157801 gdqhdd +318418 nmq +266938 qwhmdlf +$ cd .. +$ cd cvm +$ ls +1145 dmvchsd.ncw +233344 ftjrpmr.mfd +263393 njsfs.hvb +74436 twfg.gzb +dir wcqpzpp +96596 whq +$ cd wcqpzpp +$ ls +dir rlfgcqz +$ cd rlfgcqz +$ ls +244048 gspw +324759 qgbg.wrf +190410 qwhmdlf +$ cd .. +$ cd .. +$ cd .. +$ cd dbbngm +$ ls +dir bblss +184222 bcfzt.grj +dir rlfgcqz +41851 sshb.nzv +113784 wgjc.mrr +13594 zhqjt.dwq +$ cd bblss +$ ls +102201 qwhmdlf +$ cd .. +$ cd rlfgcqz +$ ls +91063 bblss.msn +2918 dqhbnt +74771 nbprqmbs.jwj +$ cd .. +$ cd .. +$ cd gbtmsjgl +$ ls +207664 cnfpq.wbl +$ cd .. +$ cd .. +$ cd ptncs +$ ls +dir bmpts +dir bpmf +dir brhp +dir gzjppjfr +dir jrd +321627 jss.jsh +130602 lfmrp.csp +dir prfz +dir qgbg +dir qjgchtwb +dir rvqrjms +174888 ttmwlrs.wbc +dir vwgsmc +55854 zhqjt.dwq +$ cd bmpts +$ ls +124846 dmvchsd.ncw +283278 mlcmzqdf.pfj +dir plbpr +312240 qwhmdlf +74910 rlfgcqz.jqp +dir tvrvwv +$ cd plbpr +$ ls +37432 dmvchsd.ncw +dir wcqpzpp +$ cd wcqpzpp +$ ls +18638 bsfsc.gfs +$ cd .. +$ cd .. +$ cd tvrvwv +$ ls +dir tsgp +$ cd tsgp +$ ls +141689 wcqpzpp.jdc +$ cd .. +$ cd .. +$ cd .. +$ cd bpmf +$ ls +201372 ftjrpmr.mfd +dir nhtjhsp +dir qgbg +dir sbqfdzh +dir wcqpzpp +178078 zhqjt.dwq +$ cd nhtjhsp +$ ls +225213 ftjrpmr.mfd +$ cd .. +$ cd qgbg +$ ls +214193 cwnphff +296165 ftjrpmr.mfd +260246 zhqjt.dwq +$ cd .. +$ cd sbqfdzh +$ ls +281546 njsfs.rjz +dir qgbg +246263 qqbsjtp.nbn +10231 srllsw +$ cd qgbg +$ ls +92801 dmvchsd.ncw +66784 pbz +226132 wcqpzpp.vjs +242775 wgt.bbw +$ cd .. +$ cd .. +$ cd wcqpzpp +$ ls +55886 bblss.vzh +313619 rlfgcqz +$ cd .. +$ cd .. +$ cd brhp +$ ls +321184 nnfzrm.mgz +190867 rlfgcqz.qbs +$ cd .. +$ cd gzjppjfr +$ ls +67036 ftjrpmr.mfd +$ cd .. +$ cd jrd +$ ls +293867 dmvchsd.ncw +dir drjbp +dir njsfs +10759 pcpvd.hsg +dir qfghvhsr +dir thf +268195 tmwvbl +$ cd drjbp +$ ls +dir ccdmcgvz +276381 gbhhwlv.rlt +252224 zqt.wpc +$ cd ccdmcgvz +$ ls +4082 cffmcz +31006 mws.tvb +dir njsfs +$ cd njsfs +$ ls +dir bblss +$ cd bblss +$ ls +180561 lfd +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd njsfs +$ ls +115688 qgbg +34653 qwhmdlf +$ cd .. +$ cd qfghvhsr +$ ls +3280 ssg.ctr +$ cd .. +$ cd thf +$ ls +dir bzhbrlh +dir qgbg +$ cd bzhbrlh +$ ls +148423 wjtlhwq +$ cd .. +$ cd qgbg +$ ls +dir rrtb +dir slhbmldf +$ cd rrtb +$ ls +30387 rlfgcqz +$ cd .. +$ cd slhbmldf +$ ls +dir vszhrc +$ cd vszhrc +$ ls +235629 qwhmdlf +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd prfz +$ ls +254587 bblss +dir bmfg +dir bsw +dir cfjdjcmt +321761 dmvchsd.ncw +35369 ftjrpmr.mfd +dir nqrbhdcn +237737 rlfgcqz.wsp +dir smdsrzlc +25049 tbwfsp +$ cd bmfg +$ ls +dir bblss +275693 wcqpzpp.zvw +$ cd bblss +$ ls +dir lddn +$ cd lddn +$ ls +dir mqlpwvcg +$ cd mqlpwvcg +$ ls +34635 zztv +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd bsw +$ ls +dir ljqv +dir vhpqbw +$ cd ljqv +$ ls +119525 ftjrpmr.mfd +$ cd .. +$ cd vhpqbw +$ ls +154199 twfg.gzb +$ cd .. +$ cd .. +$ cd cfjdjcmt +$ ls +22258 zhqjt.dwq +$ cd .. +$ cd nqrbhdcn +$ ls +dir bblss +84121 fbgqdsn +232625 hrjft +201822 ltfpl.lsq +194572 pgbqncwc.vqq +43024 qfgrmw +dir wcqpzpp +dir wvtnznjn +$ cd bblss +$ ls +326048 jctnwzn.zcq +$ cd .. +$ cd wcqpzpp +$ ls +265643 bzjmjng.vhr +dir lwt +dir qgbg +164876 twfg.gzb +dir vswqzjc +264349 wcqpzpp.lzp +$ cd lwt +$ ls +156024 ftjrpmr.mfd +287930 lmjwqw +dir qvr +56184 qwhmdlf +203952 twfg.gzb +95508 wcqpzpp +$ cd qvr +$ ls +dir ndqmn +$ cd ndqmn +$ ls +153880 njsfs.fvr +$ cd .. +$ cd .. +$ cd .. +$ cd qgbg +$ ls +244154 ftjrpmr.mfd +dir pztf +dir qgbg +dir rlfgcqz +dir zpvcn +$ cd pztf +$ ls +dir njsfs +dir sfrbvhp +$ cd njsfs +$ ls +268512 dmvchsd.ncw +$ cd .. +$ cd sfrbvhp +$ ls +dir wcqpzpp +$ cd wcqpzpp +$ ls +2126 dmvchsd.ncw +$ cd .. +$ cd .. +$ cd .. +$ cd qgbg +$ ls +123331 zhqjt.dwq +$ cd .. +$ cd rlfgcqz +$ ls +4261 lflphd.cfn +144504 twfg.gzb +110656 wcqpzpp.cjr +$ cd .. +$ cd zpvcn +$ ls +259119 qgbg +$ cd .. +$ cd .. +$ cd vswqzjc +$ ls +dir qgbg +dir rlfgcqz +$ cd qgbg +$ ls +76795 qwhmdlf +dir wcqpzpp +293923 zfcwvpz.vrn +$ cd wcqpzpp +$ ls +296986 qwhmdlf +$ cd .. +$ cd .. +$ cd rlfgcqz +$ ls +dir dtwv +dir rfbrzf +200095 rlqrlh +$ cd dtwv +$ ls +306977 bblss.dzm +139644 njsfs +$ cd .. +$ cd rfbrzf +$ ls +96622 cnb.wdl +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd wvtnznjn +$ ls +320558 lvtrqjnv.twq +$ cd .. +$ cd .. +$ cd smdsrzlc +$ ls +dir mbfqdbl +$ cd mbfqdbl +$ ls +dir hrhc +$ cd hrhc +$ ls +110162 hgbng +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd qgbg +$ ls +41978 mrfvnb.zbh +172912 rlfgcqz.qlf +$ cd .. +$ cd qjgchtwb +$ ls +243299 dmvchsd.ncw +91104 jbwss +207317 llqnrd.czw +145298 znzb.lsj +$ cd .. +$ cd rvqrjms +$ ls +40049 twfg.gzb +$ cd .. +$ cd vwgsmc +$ ls +dir qzl +dir rlfgcqz +dir tmpjd +dir vqt +$ cd qzl +$ ls +324024 cspbrpgv.fcc +8468 hfdwz.bjq +dir nvrpj +46755 qgbg.lhn +247926 qwhmdlf +dir thtq +17180 wcqpzpp +$ cd nvrpj +$ ls +dir vpscvbj +$ cd vpscvbj +$ ls +225620 bvrzrw +$ cd .. +$ cd .. +$ cd thtq +$ ls +dir pqqhcl +276922 qwhmdlf +59145 sshgg.bcf +dir wclbp +$ cd pqqhcl +$ ls +123067 vvhlq.bbg +$ cd .. +$ cd wclbp +$ ls +dir djbbpzjz +$ cd djbbpzjz +$ ls +5446 wtn.gnz +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd rlfgcqz +$ ls +dir njsfs +$ cd njsfs +$ ls +178834 flrr +$ cd .. +$ cd .. +$ cd tmpjd +$ ls +1973 fnlwgc.rbq +240728 njsfs.sgm +dir qgbg +51532 qgbg.vdc +330859 rdvzpf.lld +dir sjlq +259561 twfdn.vnm +dir zlbmf +$ cd qgbg +$ ls +273408 bznqvg +45710 dmvchsd.ncw +306311 jcvn.brh +269315 rlfgcqz.crg +51046 rnqb.wlt +dir wqfprrd +dir zjscb +$ cd wqfprrd +$ ls +276417 zhqjt.dwq +$ cd .. +$ cd zjscb +$ ls +276541 bblss.dhl +dir mlsdv +dir njsfs +$ cd mlsdv +$ ls +251030 qwhmdlf +$ cd .. +$ cd njsfs +$ ls +dir cfmfsbc +$ cd cfmfsbc +$ ls +234880 zhqjt.dwq +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd sjlq +$ ls +25547 nqvnpgs.zhl +$ cd .. +$ cd zlbmf +$ ls +21812 pjn.hbf +dir rcgvwrg +$ cd rcgvwrg +$ ls +19512 qwhmdlf +$ cd .. +$ cd .. +$ cd .. +$ cd vqt +$ ls +80263 njsfs.zmr \ No newline at end of file diff --git a/2022/day7/p1/run.bash b/2022/day7/p1/run.bash new file mode 100644 index 0000000..07f0413 --- /dev/null +++ b/2022/day7/p1/run.bash @@ -0,0 +1,3 @@ +set -e +gcc day7p1.c -o day7p1.exe +./day7p1.exe diff --git a/2022/day7/p1/test.text b/2022/day7/p1/test.text new file mode 100644 index 0000000..bcbb513 --- /dev/null +++ b/2022/day7/p1/test.text @@ -0,0 +1,23 @@ +$ cd / +$ ls +dir a +14848514 b.txt +8504156 c.dat +dir d +$ cd a +$ ls +dir e +29116 f +2557 g +62596 h.lst +$ cd e +$ ls +584 i +$ cd .. +$ cd .. +$ cd d +$ ls +4060174 j +8033020 d.log +5626152 d.ext +7214296 k \ No newline at end of file diff --git a/2023/day1/p1/input.text b/2023/day1/p1/input.text new file mode 100644 index 0000000..a6eadb0 --- /dev/null +++ b/2023/day1/p1/input.text @@ -0,0 +1,1000 @@ + ninefourone1 + 53sevenvvqm + kscpjfdxp895foureightckjjl1 + 72fivebt9ndgq + 28gtbkszmrtmnineoneightmx + four66jqrbtqcsxjtqjvfjhl1 + four8pzznjbhxlhtz6bhtzdxjlg1 + rgxjrsldrfmzq25szhbldzqhrhbjpkbjlsevenseven + slkjvk4threesevenznjqmmfive + 61ppgrkmkfhteightone + 1threesix67px + sxbjdbtlnjrmlzgxneightthreepmqxdxhfk8jfrheightwovp + twofour2sevenk + sevenonezknqnkfqbzffjvfivetwo94two + 45xj + mp7one6eightvhfnmfive6 + fhtctftxm3threefour2b + 2dq7bdmhhs92 + pdnbqlbvtcxgpnfhmsfhzstgm173 + 8fourvxkddsrlcvseveneight + 15zqpmsix77hlljgfive + jzjv6seven + eight1vbfive + 721sixsdzbqtskbpkqbcmgmlpk5psrhr + pqxdxcx5 + twozsf2five + 7twosixthree775 + 7xtxrch7six + 729twofourlqrxtwo + qtvbgtclhnk4ninefourseven5one + jvhngkcdjhnmqghdbqdzqssf5onegzjbbcchboneightn + five8two14five2nine1 + one3twomddthree + 8nine9two + 7fiveeight9ninesix6fivethree + 254kcd61dc4two + 7sixonetxvthntlngtwobzkbz23 + 8sixnine6 + threedqtgmv2skmvcd + 7ptdhpvr1 + lsvmzvzvd9mqxszjmbddkmxzdxsninedmglzlzphtwo + kgdt12seven4xxtttr5 + nrdtgdftjmfour6fxjninenineblqlthvpcx + ninezmstcdfchc11onebmmfdfhvdncrhc + 1fiveseven + oneone26twoeight + threefivenine98one9twotbbcq + 9cm7ninestc + jcrbmcjtrlzvz7 + nine8nine22 + 3nineoneseveneight + 58four2three + stwonefourthree9twonine4six5bvxgkxf + ninechzcz4seven + 2tgzgmtzzpjdqqz + brsptjppb28qxcxxjbzpeighteight + eightthree3ninejrft4 + sixqsgkzdjmgpfive4threemxltqdxsfive + vxfd2q8 + khqhgqlxslkmbrvljcnineeight1gjgcqmnbdczqb8four + mvbltrgpfourcclxftbb7gcbqcptvgfsevenrdm + 61eight + six8fourthree6fourseven6three + jqdfxvhjg3sflkn2sixptxxsqrfml + 6jtxs + seven99threeone + five6sevensmbbrjqvdbmkbsqtwonelg + fdvfsndt32fourgllgfrninebhnzzczfive + 9hxp9srhjhjjvqljhzprcjpqreightzs1 + djldhkkcn55threethreefourflnxnbzhkzmx + fourfive43chfvjnvjrkpxlgjrfnqbl + fxjgtj4 + 1sevenfour2fiveeight + seven43rxxeightb1 + 9sevensnxkp3lpzxfxnntkxzkrhk7jzhmtvn6 + 25one + threeone7 + 1pkfvsxxthreeoneseven + ztbvfqnpz2xdhgdjmgvfourtworqbxqsh47 + 8four7sixninesix + threedgl88cczqhqxjnc + nineeightthree4sixfive3sixdqlmscqjk + 16crjsdl + tgq2sixhc7three + tzgsqspndt5xnqlthghzfvkkhone + 4fxdqrs64ninex34gd + seven22 + kghfkrpvnppfncbhhqpt55bjf + hjhb71bqdrrgsrkqdtsgrxgsscqjmtfzjkzsbp + lgdnt9threeeighteight97 + pvjhnk83sixncvgmsjltwotdmmpxknhvntfndxr + 7449 + qdfzv9hkprplzkfh + 66three5five4zdsfrcnljqmsxf2 + veightwo27bdbsvseveneightrcqcjxsixeight + 1thvkkk + 8bnxqfsdhzppblzlzbkfsksfscmb + zseventbdzlmhnnrfive1one + sixxnmntrmp6srcsqbrqnjfiveeightfive + 4trnzlshnjtwo5twocxrvfssbj + 6two3twonetqt + 55qsnx43 + 3three23tpctbkrnqv + sixqk4cnfdmtltmlhqxtwo41glkhdhgnt + 35fivesevenpfournxzsbbgzthjvlvzrnine + tworkzgkcvcone53nrvgdvgtc + two9llkjbkz8pklrsgqqzr2four + ninecgpbgcnine4tldjqsone4six + 2tfjhtfourfour + onebhlhdvvqx1sevenmsixsix9 + pjgjt6jkrgshxltfnine8four45 + 4vsqfljrfiveqeightnvbdb + 11nfslqvhm + 7crrhqxsfive8ctkzbhqnine + vrvtglvthreettrkq5bdlrtpx718 + 1btbxlthreedtrzgeightnineqczhqm3 + 193 + fcbzxqxxjtmn47ffschdrbeight + twoh1gqkrnm1 + 7ninesixpzpsn7 + 5kkvzpgqd + three6nine + 32fdn + 22twoxgvktxpxmbjqtgtbckx + 1hdtftwosix + 2jfc + six5nvzcgmrscjn5eight4 + nineqhtczsninetwosix4five + 9three6sj + hntktlbqmldrphqzxkhfour193 + twotwo5259 + v7six1vtlxnpm + rhsm2 + gprmtxbhlsv8onefournine + 2fsrbtdvft15six1kxpqbnqsxh9 + one5onemxthree8 + nineqbxdbznzktxsmstsntzffour3one + 9blhkhjsgsfgsblzdtqqfour8 + stz4889563cb + vjrbs6threeptbbmncz7hqhqgfgldtseven5 + vbfs1 + zjqgczjsjpvzvjseven4 + sixfjzbrrhcfqvglxhnsxninedrvtvjbfqjdbrzblkq6three + one3threegcdldjsrsssixonefiveonechngsl + 7srxv4hsgjqsqfvv1tdngkpjrczkl4 + 5scgdglnjbnsix8fivesixtjccvmkfxfnzvhctgpncjc + 4eightfivefive1lgscbj7kpcr1 + eightknfssevenfive6jnpklczrpfeightwol + 37qccxllhzshninebvpc8 + 1eightmmcthkhf + seven8fourqn7tbgqnmzcc1 + sixsevenone4 + clhdvjnqnine9threesix + onetwoeight9 + 81z3threenjsdhnqxvtwonezv + 9hqtsb + onekgnlbthreeg3 + eightspnrpjb65fivevzfpvjntbg7drbgjccneight + ninerdlsix7285 + fournineninefive3vbnhmhdvjgdqcm + njzspqxpxrone7four55 + nfdhlqcpvzrrtsmzhgq3 + fourmfdtnpsfbxkjtgtgx5sixrppsqplqdjvnsixdtqvtdm + 21onesix6sixnine2 + fffsmvtt8fivenineglrqrmktzzseven + fivefoursevencjxmskrqclz2 + lgk27threefourfsqrbkntbkfourvflgrzhh9 + 617hj9 + ninegcxninetwohpfdxrb3tjjjtxtnvtwo + one1gnftc8onehtsxsmg + foneight3fsbhdqzr5twojbsdnntwohd9seven + zkzpfvcxqnbvrg1 + nine36cddqfvrf + rdjlpfk2pschfsdrpz + nine994three8six + three3nvflpftf2eight4 + 3nine2 + rxxjdk5354 + hf4eight8qjtcfldnkvtwofivetwothree + 7six3twodhnvmxj1nine + 57seven3six6 + qklbvzfhclfnllhhgeight8xtvld + 5fgzqhkssmkcfour1 + hhvjkdnlffnineeighttwo18twonecs + sevenbfzrgfm1six1 + nine71cskklxvcbnxtskdbqnpgklrxklcgccxjnssksrlkx + hmklhhjdthree77 + 3vpxclbgkpone3ninesrclfive + djfqkgjvqpfvdsix5sixtwoeightsix + eightlt7csvgxpnslk + sevenfoureightnld2mxtgpbzpthree1 + 11sevenglfmsb6 + onetjjnxvssg1four4drxbxpnpv24 + 2zdxs9mfnbgfmjln1threefive + one186ltsbck + 6fsbpb9sixhc + nine818 + xzqcpcdprsqjbgknkvztwo419q + 39qfdlcnkhg31 + 9djnlcrxqxhrcb8mczrxrm + nmb887525seven + jhmv3 + zhvdbn1fivem8seven4sixoneighttsn + 6zmmjqmnftclqbcthree + 6cpzeight92 + onepqfhtsevencvlfvnczhb91mmtdprqxmcnine1 + tvqdfxn8eight + five6fivercgrpbtjgv87jmcndclbk2six + jgtmrbvl68lpqkpxddqqxvsixfivesix + nine2nlffgkvmp + 1frdnhssftg4eightgclxsgqtn + 2sixblr94six + 94mlfv + 6vlqtcsmdd47hpfmlc7fiveeight2 + tklxghxv5bzc4hhcdcpmnine8 + four6one1zzgqghvs412 + xghjpblsfpg19ntpfmcfd + 471rbdblzs + 69fourhjxkvd7fourfour + jmrscfqdfppfdjskpk61 + five5eightnqpd9ninezknztwo + onelknchr7nrfprgmqzp + svxlxrx9892five2 + 3ntkbzzpxhdmrsix8ttgp + ndh7zlnrzpvmnine + one7xlnbmjjmfv62qvqjpfprbvjkpcnine + 99three5 + threetwotwo7dhtgtbchc7sixtwo + tmfxxph3eightgdccscdsrkmnhbb75 + joneight4one5 + nine3six + 81tqzsqpkv99 + sixvjlq7 + five7bkc + five3811threelfpzztxzk + 1fourkkpclqc3 + xgrpbmktcthree46g + bgcp4two8 + jtgeightwo7nine + bkmcrcq3eightrdtvrbglmxmmztqm + 7tscmg5one2jhhbfb1 + zt5khcrgqjg5nxxzxzd + five85 + twothree1 + eightsixthreetwo6b3tnjmcqdjfive + onefrlg7 + fivescbjxbdnvslqqsone5bdbvskpmksqmmfsncsmd + two83fourthreefourseventhree + dglrmbtkfltwofive8ninelzmrxvxoneeight + 8nine6sixsixtwo7 + sevennine4lbsevenkdnrhpltn + h3fiveeight4cplrnd + vhsgjbqm3ninedfhfsb + 93nine7jvjmlzgcztrqlxtwo + zhhhdddbbgcssvfzdhmpone5fivefournine + l9fourvjfbqpdslkmvxsdrnsgcvzpjxm + kxlseven5two + rbtwonegsdgvsjtpnnkone7mdz + phffknvthree2threeqgvfqxgnine7 + 2lgglnmthreeseven27three81 + lrgkrxx2 + seventwokxvzkvq6eightthree + 5fiveseven + fstwonersngdlngx28nine + 49oneninesix8four2q + hfvhzvmjgbfcbsevenrmhjhzkc3 + six84 + 8eight2gzblldzvkjfive + 6fz3eightzmsqb4qsbbsnthm + fcglpc2one51 + sevendqghclrpxt7pzone48two + three5one + 5sevenfivebbzkjlcnxseven8fourmzqlxxgjvc + xgg8one6782 + gggtljnnsix3lkhdqzzpdtdkmjtgjddkpgx4five + qrmsfc13onevnhlbgs + nrtwonethreerbbqffzh62 + 5eight81gcdbrx3rlk + mtdtxcmm2bgmqhgqrtxsn8 + onercx2 + 9sixoneqgr4 + xmoneightfour2 + six85foursixninetwo + ninetwo8four8six + qchclfzq47 + khrll3two21 + seveneightnine8868four + 3rmbmtbxjp12seven + 3tsxgvqxmzvxbdvxtgrvdbzqbh + eight7fourjtxx + fmb4one7threekbxeightwoj + vcsevensixseven577 + 2dkhlrrtrnbgzrmxm5fiveclhgn1eight + 1sevenlmrbnfour17seven + three5jtbvkseightoneseven4df + fourrgqxplbpbxtsgkm7 + fourqdfxchlc371sc2 + fqxlmeighttwo1seven + zvvlftlhfthreesix6three46qkstxvdt + m74pjgccfour1four + plphq933eighteight + cdbqlhbhj3eight + 4onevgdkxhz799five9fbljhpqmvk + two6qzgphxl + two1eight + onekxxghlonerqqlrs83threehvvdhsxmfour + npmsvvrdl2673 + fivejthseightsixtwo9vgrvjzbzsrxjv + eight2gqfive7mzjzpxqcvheightjfx + 1bxckdpt + dngoneightbtdptfn85 + fourtwovfzgmxjseven935 + 8onesix2drgjnlrxbtdlmlznine5 + five4mmpmqlttsx56ljdzldntdvthree + 1nxxgtwothree22twothreenine + 38eightsevennxctjfstp + 8fourvhnps3onellstpnztn6kvjccmv + 1bseven93eightfour + 5nphkdbhxqb2pqxtkvhxq + nvvx6fourjgkdsczjv + fourxrmq78 + 8tjmnvthree3ninetwo2five + p7cvtwoneq + 7thbggjbznrsixonethreeninej + xdgm1crqfnklk + onehmqqgh4ninenthjonegfjmvtfgd + sevenbsqtlk9 + 8seven9two9hdz29 + fbcjhzdgzdg8jgjvcrmgbcrsixnine + 3bssqrj44onedqxvhkfive1 + tmmxtz5dtxbbcjlfivesix + pvfqzksgrs4khmlvtwoeightlsx + psbttsmnpninefour42fivegsixfive + sevenfiveqscr7dfxpninesix5 + xmsjddzfxftsjfq6four6eight6three + seven42 + eighteight1nineeight9 + 8c + pmqljjjzvx5znxqnsfour8 + 78zlpxnvsqpgmgmk + four7fsgttnrgnlslr + fourtwo3jg2 + qlz18three5lpxfjvnfppqjxh + 4fiveonetthree4eight + 7lzffxkxnzjrtr + three7nineone46ksnshqgdpt + 8dntxkkkgdxggvhxh2onefour5gqzsqkm + tjsixonedbklrxxk2twonxdpjzb8 + mfglbrjrq93 + seven37xhsrxrvcgninexbmdrzxthreeonethree + fivegznvfztszqlhtrsslsmqq43212 + tdthjjjbkeighteightsevenpcbmpfq2 + five1eightq + three13three4vrsrrtp + cgztjgqgdths2 + dhxztfvlonetwokszrv8prdpm2 + dfkcklchjj8twonine52ppvndfcnf6 + three7ninenkxfourfive + 93sixlqxctdhmvssixone + oneqbvfrvteightnineninefivethree9 + jskrtmvsrqnpvcgsmxbonecmlrjpdpc4three + crpcfour54xxgzz + 9fivefhdpcqsd + fivenineclfctjninefbsh2 + fivexhrzbqpfxl8sixtwoeightllzplcpllk + zxgl5qneightsevenone + sixpdc17thxfive + 1twolftpzbmnzvdlkvlsevenhdvgfrjhmthreethreeddkdvht + 67twotwo71 + oneeightcgnhtdxpfnsevenoneeight13 + eightthreervd5tnj17 + ssrsmhxrsixeight3gbqggcvfqg29 + 6fivecvcdxnxhxxtlzthree + fournrrsix595 + p2qchlvplzdvchkbdzzbnsix7ninefour + fourthreefourtzvlrnr9m94seven + 4jxzkrfourvtjpsnrllkjcczmmqnsj4q1two + 4627qlpscgpjcnine539 + two6nineeight + 63five66fivethree1 + skndgzsbsntwoone1 + threerzgdxgtthree2three + 953lsdgn59 + 27bk + sixmfmbslpjjsixsvnqrvtxznffive5 + 2ninenlgpggxm42six234 + fdzfvkjnchsevenfivethreetscllgjvrtqckfnmz3cszmt4 + 7ninetlzsxjsl2nine3 + shsvptqngsevencjjthvfm9six5four + 7lsrq36threevzfjc62 + two59threedxmfourjfschvqvnine + khfqjmksxhbvs8sevenhzrmjtkgm + nine2stgflmsm8fkthhhjzlszdnmkmqpnjxrfc4 + twofourthree244nine + eightvt978 + fivefiveninesixnine6513 + 2lbtz19fourtshqsvblhrkhxbpfour + ptt7bntxhdvl + mskflsslvdlmndmmqmfourtczqlssnineseven5xxxkfvzd + l329eightsevenfourfivethree + rmlksxsixspp9fourhlcg + 8five9q + hqoneightsix19nine6xmjbtgjzgrhmlrxq + six38 + 9eight2 + 3sixbzhgfcg57sixsixjtqmknd + 9fchn58 + vrpftbnvonefour6 + vqgdtrvhnnxxsevenseven9eight + 56vnine5rdpsnlqcbq7three + vncrjds2cmrg7 + 213sixfivesix + tzclpzdsthree4sxgjvrzcrzcndnfour + 4sixseven1three7 + 8fbrggzmtqn8 + four79p + twonineqonemfour3dq + 5fdgpmrghtksn5onesixtwo + xseightwongqqsxtwo8jslclldvnb + nine1one + 9gxjrfourvhqzcxdhrtpxgtwonine + eighthfhtnvchtc7fjkrxsmhtm7rbk + thqxcfjbksix32xqrgqsqtx + 6qjqql + jgcreight7eight + 6onesix4threeseven + 5vcv1twoeight7 + fivesthreebvjntwo9jdxghmxvl + 632msc9threenineqfone + dqxfourkb4eight + 6stsp3nine + 566sevenpdmg + xprjdn55 + 9mjtcmhjb + twoninelkjznqztbc3twolnhjhdbfxmhfr + twotczpxn6qlcfdlpnq + 4ninefive + 1rs44three2gzczjdgq7ssmtgjbgbb + ggmzqbkgsix4five23bftjlmbfbd + threehfcscmmlqvcjtpthree98 + 7sixsixone4 + 2fivefvrr9four4three + 1zt1seven + 9hsbthqvhhsnineone23tslqccg + sixbqvd3 + 22148four3 + ninejlpbtnfive41rtzqjgfmcbncrrlnn + 9sixfour + qnhfivetwofjtqtlxd7lmrlfctq864 + 69dqrzhlqssgcsxtz54cpmjvrkcfiveseven + fiveqpv85frkmpgxgc + xxqsscldeightone9ngqtkf1nine + 5sixgxbnnjsvhf5dgxgone7 + sixsevensqghlvkfxnfour7 + 8gmgvjbfivesevennine + qj796fourone9 + rmpfsppvzdtwo4threetwotwo9 + dqvtrhm3nhtrxxccmfiveonedfzfvcghr + 4threejxkhnxcxjoneightp + sevenhkpfgdgsgnvseven3m + qhrvjcnfdbqchrsvchcxfourbkhhq9six1eight + 29pqnd + 1oneonethree627 + 5977rcr2threeeight1 + fournthpqbztrhnine64 + fjnjpgqxr86five4sixxhrtvbp2two + 7sdnvlb5two + 58vffgzcgx4nineoneeight3 + h1sjgqbhndbz1oneqgncmhnleightwos + gjms21 + onetwodphfznine51 + gxpl3fourzfz3 + five46 + mqsixccffmc9gqk1 + 5kvxpqrrpeightthree + threefoursevenfive2dhtbrxlzzl + shhczssbltllsmntntlqfqgnnl98rm + 5oneeight3vkqtwo29 + bv69fouronefourone6 + eight6five966 + 4xnrtztgfgcmnmnsevensix + gmsvtnjd1sevennine4xxhqfbrjjqbglqjngttc + mdnxhhteightfive5onenineninegqjbqmfd + xonefourtwo4 + onesix61 + sjmnjhkj2892eightnine9 + nzseven39 + 99nnjjzdrfsnjhthree1sevenfive + 6xmggtbnblnbxdpkzblnvcvjqmhvntwoeightseven + 76five6six + chdfjrlfhdzeight778 + xrvrck9five1hrvpfvkdcb7eightnine + foureighttq5sgdfourl2 + 4rnbxrhhboneonefournine + 5four3 + 1b97eight + hlcjghlhsf32tgknm565knxqr + onecqgbgdcmlb2sixsix6nine + kxdkz3 + seven5xvhrxdm + xblqbgkqgsixvgrthreezxnzhknklxhbmgl4 + fvnkc7threethreeseven + bmbqxv24jhdg + 97rfphlxvtx + 4pgblonelone + ptdpllrddeight3 + 9knpjzskrfd4 + twomjqdtbbvmj4shvsqrone3 + 9zzh3pjsf6mhxlhm9glglfztjm + cfconeight47fivetdsmndgvsmbqjvszb + 21vbqjz374 + sixeightqgfdjbhfd4oneeightone + tbccqdpz78srmcdx4six2 + 643gqtvhkljxt + klfjf4qms + zrnhkhqzpczzfqsgsrtxklpbtp72 + 1cnqfltrmhphg832three + twoseven5 + mxkmxlcgsixklclrkfr8638fourlrqpzgjq + nkbfkh452pthree + zvcktvd2485four88 + rfxj4 + three6jnr7 + two45rldjnmxkjphtwo7v + fivelncjffdnkzqrshvthreeh3p + ninejgrbmhrbqldeightnine6nine8one + 96lvpt2djrkc5 + 7seveneightthcxgthreeseven5hpfddktpj + 6bvn + sixbjxtphstzgspnmkcvc952one + gmmslrndvltlthree394sevenoneightl + threenine7onefourtwojxhzvqlseveneight + 5eightsix4txcczzmg + 84seven + skjpkhxggsvjbprhllgjhninetwo6 + 72bdpzccvone4zbdzlllnnonernlfvdpq + bvrtmzmtwonine29 + mrlvmdnlxb2814five5fjxzlhpn + lmrpf82rksix611 + tvq18oneqnmmzvtclnthree + jrbjc1zbbpqbrddt26seven1 + lxfivenmdtnhdmf98ptpxsgmgrxkmmznlk + zbmvchmxsevenddddthree2dxlddjp4 + three3onejg2fqgtjmpcgeighteight + three2two9seightfjqtwo + ninefive8sevenvnssix + 3cnbxxtgmf5 + kpmjcsfrjfgzhmbpnqmlvrhbhqs8 + 3vvcone64 + fvqksdsixthreexbfivetwo3 + sevenseven5 + 63twoone8vhbcpmmlfive1 + 4ctwo17eightsixkpvlgpj1 + rsgsnone1 + kbvxonemcqfive3eightone + ninenineone45threepvsmrtonejxmbnd + 37fklnjkslqk9th9 + fiveoneq8rcgdxtwo8jfkxq6 + rgd7 + 7rgkdpvp7qrb + 7crtxfmslxxtcxsv + mqdnltb23fiveqcdqtonethree + 8seven7 + 8cqhqlhndqjznqhdbld2nspnxbj99tqqhp + onelqn7 + bvbjfour7 + ldqzhvhrbgsrrkh5j + kjsjxdcqgjztldjvxxgr9twoxfknxrrrphkdzdl8 + rvscnztblp56ljqtwompclcf + 2dbtdgsevenhzctckvkvxvjljz + tvmhhxbbxvvsnlnineqsltjd92one + 9twoqdmtvbxhpcthreeeight + 81dvnkd87xbct + 6mnxqnndcjfivefdckzmppfsevenmqvvvbnrgs + lvl3qjk5 + 3fivefive + ktvsqzrf14eightmtnqbcktk5 + sevencdknznbxseventwo8rzggmvpbvlrs + hkhhrdxlml1xzbshninejzqc + eightseven23shkgzdgvvcxxfdv5 + 14five1sevenxfmhtptwo3seven + 47one + 2three3 + f5dszzs2 + xmxffxkxpkninethree8x6seven + glzoneighteightrnjqgjznjm9 + 63fznqxdfqt8 + 33nine + 4vrbmthreefbdzf + fourninethreesixnine9fourlvbgqhjbqncnlbjbz + two848dbvbninenine17 + pqzqgone1two + eight7lmxbhcsix + szr2fcvkljctlghhthree + sk81pxqhhhhvnjvgzfiveseven + cgqqkrz2vpdpzrthqssg7nineeight + 498eightfournine + eight85onesvxnineone53 + ninevmchpkcg2 + six2shsvqfivefourtwo + mdzckfvr72cv + twotwo7onethreefourdjtgjg + tworfclmm3 + 5sfvnkrmrptsix7four6kzlmclm + 1onedkqgzbr89kphvc8 + 5seventhree8eight9eight + kvjpgjgrcmpdscbfthreethree4mjqjnnzceightwohh + kjbmh1fdkdtznmsznvlconeznineseven + 1fmgpxhxpqznqscvbszhhcmglvtnzhbbjjbzg + 1mfqzkfnine5 + rrflkqslxztdlqxqkdnhqd7ps + 39123thhsmscbpxr + 8vnine4jgqrvqtshg3jhhdnbsrxneight4 + xkqgnfour87 + lsbnjqtzqz7ninenineone73lmkbnkhs + 9fiveqqgqblfivehttxk + 8twotwognd + 4xknbheightfour6358 + 4cqtpfjpf72eight3 + ninemjpqpqg8foureightsevenfcvpnrnnpzhcgkm + 37twofivedsxrzbpchnkgxqx + oneone57one2k92 + mckoneight9threefour1onefourhdrcrvhqcmngkjnsthree + 945 + tmmtwo7 + 57 + 6twoxzbfftnr27 + threenine4bqpztsixfour + 84eight + 3jpbnjrqhqfnxckqkqdvls + 9gzzjzz + 374nine + ninembxeight4sevent + threecq3 + cvn6cvqmpmfflkzphndjnggtktwosn + pgz7four5nineeightsixqrnfkdkgh + 6one781vstwothreef + one617fourthreefourxqxnpv + 8eightsqmkjkkf5xckcvd4lfnnfour + seven23qhntfmg56onexkjxh + f5s56rfltx282 + twosixninefive1tlzq + threetdhghclfsksql5oneninetwoseven + zbqzxmpb9pxlrthree + r4gxdzjnvzfonejnpmfcpgvxjjvkh8 + five338threejkk67seven + twolntxcnzvfr55sixtwofivesevennine + xhlppbqfr71brvppsixthreefddlgpfslqmdv + kxsklgonefjfpkd4threefive9six4 + 6srphqmtdoneh3glthreefour8 + rjzdmj1cqvxnx1nvcvbfctft9 + 3fqjdgbpggthreesix53 + 9fivesndgmkvckblktzkshglqgdl4ztwoseven + qqrxkqhnzb23two34nine9 + 8hrmffgstqpsixeightx1six + jngcsjnrhn2zsvcjmjg + 9zfdmhzxdnfour272dcrqgk + lbjbrfhjxhxjphzxsjsix4 + fourthree2seven1two + twosix87 + vrlqqkctddggcvcjcpk6hxbqvbxmtsix + mrcgbpc6dthzqmmthreefour6two + r2zntjxgpfqfmqh + fourseven3 + 6nfnsgchjdffttmgfnbvlxzoneseven8 + 8sevenqqfiveseven5twojvgk + 4rmtkvml4 + bprnine85 + sevenmfpcvlblcnine485fourseven4 + sevenseventhree68fivelhqgjqvcdqkvds + 3fourxsgghqnvtssnvfs7nine7 + 1fiveone5hpfdgvxb + eight2eight42twotwoonenine + lpdeightxcgpxkkeighthtjpsninemjlxrxtg31 + 4smqpjzsixonethree + mr6csbmgrdrjj3onelqd4four1 + 5sixvbscchd3 + 384sps + 4qzgsvmfx4ninevcclvcfrfp6tckcpvj5s + 8l5glclltgcjgbhcg6 + 3ldtdmjc6threeone + hsrtzl521nine5qqrtpdsp + z4v8threejdsmbfjpbj + 9sixln26eightwovmh + 848 + kndxtqpfrqxdxtfnqrqznpgvp9ninerlzcdvdtwo84 + kmqs84775seven + 5threefourzkg + 43five8cq2kprvdqrmxr1 + three4ttjqdh + 48nine7sixfive + 22x + sixrgtwo3rnbzkrztkdkg + 4t + 29bjpskmxneightppvthree + zmlzxvtlkt4seveneightbxseven + 5two5eightnpszzmbkncnstx4 + 9vk98sevenhznkxmlrlk7vdbqgvfjdk + 1sixb8sjkvdhfld + one42eight4mrsdnpfjpvdtq + 76fourntsrfllxkdfqvm6seven + skqndhr3nm4776 + 4xpmfxmvj633eight + 83ninecmpt + fourdthree9 + 9eightjqnnmthcrseven + 7threekgtf1 + xscj7threenmhsixseven5s3 + cqlzjt41 + 855threemlmmqkgtfk + ninefzmvjjtvbmgf8nineninetwonegcn + ccpkzcldfourkdtfkjxvfb9fourhbtwonsoneightnl + pkeightwo5seven88rdnzzsdkbjeight9 + threen2fjsfivesix26nine + nine4rz8nine7bglpcmkqfzpseven + eight94six8dpgrv + twodfctf278 + fltqtmdkgjsvf72three + llrtzsixsix4fivetwosixone + qjhtjqjhgkjkzlpxxclsrdnzk1gbqt + sixeight1sixtwo + one5413nkmqjtlbdkz22 + bhtwoneonemzpzkqeighttwooneqkmcmsbq4 + sevensix3three2sixprcqcvm + 25tjffdrtwohfqlkhzxlhb + 97gcgqgjnpsthfjfdv636jsxq + zggjmjone1297six8drzs + jbpvnineeightntkkshbjvr3nshnqzdlkjmkfive + 5four2gkkbxmpthreefour6 + 5two15sixfivetzpg + one4fouronemfpvnqseven + 9fnlbljdnzzfournine78 + djfljccrtvvqktzzvk61onesd + 7twohbkeight + seven1eighttwothreet + 4mdcljknhpqgxffqpj5 + nine9jlsmfgdgntwothreeeight4 + 136nh + 635ninejghg5 + cmone7fdlk9lfivemzvnhkcsp + 8eightnlndm + 6fourpb892 + fiveseventwosixfourthree7 + 5fm + ninegchdnrf63431 + 24sgnflnsixninenine8 + snm9 + 3fntd721dhhkrqqxsfpstsvzpgonetkhcr + jlzfbml61vdmgb7one + 266517 + 7fivetwo2vhchmg678nine + cgrp3vzn5ninetwofour + 666ninefour + 9s + svpcnlktpxtvk42jhsvvdpftxpsk + 2qznfzvbdr + foneb7eightfivehlbjjknninethree + kfp6 + l34pxxhxtd7d + rsbcrtwo27twocqlmeight + jkzgvqgpjfdqvmjfx2flnvjmgllxghhrbjjkfour2 + 45sevengdnf59twofive + 6fivespvkblrxvkcgdxktl + three9dvrssvl5eight4ftsix + seven56gdmlbfbjsl894sevencmc + 814 + 1one4 + onenine5fivekcrf1gvvfhlncsv + 2ctvq9djzddfxcrj + ntdlcqgsixvmfvlc4fourvlhtvvqmnmkrm + 9nineseven1seven + lcvzbnfourksvjqvmv47one5 + nine4blvlvlpkl6 + sixnqxrhnztzvpmbzmxjm19five + 18jtzhk + rzrhv8four + 2npghxvjonebchsprfhsjznrxvxnine + eightngsevencrjkxbhpgtxlzhgb46sevenqhqmlfx + threesffl9fivelgmndjfvseven92 + seven85 + 87six9vnshclz + threetwo7915three + one2vkbp6rhqbxvcl7 + bsbr1five91 + qd3mnine + jjvhltxtdh5nineone6 + mbxlnj7bbhnxonejtmtqjfrzqgtrhkeightnine + fourfourqrxdtfive2smnqp + 7tvjrszvrhdl5five + four15tvmpvxpvdjnine + sevenvv5tworpvdlseven3dlqvgblqtwo + nkckggninegnlqlnv25threexlhlbzvzk + 3vngmhprjseventhreeeightnine + nvqtpzsszrdvttfivenine56oneseven8 + 146 + fxfbone59 + f32dhffctkxp6rcngvtfq + sixthreefsixjhckmjqfive495 + 42four + 65nine984 + 5fthreeone9twoqqsfvzmp + ttwonefive4 + one6gfxseightxqcq6 + 3sixnrjtwormrncmhxeight + jhdxnmsgsdsevensqsslbsndpdmznmldbgeight3tcvjjv4 + 5sixtvpckxzcjzbmrzk9 + pmdmnfgkb3six8xsmstsmxgmm + 53onetvlgbglq4zbqpdgsskzdsksd6 + kzjcllvz6skphkfdxfiveqrbhmk + 75qqjdgxlmfthreevzbfjdlxkfqqq + seveneightjntpjthzptwo2two + 2five4fvrfxxnine4qzkkfkmq + 2xlvcltn7 + fnmggtj2rqxzh7three + rzpjkgtml1 + 2oneseven4one7xps6 + rljfhfrhmzkjxktnszbkpfspxdkqneight2 + pzgnine49six2 + plxsqeight2 + eight2sevenseveneight8rfcrsdlxb + sevenclpqqfxgjnmtwo9 + 9sevenrqsixone8eightrxqgfsbjh + kqtkstrxhtfzbllhl4lqvqkcbr + hfplfpbltczflpp7nfive8 + ninenvqfrvtwo6onel + threev65 + frhn18six9sixninefourrsqzgd + mcxckfg5vpkbs89gbninexjzvlj + fivesixdx28 + 7ppbqv + hs9twopcvpgtjnrsvksskpc8 + 9mlpckzj2twothreefive + rkrgdclkninetwo6eighttwodc25 + tfivefourtwohkhhgsqlj1dtdcxmxkf + 1four6five + fgbvmvxvtsix2twonine2sixfour + foureight66 + s6fourcv + mxl358sixfive8six8 + ztbtwo73sixvxsix9four + eight7qmdlcxfive5 + phgfivekrjxdmnzsqsix9 + 1mfqsevenhz + rjhcdgzngtc155bqlttbsxklpknvlmk + qjkdqlrrs6two + sxlmqzxdpxdnj9fivetwo9seven5 + 2qtdblb2 + 8qgdzrsixtwo598oneightp + 1shdb944 + vrlpronek2 + jm52 + 8eightfourseven11mvtrmtkr2bmp + mnvnjxrgmrxhztwo2ssrdpqk + ztfive435three6threetwo + tnrrdnbgnbhzljdxhxxfrqkcpeight8js3 + foursix6zcsrztvgjxmp + five7fourgnnkspxcmczcbgsbdf77five + fgbrzkmvgrdbqjqndpfive81onetwomtzlfb + 2qbsfd1two3ninetwo2 + 8tdjxvfpvdvone33three + lpchnmln56twofive8tfour + cfkfbhppjf6fourdkfxsvdtbcjspzlseven8 + 5fivestgkzsevenonedkhhrkthree + 37nine8six8onefhvvbkmgdfgtv + 26hzz + 5glvnsztmnfjmkjseventdm4five + pvnnqrqvftrbcvnnthreenine5 + mgscxxlp3eight + 53eighteight + two1oneqlcdkbddfour + jbll3 + 8threeseven5tmtrgdhqxd + 8twonine6s1 + 91seven5pmqrjlhqrtzs + jj3sevensix4482 + jeightwo7lk4three + zchchxmsctzffivefournine9sqhqkgfour + 72xct1 + vnsxvsqkhpfvgdseven23gzcmltzgone + xzjqhcvsix1fivecjtxnfivekmvjdc + zdfourgjlhtwo24d5klkpdgqbz + 7sdzzdbrxbtonerjcmknnql4dfzqccvqt + tncqzxjq9twofiveqkxdrxrpj894six + dddmkctrzlpfmsszeight8zvbpmpkg + three23ckjhgjc + 375jzdhnfcfr19mhsbnplqh + vpbbjlzone5sevenseven33four + onejzfsevenrbskjq1four + seven13one + vcnkfgv979one6zln + rqlxzzbmjb4lmbthreektqsdcfzbmdsfivethreenrxdlkqt + qkoneight8 + 5rfourfivenine94fdprsix + onexonelzdh2lcbqpzq6 + six6v + 7gtgxqnnine + tsljzhntwo3fourpbjncgmvf3fflvjxp + vfkdone9fivecftvmjdk + xc5three6eight94 + 18363one7 + 8fiveksshdlfmzhljhcmjrn7kpv5j + xbhmxfhbjnjzmninethree7 + 2933mkmdqjcl + 6ncvzqxfvgfive + lnine5fivetb4qmfktnqjxs + 93187 + 5mqninedzkfhbk + two7eightntdbsix298four + sixone3bspxqxggkmkrbcqrhfrxrlgjrlvfl96 + fourfivehqls3nine + threedfklszn2threeqzhh7one + mqmftzglone6kjpgglznhrjz89 + 146cvkftscqsevensixnine + nndhdgpd484hxdgjtfsdxxg9 + 6mbzckbjphg + eight6jbjtnld2mdjtd + zjtzcqxb736five + jlkdmone8 + gvjnjvmlfvcmvnfb8xcgjcmjqvz1bzcctvsixfzqjlhfkfk6 + vr6onejnjmrrldnsixsix5six + ninembtmtkgbctlfive45cjzzrmgcscfbcgeight + 2mdvneightjzgffivefive4 + hmdnbxghxjxt4czshmsfzc + 61six18threehrcj + six3five6eightkdfzhxcjkdhq3 + jrhqrqkpd4hsixdsbjdpscclmnnhknqq16 + jflzcxr3three + threefourghvgsktkc93cmjmsgh8one6 + 96fivesevenslklhsfmpz + jgkpgfnnbq2pmspdfhsqxfour + g4fourthreerpkdhjhlxlzvnineseven + xkxhkphnkvpdnlncn86srxthree + 7sixsevenrfour + 5zr72qltsrbdsv + ninervqzdfzqmf6five + 8jslpvs73 + ztvlxndlm5twohdhmtrdnhbzdrxb + seven6nine4dpdpvrtrmqvql + jfz1 + 5nineeight5onefivecxtqbsdtbthreefour + fourgeight6threeszgseventwo9 + sixfour3 + npl8 + tzjkffsvbjseven5rhmlxonezlx + 5dhtpfour + twothreebxtfndvdnine1sixbb9 + five9nineqlzrmtgs5 + 9v764nineeight + five4eightlsix6 + 3nineeight21 + foureight8btsc + 3xgdgtb2 + 7threetwonexqk + kkqsix48onefourhlsh8 + onekgtdzgfh2fivenine2onerb + six4zgcnlhmltrxp5xphvtwo9 + eight7cdqggpssix + niner9pzmrbqldkljmgphrrgmdjseven6 + 439 + twofoursixrthree5bxppnhqtx + bmpnt3 + fivepkzkzpghrptpksevenseven83two1 + 9fiveone8one + fiveseven3lqxghdlskbltrzrstwo + fournine3ninephlghonetwoeightbvmdcconeightq + three2pvklmzqjfh4sixonedrctlsfdfour + three91spjlscscjcxbbpdhrg37 + 57qqjpdfppsix1qxrh5mlmncf + 4nfone5eight + eightqsix7one + 4jtvxfd38hnrmqkbnvfxpp + qmfsspkfour1plmslcrsseventhree + fzckcbfvxbpsix7nine + fzrj4 + 4threeqntnineqstzjftnine + tkrh6sixdqflrvtmzmfiveseven9ktmtvprkxhfour + nine4983four + mpllmjrfgv66five3kvhthplrtwo7nkklb + 9ngvdjddqbz + 5twosix8lbhmzrg + eightsbmcfgm76two4hhc6 + seventwosevenrpm6threeeightwodxs + xkbseventwotwogmkxhpmhm42hvvbfchreight + gcqeightwosix8xdlhrnnbkmsevenqdbrjghz + 458ninextfjxvgsq5fltdsk6 + rlgsflhxqd5bdbhclmrthree + twothreemqqbzjn88blvqxbseven + rqrrdrmlfsixfive6 + eight959tzxkgqjd + txdszrn5eight3cqeight1brqr + 45122 + jvvslnkdk6qnfzjzvseight55eight + 4twoeightgrhhkrvtkrzpfive7seven + three8gsmkpzsmfvf2 + fiveeight5sevenone9twoseven + 4seightjjdkdglspz3vg + sevenssrzkspld2 + qnzcvcthrsgjlnzxmxlppjdpnine8seven7 + eight7xhvkrcr + two2tdjdfbqtqxrs119r diff --git a/2023/day1/p1/main.rs b/2023/day1/p1/main.rs new file mode 100644 index 0000000..137b570 --- /dev/null +++ b/2023/day1/p1/main.rs @@ -0,0 +1,41 @@ +use std::fs; + +fn main() +{ + let file_path: &str = "./input.text"; + + let contents = fs::read_to_string(file_path) + .unwrap(); + + let mut sum:i32 = 0; + + for line in contents.lines() + { + println!("{line}"); + + let mut first: u32 = 10; + let mut last: u32 = 0; + + for character in line.chars() + { + if character.is_ascii_digit() + { + let value = character.to_digit(10).unwrap(); + if first == 10 + { + first = value; + } + last = value; + } + } + + let result = first.to_string() + &last.to_string(); + + println!("Sum of line {result}."); + + sum += result.parse::().unwrap(); + + } + + println!("Sum: {sum}"); +} diff --git a/2023/day1/p1/test.text b/2023/day1/p1/test.text new file mode 100644 index 0000000..1ba8437 --- /dev/null +++ b/2023/day1/p1/test.text @@ -0,0 +1,4 @@ +1abc2 +pqr3stu8vwx +a1b2c3d4e5f +treb7uchet \ No newline at end of file diff --git a/2023/day1/p2/input.text b/2023/day1/p2/input.text new file mode 100644 index 0000000..813c4a3 --- /dev/null +++ b/2023/day1/p2/input.text @@ -0,0 +1,1000 @@ +ninefourone1 +53sevenvvqm +kscpjfdxp895foureightckjjl1 +72fivebt9ndgq +28gtbkszmrtmnineoneightmx +four66jqrbtqcsxjtqjvfjhl1 +four8pzznjbhxlhtz6bhtzdxjlg1 +rgxjrsldrfmzq25szhbldzqhrhbjpkbjlsevenseven +slkjvk4threesevenznjqmmfive +61ppgrkmkfhteightone +1threesix67px +sxbjdbtlnjrmlzgxneightthreepmqxdxhfk8jfrheightwovp +twofour2sevenk +sevenonezknqnkfqbzffjvfivetwo94two +45xj +mp7one6eightvhfnmfive6 +fhtctftxm3threefour2b +2dq7bdmhhs92 +pdnbqlbvtcxgpnfhmsfhzstgm173 +8fourvxkddsrlcvseveneight +15zqpmsix77hlljgfive +jzjv6seven +eight1vbfive +721sixsdzbqtskbpkqbcmgmlpk5psrhr +pqxdxcx5 +twozsf2five +7twosixthree775 +7xtxrch7six +729twofourlqrxtwo +qtvbgtclhnk4ninefourseven5one +jvhngkcdjhnmqghdbqdzqssf5onegzjbbcchboneightn +five8two14five2nine1 +one3twomddthree +8nine9two +7fiveeight9ninesix6fivethree +254kcd61dc4two +7sixonetxvthntlngtwobzkbz23 +8sixnine6 +threedqtgmv2skmvcd +7ptdhpvr1 +lsvmzvzvd9mqxszjmbddkmxzdxsninedmglzlzphtwo +kgdt12seven4xxtttr5 +nrdtgdftjmfour6fxjninenineblqlthvpcx +ninezmstcdfchc11onebmmfdfhvdncrhc +1fiveseven +oneone26twoeight +threefivenine98one9twotbbcq +9cm7ninestc +jcrbmcjtrlzvz7 +nine8nine22 +3nineoneseveneight +58four2three +stwonefourthree9twonine4six5bvxgkxf +ninechzcz4seven +2tgzgmtzzpjdqqz +brsptjppb28qxcxxjbzpeighteight +eightthree3ninejrft4 +sixqsgkzdjmgpfive4threemxltqdxsfive +vxfd2q8 +khqhgqlxslkmbrvljcnineeight1gjgcqmnbdczqb8four +mvbltrgpfourcclxftbb7gcbqcptvgfsevenrdm +61eight +six8fourthree6fourseven6three +jqdfxvhjg3sflkn2sixptxxsqrfml +6jtxs +seven99threeone +five6sevensmbbrjqvdbmkbsqtwonelg +fdvfsndt32fourgllgfrninebhnzzczfive +9hxp9srhjhjjvqljhzprcjpqreightzs1 +djldhkkcn55threethreefourflnxnbzhkzmx +fourfive43chfvjnvjrkpxlgjrfnqbl +fxjgtj4 +1sevenfour2fiveeight +seven43rxxeightb1 +9sevensnxkp3lpzxfxnntkxzkrhk7jzhmtvn6 +25one +threeone7 +1pkfvsxxthreeoneseven +ztbvfqnpz2xdhgdjmgvfourtworqbxqsh47 +8four7sixninesix +threedgl88cczqhqxjnc +nineeightthree4sixfive3sixdqlmscqjk +16crjsdl +tgq2sixhc7three +tzgsqspndt5xnqlthghzfvkkhone +4fxdqrs64ninex34gd +seven22 +kghfkrpvnppfncbhhqpt55bjf +hjhb71bqdrrgsrkqdtsgrxgsscqjmtfzjkzsbp +lgdnt9threeeighteight97 +pvjhnk83sixncvgmsjltwotdmmpxknhvntfndxr +7449 +qdfzv9hkprplzkfh +66three5five4zdsfrcnljqmsxf2 +veightwo27bdbsvseveneightrcqcjxsixeight +1thvkkk +8bnxqfsdhzppblzlzbkfsksfscmb +zseventbdzlmhnnrfive1one +sixxnmntrmp6srcsqbrqnjfiveeightfive +4trnzlshnjtwo5twocxrvfssbj +6two3twonetqt +55qsnx43 +3three23tpctbkrnqv +sixqk4cnfdmtltmlhqxtwo41glkhdhgnt +35fivesevenpfournxzsbbgzthjvlvzrnine +tworkzgkcvcone53nrvgdvgtc +two9llkjbkz8pklrsgqqzr2four +ninecgpbgcnine4tldjqsone4six +2tfjhtfourfour +onebhlhdvvqx1sevenmsixsix9 +pjgjt6jkrgshxltfnine8four45 +4vsqfljrfiveqeightnvbdb +11nfslqvhm +7crrhqxsfive8ctkzbhqnine +vrvtglvthreettrkq5bdlrtpx718 +1btbxlthreedtrzgeightnineqczhqm3 +193 +fcbzxqxxjtmn47ffschdrbeight +twoh1gqkrnm1 +7ninesixpzpsn7 +5kkvzpgqd +three6nine +32fdn +22twoxgvktxpxmbjqtgtbckx +1hdtftwosix +2jfc +six5nvzcgmrscjn5eight4 +nineqhtczsninetwosix4five +9three6sj +hntktlbqmldrphqzxkhfour193 +twotwo5259 +v7six1vtlxnpm +rhsm2 +gprmtxbhlsv8onefournine +2fsrbtdvft15six1kxpqbnqsxh9 +one5onemxthree8 +nineqbxdbznzktxsmstsntzffour3one +9blhkhjsgsfgsblzdtqqfour8 +stz4889563cb +vjrbs6threeptbbmncz7hqhqgfgldtseven5 +vbfs1 +zjqgczjsjpvzvjseven4 +sixfjzbrrhcfqvglxhnsxninedrvtvjbfqjdbrzblkq6three +one3threegcdldjsrsssixonefiveonechngsl +7srxv4hsgjqsqfvv1tdngkpjrczkl4 +5scgdglnjbnsix8fivesixtjccvmkfxfnzvhctgpncjc +4eightfivefive1lgscbj7kpcr1 +eightknfssevenfive6jnpklczrpfeightwol +37qccxllhzshninebvpc8 +1eightmmcthkhf +seven8fourqn7tbgqnmzcc1 +sixsevenone4 +clhdvjnqnine9threesix +onetwoeight9 +81z3threenjsdhnqxvtwonezv +9hqtsb +onekgnlbthreeg3 +eightspnrpjb65fivevzfpvjntbg7drbgjccneight +ninerdlsix7285 +fournineninefive3vbnhmhdvjgdqcm +njzspqxpxrone7four55 +nfdhlqcpvzrrtsmzhgq3 +fourmfdtnpsfbxkjtgtgx5sixrppsqplqdjvnsixdtqvtdm +21onesix6sixnine2 +fffsmvtt8fivenineglrqrmktzzseven +fivefoursevencjxmskrqclz2 +lgk27threefourfsqrbkntbkfourvflgrzhh9 +617hj9 +ninegcxninetwohpfdxrb3tjjjtxtnvtwo +one1gnftc8onehtsxsmg +foneight3fsbhdqzr5twojbsdnntwohd9seven +zkzpfvcxqnbvrg1 +nine36cddqfvrf +rdjlpfk2pschfsdrpz +nine994three8six +three3nvflpftf2eight4 +3nine2 +rxxjdk5354 +hf4eight8qjtcfldnkvtwofivetwothree +7six3twodhnvmxj1nine +57seven3six6 +qklbvzfhclfnllhhgeight8xtvld +5fgzqhkssmkcfour1 +hhvjkdnlffnineeighttwo18twonecs +sevenbfzrgfm1six1 +nine71cskklxvcbnxtskdbqnpgklrxklcgccxjnssksrlkx +hmklhhjdthree77 +3vpxclbgkpone3ninesrclfive +djfqkgjvqpfvdsix5sixtwoeightsix +eightlt7csvgxpnslk +sevenfoureightnld2mxtgpbzpthree1 +11sevenglfmsb6 +onetjjnxvssg1four4drxbxpnpv24 +2zdxs9mfnbgfmjln1threefive +one186ltsbck +6fsbpb9sixhc +nine818 +xzqcpcdprsqjbgknkvztwo419q +39qfdlcnkhg31 +9djnlcrxqxhrcb8mczrxrm +nmb887525seven +jhmv3 +zhvdbn1fivem8seven4sixoneighttsn +6zmmjqmnftclqbcthree +6cpzeight92 +onepqfhtsevencvlfvnczhb91mmtdprqxmcnine1 +tvqdfxn8eight +five6fivercgrpbtjgv87jmcndclbk2six +jgtmrbvl68lpqkpxddqqxvsixfivesix +nine2nlffgkvmp +1frdnhssftg4eightgclxsgqtn +2sixblr94six +94mlfv +6vlqtcsmdd47hpfmlc7fiveeight2 +tklxghxv5bzc4hhcdcpmnine8 +four6one1zzgqghvs412 +xghjpblsfpg19ntpfmcfd +471rbdblzs +69fourhjxkvd7fourfour +jmrscfqdfppfdjskpk61 +five5eightnqpd9ninezknztwo +onelknchr7nrfprgmqzp +svxlxrx9892five2 +3ntkbzzpxhdmrsix8ttgp +ndh7zlnrzpvmnine +one7xlnbmjjmfv62qvqjpfprbvjkpcnine +99three5 +threetwotwo7dhtgtbchc7sixtwo +tmfxxph3eightgdccscdsrkmnhbb75 +joneight4one5 +nine3six +81tqzsqpkv99 +sixvjlq7 +five7bkc +five3811threelfpzztxzk +1fourkkpclqc3 +xgrpbmktcthree46g +bgcp4two8 +jtgeightwo7nine +bkmcrcq3eightrdtvrbglmxmmztqm +7tscmg5one2jhhbfb1 +zt5khcrgqjg5nxxzxzd +five85 +twothree1 +eightsixthreetwo6b3tnjmcqdjfive +onefrlg7 +fivescbjxbdnvslqqsone5bdbvskpmksqmmfsncsmd +two83fourthreefourseventhree +dglrmbtkfltwofive8ninelzmrxvxoneeight +8nine6sixsixtwo7 +sevennine4lbsevenkdnrhpltn +h3fiveeight4cplrnd +vhsgjbqm3ninedfhfsb +93nine7jvjmlzgcztrqlxtwo +zhhhdddbbgcssvfzdhmpone5fivefournine +l9fourvjfbqpdslkmvxsdrnsgcvzpjxm +kxlseven5two +rbtwonegsdgvsjtpnnkone7mdz +phffknvthree2threeqgvfqxgnine7 +2lgglnmthreeseven27three81 +lrgkrxx2 +seventwokxvzkvq6eightthree +5fiveseven +fstwonersngdlngx28nine +49oneninesix8four2q +hfvhzvmjgbfcbsevenrmhjhzkc3 +six84 +8eight2gzblldzvkjfive +6fz3eightzmsqb4qsbbsnthm +fcglpc2one51 +sevendqghclrpxt7pzone48two +three5one +5sevenfivebbzkjlcnxseven8fourmzqlxxgjvc +xgg8one6782 +gggtljnnsix3lkhdqzzpdtdkmjtgjddkpgx4five +qrmsfc13onevnhlbgs +nrtwonethreerbbqffzh62 +5eight81gcdbrx3rlk +mtdtxcmm2bgmqhgqrtxsn8 +onercx2 +9sixoneqgr4 +xmoneightfour2 +six85foursixninetwo +ninetwo8four8six +qchclfzq47 +khrll3two21 +seveneightnine8868four +3rmbmtbxjp12seven +3tsxgvqxmzvxbdvxtgrvdbzqbh +eight7fourjtxx +fmb4one7threekbxeightwoj +vcsevensixseven577 +2dkhlrrtrnbgzrmxm5fiveclhgn1eight +1sevenlmrbnfour17seven +three5jtbvkseightoneseven4df +fourrgqxplbpbxtsgkm7 +fourqdfxchlc371sc2 +fqxlmeighttwo1seven +zvvlftlhfthreesix6three46qkstxvdt +m74pjgccfour1four +plphq933eighteight +cdbqlhbhj3eight +4onevgdkxhz799five9fbljhpqmvk +two6qzgphxl +two1eight +onekxxghlonerqqlrs83threehvvdhsxmfour +npmsvvrdl2673 +fivejthseightsixtwo9vgrvjzbzsrxjv +eight2gqfive7mzjzpxqcvheightjfx +1bxckdpt +dngoneightbtdptfn85 +fourtwovfzgmxjseven935 +8onesix2drgjnlrxbtdlmlznine5 +five4mmpmqlttsx56ljdzldntdvthree +1nxxgtwothree22twothreenine +38eightsevennxctjfstp +8fourvhnps3onellstpnztn6kvjccmv +1bseven93eightfour +5nphkdbhxqb2pqxtkvhxq +nvvx6fourjgkdsczjv +fourxrmq78 +8tjmnvthree3ninetwo2five +p7cvtwoneq +7thbggjbznrsixonethreeninej +xdgm1crqfnklk +onehmqqgh4ninenthjonegfjmvtfgd +sevenbsqtlk9 +8seven9two9hdz29 +fbcjhzdgzdg8jgjvcrmgbcrsixnine +3bssqrj44onedqxvhkfive1 +tmmxtz5dtxbbcjlfivesix +pvfqzksgrs4khmlvtwoeightlsx +psbttsmnpninefour42fivegsixfive +sevenfiveqscr7dfxpninesix5 +xmsjddzfxftsjfq6four6eight6three +seven42 +eighteight1nineeight9 +8c +pmqljjjzvx5znxqnsfour8 +78zlpxnvsqpgmgmk +four7fsgttnrgnlslr +fourtwo3jg2 +qlz18three5lpxfjvnfppqjxh +4fiveonetthree4eight +7lzffxkxnzjrtr +three7nineone46ksnshqgdpt +8dntxkkkgdxggvhxh2onefour5gqzsqkm +tjsixonedbklrxxk2twonxdpjzb8 +mfglbrjrq93 +seven37xhsrxrvcgninexbmdrzxthreeonethree +fivegznvfztszqlhtrsslsmqq43212 +tdthjjjbkeighteightsevenpcbmpfq2 +five1eightq +three13three4vrsrrtp +cgztjgqgdths2 +dhxztfvlonetwokszrv8prdpm2 +dfkcklchjj8twonine52ppvndfcnf6 +three7ninenkxfourfive +93sixlqxctdhmvssixone +oneqbvfrvteightnineninefivethree9 +jskrtmvsrqnpvcgsmxbonecmlrjpdpc4three +crpcfour54xxgzz +9fivefhdpcqsd +fivenineclfctjninefbsh2 +fivexhrzbqpfxl8sixtwoeightllzplcpllk +zxgl5qneightsevenone +sixpdc17thxfive +1twolftpzbmnzvdlkvlsevenhdvgfrjhmthreethreeddkdvht +67twotwo71 +oneeightcgnhtdxpfnsevenoneeight13 +eightthreervd5tnj17 +ssrsmhxrsixeight3gbqggcvfqg29 +6fivecvcdxnxhxxtlzthree +fournrrsix595 +p2qchlvplzdvchkbdzzbnsix7ninefour +fourthreefourtzvlrnr9m94seven +4jxzkrfourvtjpsnrllkjcczmmqnsj4q1two +4627qlpscgpjcnine539 +two6nineeight +63five66fivethree1 +skndgzsbsntwoone1 +threerzgdxgtthree2three +953lsdgn59 +27bk +sixmfmbslpjjsixsvnqrvtxznffive5 +2ninenlgpggxm42six234 +fdzfvkjnchsevenfivethreetscllgjvrtqckfnmz3cszmt4 +7ninetlzsxjsl2nine3 +shsvptqngsevencjjthvfm9six5four +7lsrq36threevzfjc62 +two59threedxmfourjfschvqvnine +khfqjmksxhbvs8sevenhzrmjtkgm +nine2stgflmsm8fkthhhjzlszdnmkmqpnjxrfc4 +twofourthree244nine +eightvt978 +fivefiveninesixnine6513 +2lbtz19fourtshqsvblhrkhxbpfour +ptt7bntxhdvl +mskflsslvdlmndmmqmfourtczqlssnineseven5xxxkfvzd +l329eightsevenfourfivethree +rmlksxsixspp9fourhlcg +8five9q +hqoneightsix19nine6xmjbtgjzgrhmlrxq +six38 +9eight2 +3sixbzhgfcg57sixsixjtqmknd +9fchn58 +vrpftbnvonefour6 +vqgdtrvhnnxxsevenseven9eight +56vnine5rdpsnlqcbq7three +vncrjds2cmrg7 +213sixfivesix +tzclpzdsthree4sxgjvrzcrzcndnfour +4sixseven1three7 +8fbrggzmtqn8 +four79p +twonineqonemfour3dq +5fdgpmrghtksn5onesixtwo +xseightwongqqsxtwo8jslclldvnb +nine1one +9gxjrfourvhqzcxdhrtpxgtwonine +eighthfhtnvchtc7fjkrxsmhtm7rbk +thqxcfjbksix32xqrgqsqtx +6qjqql +jgcreight7eight +6onesix4threeseven +5vcv1twoeight7 +fivesthreebvjntwo9jdxghmxvl +632msc9threenineqfone +dqxfourkb4eight +6stsp3nine +566sevenpdmg +xprjdn55 +9mjtcmhjb +twoninelkjznqztbc3twolnhjhdbfxmhfr +twotczpxn6qlcfdlpnq +4ninefive +1rs44three2gzczjdgq7ssmtgjbgbb +ggmzqbkgsix4five23bftjlmbfbd +threehfcscmmlqvcjtpthree98 +7sixsixone4 +2fivefvrr9four4three +1zt1seven +9hsbthqvhhsnineone23tslqccg +sixbqvd3 +22148four3 +ninejlpbtnfive41rtzqjgfmcbncrrlnn +9sixfour +qnhfivetwofjtqtlxd7lmrlfctq864 +69dqrzhlqssgcsxtz54cpmjvrkcfiveseven +fiveqpv85frkmpgxgc +xxqsscldeightone9ngqtkf1nine +5sixgxbnnjsvhf5dgxgone7 +sixsevensqghlvkfxnfour7 +8gmgvjbfivesevennine +qj796fourone9 +rmpfsppvzdtwo4threetwotwo9 +dqvtrhm3nhtrxxccmfiveonedfzfvcghr +4threejxkhnxcxjoneightp +sevenhkpfgdgsgnvseven3m +qhrvjcnfdbqchrsvchcxfourbkhhq9six1eight +29pqnd +1oneonethree627 +5977rcr2threeeight1 +fournthpqbztrhnine64 +fjnjpgqxr86five4sixxhrtvbp2two +7sdnvlb5two +58vffgzcgx4nineoneeight3 +h1sjgqbhndbz1oneqgncmhnleightwos +gjms21 +onetwodphfznine51 +gxpl3fourzfz3 +five46 +mqsixccffmc9gqk1 +5kvxpqrrpeightthree +threefoursevenfive2dhtbrxlzzl +shhczssbltllsmntntlqfqgnnl98rm +5oneeight3vkqtwo29 +bv69fouronefourone6 +eight6five966 +4xnrtztgfgcmnmnsevensix +gmsvtnjd1sevennine4xxhqfbrjjqbglqjngttc +mdnxhhteightfive5onenineninegqjbqmfd +xonefourtwo4 +onesix61 +sjmnjhkj2892eightnine9 +nzseven39 +99nnjjzdrfsnjhthree1sevenfive +6xmggtbnblnbxdpkzblnvcvjqmhvntwoeightseven +76five6six +chdfjrlfhdzeight778 +xrvrck9five1hrvpfvkdcb7eightnine +foureighttq5sgdfourl2 +4rnbxrhhboneonefournine +5four3 +1b97eight +hlcjghlhsf32tgknm565knxqr +onecqgbgdcmlb2sixsix6nine +kxdkz3 +seven5xvhrxdm +xblqbgkqgsixvgrthreezxnzhknklxhbmgl4 +fvnkc7threethreeseven +bmbqxv24jhdg +97rfphlxvtx +4pgblonelone +ptdpllrddeight3 +9knpjzskrfd4 +twomjqdtbbvmj4shvsqrone3 +9zzh3pjsf6mhxlhm9glglfztjm +cfconeight47fivetdsmndgvsmbqjvszb +21vbqjz374 +sixeightqgfdjbhfd4oneeightone +tbccqdpz78srmcdx4six2 +643gqtvhkljxt +klfjf4qms +zrnhkhqzpczzfqsgsrtxklpbtp72 +1cnqfltrmhphg832three +twoseven5 +mxkmxlcgsixklclrkfr8638fourlrqpzgjq +nkbfkh452pthree +zvcktvd2485four88 +rfxj4 +three6jnr7 +two45rldjnmxkjphtwo7v +fivelncjffdnkzqrshvthreeh3p +ninejgrbmhrbqldeightnine6nine8one +96lvpt2djrkc5 +7seveneightthcxgthreeseven5hpfddktpj +6bvn +sixbjxtphstzgspnmkcvc952one +gmmslrndvltlthree394sevenoneightl +threenine7onefourtwojxhzvqlseveneight +5eightsix4txcczzmg +84seven +skjpkhxggsvjbprhllgjhninetwo6 +72bdpzccvone4zbdzlllnnonernlfvdpq +bvrtmzmtwonine29 +mrlvmdnlxb2814five5fjxzlhpn +lmrpf82rksix611 +tvq18oneqnmmzvtclnthree +jrbjc1zbbpqbrddt26seven1 +lxfivenmdtnhdmf98ptpxsgmgrxkmmznlk +zbmvchmxsevenddddthree2dxlddjp4 +three3onejg2fqgtjmpcgeighteight +three2two9seightfjqtwo +ninefive8sevenvnssix +3cnbxxtgmf5 +kpmjcsfrjfgzhmbpnqmlvrhbhqs8 +3vvcone64 +fvqksdsixthreexbfivetwo3 +sevenseven5 +63twoone8vhbcpmmlfive1 +4ctwo17eightsixkpvlgpj1 +rsgsnone1 +kbvxonemcqfive3eightone +ninenineone45threepvsmrtonejxmbnd +37fklnjkslqk9th9 +fiveoneq8rcgdxtwo8jfkxq6 +rgd7 +7rgkdpvp7qrb +7crtxfmslxxtcxsv +mqdnltb23fiveqcdqtonethree +8seven7 +8cqhqlhndqjznqhdbld2nspnxbj99tqqhp +onelqn7 +bvbjfour7 +ldqzhvhrbgsrrkh5j +kjsjxdcqgjztldjvxxgr9twoxfknxrrrphkdzdl8 +rvscnztblp56ljqtwompclcf +2dbtdgsevenhzctckvkvxvjljz +tvmhhxbbxvvsnlnineqsltjd92one +9twoqdmtvbxhpcthreeeight +81dvnkd87xbct +6mnxqnndcjfivefdckzmppfsevenmqvvvbnrgs +lvl3qjk5 +3fivefive +ktvsqzrf14eightmtnqbcktk5 +sevencdknznbxseventwo8rzggmvpbvlrs +hkhhrdxlml1xzbshninejzqc +eightseven23shkgzdgvvcxxfdv5 +14five1sevenxfmhtptwo3seven +47one +2three3 +f5dszzs2 +xmxffxkxpkninethree8x6seven +glzoneighteightrnjqgjznjm9 +63fznqxdfqt8 +33nine +4vrbmthreefbdzf +fourninethreesixnine9fourlvbgqhjbqncnlbjbz +two848dbvbninenine17 +pqzqgone1two +eight7lmxbhcsix +szr2fcvkljctlghhthree +sk81pxqhhhhvnjvgzfiveseven +cgqqkrz2vpdpzrthqssg7nineeight +498eightfournine +eight85onesvxnineone53 +ninevmchpkcg2 +six2shsvqfivefourtwo +mdzckfvr72cv +twotwo7onethreefourdjtgjg +tworfclmm3 +5sfvnkrmrptsix7four6kzlmclm +1onedkqgzbr89kphvc8 +5seventhree8eight9eight +kvjpgjgrcmpdscbfthreethree4mjqjnnzceightwohh +kjbmh1fdkdtznmsznvlconeznineseven +1fmgpxhxpqznqscvbszhhcmglvtnzhbbjjbzg +1mfqzkfnine5 +rrflkqslxztdlqxqkdnhqd7ps +39123thhsmscbpxr +8vnine4jgqrvqtshg3jhhdnbsrxneight4 +xkqgnfour87 +lsbnjqtzqz7ninenineone73lmkbnkhs +9fiveqqgqblfivehttxk +8twotwognd +4xknbheightfour6358 +4cqtpfjpf72eight3 +ninemjpqpqg8foureightsevenfcvpnrnnpzhcgkm +37twofivedsxrzbpchnkgxqx +oneone57one2k92 +mckoneight9threefour1onefourhdrcrvhqcmngkjnsthree +945 +tmmtwo7 +57 +6twoxzbfftnr27 +threenine4bqpztsixfour +84eight +3jpbnjrqhqfnxckqkqdvls +9gzzjzz +374nine +ninembxeight4sevent +threecq3 +cvn6cvqmpmfflkzphndjnggtktwosn +pgz7four5nineeightsixqrnfkdkgh +6one781vstwothreef +one617fourthreefourxqxnpv +8eightsqmkjkkf5xckcvd4lfnnfour +seven23qhntfmg56onexkjxh +f5s56rfltx282 +twosixninefive1tlzq +threetdhghclfsksql5oneninetwoseven +zbqzxmpb9pxlrthree +r4gxdzjnvzfonejnpmfcpgvxjjvkh8 +five338threejkk67seven +twolntxcnzvfr55sixtwofivesevennine +xhlppbqfr71brvppsixthreefddlgpfslqmdv +kxsklgonefjfpkd4threefive9six4 +6srphqmtdoneh3glthreefour8 +rjzdmj1cqvxnx1nvcvbfctft9 +3fqjdgbpggthreesix53 +9fivesndgmkvckblktzkshglqgdl4ztwoseven +qqrxkqhnzb23two34nine9 +8hrmffgstqpsixeightx1six +jngcsjnrhn2zsvcjmjg +9zfdmhzxdnfour272dcrqgk +lbjbrfhjxhxjphzxsjsix4 +fourthree2seven1two +twosix87 +vrlqqkctddggcvcjcpk6hxbqvbxmtsix +mrcgbpc6dthzqmmthreefour6two +r2zntjxgpfqfmqh +fourseven3 +6nfnsgchjdffttmgfnbvlxzoneseven8 +8sevenqqfiveseven5twojvgk +4rmtkvml4 +bprnine85 +sevenmfpcvlblcnine485fourseven4 +sevenseventhree68fivelhqgjqvcdqkvds +3fourxsgghqnvtssnvfs7nine7 +1fiveone5hpfdgvxb +eight2eight42twotwoonenine +lpdeightxcgpxkkeighthtjpsninemjlxrxtg31 +4smqpjzsixonethree +mr6csbmgrdrjj3onelqd4four1 +5sixvbscchd3 +384sps +4qzgsvmfx4ninevcclvcfrfp6tckcpvj5s +8l5glclltgcjgbhcg6 +3ldtdmjc6threeone +hsrtzl521nine5qqrtpdsp +z4v8threejdsmbfjpbj +9sixln26eightwovmh +848 +kndxtqpfrqxdxtfnqrqznpgvp9ninerlzcdvdtwo84 +kmqs84775seven +5threefourzkg +43five8cq2kprvdqrmxr1 +three4ttjqdh +48nine7sixfive +22x +sixrgtwo3rnbzkrztkdkg +4t +29bjpskmxneightppvthree +zmlzxvtlkt4seveneightbxseven +5two5eightnpszzmbkncnstx4 +9vk98sevenhznkxmlrlk7vdbqgvfjdk +1sixb8sjkvdhfld +one42eight4mrsdnpfjpvdtq +76fourntsrfllxkdfqvm6seven +skqndhr3nm4776 +4xpmfxmvj633eight +83ninecmpt +fourdthree9 +9eightjqnnmthcrseven +7threekgtf1 +xscj7threenmhsixseven5s3 +cqlzjt41 +855threemlmmqkgtfk +ninefzmvjjtvbmgf8nineninetwonegcn +ccpkzcldfourkdtfkjxvfb9fourhbtwonsoneightnl +pkeightwo5seven88rdnzzsdkbjeight9 +threen2fjsfivesix26nine +nine4rz8nine7bglpcmkqfzpseven +eight94six8dpgrv +twodfctf278 +fltqtmdkgjsvf72three +llrtzsixsix4fivetwosixone +qjhtjqjhgkjkzlpxxclsrdnzk1gbqt +sixeight1sixtwo +one5413nkmqjtlbdkz22 +bhtwoneonemzpzkqeighttwooneqkmcmsbq4 +sevensix3three2sixprcqcvm +25tjffdrtwohfqlkhzxlhb +97gcgqgjnpsthfjfdv636jsxq +zggjmjone1297six8drzs +jbpvnineeightntkkshbjvr3nshnqzdlkjmkfive +5four2gkkbxmpthreefour6 +5two15sixfivetzpg +one4fouronemfpvnqseven +9fnlbljdnzzfournine78 +djfljccrtvvqktzzvk61onesd +7twohbkeight +seven1eighttwothreet +4mdcljknhpqgxffqpj5 +nine9jlsmfgdgntwothreeeight4 +136nh +635ninejghg5 +cmone7fdlk9lfivemzvnhkcsp +8eightnlndm +6fourpb892 +fiveseventwosixfourthree7 +5fm +ninegchdnrf63431 +24sgnflnsixninenine8 +snm9 +3fntd721dhhkrqqxsfpstsvzpgonetkhcr +jlzfbml61vdmgb7one +266517 +7fivetwo2vhchmg678nine +cgrp3vzn5ninetwofour +666ninefour +9s +svpcnlktpxtvk42jhsvvdpftxpsk +2qznfzvbdr +foneb7eightfivehlbjjknninethree +kfp6 +l34pxxhxtd7d +rsbcrtwo27twocqlmeight +jkzgvqgpjfdqvmjfx2flnvjmgllxghhrbjjkfour2 +45sevengdnf59twofive +6fivespvkblrxvkcgdxktl +three9dvrssvl5eight4ftsix +seven56gdmlbfbjsl894sevencmc +814 +1one4 +onenine5fivekcrf1gvvfhlncsv +2ctvq9djzddfxcrj +ntdlcqgsixvmfvlc4fourvlhtvvqmnmkrm +9nineseven1seven +lcvzbnfourksvjqvmv47one5 +nine4blvlvlpkl6 +sixnqxrhnztzvpmbzmxjm19five +18jtzhk +rzrhv8four +2npghxvjonebchsprfhsjznrxvxnine +eightngsevencrjkxbhpgtxlzhgb46sevenqhqmlfx +threesffl9fivelgmndjfvseven92 +seven85 +87six9vnshclz +threetwo7915three +one2vkbp6rhqbxvcl7 +bsbr1five91 +qd3mnine +jjvhltxtdh5nineone6 +mbxlnj7bbhnxonejtmtqjfrzqgtrhkeightnine +fourfourqrxdtfive2smnqp +7tvjrszvrhdl5five +four15tvmpvxpvdjnine +sevenvv5tworpvdlseven3dlqvgblqtwo +nkckggninegnlqlnv25threexlhlbzvzk +3vngmhprjseventhreeeightnine +nvqtpzsszrdvttfivenine56oneseven8 +146 +fxfbone59 +f32dhffctkxp6rcngvtfq +sixthreefsixjhckmjqfive495 +42four +65nine984 +5fthreeone9twoqqsfvzmp +ttwonefive4 +one6gfxseightxqcq6 +3sixnrjtwormrncmhxeight +jhdxnmsgsdsevensqsslbsndpdmznmldbgeight3tcvjjv4 +5sixtvpckxzcjzbmrzk9 +pmdmnfgkb3six8xsmstsmxgmm +53onetvlgbglq4zbqpdgsskzdsksd6 +kzjcllvz6skphkfdxfiveqrbhmk +75qqjdgxlmfthreevzbfjdlxkfqqq +seveneightjntpjthzptwo2two +2five4fvrfxxnine4qzkkfkmq +2xlvcltn7 +fnmggtj2rqxzh7three +rzpjkgtml1 +2oneseven4one7xps6 +rljfhfrhmzkjxktnszbkpfspxdkqneight2 +pzgnine49six2 +plxsqeight2 +eight2sevenseveneight8rfcrsdlxb +sevenclpqqfxgjnmtwo9 +9sevenrqsixone8eightrxqgfsbjh +kqtkstrxhtfzbllhl4lqvqkcbr +hfplfpbltczflpp7nfive8 +ninenvqfrvtwo6onel +threev65 +frhn18six9sixninefourrsqzgd +mcxckfg5vpkbs89gbninexjzvlj +fivesixdx28 +7ppbqv +hs9twopcvpgtjnrsvksskpc8 +9mlpckzj2twothreefive +rkrgdclkninetwo6eighttwodc25 +tfivefourtwohkhhgsqlj1dtdcxmxkf +1four6five +fgbvmvxvtsix2twonine2sixfour +foureight66 +s6fourcv +mxl358sixfive8six8 +ztbtwo73sixvxsix9four +eight7qmdlcxfive5 +phgfivekrjxdmnzsqsix9 +1mfqsevenhz +rjhcdgzngtc155bqlttbsxklpknvlmk +qjkdqlrrs6two +sxlmqzxdpxdnj9fivetwo9seven5 +2qtdblb2 +8qgdzrsixtwo598oneightp +1shdb944 +vrlpronek2 +jm52 +8eightfourseven11mvtrmtkr2bmp +mnvnjxrgmrxhztwo2ssrdpqk +ztfive435three6threetwo +tnrrdnbgnbhzljdxhxxfrqkcpeight8js3 +foursix6zcsrztvgjxmp +five7fourgnnkspxcmczcbgsbdf77five +fgbrzkmvgrdbqjqndpfive81onetwomtzlfb +2qbsfd1two3ninetwo2 +8tdjxvfpvdvone33three +lpchnmln56twofive8tfour +cfkfbhppjf6fourdkfxsvdtbcjspzlseven8 +5fivestgkzsevenonedkhhrkthree +37nine8six8onefhvvbkmgdfgtv +26hzz +5glvnsztmnfjmkjseventdm4five +pvnnqrqvftrbcvnnthreenine5 +mgscxxlp3eight +53eighteight +two1oneqlcdkbddfour +jbll3 +8threeseven5tmtrgdhqxd +8twonine6s1 +91seven5pmqrjlhqrtzs +jj3sevensix4482 +jeightwo7lk4three +zchchxmsctzffivefournine9sqhqkgfour +72xct1 +vnsxvsqkhpfvgdseven23gzcmltzgone +xzjqhcvsix1fivecjtxnfivekmvjdc +zdfourgjlhtwo24d5klkpdgqbz +7sdzzdbrxbtonerjcmknnql4dfzqccvqt +tncqzxjq9twofiveqkxdrxrpj894six +dddmkctrzlpfmsszeight8zvbpmpkg +three23ckjhgjc +375jzdhnfcfr19mhsbnplqh +vpbbjlzone5sevenseven33four +onejzfsevenrbskjq1four +seven13one +vcnkfgv979one6zln +rqlxzzbmjb4lmbthreektqsdcfzbmdsfivethreenrxdlkqt +qkoneight8 +5rfourfivenine94fdprsix +onexonelzdh2lcbqpzq6 +six6v +7gtgxqnnine +tsljzhntwo3fourpbjncgmvf3fflvjxp +vfkdone9fivecftvmjdk +xc5three6eight94 +18363one7 +8fiveksshdlfmzhljhcmjrn7kpv5j +xbhmxfhbjnjzmninethree7 +2933mkmdqjcl +6ncvzqxfvgfive +lnine5fivetb4qmfktnqjxs +93187 +5mqninedzkfhbk +two7eightntdbsix298four +sixone3bspxqxggkmkrbcqrhfrxrlgjrlvfl96 +fourfivehqls3nine +threedfklszn2threeqzhh7one +mqmftzglone6kjpgglznhrjz89 +146cvkftscqsevensixnine +nndhdgpd484hxdgjtfsdxxg9 +6mbzckbjphg +eight6jbjtnld2mdjtd +zjtzcqxb736five +jlkdmone8 +gvjnjvmlfvcmvnfb8xcgjcmjqvz1bzcctvsixfzqjlhfkfk6 +vr6onejnjmrrldnsixsix5six +ninembtmtkgbctlfive45cjzzrmgcscfbcgeight +2mdvneightjzgffivefive4 +hmdnbxghxjxt4czshmsfzc +61six18threehrcj +six3five6eightkdfzhxcjkdhq3 +jrhqrqkpd4hsixdsbjdpscclmnnhknqq16 +jflzcxr3three +threefourghvgsktkc93cmjmsgh8one6 +96fivesevenslklhsfmpz +jgkpgfnnbq2pmspdfhsqxfour +g4fourthreerpkdhjhlxlzvnineseven +xkxhkphnkvpdnlncn86srxthree +7sixsevenrfour +5zr72qltsrbdsv +ninervqzdfzqmf6five +8jslpvs73 +ztvlxndlm5twohdhmtrdnhbzdrxb +seven6nine4dpdpvrtrmqvql +jfz1 +5nineeight5onefivecxtqbsdtbthreefour +fourgeight6threeszgseventwo9 +sixfour3 +npl8 +tzjkffsvbjseven5rhmlxonezlx +5dhtpfour +twothreebxtfndvdnine1sixbb9 +five9nineqlzrmtgs5 +9v764nineeight +five4eightlsix6 +3nineeight21 +foureight8btsc +3xgdgtb2 +7threetwonexqk +kkqsix48onefourhlsh8 +onekgtdzgfh2fivenine2onerb +six4zgcnlhmltrxp5xphvtwo9 +eight7cdqggpssix +niner9pzmrbqldkljmgphrrgmdjseven6 +439 +twofoursixrthree5bxppnhqtx +bmpnt3 +fivepkzkzpghrptpksevenseven83two1 +9fiveone8one +fiveseven3lqxghdlskbltrzrstwo +fournine3ninephlghonetwoeightbvmdcconeightq +three2pvklmzqjfh4sixonedrctlsfdfour +three91spjlscscjcxbbpdhrg37 +57qqjpdfppsix1qxrh5mlmncf +4nfone5eight +eightqsix7one +4jtvxfd38hnrmqkbnvfxpp +qmfsspkfour1plmslcrsseventhree +fzckcbfvxbpsix7nine +fzrj4 +4threeqntnineqstzjftnine +tkrh6sixdqflrvtmzmfiveseven9ktmtvprkxhfour +nine4983four +mpllmjrfgv66five3kvhthplrtwo7nkklb +9ngvdjddqbz +5twosix8lbhmzrg +eightsbmcfgm76two4hhc6 +seventwosevenrpm6threeeightwodxs +xkbseventwotwogmkxhpmhm42hvvbfchreight +gcqeightwosix8xdlhrnnbkmsevenqdbrjghz +458ninextfjxvgsq5fltdsk6 +rlgsflhxqd5bdbhclmrthree +twothreemqqbzjn88blvqxbseven +rqrrdrmlfsixfive6 +eight959tzxkgqjd +txdszrn5eight3cqeight1brqr +45122 +jvvslnkdk6qnfzjzvseight55eight +4twoeightgrhhkrvtkrzpfive7seven +three8gsmkpzsmfvf2 +fiveeight5sevenone9twoseven +4seightjjdkdglspz3vg +sevenssrzkspld2 +qnzcvcthrsgjlnzxmxlppjdpnine8seven7 +eight7xhvkrcr +two2tdjdfbqtqxrs119r diff --git a/2023/day1/p2/main.rs b/2023/day1/p2/main.rs new file mode 100644 index 0000000..5a2fe0a --- /dev/null +++ b/2023/day1/p2/main.rs @@ -0,0 +1,112 @@ +use std::fs; + +fn find_first(line: &str) -> (u32, usize) +{ + let mut value = 0; + + let mut lowest_index = usize::MAX; + + let numbers = vec!["one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]; + let numbers_values = vec![1, 2, 3, 4, 5, 6, 7, 8, 9]; + + for i in 0..numbers.len() + { + let found_index = line.find(numbers[i]); + let found_index_value = match found_index { + None => continue, + Some(found_index) => found_index + }; + + if found_index_value <= lowest_index + { + value = numbers_values[i]; + lowest_index = found_index_value; + } + } + + return (value, lowest_index); +} + +fn find_last(line: &str) -> (u32, usize) +{ + let mut value = 0; + + let mut lowest_index = usize::MIN; + + let numbers = vec!["one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]; + let numbers_values = vec![1, 2, 3, 4, 5, 6, 7, 8, 9]; + + for i in 0..numbers.len() + { + let found_index = line.rfind(numbers[i]); + let found_index_value = match found_index { + None => continue, + Some(found_index) => found_index + }; + + if found_index_value >= lowest_index + { + value = numbers_values[i]; + lowest_index = found_index_value; + } + } + + return (value, lowest_index); +} + +fn main() +{ + let file_path: &str = "./input.text"; + + let contents = fs::read_to_string(file_path) + .unwrap(); + + let mut sum:i32 = 0; + + for line in contents.lines() + { + println!("{line}"); + + let mut first: u32 = 10; + let mut first_index: usize = usize::MAX; + let mut last: u32 = 0; + let mut last_index: usize = usize::MIN; + + let mut index: usize = 0; + for character in line.chars() + { + if character.is_ascii_digit() + { + let value = character.to_digit(10).unwrap(); + if first == 10 + { + first = value; + first_index = index; + } + last = value; + last_index = index; + } + index += 1; + } + + let (l_value, l_index) = find_last(line); + if l_index > last_index + { + last = l_value; + } + let (f_value, f_index) = find_first(line); + if f_index < first_index + { + first = f_value; + } + + let result = first.to_string() + &last.to_string(); + + println!("Sum of line {result}."); + + sum += result.parse::().unwrap(); + + } + + println!("Sum: {sum}"); +} diff --git a/2023/day1/p2/test.text b/2023/day1/p2/test.text new file mode 100644 index 0000000..4316a6b --- /dev/null +++ b/2023/day1/p2/test.text @@ -0,0 +1,7 @@ +two1nine +eightwothree +abcone2threexyz +xtwone3four +4nineeightseven2 +zoneight234 +7pqrstsixteen \ No newline at end of file diff --git a/2023/day10/p1/input.text b/2023/day10/p1/input.text new file mode 100644 index 0000000..072da9d --- /dev/null +++ b/2023/day10/p1/input.text @@ -0,0 +1,140 @@ +F---7-FJ.7--FJ7.-.7-|7F.|7FJ77F7J-|--.FLF|.F-7-F7.F.J77|--|7--|7|-J-F--7-F7.F7-F7F7F-|-|-F777L7|-.FLF|-77F7-FJF|JF--F.77J-L7-FF--7.FFF7FF7.7 +|J.F|7F|F7J.J-L-|-|.L7F7JF7-7-LJ|LJ.F7.L|.F|F7FJ7.F7.|F|L7.L7L|-F-|7|L|JFF.F||F777L|-77L-|JF7FJJJLF7LL7|.L77|L7LLLJ.|..LLL7|L7-.-JFFLL-7L-FF +F7L7JLLJL-7FL7|F7-J7.-J.7L7J|.|-JF|FLFF7L-JLL|-F7-F|77|.|L7FJ7JJFJL7JJJFF.FJ||||JFF|LL7F-JF|.LJ7F.|F7F|J7LLL-7||||LFFFF77|-L7LL7F7-JL7|FF7L| +JFL7FJ7.--JJ7L||.LF|7JJFLFLF7.|.LFF7-FJ|-J-77|-F.|J|LLFF-|-7JL7-J7L|JLF7-7F7|LJL-7|L7F7J-FJ|F|7|77|J-F..FJL.|F77-7F|-FJ|J7J.--7.7J.7-|-||LF| +.|LLFJLF--J.FL|-J.F77F-77.L|L7F77F7.F|FJ7.FJ7JF7F7|F-J..7JL|..FF---|J-F|JF|||F--7|-FL7.J-J.|LFFJ-7.L7J|.7-|LJJF7L77LL||.FL--JJ|-L-F|7F-JJ|.| +FL77J|LJFJFF7JJ|J7LJ.|.LF.LL7|||7||-FJL---7.LFJL7J7|FLF7J|F77-J|JJFJ-F-7FFJLJL-7LJ7LLLJ7JLL-7||J|||L-7|---L.FFLLFF---|F--J.|.|L.||FJ7.LLL|-J +|L-J-JJ-F-F-J7F--7.F7F7F7FF-JLJ|FJ|JL7F-7FJ7-L7FJF-7F7||7FFF7JL7.-JLF|FJFJF7F7FJFFL-|.L-7J|FJFJ-JJ7.L|7.|7J-|J.||||LFLJ-F|F7-7|FF-L7|7-.|L7| +7|LF|JLL|.F.F-FJF-7|||LJL7L-7F-JL7L7FJL7LJF77F|||L7||||L-7F||.7F7FLFFJL-JFJLJLJ-F|J.F-FL7.LJ||.|L.F7|.F7.7|FJ||-J|J-J7.7-7---|-LJF|7F|-77-L- +|J.7|LF7JF|F7|L.L7|||L7F-J-F||F7FJFJ|F-JF7||F7||-F|||||F-JFJ|7J|L|F-L-7F7L-7F777.|JF77J-F7FFF777LFFF-F-7-7--LJL|-L|.FF-F.JL|.LFJ-77-F|7F77FJ +JJ--JLJL-J|J.FLF-J|||L||F77FJ||||FJFJ|F7|||LJLJ|JFJ||||L77L7|F--7F7-F7LJ|F7|||F7F7.L|.F-JL7FJL7F---7JL7L7F7.L|F--7L-L7.J-.-7JJ|L-7L.|JFJLJF| +|JFLJF|-77F-7.FL-7LJL-J|||FJFJ|||L7|FJ|LJ|L---7L7|FJ|LJFJ7FJLJF-J||.||F-J|LJ|LJLJ|7-J7L-7FJL7FJ|F--J--L7|||7FFF-FJ|JLL|FLFLJ.-L7FLL-|L|.7.FF +L-77LJJ|FJ|7J.--LL----7|||L7|FJ||FJ||FJF-JF7|FJFJ|L7L7FJF7|F7FJ-FJL-J||F7L-7L7F--J.7|F-7||F7||FJL7L|-F-JLJL-7-|FJLJ77.|7.L7JF|L|7.|---|F--.F +7JFF7||FJJJJL7J7.F-7F-JLJL-JLJFJ||7|LJFJF7|L7L7L7L7|-|L7|LJ|LJJ.L---7|LJL7FJ|||F-77LLL7||LJLJLJF-J-|LL---7F-J|||..JJF-.F7.F-7|L|7F77JFJ-L|FJ +|-|LLJF-7LJ|LL|--L7|L7F--7F--7L-JL7L7FJFJ||FJF|FJFJ|FJFJL-7L-7F-7LF7|L7F7|L7FJ||FJF7FFJLJF-----JF-7F7F-7FJL--777-7L-|JF|77LLLL7JFJ|F-JJ.L|7| +77LJ7F--7J7L7L|.F-J|FJ|F-J|F-JF-7FJFJL7|FJ|L7FJL-JFJ|FJF7|L7FJL7|F|||FJ|LJFJL7||L7|L7L--7L7F-7F7|FJ||L7||F---JL|-L7J.-77J-F.||JF|.L--J.--L7| +L77--L-7J-|7LFF7L-7|L-JL-7||F7|FJL7|F-J|L-JFJL-7F7|FJL7||F-J|F-J|FJLJL7|F7L7-||L7LJFJJF7|FJL7LJLJL7||FJ||L--7F-7-|7.F.|7JL-L7J-7JFFL--JFFL.L +..FFJL7L7-LLF7|L--JL-7F--J|LJ||L7FJ|L7F|F--JF7-LJ|||F-J||L-7LJF-JL--7FJLJ|FJFJL7|F-JF7||||F7|F----J||L7LJF--JL7|F--7LFLJ--||||FLLF7-J.FF-.F| +F-J|7L|-77|-J7|F7F--7|L---JF-JL7|L-JFJFJL-7FJL7F7|||L7|||F7|F-JF7.F7||F7FJL7L7FJ||.FJ||LJ||LJL-7-F7||JL7FJF7F7||L-7|-FJ-7LL77-F7-F|J.F7||F-7 +LL7L77L-7-7-LLLJLJF-JL-----JF--JL--7L-JF7FJL7FJ||||L7L7|LJLJ|F7|L7||||||L-7L7||FJL-JFJL-7||F---JFJLJ|F-J|FJLJLJ|F7|L7JF7.7JL7|LF-7.F-FF77JJ. +FF--.7.LJLL7|.|FF-JF--------JF7F7F7|F--J||F-JL-JLJ|FJFJL7F--J|LJFJ|||||L7|L7LJ||F---JF--JLJL--7JL7F-JL7FJ|F----J|||FJFJ|7JF-J-7|JL||LLLJL7-F +7|..L-FFJJFL7FFLL-7|F---77F7FJLJLJ||L7F7LJL--7F---JL7|F7||F--JF-JFJ||||FJF7L7FJ||F--7L---7F---JF-JL7F7|L-JL7F--7|||L-JFJF7L7F7JJ.FJF-7L7J|7| +F7.L7LJJ.FJL|F7L|7LJL7F7L-J|L----7|L7LJL7F7FFJL7F-7||||LJLJF--JF7L7||LJL7|L-JL7|LJF7|F7F-JL-7F7L7F-J|||F---J|F7||LJF--J||L7JLJ.LFLJ|LJ--7JL| +J7-FJ.|7.|J-F7L7LF7F-J||F-7|F7FF-JL7|F--J||FJF-J|FJFJ||F7F7L--7||FJLJF-7|L---7||F-JLJ||L--7FJ|L7|L7FJLJL7F-7LJ|LJF-JF7F7L7L7||--|..|F7|LJ|F| +|F7LF77J.LF-LJJ.FJLJF7|||FJLJL7L--7LJL7F7|||FJF7||FJFJLJ||L---J||L--7|FLJJF--J||L-7F7||FF-JL7|FJL7|L-7F-J|FJF7L-7L7FJLJL7|FJ7|F7|F.|--7-LL|7 +|L||F---F.F7LJ-FL---J||||L--7FJF7L|F--J|||||L7||||L7L-7FJL-7F-7||F7FJL7F-7L--7LJF-J|||L7L7F-J|L7FJL-7|L-7|L7||F7|FJ|F---J||F---77-|J|7L-F.L7 +-7F77JJF-|7JJ.F-F--77||LJF--JL-JL-J|F7J||||L7|||||FJF7|L7F-JL7|||||L7FJ|FJF-7L7FJF-J||FJFJL7FJFJL7F-J|F-J|FJ|||||L7|L7F7FJ||F--JJ7|.L7|F|.LJ +.L.|L|.F-L|7|FFLL-7L7LJF7L--------7LJL-JLJ|FJ||LJ|L7|LJFJ|F7FJLJ||L-J|.||FJFJFJL-JF-J||FJF-JL7|F-JL7FJ|F7||FJLJLJFJ|FJ||L7LJ|F-7JF777.LFFJL| +J..L.LL|J-J-|7J.LLL7L-7|L---------JF--7F7FJL7|L-7L-JL77L7LJLJF--JL7F-JFJ|L7|FJF---JF7|LJFJF7FJ|L-7FJL7||||||F----JFJL7|L-JF-J|FJ-LF77.|L||.F +.F-.L7.|7.F7.F-7.FLL7FJL----------7L-7LJLJF7|L7FJF-7FJF7|F--7L--7FJL77L7L7|LJFJ|F7FJ|L-7|FJ|L7L--J||FJLJ||LJ|F7F7FJF-JL7F-JF7||F77.JJ-L-|-LJ +FF|-.FFF-JJLLJL|FF--JL7F77F7F7F--7|F-JF7F7|||FJL-JFJL-JLJL-7L---JL7FJF7L7|L-7L7FJ||FJF-J||FJ7L---7L7|F--JL-7LJLJLJFJF-7||F-JLJLJ|-J7|-|F7-L7 +|L-JLLJL-J7F||.J|L---7LJL-JLJLJF7LJL7-|||||LJL7-F7|F7F---7FJF7F-7FJL7||FJ|F7|FJL7||L7L-7|||F7F7F7|FJ||F7F7FJF----7L-JFJ|||F---7FJFL7.FFJJ|F7 +..|.|F7L77LL77J|F-7F7L--------7|L--7L-JLJ|L--7|FJ||||L7F7LJ|||L7LJF-J||L7LJ||L--J||FJF-JLJ||LJLJ||L7|LJ|||L7L-7F7L--7L-JLJL7F7LJ-7F|-7.|7FLJ +F.L|-|J.F7.|L|-LL7LJL----7F-7FJ|F-7L7F---JF7FJLJFJLJ|FJ|L--7||FJF-JF7||JL-7LJF7F-J|L7L--7FJL7F--J|FJ|F-J||FJF-J|L--7L7F7F--J|L7L|F-J|F|JLJ|J +|F-L.|.-JL7|JF-L|L------7|L7LJFJL7|FJ|F--7||L--7|F7FJL7|F--J||L7|F-J|||F7-L-7|LJF7|FJF7FJ|F7||F7FJL-J|F7|||FJLFJF--J-|||L---JFJ.-JF|JLJ|J.JJ +7-LJFJ7|J.F-.J77FF------JL-JF-J..||L7||F-J||FF7||||L7FJ||F7L||F||L-7|||||F7F||F7|||||||L7|||||||L7F--J||||||F7|FJF77FJ||F-7F7|F7-|FL-F.7-7J| +F7-|7.FF-FJ-|JF7FL--7F7F7F--JF7-FJL-J|||F7||FJ|||||FJ|FJLJ|FJ|FJL7FJ||||||L7|LJLJ|||FJ|FJ||||||L7||F-7|LJLJLJLJL-JL7L7||L7||LJ|L--7J7|FL-|-F +LJ--F7L---JFLJL-JJ-LLJLJLJF--JL7L7F77||LJLJ||JLJ||LJL|L-7.||FJL-7|||LJ||LJFJL7F--J|LJFJL7LJ||||FJ|||L||F----------7L7||L7|||F-JF--JJ-F7LLJ-J +|.LF-JF-F|.|J7.L77|.F--7F7L---7L-J|L7|L7F--JL-7F||LF-JF7L7LJL7F-JLJF--J|F-JF-JL7F7L77L--JJFJ|||L7|LJFJ|L---------7L7||L7|||LJF7L7|7|F|L..L7J +|7F-J7.FFLLJ|F..F7F-JF7LJL---7L---JFJL-JL--7F-JFJL7L7FJL7L-7FJL---7|F-7||F7L7F7LJ|FJF7LF--JFJ||FJL77|FJF---------J|LJL-JLJL7FJL7L--7J-J-7... +.-J|||-|7L|7FJF7||L-7|L-7F--7|FF7F7L--7F7F-JL7FJF7|FJL-7L7FJL7F7F-J||FJ|||L7LJ|F-J|FJL7L7F7L7LJL-7|FJ|FJF--7F7F--7F-----7FFJ|JFJF--J-7.FF--F +J7|FLJF-L7|LF7|LJL7|LJF7LJF-JL-JLJL---J||L7F7|L7|||L7F7|FJL7-LJ|L77LJ|FJ||FJF-J|F7LJF7L7|||FJ|F--J|L7|L-JF7LJLJF7LJF7F-7|FJFJ|L7|JLJF7-FJ7|| +||L7.FL|LL-L.LL7F7L7LFJ|F7L------------JL7||||-LJ|L7||||L-7L--7L7L7JFJL7LJL7L7FJ|L7FJL-J||||F7L---JJ||F--JL----SL--JLJJLJ|FJF--J|7FL-.F77.F| +J.||F--7.J7J|-LLJL7L7L7||L---------------JLJ|L--7L7|LJ|L-7L7F-JJL7L7L7FJF--JFJL7L7|L-7F7LJLJ|L-----7LJL7F----------7F7F7|LJ7L---J777.L7LJ--| +L-|-|..L7-|LF.LJ-LL7L7||L--------7F--7F7F77FJF-7L7||F-JF7L7|L-7.FJFJFJ|-L-7FJF-JFJ|F7LJL7F7FJF-7F-7L7F7LJF7F-7F----J|||L7.LJJFLL-7|F7JJ.||.| +L7F-JF-F|7.F77J|-F7L7LJL7-F---7F7LJF7LJLJL7L7|-L7|||L-7|L-J|F-JFJFJFJFJF--J|LL-7|J|||F--J|||FJFJL7L7LJL--JLJFJL-----JLJFJF|..|LL7JJ-LJ-F7FJ- +.F.|FFFF--7||F7LFJL7L7F7|FJF-7LJL7F|L-----JFJL7J||LJF-JL-7FJL7.|FJFL-JLL7F7L-7.|L7|||L---J||L7L7FJ7L7F7F-7F7L----------JJF7-.|L-.||LJ.FLJJ|. +FJF|--JL-7||||L7L-7L7LJ||L-JFL7F7L-JFF7F7F7L-7L7|L7.L-7F7||F7L7|L-7|F---J||F-JFJFJ||L7F---JL-JFJL7F7LJLJJLJL-----7LF7F7F7|||.F-J7LJ7.7|J.L|- +|7JL|..L||LJLJFJF7L7L7|||7F7F-J|L7F--JLJLJL-7L-J|FJF--J||||||FJ|F7|FJF7F7|||FFJFJFJ|FJL---7F--JF-J||F7-F7F------7|FJLJLJLJL-77LLF7L7-L77L.|7 +-J7.F----|F7F7L-JL7L7L-JL-JLJF7L7LJF-------7L--7|L7L7F7|||||LJL|||||FJ||||LJFJFJ7L7|L--7F-J|F7FJF-JLJL-JLJF7F--7LJL7F-------J..|JF.77LJ-J-|| +L-FFF77|-LJLJL---7|JL-7F7F7F7||FJF7L------7|F7FJ|FJ-LJ||||||7F-J||||L7LJ|L7FJFJ|F7LJLF-JL7-||LJ7L----7F---JLJF7|JF7|||F-----7.F7FF7FJ-|...|| +|7|FJL-7-F-7F7F7FJL7F-J|||||LJLJFJL-------JLJ|L7LJLF7FJ|||||FJF7|LJ|FJF-JFJL7L-7|L--7L7F7L7LJF------7|L7F----J|L-JLJL-JF-7F-J-|L-J|JL-J7.F-7 +---L7F-J7|FJ||||L-7|L--JLJ||F7F7L7F---------7L-J|F-JLJFJ||||L7|||F-J|FJF7|F-JF7|L--7L-J||FJF7|F----7|L-JL--7F7L--7F7F7FJ.|L-7-|F--J7J|LF-J-F +L7LFJ|F7-|L-JLJL--JL7F7|F7LJ|||L7LJF----7F-7L---7L7F7FJ|||||L||||L-7|L-J||L-7|||F--JF7FJ||FJ|||F---JL------J||LF7LJLJLJF7L7FJFJL-7LF-7LL7FF7 +FL-L7|||F|F7F-7F7F-7LJL-J|7FJ||FJF7L---7|L7|F7F-J.|||L-7|||L7|||L7FJL-7FJ|F-J|||L7F7|LJFJLJFJLJL7F7F--7F----JL-JL----7L|L7LJFJF--J7|FJ.LLLLJ +LLF-JLJL-J|LJFJ|||FL-7F-7L7L7LJL-JL----JL7|LJLJF-7LJL7FJ|||FJ||L-J|F--J|FJL7FJ|L7||||F-JF7FJLFF7LJLJF7||F------------JFJFJF7L7|JFLFF|J.L|7L| +F-L---7F7FJF7L7|||F--JL7L7L-JF-7F7F--7F7FJL---7|FJF7FJ||LJ|L7LJJF7|L--7||7F|L7L7||||||F7|||F7FJL-7JFJLJ|L-----7F7LF7F7L7L7|L7|L77FF7|LF.F--| +L77LJLLJ||FJL-J||||F---J||F-7|FLJLJF-J||L7F--7LJL-J|L7|F-7|FJF--JLJF7FJ|L7FJFJFJ|LJ|||||||LJ||F-7L-JF-7|LF7F7FJ|L-JLJL7|FJ|FJ|FJFLF7F7|L.FL| +F-LJFLLFJ|L-7F7|||LJF----JL7||F----JF7|L7|L-7|F---7L7|LJFJ|L7|F7F--J||-L7|L7L7|FJF-J|||LJ|F-JLJ||F-7L7||FJLJLJJ|F--7F-J|L-JL-J|F7F|LJL7FFLJJ +||LFJ-LL7L7FJ|||LJFFJF7F7F7||||F-7F7|||FJL-7||L--7L-JL--J.L-J|||L--7|L-7|L7|FJLJJ|F7|||F-JL7F---J|FJFJLJL------JL7FJL--JF----7LJL-JF7FJJJJJ| +F7|JFF|.L-JL7|LJ7F7L-J||LJ||LJLJFLJLJLJ|FF7LJL---JF-----77L-FJ|L7F7||F7|L7|||JFF-J|||LJ|F--JL----JL7L7LF7F7F-7F7FJL-----J.F-7L-7F7FJLJJJ..|J +|L--|FFF---7||F--JL---J|F-J|F-7F7F-----JFJL7F--7F7|F---7L7|||FJFLJ||||LJ|LJLJ77L-7|LJF7LJF--7LF7F77L-JFJLJLJ.LJLJF7F-7F--7|FJF7LJLJJ|J-7-7.. +J|LF-7.L--7LJ||F7F7F-7FJL--JL7|||L---7F7|F-J|F7LJLJ|F7LL7L7-||.J|LLJLJ7.-JJLFF---J|F-JL--JF7L-J|||F--7L----7F7F--JLJFJ|F-J|L-JL-7JJJ|JF7JFJ7 +|F-JF-JL|FJF-J||LJLJFJL7.F7F-JLJL-7F7LJLJ|F7||L---7LJL7JL-J7LJ7.FF|-J--7LF-7-L-7F7|L--7F7FJL7F7LJ|L7FJJF---J|LJF7F7FJF|L--JF---7L77FF7JJFFJJ +LL7.LJ|FFJFJF-J|F---JF7|FJ|L-7F7F7LJL---7LJ||L---7L--7L---7-..F-F|.LJ7LL.7J||LLLJ|L--7||LJF7LJ|F7L-JL--JF---JF7||||L--JF--7L-7|L7L-7||J.J.77 +J..F|.|LL7|JL-7|L----JLJ|FJF-J|||L-----7L7FJ|F---JF-7|F---J-F|..L|L.|L..F|-||F7F-JF7FJLJF-JL-7LJL--7F---JF---JLJLJL7F7FJF7L-7L-7|F7LJ|JL.7L- +.FF-J.|FJ||J.F||F-----7L||FJF-JLJF--7F7L7|L-JL----JFJ|L-77JL7J--J|FFF7|.L|-|-F-|F-J||F-7L---7|JF7F7LJF7F7L-----7F7-||LJ7|L-7|F-JLJ|F-J|.FL-J +FF|-7.-JFLJ.FLLJL----7L-JLJFJ|F-7L-7LJL-J|F-7F-7F7FJ-L-7L-7J|...F7F7|FL7-JJL7J|LJJ|LJL7L-7F7||FJLJL--JLJL-----7LJL7|L---JF-J|L--7||L7J7--JJ| +L-7--JLLJL|.J.F77F7F-JF7F--JF-JFJF7L----7|L7LJFJ|LJF7F7L--J-L.|.FJ|L77..7J.FF.FLJ.J7.|L-7LJLJ|L7F7F--7F------7|F--J|F-7F7L-7L---J-L-JJ|-7.F7 +FL77L||.F--J-FJL-JLJF7|||F--JF7L-JL-----J|FJF7L-JF-J||L-7J.LL7L-JL..L-J7..JFLF-|FJ.|.F7FJF7F7L7LJ||F-J|F--7F-JLJF7LLJFJ||F7L7F7||7||.L--7.-7 +JJL7-77.JJLJ.L7F---7|LJLJL---JL---------7|L-JL7-FJF-J|F-J.|.|L-|FL--77|7F7F7||.|7F-F-J|L-JLJL7|F7LJL-7||F7LJF7F7||F-7|FJ||L7LJL-7-7-7-L7J-L| +|.-7L||-J--JFFLJF--J|F--------------7F--JL7F-7L7|FJF7||F-7F-77FJ7J|7JF7JJFL-7J-7F77|F7L------JLJL7JF7LJLJL--JLJLJLJFJLJ-LJFJF7F-J.|||..L-..F +77|J.LF-J|.|LFF7L--7|L---7F7F-7F7F-7LJF7F7LJFL7LJL7|||LJFJ|FJF7|L777JFJ|FL7F|7..L|-LJL-7F------7FJFJL7F-7F-7F------JF7F--7L-J|L7J77F7-|.||FJ +LFL-77|.F7-FF7||JF7LJ7F77LJLJLLJLJ|L--JLJL7F-7L---J|||F-JFJL-J|J.JLJJ|||F|JLJF-JLJ7L7|FLJ7F----JL-JF-JL7LJJLJ|F7F---JLJF-JJF7L-J-7-7F7FL7.FL +FF|7|FL|--F-JLJ|FJL---J|F7F7.F------------J|FJ.F--7||||F7L7F--J7F7F7F-L-77FFJJJJFLL7|JFF-7L-7F7F7F7L-77L-7F7F7|LJF-----JF7FJL7F-77J|-F|7|FJJ +||L|--.JJ|L---7LJF7F--7LJLJL7L---------7FF7|L7FJF-J||||||.|L--77.|LL7-J-7--|||-F|||-.L|L7|F7LJLJ|||F7L-77LJLJLJF7|7F7-F7|||F-J|FJF7LF-|F7J7. +-LJ||.LL7F|JLLL--JLJ7FJF-7F7L7F--------JFJLJFJL7|JFJLJLJL-JF--JJ7L-7J-|-FJ..|7.-|F|77|F-J|||F7F-J||||F7L7F--7F7||L-JL-JLJLJL--JL-JL7|LJ-J.L7 +|F-|-J.FF7L7F||F7F---JFJFLJ|FJL7F--7F7F7|F--JF7|L-JF--7F7F-JJJL-JF|--.7L|.7FL--.L|FF-7L-7LJLJ|L--JLJLJL7|L-7|||||F--------7F----7F-J-FLJ-7-| +F7||-F-F-JJF7-FJLJF--7L7F--JL7JLJF7LJLJ|||-F7|LJF-7L-7|||L-7.7JFLFJ-7FJ7|7L7--LF7F7L7L-7L---7|F7F--7F--JL--JLJLJLJF---7LF7LJF7F7||F77JF-7-F7 +7JF|.L--7J7F7-L--7|F-JFJL--7FJF7F||F---J|L7|LJF-JFL--JLJL--JF7.|J|.|F7F7JFJL|.F||||-|F-J|F--JLJ||F7|L--7F---7F7F7FL-7FJFJL--JLJ|LJ||F7FL7JJ| +..F--77JJFFFJJ|.LLJL--JF---JL-JL-JLJF7F-JFJ|F7L--------7F7F7|L7JFLFLJL7L-F--LF-J|||FJL-7FJF7F-7|LJ||F7JLJF--J|LJL7F-JL-JF7F7F-7L--JLJL7FJJF- +L7|L|LJ.77F77LF7F---7F7L--7F7F-7F---J||F7|J||L-------7FJ|LJLJFJFF-L7JF7FL|.LLL-7LJ|L--7|L-JLJL||F7||||F--JF7FJF7FJ|F---7|||LJF|F-7F--7|-J.LJ +.F|7|L-F--|L7FJ|L--7||L--7LJLJ7LJF---J||LJFJL-------7LJFJF7F-J.L77LJ.-77-LJ..|7L7FJF--JL-7F7JFJLJLJ|||L---JLJFJLJ-||F-7|||L--7LJ-LJJLLJJF7-F +FF.JJ7|LJ-L7|L7|F7FJ||F-7L-------JF7|FJL--JF-7F--7F7L7FJFJLJJF7JJL|J77.F7JFFF-7FJL7L----7LJL7L----7||L-------J|F7FJLJFJLJL7F7|.F7F7|.||.---J +FJ-|7F-7F|L|L-J|||L7|LJFJF7F7F7F-7|L-JF7F-7|FJL-7LJL-JL7L7F--JL-7.77F7-|J|FJ|FJL7FJF---7L--7L-7F7FJLJF-7F7F-7F7|||F--JF--7LJ|L-JLJL7-777-|-7 +|J-77|J|F7JL7F7LJL-JL7.L-JLJLJLJJLJF--JLJ|LJL7F7L7F7-F-JFJL7F---JF7FJL--7F7FJ|F7|L7L--7|F7FJF7LJLJF-7|FJ|||FJ||||||.F7L7FJF7L7F7F7FJ.J..F||F +|LFJFJ7LF--FJ||F7F-7FJF7F7F-7F-----JF7F7F-7F7||L7LJL7L7FJF7|L-7F7|LJF7F-J||L7LJLJFJF7J|LJLJFJ|F7F7|.LJL-JLJL-JLJLJL-JL7|L-JL7LJ||LJLF.FF7LL| +|-7F|JF.LL.L7|LJLJFJL-JLJ|L7|L------JLJ|L7LJ|LJLL---JFJL7|||F-J|||F-JLJF7||LL--7FJFJL7|F7F7L7||||LJF7F7F7F7F7F-7F7F7F7LJF7F7L7FJL7F--7-.|7|F +J||FF7..-7FLLJF---JF----7L-JL----------JFJF7L------7FL7FJ||||F7|LJL-7F7||||F7F-JL7L7FJLJLJ|FJLJLJ.FJLJLJLJLJ||F|||||||F7|LJ|FJL-7LJF-JFF7JF- +J-|L--|7LL7J|-L----JF--7L------------7F-JFJL7F-7F--JF7|L7|LJ||||F---J|||LJ|||L7F7L7|L-7F7|LJF-----JF-7F----7|L7LJ||LJ|||L-7||F-7|F7|7.LJJ7|| +||JLJ7|F.|J.F-F-----JF7L-------------J|F-JF7LJJ||F-7|||FJ|F-J|||L7F-7||L7FJ||-||L7||F-J||F7JL-7F7F7|FJ|LF--JL7L-7|L-7LJ|F-J|LJFJ|||L-7.FJJ7L +FF7-7|F7FF77.FL--7F7FJL7F------7F--7F7|L--JL--7||L7|||||F|L7FJ||FJ|FJ|L-J|FJL7||FJ||L-7|LJL--7LJLJLJL7L7L-7F7L--JL--JF7LJF7L7FJL|||F-J-F|FFJ +F-J-7-7||-L7-F--7LJ|L-7||F-----J|F7LJLJF--7F--J||FJ||||L7|FJL7LJL7|L-JF--JL7FJLJL7LJF-JL---7FJLF-7F--JFJF-J|L--------JL--JL7|L-7LJLJJJJLL-7| +77F.|LFJJL-|JL-7|F7L--J||L------J||F7F7L-7LJF77||L7||LJFJ||F7|F--J|F--JF-7||L--77L-7L7F-7F7||F-JFJL--7L7L--JF--------------JL--J-|JJ|-FJJ.FJ +|L-.LF-J7JF7-F-JLJ|F--7LJF--7F7|FJLJ|||F7L7-|L7LJFJLJF7|FJ||LJL---JL--7L7|FJF--JF--JFJL7LJ||||F-J|F-7L-JF---JF7F----7|F7LF--7.F7F|J.|7L77-L7 +J-J7.LJL--F--JF--7|L7FJF7L-7|||FJF-7LJLJL7L7|FJF7|F--J||L7||F---------JFJ|L7|LF7L--7|F7L-7LJ||L--7L7L-7|L----JLJF---JFJL-JF-JFJL7--F7|LJL77| +L-J777-F|LL---JF-J|FJL7||F-JLJLJFJ.L----7L-J|L7|LJL--7LJJ||||F--7F7.F7FL7|FJL7||F7FJLJ|F-JF7|L-7FJFJF7L----7F---JF7JFJF-7FJF7L7FJLFJ|7JLFFFL +FFJFFJ7-F.|FF--JF7|L7FJ||L---7F7|F7F----JJF7L7|L7F---JF-7||||L7FJ|L7||F7|||F-J|LJ|L-7FJL--J||F7||JL-JL----7|L----JL7|FJ|LJ7||FJL-7L7|--77FJ. +FJ-LL.L7F--7|F--J||FJ|.|L----J|LJ|LJ|F7-F7||FJ|FJL-7F7L7LJLJL7|L7L7LJ||||||L-7|F7|F7||F7F--J||||L7F-7F7F7FJL7F--7F7LJL77F-7|||F--J-||J-JF7L. +|F-F7FFLL7|F||F--J|L7L7L-----7L7FJF--JL7|||LJFJL7F-J|L7L7F-7FJL7|FJF-J|LJLJF-JLJ||||||||L7F7||||FJL7LJLJLJF-JL7.|||F-7L7L7LJLJ|F7F7||J|FL7J7 +F7J.L7|-JLLLLJL7F7L-JFJF7F7F-JFJL-JF---J|||F7L--J|F7|FJ|LJFJ|7FJ||FJF-JF---JF-7FJ||||LJ|FLJ|||LJL7FJF7F--7L--7L7LJLJ.L7L7|F---J||||||F-7.7J| +LJ-F-FJJ--J-L|LLJL7F7L-J||||F7|F---JF7F7||LJL-7F7||||L7-F7L7L7L7|||J|F-J-F7FJFJL7|||L7FJF7FJ||F--JL-JLJF7L--7L7L-----7L7LJL-7F7|||||||FJ7L7. +LFFF7JF-7J|-FJ-F--J||F-7LJ|LJLJL----JLJLJ|F7F7||LJ|LJFJFJ|.L7L7||||FJL7F7|||FJF-J||L7|L7||L7LJ|.F-7-F--JL---JFJF-7F--J|L7F--J|||LJLJLJL-7L|| +.|J.77|F7F-.|--L-7FJLJJL-7|F7F7F--------7||LJ|||F7L7FJ-|FJF7L7LJ|||L-7LJ|||||FL-7||FJ|FJ||-L-7L7L7L7L----7.F7L-J7LJLF7-FJL---JLJF7F-7F7FJ.L- +F.|7|-F|F--|.L|F-J|F7F-7FJLJLJLJF---7F-7LJL-7||LJ|FJ|F7||FJL7L-7|||F-JF-J|||L7F7|||L7|L7||F7FJFJFJFJLF--7L-JL-------JL7L-7F---7FJLJ.LJLJ|FF| +|7L-J.LJ7J||-FFJF-J||L7|L-7F7F7FJF--J|FJF7F7|||F-J|FJ||||L7FJF7||||L7FJF7||L7||||||FJL7|||||L7|LL7|F7L7FJF-------7F7F7L7-||F-7LJF-7F77LL|7-F +FFL7|FFJLF|.|L|FJF-JL-JL--J||||||L--7||FJ|||||||F-J|FJ||L7|L7|LJLJL7|L7|||L7|||||||L7FJ||||L7||F7||||FJ|FJF----7.LJ||L-JFJLJFJ|FJFJ||7LL|J.7 +F|L|-|7J-J|FL7LJ7L--------7|LJLJF7F7|||L7||||||||F-J|-||FJL7|L-7F--J|FJ|LJFJ||||||L7||FJ|||FJ|LJ|||||L7|L-JF--7L--7|L7F7|F-7L--JFJL|L7F-LJ-F +F--..L7...F7L|J.FF---7F7F-J|F---JLJLJ||FJ||LJ|||||F7L7LJL7FJ|F7|L7F7|L7L7LL-J||||L7|LJ|FJ||L7L-7LJ|||FJ|F-7L-7L---JL7LJ|||FJF7F7L7||FJ-7|7.| +7J|F7JL77-FJJ|.-JL--7LJLJF7|L------7FJ|L7|L7FJ|LJ||L7L-7F|L7||||FJ|||FJFJF--7LJ|L7|L-7|L7||FJF7L7L|||L7|L7L-7L-----7|F7|||L7|LJL7L-J|J-L.F-F +7-J-7-FF-7LJ.F-F7JF-JF7F7|LJ-F-7F7FJL7L7||FJL7L77LJFJF7L7L7|LJ|||FJLJL7L-JF7L7FJFJL7FJ|FJ||L7||FJFJ|L7||FJF-JF7F---JLJLJ|L7|L--7L7F7L-7-FJFF +L|.|LFFJ|F|JF|LLF-JF7|||LJLF7L7LJLJF7L7LJLJF7|FJF--JFJ|FJFJL-7||||F---JF-7||FJL7L-7||FJL7||FJ|||-L7L7LJ||7|F-J||LF7F7F7J|FJL7F-JF||L--J7F7.. +FL|F-J.FF-||-77JL-7|LJLJ7F-J|FJF7F7|L7L---7|||L7L7F7L7||FJF-7|||LJL7F7FJFJ|||F7|F-JLJ|F7|||L-JLJF-JFJF-JL7LJF-JL-JLJ||L7LJF7|L--7|L-77-7|.F7 +7J.FLF--JLL|F7-F-7LJF7-F7L-7LJFJLJLJFJF7F7LJ|L7L7LJ|FJ||L7L7LJ||7F-J||L7|FJ|LJ||L---7||LJ|L-7F--JF7L7L-7FJF-JF--7F-7LJFJF7||L---JL7FJ7|||-|| +|FLL7J||L|FJ7|.L7L--JL-JL-7|F7L7F--7L7||||F7L7|FJF-JL7LJ7L7L7FJL7|F7||FJ|L7|F7|L7F7FJLJF-JF-JL7F7||FJ7FJL7|F-JF-J|7|F-J7|LJL---7JLLJ..FLL--L +JJ|.|F|FFL|FLL-LL--------7|LJL7LJF-J-LJ||||L7||L7L7F7L-7F7|FJL7FJLJ|||||L7||||L7||LJF7LL--JF7-||LJ|L-7L7FJ|L-7|F7L7||F--JF-7F7FJJ|J-F7--J777 +FLJ.LLJJ7L|7.LF7F7F------JL---JF7L-7|F-J|LJF|||FJFJ||F7||LJL7FJ|F--J||L-7LJLJ|FJ|L--JL7F---J|FJL-7|F7|-LJFJF7||||FJ|LJF7FJ||||L7FL-F|L|F7L-L +LJL|.FL.|LL.FF|LJLJF7F7F7F---7FJL-7|FJF7L--7|||L7|FJ||LJ|F7FJL7|L--7||F7L7F--JL7L7F-7FJL7F-7LJF--J|||L--7L7|LJ|||L7|F7||L-7LJL-J-||FJFJL-JLL +|J-|JJ|-F7|LFFJF7F7|||||||F7F|L--7|||FJ|F--J||L7||L7|L7FJ|||.FJ|F--J||||FJL--7FJFJL7LJ.FJL7|F7L--7||L7F-JL|L-7||L7||||||F7L----7|L|.F||F7||J +|.|F7JL7|FFJFJFJLJLJ||LJLJ|L-JF7FJLJ||F|L--7||FJ|L7||FJ|FJ|L7|FJL--7|LJ||F7F7||JL-7L-7FJF-J||L7F-J||F|L--7|F7|||FJ|||LJ|||F---7|J.-7.F7.F7|. +F7-LL.LJLJL7L-JF7F--J|F---JF7FJ||F7-LJFJF-7||||FJFLJ||-|L7L7|LJF---JL-7|||LJLJL7F7|F7||FJ.FJL7|L7FJ|FJF--JLJ||||L7||L-7LJ|L--7LJJ7LL7L7FFJ-J +.|JJL7.7|FFLF--JLJF7FJL-7F-J||L||||F--JFJJ||||||F---JL7L7L7||F7|F-7F7FJ||L-7F7FJ||LJLJ||F-JF-JL7||FJL7L----7||||FJ||F-JF-JF-7L-7.|7.|-|FJ.L. +|..FFLLJF7JJ|F-7F-J|L7F-J|F-JL7LJ|LJF7FJF-J|LJ||L7F7F7L7L-JLJ|LJ|FJ||L7|L7LLJ|L-JL7F-7|||F7|F--J|LJF7L7F7F-J||LJL7||L-7|F7L7|F-J7LF.|.|7|J|L +|J77L-JL|L|7LJLLJFFJFJL--JL7F7L7FJF7||L7|F7L-7LJ-||||L7L---7JL7FJL7|L7||FJF--JF--7LJFJLJLJ||L--7L-7|L-J||L-7|L-7FJ|L7FJLJ|FJ|L-77JJF7JL7|-7| +7.FL7J|...J7.J-LL-L7|JLFF--J||FJL7|||L-J||L7FJ7F-J||L7L-7F-JF-JL7.||FJ|||FJF-7L-7|F7L-7-F-J|F--JF-J|F7FJ|F-J|F-JL7L7||F|||L7L-7|--FFJLF|7LL| +L-L7L-JJ7.LFJ|.LJFLLJJJFJF7FJ|L7FLJ|L7F-JL7|L-7L7FJL-JFFJL7FJF-7L7|||FJ||L7|-L7FJLJL-7L7|F7|L--7L-7|||L7LJF7LJJ|L|FJLJ-L-L7L7.LJJF.||F|F77FJ +7|||L|-||..||-.77LF-F--JFJ|L7L7|F--JFJL--7|L7FJFJL-7F--JF-JL7|7L-JLJ||LLJFJ|F-JL----7|FJLJ||F--JF7|||L7L--J|FJJ-LLJJJ|.L--L7|J.LJF-7FJJLL7|| +.-JLFJF7L7.F|7|-7|LFJF-7|FJFJ-LJL7F7L7.F7LJFLJFJF7FJL7F7L--7LJ77LF--JL-7FJFJL-7F7F7FJ|L-7FJ||F7FJ|||L7L7F--JJ|.FLJ-JF--.LJFLJ|.LF-L|JLL|FJJ- +FJ7F7JL|JL-LJ-L7FF-L7|FJ|L7|J-|F-J|L7L-JL7L|7.|FJ||F-J|L7F7L-7JFFJF-7F7||FJJF-J||||L7|F-J|FJLJ|L7||L7|FJL7|J7L77.|LF|JF-7F|JL7JFL7||F|F.L-|. +F-|JJ7.JJ-|F77-LLJJ-LJL-JLLJJJFJF7|FJF---J-||7LJ-LJ|F7L7LJ|F7|F-JFJFJ|||||F-JF7|||L7||L7-||-F-JFJLJ-|||F-J-77|L--L-L|.|-F|.LLJL|.7FF7L7J--F7 +LF-.|FL-F-F|7.LFJ-|.|7|L|7J77|L7|LJL7L---7-7|FJJJ.FLJ|FJ.LLJ||L7FJLL7|||||L-7|LJLJ.||L-J-LJ-L--J7|J-||LJJL7|LF7||.LLL7J-F|-J.7-F--FJL7|F7JLF +F-.F||..LFJLL7FJ.F|-7-77FL.JFFLLJ-F7|F---J.||7J|.F7.LLJ-7-L7LJ-|L7-LLJLJ|||F|L----7LJ7F7JLL.LJ.LFJ|.LJJL--.|-F7-77.F7J|FL|JF7JF|LJLJFJL-F.FF +F-F||-7-FLF7JFLJ7F|-JJ.LJJJ|-JJ|JF|LJ|F7LJ-JL77-F7JFJLL7FJ.F7.LL-J7LJJJL||F-JF7F-7L---J|LFJ-.J7JJ7L||..LL-JJ7J|F||FFF.LF.|.|L-LF-JFFLJ-FJ-J| +L7J||.L-JLLJ--7.FL-7||.F|-L7.|.|-FJF7LJ|..7-LFJ.|L7L-||L|7-|-L.|.|L|.FF7LJL7FJLJJ|F----J.|7L|--7.|.LJ-7..|JF7|L-L-7F--L|FJ7|FLL|FJ7|-7.|-|JL +FL7F||.||7L-F--|JF-.-F-JLF7J||L..L7||F-J7J.-.|.FL|J-FLF.|J7JFL-|-7.--F|L---JL7LF-JL--7|JF-7L7.L-FJ7|LJ7F77JJ.|JL|.-LL.|L-L-|-7.||.L7-F-7.|JL +L|7-FLJ--F77|-LJ.|--JJJL.|JLJFJF7-LJLJ-F|7L.FJ-77J..F-|-|J|F7.|LLL-7|LL--7F7FJ.L-7F--J7F7F7-JJ.LJ--FJL|FF-7LF|7.L7FFJ-J|.L.|.LFL7.LJFJFF-|.. +.|..|.|7L.L|J.LL-L-7F7-LFJ|.FF.F7.J.|L--|7.|--7|F7FJJ.|L|-L7|--JF|.|-7F|LLJ|L77LFLJ-J.J-.JJ.|||FJF|J..|-LJF-L|7L|-7L|7L7J-JJ.L-J-||-|-LJ|LLF +LJ-F---J.F7|77JFL-||-F7||-J-LJ-FJLJF-7|F|F-JFFJ|.F--7-LJ|LFL|-7||JFF-|LF.JL|FJ7FFJL7J-|7L77F|FFJJ|7..LL-J.777F7F|JF-77J|LFFF77FL|LL-|-.LJJJ| +.|JF|-L|.J7LJJ77|F7|7F--|-|JL7-L7LFFJ-77-J|F-JFJ7JF|J|7|F-|7|-L|||F7.|L7-F|LJJ7-|7.|FLLF7LL-FFJ|.-L--7.LF||F-J.L|F7.L7F7.F7LLJ7J|F|-|J|L|L77 +F-7|L77L..F-J7F---7J7||.|-F.LL7.|F7.JL|F7LF|-FF-LF7|-7-|.L--|...FL|L-JFF-J-.|.7F||JF||.FL7L.7||L7JJ-7FF-7|F|-|-LF--J7L7LL7JL||LF|F--LJ|-FJ|7 +L|L--JJJ-LLJ-FF.JJLLJ7-L7-JLJJ|-.F7..-|LJ.FJ.|J..L7J.L-.--JL|.-FJ-L-LL.|.JJ-FJ.F|JLLJF-7J7JJJ|7JLJ..FL--JJ-77L7.|JLL-JL-L.LL-|7-L|J.LLL-L-|. \ No newline at end of file diff --git a/2023/day10/p1/main.py b/2023/day10/p1/main.py new file mode 100644 index 0000000..de73699 --- /dev/null +++ b/2023/day10/p1/main.py @@ -0,0 +1,118 @@ +import math +INPUT_FILE = "input.text" + + +class Point: + x: int + y: int + + def __init__(self, x: int , y: int): + self.x = x + self.y = y + + def add(self, other): + return Point(self.x + other.x, self.y + other.y) + + def __str__(self) -> str: + return f'P({self.x}, {self.y})' + + def __eq__(self, other) -> bool: + return self.x == other.x and self.y == other.y + +class PipeMap: + pipe_map: list[str] + start_position: Point + bounds: Point + + def __init__(self, map_path: str): + + with open(map_path, 'r') as file: + self.pipe_map = file.readlines() + + for i in range(0, len(self.pipe_map)): + self.pipe_map[i] = self.pipe_map[i][:-1] + + max_y = len(self.pipe_map) + for row in range(0, max_y): + max_x = len(self.pipe_map[row]) + col = self.pipe_map[row].find('S') + + if col != -1: + self.bounds = Point(max_x, max_y) + self.start_position = Point(row, col) + + def in_bounds(self, p: Point) -> bool: + return (p.y < self.bounds.x and p.x < self.bounds.y and p.x >= 0 and p.y >= 0) + + +directions = { + 8 : Point(-1, 0), + 9 : Point(-1, 1), + 6 : Point(0, 1), + 3 : Point(1, 1), + 2 : Point(1, 0), + 1 : Point(1, -1), + 4 : Point(0, -1), + 7 : Point(-1, -1) +} + +pipe_directions = { + '|' : [Point(-1, 0), Point(1, 0)], + '-' : [Point(0, -1), Point(0, 1)], + 'L' : [Point(-1, 0), Point(0, 1)], + 'J' : [Point(-1, 0), Point(0, -1)], + '7' : [Point(0, -1), Point(1, 0)], + 'F' : [Point(0, 1), Point(1, 0)], + '.' : [], + 'S' : True +} + +def main(): + + pipe_map = PipeMap(INPUT_FILE) + + # Check around start + next_directions = None + current_pos: Point = pipe_map.start_position + last_pos: Point = current_pos + + for d in directions: + new_pos = pipe_map.start_position.add(directions[d]) + + if pipe_map.in_bounds(new_pos): + if char := pipe_directions[pipe_map.pipe_map[new_pos.x][new_pos.y]]: + + # Check if this pipe connects to start somehow + good = False + for d2 in char: + if new_pos.add(d2) == current_pos: + good = True + break + + if good: + current_pos = new_pos + next_directions = char + break + + steps = 1 # Because current pos isn't at start rn + while current_pos != pipe_map.start_position: + + for direction in next_directions: + potential_pos: Point = current_pos.add(direction) + potential_directions: list[Point] = pipe_directions[pipe_map.pipe_map[potential_pos.x][potential_pos.y]] + + if pipe_map.in_bounds(potential_pos) and potential_pos != last_pos and potential_directions: + last_pos = current_pos + current_pos = potential_pos + next_directions = potential_directions + steps += 1 + break + + + print(f'Loop finished, start found in {steps} steps') + print(f'Critter is at {math.ceil(steps/2)}') + + + +if __name__ == '__main__': + main() diff --git a/2023/day10/p1/test.text b/2023/day10/p1/test.text new file mode 100644 index 0000000..3c00cf2 --- /dev/null +++ b/2023/day10/p1/test.text @@ -0,0 +1,5 @@ +..F7. +.FJ|. +SJ.L7 +|F--J +LJ... \ No newline at end of file diff --git a/2023/day10/p2/input.text b/2023/day10/p2/input.text new file mode 100644 index 0000000..072da9d --- /dev/null +++ b/2023/day10/p2/input.text @@ -0,0 +1,140 @@ +F---7-FJ.7--FJ7.-.7-|7F.|7FJ77F7J-|--.FLF|.F-7-F7.F.J77|--|7--|7|-J-F--7-F7.F7-F7F7F-|-|-F777L7|-.FLF|-77F7-FJF|JF--F.77J-L7-FF--7.FFF7FF7.7 +|J.F|7F|F7J.J-L-|-|.L7F7JF7-7-LJ|LJ.F7.L|.F|F7FJ7.F7.|F|L7.L7L|-F-|7|L|JFF.F||F777L|-77L-|JF7FJJJLF7LL7|.L77|L7LLLJ.|..LLL7|L7-.-JFFLL-7L-FF +F7L7JLLJL-7FL7|F7-J7.-J.7L7J|.|-JF|FLFF7L-JLL|-F7-F|77|.|L7FJ7JJFJL7JJJFF.FJ||||JFF|LL7F-JF|.LJ7F.|F7F|J7LLL-7||||LFFFF77|-L7LL7F7-JL7|FF7L| +JFL7FJ7.--JJ7L||.LF|7JJFLFLF7.|.LFF7-FJ|-J-77|-F.|J|LLFF-|-7JL7-J7L|JLF7-7F7|LJL-7|L7F7J-FJ|F|7|77|J-F..FJL.|F77-7F|-FJ|J7J.--7.7J.7-|-||LF| +.|LLFJLF--J.FL|-J.F77F-77.L|L7F77F7.F|FJ7.FJ7JF7F7|F-J..7JL|..FF---|J-F|JF|||F--7|-FL7.J-J.|LFFJ-7.L7J|.7-|LJJF7L77LL||.FL--JJ|-L-F|7F-JJ|.| +FL77J|LJFJFF7JJ|J7LJ.|.LF.LL7|||7||-FJL---7.LFJL7J7|FLF7J|F77-J|JJFJ-F-7FFJLJL-7LJ7LLLJ7JLL-7||J|||L-7|---L.FFLLFF---|F--J.|.|L.||FJ7.LLL|-J +|L-J-JJ-F-F-J7F--7.F7F7F7FF-JLJ|FJ|JL7F-7FJ7-L7FJF-7F7||7FFF7JL7.-JLF|FJFJF7F7FJFFL-|.L-7J|FJFJ-JJ7.L|7.|7J-|J.||||LFLJ-F|F7-7|FF-L7|7-.|L7| +7|LF|JLL|.F.F-FJF-7|||LJL7L-7F-JL7L7FJL7LJF77F|||L7||||L-7F||.7F7FLFFJL-JFJLJLJ-F|J.F-FL7.LJ||.|L.F7|.F7.7|FJ||-J|J-J7.7-7---|-LJF|7F|-77-L- +|J.7|LF7JF|F7|L.L7|||L7F-J-F||F7FJFJ|F-JF7||F7||-F|||||F-JFJ|7J|L|F-L-7F7L-7F777.|JF77J-F7FFF777LFFF-F-7-7--LJL|-L|.FF-F.JL|.LFJ-77-F|7F77FJ +JJ--JLJL-J|J.FLF-J|||L||F77FJ||||FJFJ|F7|||LJLJ|JFJ||||L77L7|F--7F7-F7LJ|F7|||F7F7.L|.F-JL7FJL7F---7JL7L7F7.L|F--7L-L7.J-.-7JJ|L-7L.|JFJLJF| +|JFLJF|-77F-7.FL-7LJL-J|||FJFJ|||L7|FJ|LJ|L---7L7|FJ|LJFJ7FJLJF-J||.||F-J|LJ|LJLJ|7-J7L-7FJL7FJ|F--J--L7|||7FFF-FJ|JLL|FLFLJ.-L7FLL-|L|.7.FF +L-77LJJ|FJ|7J.--LL----7|||L7|FJ||FJ||FJF-JF7|FJFJ|L7L7FJF7|F7FJ-FJL-J||F7L-7L7F--J.7|F-7||F7||FJL7L|-F-JLJL-7-|FJLJ77.|7.L7JF|L|7.|---|F--.F +7JFF7||FJJJJL7J7.F-7F-JLJL-JLJFJ||7|LJFJF7|L7L7L7L7|-|L7|LJ|LJJ.L---7|LJL7FJ|||F-77LLL7||LJLJLJF-J-|LL---7F-J|||..JJF-.F7.F-7|L|7F77JFJ-L|FJ +|-|LLJF-7LJ|LL|--L7|L7F--7F--7L-JL7L7FJFJ||FJF|FJFJ|FJFJL-7L-7F-7LF7|L7F7|L7FJ||FJF7FFJLJF-----JF-7F7F-7FJL--777-7L-|JF|77LLLL7JFJ|F-JJ.L|7| +77LJ7F--7J7L7L|.F-J|FJ|F-J|F-JF-7FJFJL7|FJ|L7FJL-JFJ|FJF7|L7FJL7|F|||FJ|LJFJL7||L7|L7L--7L7F-7F7|FJ||L7||F---JL|-L7J.-77J-F.||JF|.L--J.--L7| +L77--L-7J-|7LFF7L-7|L-JL-7||F7|FJL7|F-J|L-JFJL-7F7|FJL7||F-J|F-J|FJLJL7|F7L7-||L7LJFJJF7|FJL7LJLJL7||FJ||L--7F-7-|7.F.|7JL-L7J-7JFFL--JFFL.L +..FFJL7L7-LLF7|L--JL-7F--J|LJ||L7FJ|L7F|F--JF7-LJ|||F-J||L-7LJF-JL--7FJLJ|FJFJL7|F-JF7||||F7|F----J||L7LJF--JL7|F--7LFLJ--||||FLLF7-J.FF-.F| +F-J|7L|-77|-J7|F7F--7|L---JF-JL7|L-JFJFJL-7FJL7F7|||L7|||F7|F-JF7.F7||F7FJL7L7FJ||.FJ||LJ||LJL-7-F7||JL7FJF7F7||L-7|-FJ-7LL77-F7-F|J.F7||F-7 +LL7L77L-7-7-LLLJLJF-JL-----JF--JL--7L-JF7FJL7FJ||||L7L7|LJLJ|F7|L7||||||L-7L7||FJL-JFJL-7||F---JFJLJ|F-J|FJLJLJ|F7|L7JF7.7JL7|LF-7.F-FF77JJ. +FF--.7.LJLL7|.|FF-JF--------JF7F7F7|F--J||F-JL-JLJ|FJFJL7F--J|LJFJ|||||L7|L7LJ||F---JF--JLJL--7JL7F-JL7FJ|F----J|||FJFJ|7JF-J-7|JL||LLLJL7-F +7|..L-FFJJFL7FFLL-7|F---77F7FJLJLJ||L7F7LJL--7F---JL7|F7||F--JF-JFJ||||FJF7L7FJ||F--7L---7F---JF-JL7F7|L-JL7F--7|||L-JFJF7L7F7JJ.FJF-7L7J|7| +F7.L7LJJ.FJL|F7L|7LJL7F7L-J|L----7|L7LJL7F7FFJL7F-7||||LJLJF--JF7L7||LJL7|L-JL7|LJF7|F7F-JL-7F7L7F-J|||F---J|F7||LJF--J||L7JLJ.LFLJ|LJ--7JL| +J7-FJ.|7.|J-F7L7LF7F-J||F-7|F7FF-JL7|F--J||FJF-J|FJFJ||F7F7L--7||FJLJF-7|L---7||F-JLJ||L--7FJ|L7|L7FJLJL7F-7LJ|LJF-JF7F7L7L7||--|..|F7|LJ|F| +|F7LF77J.LF-LJJ.FJLJF7|||FJLJL7L--7LJL7F7|||FJF7||FJFJLJ||L---J||L--7|FLJJF--J||L-7F7||FF-JL7|FJL7|L-7F-J|FJF7L-7L7FJLJL7|FJ7|F7|F.|--7-LL|7 +|L||F---F.F7LJ-FL---J||||L--7FJF7L|F--J|||||L7||||L7L-7FJL-7F-7||F7FJL7F-7L--7LJF-J|||L7L7F-J|L7FJL-7|L-7|L7||F7|FJ|F---J||F---77-|J|7L-F.L7 +-7F77JJF-|7JJ.F-F--77||LJF--JL-JL-J|F7J||||L7|||||FJF7|L7F-JL7|||||L7FJ|FJF-7L7FJF-J||FJFJL7FJFJL7F-J|F-J|FJ|||||L7|L7F7FJ||F--JJ7|.L7|F|.LJ +.L.|L|.F-L|7|FFLL-7L7LJF7L--------7LJL-JLJ|FJ||LJ|L7|LJFJ|F7FJLJ||L-J|.||FJFJFJL-JF-J||FJF-JL7|F-JL7FJ|F7||FJLJLJFJ|FJ||L7LJ|F-7JF777.LFFJL| +J..L.LL|J-J-|7J.LLL7L-7|L---------JF--7F7FJL7|L-7L-JL77L7LJLJF--JL7F-JFJ|L7|FJF---JF7|LJFJF7FJ|L-7FJL7||||||F----JFJL7|L-JF-J|FJ-LF77.|L||.F +.F-.L7.|7.F7.F-7.FLL7FJL----------7L-7LJLJF7|L7FJF-7FJF7|F--7L--7FJL77L7L7|LJFJ|F7FJ|L-7|FJ|L7L--J||FJLJ||LJ|F7F7FJF-JL7F-JF7||F77.JJ-L-|-LJ +FF|-.FFF-JJLLJL|FF--JL7F77F7F7F--7|F-JF7F7|||FJL-JFJL-JLJL-7L---JL7FJF7L7|L-7L7FJ||FJF-J||FJ7L---7L7|F--JL-7LJLJLJFJF-7||F-JLJLJ|-J7|-|F7-L7 +|L-JLLJL-J7F||.J|L---7LJL-JLJLJF7LJL7-|||||LJL7-F7|F7F---7FJF7F-7FJL7||FJ|F7|FJL7||L7L-7|||F7F7F7|FJ||F7F7FJF----7L-JFJ|||F---7FJFL7.FFJJ|F7 +..|.|F7L77LL77J|F-7F7L--------7|L--7L-JLJ|L--7|FJ||||L7F7LJ|||L7LJF-J||L7LJ||L--J||FJF-JLJ||LJLJ||L7|LJ|||L7L-7F7L--7L-JLJL7F7LJ-7F|-7.|7FLJ +F.L|-|J.F7.|L|-LL7LJL----7F-7FJ|F-7L7F---JF7FJLJFJLJ|FJ|L--7||FJF-JF7||JL-7LJF7F-J|L7L--7FJL7F--J|FJ|F-J||FJF-J|L--7L7F7F--J|L7L|F-J|F|JLJ|J +|F-L.|.-JL7|JF-L|L------7|L7LJFJL7|FJ|F--7||L--7|F7FJL7|F--J||L7|F-J|||F7-L-7|LJF7|FJF7FJ|F7||F7FJL-J|F7|||FJLFJF--J-|||L---JFJ.-JF|JLJ|J.JJ +7-LJFJ7|J.F-.J77FF------JL-JF-J..||L7||F-J||FF7||||L7FJ||F7L||F||L-7|||||F7F||F7|||||||L7|||||||L7F--J||||||F7|FJF77FJ||F-7F7|F7-|FL-F.7-7J| +F7-|7.FF-FJ-|JF7FL--7F7F7F--JF7-FJL-J|||F7||FJ|||||FJ|FJLJ|FJ|FJL7FJ||||||L7|LJLJ|||FJ|FJ||||||L7||F-7|LJLJLJLJL-JL7L7||L7||LJ|L--7J7|FL-|-F +LJ--F7L---JFLJL-JJ-LLJLJLJF--JL7L7F77||LJLJ||JLJ||LJL|L-7.||FJL-7|||LJ||LJFJL7F--J|LJFJL7LJ||||FJ|||L||F----------7L7||L7|||F-JF--JJ-F7LLJ-J +|.LF-JF-F|.|J7.L77|.F--7F7L---7L-J|L7|L7F--JL-7F||LF-JF7L7LJL7F-JLJF--J|F-JF-JL7F7L77L--JJFJ|||L7|LJFJ|L---------7L7||L7|||LJF7L7|7|F|L..L7J +|7F-J7.FFLLJ|F..F7F-JF7LJL---7L---JFJL-JL--7F-JFJL7L7FJL7L-7FJL---7|F-7||F7L7F7LJ|FJF7LF--JFJ||FJL77|FJF---------J|LJL-JLJL7FJL7L--7J-J-7... +.-J|||-|7L|7FJF7||L-7|L-7F--7|FF7F7L--7F7F-JL7FJF7|FJL-7L7FJL7F7F-J||FJ|||L7LJ|F-J|FJL7L7F7L7LJL-7|FJ|FJF--7F7F--7F-----7FFJ|JFJF--J-7.FF--F +J7|FLJF-L7|LF7|LJL7|LJF7LJF-JL-JLJL---J||L7F7|L7|||L7F7|FJL7-LJ|L77LJ|FJ||FJF-J|F7LJF7L7|||FJ|F--J|L7|L-JF7LJLJF7LJF7F-7|FJFJ|L7|JLJF7-FJ7|| +||L7.FL|LL-L.LL7F7L7LFJ|F7L------------JL7||||-LJ|L7||||L-7L--7L7L7JFJL7LJL7L7FJ|L7FJL-J||||F7L---JJ||F--JL----SL--JLJJLJ|FJF--J|7FL-.F77.F| +J.||F--7.J7J|-LLJL7L7L7||L---------------JLJ|L--7L7|LJ|L-7L7F-JJL7L7L7FJF--JFJL7L7|L-7F7LJLJ|L-----7LJL7F----------7F7F7|LJ7L---J777.L7LJ--| +L-|-|..L7-|LF.LJ-LL7L7||L--------7F--7F7F77FJF-7L7||F-JF7L7|L-7.FJFJFJ|-L-7FJF-JFJ|F7LJL7F7FJF-7F-7L7F7LJF7F-7F----J|||L7.LJJFLL-7|F7JJ.||.| +L7F-JF-F|7.F77J|-F7L7LJL7-F---7F7LJF7LJLJL7L7|-L7|||L-7|L-J|F-JFJFJFJFJF--J|LL-7|J|||F--J|||FJFJL7L7LJL--JLJFJL-----JLJFJF|..|LL7JJ-LJ-F7FJ- +.F.|FFFF--7||F7LFJL7L7F7|FJF-7LJL7F|L-----JFJL7J||LJF-JL-7FJL7.|FJFL-JLL7F7L-7.|L7|||L---J||L7L7FJ7L7F7F-7F7L----------JJF7-.|L-.||LJ.FLJJ|. +FJF|--JL-7||||L7L-7L7LJ||L-JFL7F7L-JFF7F7F7L-7L7|L7.L-7F7||F7L7|L-7|F---J||F-JFJFJ||L7F---JL-JFJL7F7LJLJJLJL-----7LF7F7F7|||.F-J7LJ7.7|J.L|- +|7JL|..L||LJLJFJF7L7L7|||7F7F-J|L7F--JLJLJL-7L-J|FJF--J||||||FJ|F7|FJF7F7|||FFJFJFJ|FJL---7F--JF-J||F7-F7F------7|FJLJLJLJL-77LLF7L7-L77L.|7 +-J7.F----|F7F7L-JL7L7L-JL-JLJF7L7LJF-------7L--7|L7L7F7|||||LJL|||||FJ||||LJFJFJ7L7|L--7F-J|F7FJF-JLJL-JLJF7F--7LJL7F-------J..|JF.77LJ-J-|| +L-FFF77|-LJLJL---7|JL-7F7F7F7||FJF7L------7|F7FJ|FJ-LJ||||||7F-J||||L7LJ|L7FJFJ|F7LJLF-JL7-||LJ7L----7F---JLJF7|JF7|||F-----7.F7FF7FJ-|...|| +|7|FJL-7-F-7F7F7FJL7F-J|||||LJLJFJL-------JLJ|L7LJLF7FJ|||||FJF7|LJ|FJF-JFJL7L-7|L--7L7F7L7LJF------7|L7F----J|L-JLJL-JF-7F-J-|L-J|JL-J7.F-7 +---L7F-J7|FJ||||L-7|L--JLJ||F7F7L7F---------7L-J|F-JLJFJ||||L7|||F-J|FJF7|F-JF7|L--7L-J||FJF7|F----7|L-JL--7F7L--7F7F7FJ.|L-7-|F--J7J|LF-J-F +L7LFJ|F7-|L-JLJL--JL7F7|F7LJ|||L7LJF----7F-7L---7L7F7FJ|||||L||||L-7|L-J||L-7|||F--JF7FJ||FJ|||F---JL------J||LF7LJLJLJF7L7FJFJL-7LF-7LL7FF7 +FL-L7|||F|F7F-7F7F-7LJL-J|7FJ||FJF7L---7|L7|F7F-J.|||L-7|||L7|||L7FJL-7FJ|F-J|||L7F7|LJFJLJFJLJL7F7F--7F----JL-JL----7L|L7LJFJF--J7|FJ.LLLLJ +LLF-JLJL-J|LJFJ|||FL-7F-7L7L7LJL-JL----JL7|LJLJF-7LJL7FJ|||FJ||L-J|F--J|FJL7FJ|L7||||F-JF7FJLFF7LJLJF7||F------------JFJFJF7L7|JFLFF|J.L|7L| +F-L---7F7FJF7L7|||F--JL7L7L-JF-7F7F--7F7FJL---7|FJF7FJ||LJ|L7LJJF7|L--7||7F|L7L7||||||F7|||F7FJL-7JFJLJ|L-----7F7LF7F7L7L7|L7|L77FF7|LF.F--| +L77LJLLJ||FJL-J||||F---J||F-7|FLJLJF-J||L7F--7LJL-J|L7|F-7|FJF--JLJF7FJ|L7FJFJFJ|LJ|||||||LJ||F-7L-JF-7|LF7F7FJ|L-JLJL7|FJ|FJ|FJFLF7F7|L.FL| +F-LJFLLFJ|L-7F7|||LJF----JL7||F----JF7|L7|L-7|F---7L7|LJFJ|L7|F7F--J||-L7|L7L7|FJF-J|||LJ|F-JLJ||F-7L7||FJLJLJJ|F--7F-J|L-JL-J|F7F|LJL7FFLJJ +||LFJ-LL7L7FJ|||LJFFJF7F7F7||||F-7F7|||FJL-7||L--7L-JL--J.L-J|||L--7|L-7|L7|FJLJJ|F7|||F-JL7F---J|FJFJLJL------JL7FJL--JF----7LJL-JF7FJJJJJ| +F7|JFF|.L-JL7|LJ7F7L-J||LJ||LJLJFLJLJLJ|FF7LJL---JF-----77L-FJ|L7F7||F7|L7|||JFF-J|||LJ|F--JL----JL7L7LF7F7F-7F7FJL-----J.F-7L-7F7FJLJJJ..|J +|L--|FFF---7||F--JL---J|F-J|F-7F7F-----JFJL7F--7F7|F---7L7|||FJFLJ||||LJ|LJLJ77L-7|LJF7LJF--7LF7F77L-JFJLJLJ.LJLJF7F-7F--7|FJF7LJLJJ|J-7-7.. +J|LF-7.L--7LJ||F7F7F-7FJL--JL7|||L---7F7|F-J|F7LJLJ|F7LL7L7-||.J|LLJLJ7.-JJLFF---J|F-JL--JF7L-J|||F--7L----7F7F--JLJFJ|F-J|L-JL-7JJJ|JF7JFJ7 +|F-JF-JL|FJF-J||LJLJFJL7.F7F-JLJL-7F7LJLJ|F7||L---7LJL7JL-J7LJ7.FF|-J--7LF-7-L-7F7|L--7F7FJL7F7LJ|L7FJJF---J|LJF7F7FJF|L--JF---7L77FF7JJFFJJ +LL7.LJ|FFJFJF-J|F---JF7|FJ|L-7F7F7LJL---7LJ||L---7L--7L---7-..F-F|.LJ7LL.7J||LLLJ|L--7||LJF7LJ|F7L-JL--JF---JF7||||L--JF--7L-7|L7L-7||J.J.77 +J..F|.|LL7|JL-7|L----JLJ|FJF-J|||L-----7L7FJ|F---JF-7|F---J-F|..L|L.|L..F|-||F7F-JF7FJLJF-JL-7LJL--7F---JF---JLJLJL7F7FJF7L-7L-7|F7LJ|JL.7L- +.FF-J.|FJ||J.F||F-----7L||FJF-JLJF--7F7L7|L-JL----JFJ|L-77JL7J--J|FFF7|.L|-|-F-|F-J||F-7L---7|JF7F7LJF7F7L-----7F7-||LJ7|L-7|F-JLJ|F-J|.FL-J +FF|-7.-JFLJ.FLLJL----7L-JLJFJ|F-7L-7LJL-J|F-7F-7F7FJ-L-7L-7J|...F7F7|FL7-JJL7J|LJJ|LJL7L-7F7||FJLJL--JLJL-----7LJL7|L---JF-J|L--7||L7J7--JJ| +L-7--JLLJL|.J.F77F7F-JF7F--JF-JFJF7L----7|L7LJFJ|LJF7F7L--J-L.|.FJ|L77..7J.FF.FLJ.J7.|L-7LJLJ|L7F7F--7F------7|F--J|F-7F7L-7L---J-L-JJ|-7.F7 +FL77L||.F--J-FJL-JLJF7|||F--JF7L-JL-----J|FJF7L-JF-J||L-7J.LL7L-JL..L-J7..JFLF-|FJ.|.F7FJF7F7L7LJ||F-J|F--7F-JLJF7LLJFJ||F7L7F7||7||.L--7.-7 +JJL7-77.JJLJ.L7F---7|LJLJL---JL---------7|L-JL7-FJF-J|F-J.|.|L-|FL--77|7F7F7||.|7F-F-J|L-JLJL7|F7LJL-7||F7LJF7F7||F-7|FJ||L7LJL-7-7-7-L7J-L| +|.-7L||-J--JFFLJF--J|F--------------7F--JL7F-7L7|FJF7||F-7F-77FJ7J|7JF7JJFL-7J-7F77|F7L------JLJL7JF7LJLJL--JLJLJLJFJLJ-LJFJF7F-J.|||..L-..F +77|J.LF-J|.|LFF7L--7|L---7F7F-7F7F-7LJF7F7LJFL7LJL7|||LJFJ|FJF7|L777JFJ|FL7F|7..L|-LJL-7F------7FJFJL7F-7F-7F------JF7F--7L-J|L7J77F7-|.||FJ +LFL-77|.F7-FF7||JF7LJ7F77LJLJLLJLJ|L--JLJL7F-7L---J|||F-JFJL-J|J.JLJJ|||F|JLJF-JLJ7L7|FLJ7F----JL-JF-JL7LJJLJ|F7F---JLJF-JJF7L-J-7-7F7FL7.FL +FF|7|FL|--F-JLJ|FJL---J|F7F7.F------------J|FJ.F--7||||F7L7F--J7F7F7F-L-77FFJJJJFLL7|JFF-7L-7F7F7F7L-77L-7F7F7|LJF-----JF7FJL7F-77J|-F|7|FJJ +||L|--.JJ|L---7LJF7F--7LJLJL7L---------7FF7|L7FJF-J||||||.|L--77.|LL7-J-7--|||-F|||-.L|L7|F7LJLJ|||F7L-77LJLJLJF7|7F7-F7|||F-J|FJF7LF-|F7J7. +-LJ||.LL7F|JLLL--JLJ7FJF-7F7L7F--------JFJLJFJL7|JFJLJLJL-JF--JJ7L-7J-|-FJ..|7.-|F|77|F-J|||F7F-J||||F7L7F--7F7||L-JL-JLJLJL--JL-JL7|LJ-J.L7 +|F-|-J.FF7L7F||F7F---JFJFLJ|FJL7F--7F7F7|F--JF7|L-JF--7F7F-JJJL-JF|--.7L|.7FL--.L|FF-7L-7LJLJ|L--JLJLJL7|L-7|||||F--------7F----7F-J-FLJ-7-| +F7||-F-F-JJF7-FJLJF--7L7F--JL7JLJF7LJLJ|||-F7|LJF-7L-7|||L-7.7JFLFJ-7FJ7|7L7--LF7F7L7L-7L---7|F7F--7F--JL--JLJLJLJF---7LF7LJF7F7||F77JF-7-F7 +7JF|.L--7J7F7-L--7|F-JFJL--7FJF7F||F---J|L7|LJF-JFL--JLJL--JF7.|J|.|F7F7JFJL|.F||||-|F-J|F--JLJ||F7|L--7F---7F7F7FL-7FJFJL--JLJ|LJ||F7FL7JJ| +..F--77JJFFFJJ|.LLJL--JF---JL-JL-JLJF7F-JFJ|F7L--------7F7F7|L7JFLFLJL7L-F--LF-J|||FJL-7FJF7F-7|LJ||F7JLJF--J|LJL7F-JL-JF7F7F-7L--JLJL7FJJF- +L7|L|LJ.77F77LF7F---7F7L--7F7F-7F---J||F7|J||L-------7FJ|LJLJFJFF-L7JF7FL|.LLL-7LJ|L--7|L-JLJL||F7||||F--JF7FJF7FJ|F---7|||LJF|F-7F--7|-J.LJ +.F|7|L-F--|L7FJ|L--7||L--7LJLJ7LJF---J||LJFJL-------7LJFJF7F-J.L77LJ.-77-LJ..|7L7FJF--JL-7F7JFJLJLJ|||L---JLJFJLJ-||F-7|||L--7LJ-LJJLLJJF7-F +FF.JJ7|LJ-L7|L7|F7FJ||F-7L-------JF7|FJL--JF-7F--7F7L7FJFJLJJF7JJL|J77.F7JFFF-7FJL7L----7LJL7L----7||L-------J|F7FJLJFJLJL7F7|.F7F7|.||.---J +FJ-|7F-7F|L|L-J|||L7|LJFJF7F7F7F-7|L-JF7F-7|FJL-7LJL-JL7L7F--JL-7.77F7-|J|FJ|FJL7FJF---7L--7L-7F7FJLJF-7F7F-7F7|||F--JF--7LJ|L-JLJL7-777-|-7 +|J-77|J|F7JL7F7LJL-JL7.L-JLJLJLJJLJF--JLJ|LJL7F7L7F7-F-JFJL7F---JF7FJL--7F7FJ|F7|L7L--7|F7FJF7LJLJF-7|FJ|||FJ||||||.F7L7FJF7L7F7F7FJ.J..F||F +|LFJFJ7LF--FJ||F7F-7FJF7F7F-7F-----JF7F7F-7F7||L7LJL7L7FJF7|L-7F7|LJF7F-J||L7LJLJFJF7J|LJLJFJ|F7F7|.LJL-JLJL-JLJLJL-JL7|L-JL7LJ||LJLF.FF7LL| +|-7F|JF.LL.L7|LJLJFJL-JLJ|L7|L------JLJ|L7LJ|LJLL---JFJL7|||F-J|||F-JLJF7||LL--7FJFJL7|F7F7L7||||LJF7F7F7F7F7F-7F7F7F7LJF7F7L7FJL7F--7-.|7|F +J||FF7..-7FLLJF---JF----7L-JL----------JFJF7L------7FL7FJ||||F7|LJL-7F7||||F7F-JL7L7FJLJLJ|FJLJLJ.FJLJLJLJLJ||F|||||||F7|LJ|FJL-7LJF-JFF7JF- +J-|L--|7LL7J|-L----JF--7L------------7F-JFJL7F-7F--JF7|L7|LJ||||F---J|||LJ|||L7F7L7|L-7F7|LJF-----JF-7F----7|L7LJ||LJ|||L-7||F-7|F7|7.LJJ7|| +||JLJ7|F.|J.F-F-----JF7L-------------J|F-JF7LJJ||F-7|||FJ|F-J|||L7F-7||L7FJ||-||L7||F-J||F7JL-7F7F7|FJ|LF--JL7L-7|L-7LJ|F-J|LJFJ|||L-7.FJJ7L +FF7-7|F7FF77.FL--7F7FJL7F------7F--7F7|L--JL--7||L7|||||F|L7FJ||FJ|FJ|L-J|FJL7||FJ||L-7|LJL--7LJLJLJL7L7L-7F7L--JL--JF7LJF7L7FJL|||F-J-F|FFJ +F-J-7-7||-L7-F--7LJ|L-7||F-----J|F7LJLJF--7F--J||FJ||||L7|FJL7LJL7|L-JF--JL7FJLJL7LJF-JL---7FJLF-7F--JFJF-J|L--------JL--JL7|L-7LJLJJJJLL-7| +77F.|LFJJL-|JL-7|F7L--J||L------J||F7F7L-7LJF77||L7||LJFJ||F7|F--J|F--JF-7||L--77L-7L7F-7F7||F-JFJL--7L7L--JF--------------JL--J-|JJ|-FJJ.FJ +|L-.LF-J7JF7-F-JLJ|F--7LJF--7F7|FJLJ|||F7L7-|L7LJFJLJF7|FJ||LJL---JL--7L7|FJF--JF--JFJL7LJ||||F-J|F-7L-JF---JF7F----7|F7LF--7.F7F|J.|7L77-L7 +J-J7.LJL--F--JF--7|L7FJF7L-7|||FJF-7LJLJL7L7|FJF7|F--J||L7||F---------JFJ|L7|LF7L--7|F7L-7LJ||L--7L7L-7|L----JLJF---JFJL-JF-JFJL7--F7|LJL77| +L-J777-F|LL---JF-J|FJL7||F-JLJLJFJ.L----7L-J|L7|LJL--7LJJ||||F--7F7.F7FL7|FJL7||F7FJLJ|F-JF7|L-7FJFJF7L----7F---JF7JFJF-7FJF7L7FJLFJ|7JLFFFL +FFJFFJ7-F.|FF--JF7|L7FJ||L---7F7|F7F----JJF7L7|L7F---JF-7||||L7FJ|L7||F7|||F-J|LJ|L-7FJL--J||F7||JL-JL----7|L----JL7|FJ|LJ7||FJL-7L7|--77FJ. +FJ-LL.L7F--7|F--J||FJ|.|L----J|LJ|LJ|F7-F7||FJ|FJL-7F7L7LJLJL7|L7L7LJ||||||L-7|F7|F7||F7F--J||||L7F-7F7F7FJL7F--7F7LJL77F-7|||F--J-||J-JF7L. +|F-F7FFLL7|F||F--J|L7L7L-----7L7FJF--JL7|||LJFJL7F-J|L7L7F-7FJL7|FJF-J|LJLJF-JLJ||||||||L7F7||||FJL7LJLJLJF-JL7.|||F-7L7L7LJLJ|F7F7||J|FL7J7 +F7J.L7|-JLLLLJL7F7L-JFJF7F7F-JFJL-JF---J|||F7L--J|F7|FJ|LJFJ|7FJ||FJF-JF---JF-7FJ||||LJ|FLJ|||LJL7FJF7F--7L--7L7LJLJ.L7L7|F---J||||||F-7.7J| +LJ-F-FJJ--J-L|LLJL7F7L-J||||F7|F---JF7F7||LJL-7F7||||L7-F7L7L7L7|||J|F-J-F7FJFJL7|||L7FJF7FJ||F--JL-JLJF7L--7L7L-----7L7LJL-7F7|||||||FJ7L7. +LFFF7JF-7J|-FJ-F--J||F-7LJ|LJLJL----JLJLJ|F7F7||LJ|LJFJFJ|.L7L7||||FJL7F7|||FJF-J||L7|L7||L7LJ|.F-7-F--JL---JFJF-7F--J|L7F--J|||LJLJLJL-7L|| +.|J.77|F7F-.|--L-7FJLJJL-7|F7F7F--------7||LJ|||F7L7FJ-|FJF7L7LJ|||L-7LJ|||||FL-7||FJ|FJ||-L-7L7L7L7L----7.F7L-J7LJLF7-FJL---JLJF7F-7F7FJ.L- +F.|7|-F|F--|.L|F-J|F7F-7FJLJLJLJF---7F-7LJL-7||LJ|FJ|F7||FJL7L-7|||F-JF-J|||L7F7|||L7|L7||F7FJFJFJFJLF--7L-JL-------JL7L-7F---7FJLJ.LJLJ|FF| +|7L-J.LJ7J||-FFJF-J||L7|L-7F7F7FJF--J|FJF7F7|||F-J|FJ||||L7FJF7||||L7FJF7||L7||||||FJL7|||||L7|LL7|F7L7FJF-------7F7F7L7-||F-7LJF-7F77LL|7-F +FFL7|FFJLF|.|L|FJF-JL-JL--J||||||L--7||FJ|||||||F-J|FJ||L7|L7|LJLJL7|L7|||L7|||||||L7FJ||||L7||F7||||FJ|FJF----7.LJ||L-JFJLJFJ|FJFJ||7LL|J.7 +F|L|-|7J-J|FL7LJ7L--------7|LJLJF7F7|||L7||||||||F-J|-||FJL7|L-7F--J|FJ|LJFJ||||||L7||FJ|||FJ|LJ|||||L7|L-JF--7L--7|L7F7|F-7L--JFJL|L7F-LJ-F +F--..L7...F7L|J.FF---7F7F-J|F---JLJLJ||FJ||LJ|||||F7L7LJL7FJ|F7|L7F7|L7L7LL-J||||L7|LJ|FJ||L7L-7LJ|||FJ|F-7L-7L---JL7LJ|||FJF7F7L7||FJ-7|7.| +7J|F7JL77-FJJ|.-JL--7LJLJF7|L------7FJ|L7|L7FJ|LJ||L7L-7F|L7||||FJ|||FJFJF--7LJ|L7|L-7|L7||FJF7L7L|||L7|L7L-7L-----7|F7|||L7|LJL7L-J|J-L.F-F +7-J-7-FF-7LJ.F-F7JF-JF7F7|LJ-F-7F7FJL7L7||FJL7L77LJFJF7L7L7|LJ|||FJLJL7L-JF7L7FJFJL7FJ|FJ||L7||FJFJ|L7||FJF-JF7F---JLJLJ|L7|L--7L7F7L-7-FJFF +L|.|LFFJ|F|JF|LLF-JF7|||LJLF7L7LJLJF7L7LJLJF7|FJF--JFJ|FJFJL-7||||F---JF-7||FJL7L-7||FJL7||FJ|||-L7L7LJ||7|F-J||LF7F7F7J|FJL7F-JF||L--J7F7.. +FL|F-J.FF-||-77JL-7|LJLJ7F-J|FJF7F7|L7L---7|||L7L7F7L7||FJF-7|||LJL7F7FJFJ|||F7|F-JLJ|F7|||L-JLJF-JFJF-JL7LJF-JL-JLJ||L7LJF7|L--7|L-77-7|.F7 +7J.FLF--JLL|F7-F-7LJF7-F7L-7LJFJLJLJFJF7F7LJ|L7L7LJ|FJ||L7L7LJ||7F-J||L7|FJ|LJ||L---7||LJ|L-7F--JF7L7L-7FJF-JF--7F-7LJFJF7||L---JL7FJ7|||-|| +|FLL7J||L|FJ7|.L7L--JL-JL-7|F7L7F--7L7||||F7L7|FJF-JL7LJ7L7L7FJL7|F7||FJ|L7|F7|L7F7FJLJF-JF-JL7F7||FJ7FJL7|F-JF-J|7|F-J7|LJL---7JLLJ..FLL--L +JJ|.|F|FFL|FLL-LL--------7|LJL7LJF-J-LJ||||L7||L7L7F7L-7F7|FJL7FJLJ|||||L7||||L7||LJF7LL--JF7-||LJ|L-7L7FJ|L-7|F7L7||F--JF-7F7FJJ|J-F7--J777 +FLJ.LLJJ7L|7.LF7F7F------JL---JF7L-7|F-J|LJF|||FJFJ||F7||LJL7FJ|F--J||L-7LJLJ|FJ|L--JL7F---J|FJL-7|F7|-LJFJF7||||FJ|LJF7FJ||||L7FL-F|L|F7L-L +LJL|.FL.|LL.FF|LJLJF7F7F7F---7FJL-7|FJF7L--7|||L7|FJ||LJ|F7FJL7|L--7||F7L7F--JL7L7F-7FJL7F-7LJF--J|||L--7L7|LJ|||L7|F7||L-7LJL-J-||FJFJL-JLL +|J-|JJ|-F7|LFFJF7F7|||||||F7F|L--7|||FJ|F--J||L7||L7|L7FJ|||.FJ|F--J||||FJL--7FJFJL7LJ.FJL7|F7L--7||L7F-JL|L-7||L7||||||F7L----7|L|.F||F7||J +|.|F7JL7|FFJFJFJLJLJ||LJLJ|L-JF7FJLJ||F|L--7||FJ|L7||FJ|FJ|L7|FJL--7|LJ||F7F7||JL-7L-7FJF-J||L7F-J||F|L--7|F7|||FJ|||LJ|||F---7|J.-7.F7.F7|. +F7-LL.LJLJL7L-JF7F--J|F---JF7FJ||F7-LJFJF-7||||FJFLJ||-|L7L7|LJF---JL-7|||LJLJL7F7|F7||FJ.FJL7|L7FJ|FJF--JLJ||||L7||L-7LJ|L--7LJJ7LL7L7FFJ-J +.|JJL7.7|FFLF--JLJF7FJL-7F-J||L||||F--JFJJ||||||F---JL7L7L7||F7|F-7F7FJ||L-7F7FJ||LJLJ||F-JF-JL7||FJL7L----7||||FJ||F-JF-JF-7L-7.|7.|-|FJ.L. +|..FFLLJF7JJ|F-7F-J|L7F-J|F-JL7LJ|LJF7FJF-J|LJ||L7F7F7L7L-JLJ|LJ|FJ||L7|L7LLJ|L-JL7F-7|||F7|F--J|LJF7L7F7F-J||LJL7||L-7|F7L7|F-J7LF.|.|7|J|L +|J77L-JL|L|7LJLLJFFJFJL--JL7F7L7FJF7||L7|F7L-7LJ-||||L7L---7JL7FJL7|L7||FJF--JF--7LJFJLJLJ||L--7L-7|L-J||L-7|L-7FJ|L7FJLJ|FJ|L-77JJF7JL7|-7| +7.FL7J|...J7.J-LL-L7|JLFF--J||FJL7|||L-J||L7FJ7F-J||L7L-7F-JF-JL7.||FJ|||FJF-7L-7|F7L-7-F-J|F--JF-J|F7FJ|F-J|F-JL7L7||F|||L7L-7|--FFJLF|7LL| +L-L7L-JJ7.LFJ|.LJFLLJJJFJF7FJ|L7FLJ|L7F-JL7|L-7L7FJL-JFFJL7FJF-7L7|||FJ||L7|-L7FJLJL-7L7|F7|L--7L-7|||L7LJF7LJJ|L|FJLJ-L-L7L7.LJJF.||F|F77FJ +7|||L|-||..||-.77LF-F--JFJ|L7L7|F--JFJL--7|L7FJFJL-7F--JF-JL7|7L-JLJ||LLJFJ|F-JL----7|FJLJ||F--JF7|||L7L--J|FJJ-LLJJJ|.L--L7|J.LJF-7FJJLL7|| +.-JLFJF7L7.F|7|-7|LFJF-7|FJFJ-LJL7F7L7.F7LJFLJFJF7FJL7F7L--7LJ77LF--JL-7FJFJL-7F7F7FJ|L-7FJ||F7FJ|||L7L7F--JJ|.FLJ-JF--.LJFLJ|.LF-L|JLL|FJJ- +FJ7F7JL|JL-LJ-L7FF-L7|FJ|L7|J-|F-J|L7L-JL7L|7.|FJ||F-J|L7F7L-7JFFJF-7F7||FJJF-J||||L7|F-J|FJLJ|L7||L7|FJL7|J7L77.|LF|JF-7F|JL7JFL7||F|F.L-|. +F-|JJ7.JJ-|F77-LLJJ-LJL-JLLJJJFJF7|FJF---J-||7LJ-LJ|F7L7LJ|F7|F-JFJFJ|||||F-JF7|||L7||L7-||-F-JFJLJ-|||F-J-77|L--L-L|.|-F|.LLJL|.7FF7L7J--F7 +LF-.|FL-F-F|7.LFJ-|.|7|L|7J77|L7|LJL7L---7-7|FJJJ.FLJ|FJ.LLJ||L7FJLL7|||||L-7|LJLJ.||L-J-LJ-L--J7|J-||LJJL7|LF7||.LLL7J-F|-J.7-F--FJL7|F7JLF +F-.F||..LFJLL7FJ.F|-7-77FL.JFFLLJ-F7|F---J.||7J|.F7.LLJ-7-L7LJ-|L7-LLJLJ|||F|L----7LJ7F7JLL.LJ.LFJ|.LJJL--.|-F7-77.F7J|FL|JF7JF|LJLJFJL-F.FF +F-F||-7-FLF7JFLJ7F|-JJ.LJJJ|-JJ|JF|LJ|F7LJ-JL77-F7JFJLL7FJ.F7.LL-J7LJJJL||F-JF7F-7L---J|LFJ-.J7JJ7L||..LL-JJ7J|F||FFF.LF.|.|L-LF-JFFLJ-FJ-J| +L7J||.L-JLLJ--7.FL-7||.F|-L7.|.|-FJF7LJ|..7-LFJ.|L7L-||L|7-|-L.|.|L|.FF7LJL7FJLJJ|F----J.|7L|--7.|.LJ-7..|JF7|L-L-7F--L|FJ7|FLL|FJ7|-7.|-|JL +FL7F||.||7L-F--|JF-.-F-JLF7J||L..L7||F-J7J.-.|.FL|J-FLF.|J7JFL-|-7.--F|L---JL7LF-JL--7|JF-7L7.L-FJ7|LJ7F77JJ.|JL|.-LL.|L-L-|-7.||.L7-F-7.|JL +L|7-FLJ--F77|-LJ.|--JJJL.|JLJFJF7-LJLJ-F|7L.FJ-77J..F-|-|J|F7.|LLL-7|LL--7F7FJ.L-7F--J7F7F7-JJ.LJ--FJL|FF-7LF|7.L7FFJ-J|.L.|.LFL7.LJFJFF-|.. +.|..|.|7L.L|J.LL-L-7F7-LFJ|.FF.F7.J.|L--|7.|--7|F7FJJ.|L|-L7|--JF|.|-7F|LLJ|L77LFLJ-J.J-.JJ.|||FJF|J..|-LJF-L|7L|-7L|7L7J-JJ.L-J-||-|-LJ|LLF +LJ-F---J.F7|77JFL-||-F7||-J-LJ-FJLJF-7|F|F-JFFJ|.F--7-LJ|LFL|-7||JFF-|LF.JL|FJ7FFJL7J-|7L77F|FFJJ|7..LL-J.777F7F|JF-77J|LFFF77FL|LL-|-.LJJJ| +.|JF|-L|.J7LJJ77|F7|7F--|-|JL7-L7LFFJ-77-J|F-JFJ7JF|J|7|F-|7|-L|||F7.|L7-F|LJJ7-|7.|FLLF7LL-FFJ|.-L--7.LF||F-J.L|F7.L7F7.F7LLJ7J|F|-|J|L|L77 +F-7|L77L..F-J7F---7J7||.|-F.LL7.|F7.JL|F7LF|-FF-LF7|-7-|.L--|...FL|L-JFF-J-.|.7F||JF||.FL7L.7||L7JJ-7FF-7|F|-|-LF--J7L7LL7JL||LF|F--LJ|-FJ|7 +L|L--JJJ-LLJ-FF.JJLLJ7-L7-JLJJ|-.F7..-|LJ.FJ.|J..L7J.L-.--JL|.-FJ-L-LL.|.JJ-FJ.F|JLLJF-7J7JJJ|7JLJ..FL--JJ-77L7.|JLL-JL-L.LL-|7-L|J.LLL-L-|. \ No newline at end of file diff --git a/2023/day10/p2/main.py b/2023/day10/p2/main.py new file mode 100644 index 0000000..8973026 --- /dev/null +++ b/2023/day10/p2/main.py @@ -0,0 +1,160 @@ +import math +INPUT_FILE = "input.text" + + +class Point: + x: int + y: int + + def __init__(self, x: int , y: int): + self.x = x + self.y = y + + def add(self, other): + return Point(self.x + other.x, self.y + other.y) + + def to_tuple(self) -> tuple: + return (self.x, self.y) + + def __str__(self) -> str: + return f'P({self.x}, {self.y})' + + def __eq__(self, other) -> bool: + return self.x == other.x and self.y == other.y + +class PipeMap: + pipe_map: list[str] + start_position: Point + bounds: Point + + def __init__(self, map_path: str): + + with open(map_path, 'r') as file: + self.pipe_map = file.readlines() + + for i in range(0, len(self.pipe_map)): + self.pipe_map[i] = self.pipe_map[i][:-1] + + max_y = len(self.pipe_map) + for row in range(0, max_y): + max_x = len(self.pipe_map[row]) + col = self.pipe_map[row].find('S') + + if col != -1: + self.bounds = Point(max_x, max_y) + self.start_position = Point(row, col) + + def in_bounds(self, p: Point) -> bool: + return (p.y < self.bounds.x and p.x < self.bounds.y and p.x >= 0 and p.y >= 0) + + +directions = { + 8 : Point(-1, 0), + 9 : Point(-1, 1), + 6 : Point(0, 1), + 3 : Point(1, 1), + 2 : Point(1, 0), + 1 : Point(1, -1), + 4 : Point(0, -1), + 7 : Point(-1, -1) +} + +pipe_directions = { + '|' : [Point(-1, 0), Point(1, 0)], + '-' : [Point(0, -1), Point(0, 1)], + 'L' : [Point(-1, 0), Point(0, 1)], + 'J' : [Point(-1, 0), Point(0, -1)], + '7' : [Point(0, -1), Point(1, 0)], + 'F' : [Point(0, 1), Point(1, 0)], + '.' : [], + 'S' : True +} + +def shoelace(points: list[Point]) -> int: + A = 0 + + n = len(points) + for i in range(0, n): + x1, y1 = points[i].to_tuple() + + if not i + 1 >= n: + x2, y2 = points[i + 1].to_tuple() + + else: + x2, y2 = points[0].to_tuple() + + A += (x1 * y2) - (x2 * y1) + + A *= 0.5 + + return abs(A) + +def main(): + + pipe_map = PipeMap(INPUT_FILE) + + # Check around start + next_directions = None + current_pos: Point = pipe_map.start_position + last_pos: Point = current_pos + + boundaries: list[Point] = [current_pos] + + for d in directions: + new_pos = pipe_map.start_position.add(directions[d]) + + if pipe_map.in_bounds(new_pos): + if char := pipe_directions[pipe_map.pipe_map[new_pos.x][new_pos.y]]: + + # Check if this pipe connects to start somehow + good = False + for d2 in char: + if new_pos.add(d2) == current_pos: + good = True + break + + if good: + current_pos = new_pos + next_directions = char + break + + steps = 1 # Because current pos isn't at start rn + while current_pos != pipe_map.start_position: + + for direction in next_directions: + potential_pos: Point = current_pos.add(direction) + potential_directions: list[Point] = pipe_directions[pipe_map.pipe_map[potential_pos.x][potential_pos.y]] + + if pipe_map.in_bounds(potential_pos) and potential_pos != last_pos and potential_directions: + boundaries.append(current_pos) + last_pos = current_pos + current_pos = potential_pos + next_directions = potential_directions + steps += 1 + break + + """ + I did actually look at the internet for this one. I found 'how to find area of polygon' + and came up with Pick's theorem & the Shoelace formula + + So basically I find the area with the Shoelace formula (A) and then using Pick's theorem find the number + of interior points (i) with + + i = A - b/2 - 1 + + where b is boundary points + """ + + A = shoelace(boundaries) + + print(f'Area: {A}') + interior = A - (len(boundaries) / 2) + 1 + + print(f'Interior Points: {interior}') + print(f'Loop finished, start found in {steps} steps') + print(f'Critter is at {math.ceil(steps/2)}') + + + +if __name__ == '__main__': + main() diff --git a/2023/day10/p2/test.text b/2023/day10/p2/test.text new file mode 100644 index 0000000..fbc0300 --- /dev/null +++ b/2023/day10/p2/test.text @@ -0,0 +1,10 @@ +FF7FSF7F7F7F7F7F---7 +L|LJ||||||||||||F--J +FL-7LJLJ||||||LJL-77 +F--JF--7||LJLJ7F7FJ- +L---JF-JLJ.||-FJLJJ7 +|F|F-JF---7F7-L7L|7| +|FFJF7L7F-JF7|JL---7 +7-L-JL7||F7|L7F-7F7| +L.L7LFJ|||||FJL7||LJ +L7JLJL-JLJLJL--JLJ.L \ No newline at end of file diff --git a/2023/day11/p1/input.text b/2023/day11/p1/input.text new file mode 100644 index 0000000..e89d7f7 --- /dev/null +++ b/2023/day11/p1/input.text @@ -0,0 +1,140 @@ +.......#.....#.....................#.............#.................#.........................#.............................................. +#.....................#.......#.................................................................................#.......#................... +.......................................................................#.........................#..................................#....... +................................................................#..............#..............................................#............. +.........................................#............................................................#....................................# +.................#..................................................#....................................................................... +...........................#...............................................................................#................................ +....#.......#...........................................#..........................#.............................#.......................... +....................#.............#........#................................................................................................ +...................................................#...................................................#...................#................ +.........................#........................................#..................................................#...................... +......#..........#...........................................#...........#............#..................................................... +......................................#..........................................#.........................#.....................#.......... +.#...................#..................................#.......................................#........................................... +............#.................................#.....................#....................................................................... +............................................................................................................................................ +..............................#.....................................................................................#..................#.... +....................................................................................#........#......#....................................... +.........................#.........................#............#...........................................#............................... +.#......#.....#.......................#.................#........................................................#.....#.................... +...........................................................................#.................................................#.............. +...............................................#.......................................#...............#..........................#......... +......................#..................#.................................................................................................. +..........................................................................................................................#................. +......#...........................#.........................................................#........................#...................... +..............................................................................................................................#............. +..#.......................#.................#............................................................................................#.. +..................#....................................................#................#................................................... +....................................................#.....#....................#............................................................ +...............................#............................................................................................................ +..............................................#...............#..........................................................#...........#...... +.#.........#........................#..................................................................#.................................... +..........................................................................#.......................#........................................# +...................#......................................................................#................................................. +.............................................................................................................................#.............. +.....#...................................................................................................................................... +........................................................#........................#.......................................................... +.............................#...............#.....................#.....#............#..................#..............................#... +............................................................................................#......#...........#............................ +.........................#........#...................................................................................#..................... +...........................................................................................................................................# +.....................................................#.....#.................................................................#.............. +#.........................................................................................................#.......................#......... +................#...........................................................#.....................#......................................... +..............................#..............#...................................#.......#...........................#...................... +........#................#.........#............................#............................................#.............#.........#...... +............................................................................................................................................ +.......................................................#...............#.............................#...........................#.......... +.............#.................................#............................................................................................ +............................................................................................................................................ +..#.............................................................................#...........................................#...........#... +............................................................................................................................................ +......................................#..........................................................#................#......................... +............................#................#......#......................#...........#.................................................... +............................................................................................................................................ +....................................................................................................#................#..........#........... +.#............#...................#...............................#........................................#.............................#.. +.........#...............................................................#.................................................................. +.......................#....................#........#...........................................#.......................................... +............................................................#.....................................................#......................... +..............................#.......................................................................#...................#.......#......... +............#.......................#...................#............................#...................................................... +...................................................#......................................#..............................................#.. +.#................#...................................................#........................#............................................ +......#....................................................................#................................#............................... +...............................#....................................................................................#....................... +.........................#.....................#......#.............................................#.................................#..... +............................................................................................................................................ +...............#.....................#....................................................#................................................. +..................................................................................................................#......................... +....#......#.....................................#..............................#............................#............#.....#........... +....................#.............................................#....................#.........#.......................................#.. +.........................................................#..............#.............................#..................................... +............................#...........#...........................................................................#....................... +............................................................................................................................................ +#..................................#...............................................................#..........#............................. +.......#......................................................................................#.................................#.......#... +.....................#....................#...............................#.....#......................................#.................... +................................#..........................#......#....................#..........................#......................... +..............#...................................#........................................................................#...............# +....#....................................................................................................#.................................. +.......................#.................................................................................................................... +......................................#................................#..................#................................................. +.....................................................#............................................#...............................#......... +............................................................................................................................................ +............................................................................................................................................ +....#.................#..................................#.........................#..........................#............................. +.............#........................................................................................#..................#.................. +......................................#............................................................................#........................ +.........#....................................................#.........#............................................................#...... +.............................................................................................#.............................................. +.............................#...........#............................................................................#..................... +#..................#................................................#....................#.......................................#.........# +...................................................................................................#......#................................. +...........#.............................................#...........................#...................................................... +....................................#....................................................................................................... +..................................................#..........#.........#......................#.....................#....................... +.#......#....................................#..............................................................#............................... +.............................#.............................................#................................................................ +.......................#...............................................................................#....................#............... +....................................................#.....................................#...........................................#..... +................#.....................#..................#.................................................................................# +...#.....#..........................................................#................#...................................................... +.............................................#...............#................................#......#...................................... +...............................#...............................................#............................................................ +.............................................................................................................................#.........#.... +.....................#................................................#.................................................#................... +...............#.........................#.......................#..................#....................................................... +.....#......................................................................................................#.......................#....... +....................................#.................#.........................#..................#........................................ +........................................................................................................................................#... +.........#..............#.....................................#........................................#.....................#.............. +...............................................#...................#........................................................................ +......................................#.............#..................................#.....#.......................#...................... +............#.....#...............................................................................#......................................... +...#...................................................................................................................................#.... +.......................#.........................#.......................................................................................... +.........................................................#...........#.........................#........#..........#.............#.......... +............................#..............#....................#........................................................#.................. +.......#.................................................................#................#................................................. +.................#..................................................................................#........................#...........#.. +...................................................#.......#................................................................................ +.........................................#......................................#......................................#.................... +....................................#...........................................................................#........................... +..............................#.............................................................#...........#.......................#......#.... +.........#...............................................#..............#................................................................... +........................#....................#.....................................#........................................................ +#........................................................................................................................................... +............................#......................................................................#.......#................................ +......................................#..................................................................................................... +.....#............#.........................................#..........................#..........................................#......... +...........................................#......................#..............................................#.......................... +..............#..............................................................................#............................#.............#... +..#......#...........................................#..............................#..................#.....#.............................. +....................#..........#.....#...............................#...................................................................... +............................................................................................................................................ +.................................................#.......................................................................................... +.............#..........#...............................#...............#.............#..........#.........#........#....................... +............................................#................#.................#............................................................ +....................................#....................................................................................#.............#.... \ No newline at end of file diff --git a/2023/day11/p1/main.py b/2023/day11/p1/main.py new file mode 100644 index 0000000..6a7cb46 --- /dev/null +++ b/2023/day11/p1/main.py @@ -0,0 +1,147 @@ +import math +import copy +INPUT_FILE = "test.text" + +class Point: + x: int + y: int + + def __init__(self, x: int , y: int): + self.x = x + self.y = y + + def add(self, other): + return Point(self.x + other.x, self.y + other.y) + + def __add__(self, other): + return Point(self.x + other.x, self.y + other.y) + + def __sub__(self, other): + return Point(self.x - other.x, self.y - other.x) + + def __str__(self) -> str: + return f'P({self.x}, {self.y})' + + def __eq__(self, other) -> bool: + return self.x == other.x and self.y == other.y + + def _length(self) -> float: + return math.sqrt(self.x ** 2 + self.y ** 2) + + def normalise(self) -> None: + self.x /= self._length() + self.y /= self._length() + +def distance(p1: Point, p2: Point) -> int: + return math.sqrt((p2.x - p1.x) ** 2 + (p2.y - p1.y) ** 2) + +def main(): + + with open(INPUT_FILE, 'r') as file: + universe = file.readlines() + + # Shave off the newlines + for i in range(0, len(universe)): + # print(universe[i]) + universe[i] = universe[i][:-1] + # print(universe[i]) + + expanded_universe: list[str] = universe.copy() + added_rows = 0 + # Expand it! + for y in range(0, len(universe)): + row: str = universe[y] + + # If no galaxies found in row + if row.find('#') == -1: + expanded_universe.insert(y + added_rows, row) + added_rows += 1 + + # for r in expanded_universe: + # print(r) + + # print() + + row_n = len(expanded_universe) + added_cols = 0 + for column_i in range(0, len(expanded_universe[0])): + no_galaxy = True + + for y in range(0, row_n): + if expanded_universe[y][column_i + added_cols] == '#': + no_galaxy = False + break + + if no_galaxy: + for y in range(0, row_n): + l = list(expanded_universe[y]) + l.insert(column_i + added_cols, '.') + expanded_universe[y] = ''.join(l) + added_cols += 1 + + + # for r in expanded_universe: + # print(r) + + # now find lengths or something + + # oh but first find galaxies + galaxies: list[Point] = [] + universe = expanded_universe + n_y = len(universe) + + for y in range(0, n_y): + row = universe[y] + + for x in range(0, len(row)): + if row[x] == '#': + galaxies.append(Point(x, y)) + + for p in galaxies: + print(p) + + # ok now find lengths or something + total = 0 + g1_i = 0 + for g1 in galaxies: + + # print(g1) + + g2_i = 0 + for g2 in galaxies: + steps = 0 + + t = copy.copy(g1) + # Get steps + while t != g2: + if t.x < g2.x: + t.x += 1 + steps += 1 + elif t.x > g2.x: + t.x -= 1 + steps += 1 + if t.y < g2.y: + t.y += 1 + steps += 1 + elif t.y > g2.y: + t.y -= 1 + steps += 1 + + # if g1 == Point(5, 11): + # print(f't {t} g2 {g2}') + + total += steps + # print(f'{steps} from g{g1} to g{g2}') + g2_i += 1 + g1_i += 1 + + + + print(f'Sum is {total/2}') + + + + + +if __name__ == '__main__': + main() diff --git a/2023/day11/p1/test.text b/2023/day11/p1/test.text new file mode 100644 index 0000000..986aad4 --- /dev/null +++ b/2023/day11/p1/test.text @@ -0,0 +1,10 @@ +...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#..... diff --git a/2023/day11/p2/input.text b/2023/day11/p2/input.text new file mode 100644 index 0000000..e89d7f7 --- /dev/null +++ b/2023/day11/p2/input.text @@ -0,0 +1,140 @@ +.......#.....#.....................#.............#.................#.........................#.............................................. +#.....................#.......#.................................................................................#.......#................... +.......................................................................#.........................#..................................#....... +................................................................#..............#..............................................#............. +.........................................#............................................................#....................................# +.................#..................................................#....................................................................... +...........................#...............................................................................#................................ +....#.......#...........................................#..........................#.............................#.......................... +....................#.............#........#................................................................................................ +...................................................#...................................................#...................#................ +.........................#........................................#..................................................#...................... +......#..........#...........................................#...........#............#..................................................... +......................................#..........................................#.........................#.....................#.......... +.#...................#..................................#.......................................#........................................... +............#.................................#.....................#....................................................................... +............................................................................................................................................ +..............................#.....................................................................................#..................#.... +....................................................................................#........#......#....................................... +.........................#.........................#............#...........................................#............................... +.#......#.....#.......................#.................#........................................................#.....#.................... +...........................................................................#.................................................#.............. +...............................................#.......................................#...............#..........................#......... +......................#..................#.................................................................................................. +..........................................................................................................................#................. +......#...........................#.........................................................#........................#...................... +..............................................................................................................................#............. +..#.......................#.................#............................................................................................#.. +..................#....................................................#................#................................................... +....................................................#.....#....................#............................................................ +...............................#............................................................................................................ +..............................................#...............#..........................................................#...........#...... +.#.........#........................#..................................................................#.................................... +..........................................................................#.......................#........................................# +...................#......................................................................#................................................. +.............................................................................................................................#.............. +.....#...................................................................................................................................... +........................................................#........................#.......................................................... +.............................#...............#.....................#.....#............#..................#..............................#... +............................................................................................#......#...........#............................ +.........................#........#...................................................................................#..................... +...........................................................................................................................................# +.....................................................#.....#.................................................................#.............. +#.........................................................................................................#.......................#......... +................#...........................................................#.....................#......................................... +..............................#..............#...................................#.......#...........................#...................... +........#................#.........#............................#............................................#.............#.........#...... +............................................................................................................................................ +.......................................................#...............#.............................#...........................#.......... +.............#.................................#............................................................................................ +............................................................................................................................................ +..#.............................................................................#...........................................#...........#... +............................................................................................................................................ +......................................#..........................................................#................#......................... +............................#................#......#......................#...........#.................................................... +............................................................................................................................................ +....................................................................................................#................#..........#........... +.#............#...................#...............................#........................................#.............................#.. +.........#...............................................................#.................................................................. +.......................#....................#........#...........................................#.......................................... +............................................................#.....................................................#......................... +..............................#.......................................................................#...................#.......#......... +............#.......................#...................#............................#...................................................... +...................................................#......................................#..............................................#.. +.#................#...................................................#........................#............................................ +......#....................................................................#................................#............................... +...............................#....................................................................................#....................... +.........................#.....................#......#.............................................#.................................#..... +............................................................................................................................................ +...............#.....................#....................................................#................................................. +..................................................................................................................#......................... +....#......#.....................................#..............................#............................#............#.....#........... +....................#.............................................#....................#.........#.......................................#.. +.........................................................#..............#.............................#..................................... +............................#...........#...........................................................................#....................... +............................................................................................................................................ +#..................................#...............................................................#..........#............................. +.......#......................................................................................#.................................#.......#... +.....................#....................#...............................#.....#......................................#.................... +................................#..........................#......#....................#..........................#......................... +..............#...................................#........................................................................#...............# +....#....................................................................................................#.................................. +.......................#.................................................................................................................... +......................................#................................#..................#................................................. +.....................................................#............................................#...............................#......... +............................................................................................................................................ +............................................................................................................................................ +....#.................#..................................#.........................#..........................#............................. +.............#........................................................................................#..................#.................. +......................................#............................................................................#........................ +.........#....................................................#.........#............................................................#...... +.............................................................................................#.............................................. +.............................#...........#............................................................................#..................... +#..................#................................................#....................#.......................................#.........# +...................................................................................................#......#................................. +...........#.............................................#...........................#...................................................... +....................................#....................................................................................................... +..................................................#..........#.........#......................#.....................#....................... +.#......#....................................#..............................................................#............................... +.............................#.............................................#................................................................ +.......................#...............................................................................#....................#............... +....................................................#.....................................#...........................................#..... +................#.....................#..................#.................................................................................# +...#.....#..........................................................#................#...................................................... +.............................................#...............#................................#......#...................................... +...............................#...............................................#............................................................ +.............................................................................................................................#.........#.... +.....................#................................................#.................................................#................... +...............#.........................#.......................#..................#....................................................... +.....#......................................................................................................#.......................#....... +....................................#.................#.........................#..................#........................................ +........................................................................................................................................#... +.........#..............#.....................................#........................................#.....................#.............. +...............................................#...................#........................................................................ +......................................#.............#..................................#.....#.......................#...................... +............#.....#...............................................................................#......................................... +...#...................................................................................................................................#.... +.......................#.........................#.......................................................................................... +.........................................................#...........#.........................#........#..........#.............#.......... +............................#..............#....................#........................................................#.................. +.......#.................................................................#................#................................................. +.................#..................................................................................#........................#...........#.. +...................................................#.......#................................................................................ +.........................................#......................................#......................................#.................... +....................................#...........................................................................#........................... +..............................#.............................................................#...........#.......................#......#.... +.........#...............................................#..............#................................................................... +........................#....................#.....................................#........................................................ +#........................................................................................................................................... +............................#......................................................................#.......#................................ +......................................#..................................................................................................... +.....#............#.........................................#..........................#..........................................#......... +...........................................#......................#..............................................#.......................... +..............#..............................................................................#............................#.............#... +..#......#...........................................#..............................#..................#.....#.............................. +....................#..........#.....#...............................#...................................................................... +............................................................................................................................................ +.................................................#.......................................................................................... +.............#..........#...............................#...............#.............#..........#.........#........#....................... +............................................#................#.................#............................................................ +....................................#....................................................................................#.............#.... \ No newline at end of file diff --git a/2023/day11/p2/main.py b/2023/day11/p2/main.py new file mode 100644 index 0000000..2460119 --- /dev/null +++ b/2023/day11/p2/main.py @@ -0,0 +1,116 @@ +import math +INPUT_FILE = "input.text" + +I = 1000000 +if I != 1: + I -= 1 + +class Point: + x: int + y: int + + def __init__(self, x: int , y: int): + self.x = x + self.y = y + + def add(self, other): + return Point(self.x + other.x, self.y + other.y) + + def __add__(self, other): + return Point(self.x + other.x, self.y + other.y) + + def __sub__(self, other): + return Point(self.x - other.x, self.y - other.x) + + def __str__(self) -> str: + return f'P({self.x}, {self.y})' + + def __eq__(self, other) -> bool: + return self.x == other.x and self.y == other.y + + def _length(self) -> float: + return math.sqrt(self.x ** 2 + self.y ** 2) + + def normalise(self) -> None: + self.x /= self._length() + self.y /= self._length() + + def _abs(self) -> None: + self.x = abs(self.x) + self.y = abs(self.y) + +def main(): + + with open(INPUT_FILE, 'r') as file: + universe = file.readlines() + + # Shave off the newlines + for i in range(0, len(universe)): + universe[i] = universe[i][:-1] + + # oh but first find galaxies + galaxies: list[Point] = [] + n_y = len(universe) + + for y in range(0, n_y): + row = universe[y] + + for x in range(0, len(row)): + if row[x] == '#': + galaxies.append(Point(x, y)) + + # Check for expansion (y direction) + expansions = 0 + for y in range(0, len(universe)): + row: str = universe[y] + + if row.find('#') == -1: + for g in galaxies: + if g.y > y + (expansions * I): + g.y += I + expansions += 1 + + # Check for expansions (x direction) + expansions = 0 + for x in range(0, len(universe[0])): + + no_galaxy = True + + for y in range(0, len(universe)): + if universe[y][x] == '#': + no_galaxy = False + break + + if no_galaxy: + for g in galaxies: + if g.x > x + (expansions * I): + g.x += I + expansions += 1 + + # ok now find lengths or something + total = 0 + for g1 in galaxies: + for g2 in galaxies: + + if g2.y > g1.y: + dy = g2.y - g1.y + else: + dy = g1.y - g2.y + + if g2.x > g1.x: + dx = g2.x - g1.x + else: + dx = g1.x - g2.x + + total += dx + dy + + + + print(f'Sum is {int(total/2)}') + + + + + +if __name__ == '__main__': + main() diff --git a/2023/day11/p2/test.text b/2023/day11/p2/test.text new file mode 100644 index 0000000..986aad4 --- /dev/null +++ b/2023/day11/p2/test.text @@ -0,0 +1,10 @@ +...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#..... diff --git a/2023/day12/p1/main.py b/2023/day12/p1/main.py new file mode 100644 index 0000000..e3c9141 --- /dev/null +++ b/2023/day12/p1/main.py @@ -0,0 +1,25 @@ +INPUT_FILE = "test.text" + + +def main(): + with open(INPUT_FILE, 'r') as file: + data: list[str] = file.readlines() + + for line in data: + record, groups = line.split() + + groups: list[int] = [int(g) for g in groups.split(',')] + + # for group in groups: + + # # if '#' * group in record: + # # groups.remove(group) + # # record = record.replace('#' * group, '') + + print(f'{record} {groups}') + + + + +if __name__ == '__main__': + main() diff --git a/2023/day12/p1/test.text b/2023/day12/p1/test.text new file mode 100644 index 0000000..c5bec3a --- /dev/null +++ b/2023/day12/p1/test.text @@ -0,0 +1,6 @@ +???.### 1,1,3 +.??..??...?##. 1,1,3 +?#?#?#?#?#?#?#? 1,3,1,6 +????.#...#... 4,1,1 +????.######..#####. 1,6,5 +?###???????? 3,2,1 \ No newline at end of file diff --git a/2023/day2/p1/input.text b/2023/day2/p1/input.text new file mode 100644 index 0000000..968fc46 --- /dev/null +++ b/2023/day2/p1/input.text @@ -0,0 +1,100 @@ +Game 1: 7 green, 14 red, 5 blue; 8 red, 4 green; 6 green, 18 red, 9 blue +Game 2: 3 blue, 15 red, 5 green; 1 blue, 14 red, 5 green; 11 red; 4 green, 1 blue, 3 red; 4 green, 1 blue; 10 red, 1 green +Game 3: 11 green, 3 red; 4 green, 15 blue; 14 blue, 2 red, 10 green; 1 red, 3 green, 10 blue +Game 4: 1 green, 6 red, 11 blue; 3 blue, 12 red; 1 green, 14 red, 8 blue; 3 blue, 7 red; 8 blue, 5 red; 7 red, 1 green +Game 5: 14 green, 3 red, 3 blue; 2 red, 1 green, 1 blue; 8 green, 3 blue, 1 red; 15 green, 8 blue, 1 red +Game 6: 4 blue, 8 green, 5 red; 9 green, 10 blue, 7 red; 11 blue, 10 red, 7 green; 8 red, 6 blue, 9 green +Game 7: 5 green, 11 blue, 9 red; 2 green, 6 red, 12 blue; 8 red, 4 blue, 3 green; 7 green, 8 red, 9 blue; 8 green, 5 red +Game 8: 7 red, 12 green; 9 blue, 15 red, 8 green; 3 blue, 11 green, 6 red; 8 blue, 12 red, 5 green +Game 9: 8 blue, 6 red, 7 green; 2 blue, 3 red, 10 green; 10 blue, 6 red, 7 green; 11 red, 7 blue, 5 green; 10 red, 11 green +Game 10: 5 red, 14 green; 2 red, 6 blue, 15 green; 3 red, 4 blue, 7 green; 6 red, 1 green, 4 blue +Game 11: 4 blue, 11 green, 6 red; 12 red, 1 blue, 5 green; 7 red, 1 blue; 11 red, 2 green, 3 blue; 2 blue, 6 red, 7 green +Game 12: 1 green, 8 red, 3 blue; 3 green, 2 red; 2 blue, 5 red, 1 green +Game 13: 2 green; 8 green, 1 blue, 12 red; 1 blue, 14 green, 2 red; 1 blue, 6 red, 6 green; 7 green, 10 red +Game 14: 9 green, 4 red, 1 blue; 5 red, 2 green; 17 green, 1 red; 6 red, 10 green; 4 green, 3 red, 1 blue +Game 15: 7 green, 13 blue, 4 red; 1 blue, 7 green, 9 red; 13 blue, 13 red, 7 green; 8 red, 9 blue; 9 red, 14 blue; 2 green, 7 red, 9 blue +Game 16: 6 green, 18 blue, 6 red; 5 green, 2 blue, 2 red; 6 green, 2 red, 17 blue; 2 red, 2 green, 8 blue; 2 red, 10 blue +Game 17: 17 red, 8 green; 4 blue, 10 green, 3 red; 8 red, 5 green, 3 blue; 12 green, 3 red +Game 18: 6 red, 1 green, 14 blue; 1 red, 10 blue, 1 green; 1 red, 17 blue, 1 green; 5 red, 1 blue; 5 red, 18 blue; 2 red, 3 blue +Game 19: 5 blue, 12 red; 6 blue, 3 red, 6 green; 8 blue, 6 red, 6 green; 8 green, 8 blue, 2 red; 4 green, 6 red, 6 blue; 1 green, 3 red, 13 blue +Game 20: 7 green, 2 blue; 4 blue, 12 red, 2 green; 7 red, 2 green, 6 blue +Game 21: 8 green, 1 red; 1 red, 9 green; 1 red, 6 green, 4 blue; 1 red, 3 green, 5 blue; 2 red, 6 green +Game 22: 11 green, 12 red, 5 blue; 5 blue, 9 red, 11 green; 8 green, 4 red, 5 blue; 7 green, 1 blue, 1 red +Game 23: 11 blue, 9 red, 5 green; 3 green, 3 blue; 11 blue, 9 red, 1 green; 2 red, 7 green; 4 green, 3 blue, 1 red; 5 green, 4 blue +Game 24: 1 green, 4 blue, 9 red; 1 green, 2 blue, 11 red; 1 green, 13 red; 1 green, 2 blue, 3 red +Game 25: 1 red, 7 green, 4 blue; 2 red, 1 green, 3 blue; 10 blue, 1 red; 7 blue, 2 red, 6 green; 7 green, 15 blue, 2 red; 14 green, 13 blue +Game 26: 5 red, 2 blue; 9 red, 2 green, 12 blue; 15 red, 1 green, 5 blue; 1 green, 16 blue, 17 red +Game 27: 2 green, 4 red; 4 red, 1 green; 1 blue, 3 red; 2 red +Game 28: 3 green; 8 green, 9 red; 9 red, 3 blue, 10 green; 16 green, 4 blue, 4 red +Game 29: 3 green, 1 red, 7 blue; 5 blue, 5 green, 2 red; 5 blue, 6 green, 2 red; 2 green, 2 red, 4 blue; 1 green, 3 red, 8 blue +Game 30: 7 red, 3 green, 7 blue; 3 green, 10 red; 5 red, 5 blue, 1 green; 9 blue, 2 green, 7 red; 1 red, 10 blue; 10 blue, 2 red, 4 green +Game 31: 9 green, 1 red; 9 blue, 6 red, 9 green; 17 blue, 4 green, 10 red; 19 blue, 11 green +Game 32: 1 red, 1 blue, 6 green; 10 blue, 4 green; 1 red, 5 blue; 9 blue, 3 green +Game 33: 4 red; 3 red; 2 red, 1 green, 1 blue; 1 green; 1 blue, 1 red +Game 34: 2 green, 9 blue, 1 red; 5 blue, 7 green, 1 red; 2 green, 1 red, 16 blue; 1 blue, 5 green, 6 red +Game 35: 11 red, 10 blue; 2 blue, 12 green, 12 red; 3 green, 6 red, 6 blue; 14 blue, 10 green, 1 red +Game 36: 2 blue, 3 red, 15 green; 2 blue, 6 green, 2 red; 14 blue, 4 red, 7 green; 13 blue, 12 green, 2 red +Game 37: 6 green, 14 blue, 7 red; 7 blue, 2 red, 6 green; 1 blue, 2 green, 6 red +Game 38: 2 green, 15 red, 2 blue; 14 red, 1 blue; 14 red, 2 green, 12 blue +Game 39: 5 green, 1 blue, 10 red; 4 red, 3 blue, 7 green; 2 red, 2 green, 4 blue; 10 blue, 5 green +Game 40: 7 red, 10 green, 2 blue; 7 green, 3 red, 2 blue; 10 red, 9 blue, 7 green; 3 green, 5 blue, 10 red +Game 41: 5 blue, 2 green, 11 red; 2 green, 18 red, 3 blue; 8 green, 10 red, 1 blue; 16 red, 13 green; 17 green, 2 blue, 17 red; 1 green, 1 blue, 9 red +Game 42: 5 red, 2 green, 1 blue; 6 red, 2 blue; 3 red, 1 blue; 9 red, 5 blue; 1 green, 8 red, 1 blue +Game 43: 1 red, 2 green; 12 red, 4 green, 5 blue; 4 blue, 9 red; 4 green, 10 red, 2 blue +Game 44: 2 blue, 9 green, 3 red; 6 red, 4 blue, 4 green; 3 red, 4 blue; 5 red, 2 green, 1 blue; 4 blue, 1 green; 8 green, 1 red, 4 blue +Game 45: 7 blue, 1 red; 2 red, 4 green, 9 blue; 3 red, 15 blue; 4 red, 4 green, 12 blue; 1 red, 18 blue +Game 46: 4 red, 14 blue, 11 green; 5 blue, 6 red, 17 green; 10 red, 8 green, 17 blue; 7 red, 10 blue, 19 green +Game 47: 7 blue, 3 red; 7 blue, 1 green, 2 red; 2 red, 6 blue; 1 green, 9 blue, 2 red; 3 red; 2 green, 1 blue +Game 48: 12 red, 6 blue, 6 green; 9 green, 19 red, 1 blue; 2 blue, 12 green, 8 red +Game 49: 1 green, 11 red, 11 blue; 10 red, 10 blue, 11 green; 4 red, 19 green, 6 blue; 11 blue, 19 green, 13 red; 9 green, 9 blue +Game 50: 1 blue, 12 green, 4 red; 1 blue, 18 green, 1 red; 1 blue, 12 green, 3 red; 1 blue, 4 green +Game 51: 10 red, 5 blue, 1 green; 10 red, 4 blue; 6 red, 8 blue +Game 52: 1 blue; 5 green, 9 red; 2 blue, 1 green, 11 red; 2 blue, 13 red, 5 green; 6 green, 1 blue, 9 red +Game 53: 8 blue, 15 red; 2 green, 4 red, 12 blue; 6 blue, 1 green, 15 red; 20 red, 12 blue; 6 red, 1 green, 2 blue +Game 54: 5 red, 16 blue; 5 green, 3 red, 17 blue; 5 red, 3 blue, 5 green; 4 green, 6 blue, 9 red; 2 blue, 6 green, 2 red +Game 55: 1 blue, 1 red; 1 green, 1 red, 3 blue; 4 blue, 1 green, 1 red; 5 blue; 2 blue +Game 56: 4 red, 4 blue; 7 blue, 11 red; 1 red, 2 green, 9 blue; 4 blue, 16 red, 2 green; 1 red; 2 green, 5 blue, 1 red +Game 57: 1 green, 8 blue; 1 red; 10 blue, 5 green; 3 blue, 4 green; 11 blue, 1 red; 4 blue, 3 green, 1 red +Game 58: 8 green, 5 blue; 9 blue, 8 red, 5 green; 6 red, 6 blue, 9 green; 1 green, 5 blue, 2 red; 3 red, 3 green, 2 blue; 2 green, 1 red, 1 blue +Game 59: 15 red, 4 blue, 8 green; 12 red, 6 green; 3 red +Game 60: 14 blue, 11 red; 12 blue, 6 red; 11 blue, 6 red; 5 red, 13 blue; 15 blue; 1 green, 1 blue, 16 red +Game 61: 5 red, 1 green; 4 red, 9 green; 1 blue, 6 green, 14 red +Game 62: 19 red, 1 green; 1 blue, 3 red; 15 red, 1 blue; 1 blue, 3 red; 5 red, 1 green, 1 blue +Game 63: 1 red, 3 green, 10 blue; 2 green, 1 red, 14 blue; 1 green, 5 blue, 1 red; 6 blue, 4 green, 1 red +Game 64: 5 red, 2 green; 5 green, 2 red, 2 blue; 3 red, 3 blue, 1 green; 3 blue, 3 green, 3 red; 1 green, 3 red +Game 65: 13 red, 2 green, 3 blue; 1 red, 2 blue, 1 green; 1 blue; 2 green, 1 red +Game 66: 7 red, 12 blue, 6 green; 2 red, 5 green, 11 blue; 3 green, 2 blue, 2 red; 9 blue, 1 red, 2 green +Game 67: 4 red, 3 green, 7 blue; 8 blue, 3 red; 2 red; 9 blue, 5 red, 2 green +Game 68: 12 blue; 10 green, 5 blue; 8 blue; 9 blue, 7 red, 18 green; 5 red, 12 blue, 8 green; 8 green, 13 red, 10 blue +Game 69: 1 green, 1 red; 2 red, 1 green, 3 blue; 1 red, 1 green, 4 blue; 1 green, 8 red +Game 70: 12 green, 1 blue, 4 red; 8 green, 1 red; 1 blue, 8 green; 2 green, 3 red; 5 green, 4 red; 2 blue, 12 green, 1 red +Game 71: 10 blue, 4 red, 14 green; 6 green, 7 red, 8 blue; 1 red, 1 blue, 13 green; 10 red, 6 blue, 3 green; 8 blue, 7 green, 4 red +Game 72: 1 green; 1 blue, 12 green, 14 red; 3 blue, 7 green, 8 red; 12 red, 18 green; 13 green, 11 red, 1 blue; 2 blue, 6 green, 6 red +Game 73: 17 red, 3 green, 15 blue; 15 blue, 2 red; 15 red, 7 blue, 4 green; 9 blue, 1 green, 18 red +Game 74: 10 red, 2 blue; 1 blue, 7 red; 5 blue, 2 green, 2 red; 3 blue, 15 red, 3 green; 4 blue, 3 green, 13 red +Game 75: 6 blue, 10 red; 2 green, 2 blue, 10 red; 10 green, 1 blue, 10 red; 4 blue, 6 red, 11 green +Game 76: 10 blue, 1 red, 2 green; 6 blue, 2 green, 10 red; 3 red, 15 green, 1 blue +Game 77: 5 green, 1 red; 2 blue, 1 green; 13 green, 2 red, 5 blue; 12 green, 1 blue, 2 red; 3 blue, 2 green, 2 red +Game 78: 1 green, 16 red; 6 red, 1 blue, 1 green; 13 red; 12 red, 3 green; 1 blue, 7 red +Game 79: 3 green, 7 blue; 1 red, 8 blue, 5 green; 1 red, 6 green, 7 blue; 11 green, 1 red, 7 blue; 1 blue +Game 80: 3 green, 13 red, 8 blue; 17 red, 9 blue; 7 blue, 1 green, 2 red; 8 red, 6 blue, 3 green; 1 red, 2 blue; 2 green, 4 blue, 10 red +Game 81: 3 red, 1 green, 7 blue; 2 green, 2 blue, 3 red; 3 red, 1 blue, 7 green; 6 green, 12 blue +Game 82: 11 red, 3 green, 2 blue; 3 red, 1 green, 1 blue; 16 red, 1 green +Game 83: 8 green, 3 blue, 2 red; 1 blue, 13 green, 6 red; 4 blue, 5 red, 1 green; 12 green, 4 red, 12 blue; 17 green, 7 blue, 3 red +Game 84: 2 blue, 13 red, 5 green; 3 green, 3 blue, 19 red; 2 red, 11 green, 5 blue; 3 green, 3 blue, 15 red; 7 green, 4 blue, 11 red; 1 red, 10 green +Game 85: 1 red, 3 blue, 4 green; 2 red, 11 green, 2 blue; 2 blue, 7 green, 1 red +Game 86: 3 blue, 4 green, 8 red; 4 green, 2 red; 9 red, 4 blue, 1 green; 18 red, 1 blue +Game 87: 3 red, 14 blue, 1 green; 10 blue, 1 green; 1 green, 4 red, 14 blue; 8 blue, 7 green, 4 red; 2 green, 7 red, 7 blue; 2 green, 10 blue +Game 88: 12 green, 6 red; 6 red, 3 blue, 2 green; 4 red, 4 blue, 9 green; 3 red, 4 green, 8 blue; 1 blue, 3 red +Game 89: 3 green, 3 red, 2 blue; 3 red, 2 green, 1 blue; 6 green, 4 blue, 12 red; 13 red, 14 blue, 1 green; 5 red; 10 red, 8 blue, 7 green +Game 90: 7 green, 10 blue; 6 green, 1 red, 2 blue; 6 blue; 5 green, 9 blue, 1 red; 10 blue, 1 red, 6 green +Game 91: 6 red, 2 blue; 3 blue, 3 red, 1 green; 19 blue, 7 red +Game 92: 9 green, 3 blue; 1 red, 5 green; 13 green, 3 blue, 2 red; 1 red, 3 blue, 7 green +Game 93: 11 red, 3 green, 11 blue; 7 green, 3 red, 10 blue; 11 green, 4 blue, 8 red; 14 green, 8 blue +Game 94: 7 blue; 1 green, 11 blue, 2 red; 1 green, 1 red, 19 blue; 7 green, 2 red, 10 blue +Game 95: 15 blue, 1 red, 9 green; 5 green, 1 red, 4 blue; 6 green, 17 blue; 9 blue, 11 green; 10 blue, 9 green; 9 blue, 7 green +Game 96: 7 red, 13 blue; 6 blue, 15 red, 3 green; 1 green, 1 red, 1 blue; 9 red, 2 green, 8 blue; 5 green, 8 red, 1 blue; 6 blue, 3 green, 13 red +Game 97: 19 blue, 10 red, 4 green; 8 red, 17 blue; 8 blue +Game 98: 2 blue, 2 red, 4 green; 5 green, 3 blue, 2 red; 5 green, 15 blue; 15 blue, 5 green, 1 red +Game 99: 1 blue, 2 green, 8 red; 1 blue, 7 red, 1 green; 11 red, 2 green; 1 red, 1 blue +Game 100: 8 green; 2 red, 20 green; 12 green, 1 red, 1 blue; 4 red, 1 blue; 1 blue, 6 red diff --git a/2023/day2/p1/main.go b/2023/day2/p1/main.go new file mode 100644 index 0000000..f738417 --- /dev/null +++ b/2023/day2/p1/main.go @@ -0,0 +1,54 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strconv" + "strings" +) + +func main() { + file, _ := os.Open("./input.text") + defer file.Close() + + scanner := bufio.NewScanner(file) + + sum := 0 + + for scanner.Scan() { + line := strings.Split(scanner.Text(), ":") + + game_num, _ := strconv.Atoi(strings.Split(line[0], " ")[1]) + + draws := strings.Split(line[1], ";") + + add := true + + for _, draw := range draws { + + cubes := strings.Split(draw, ",") + for _, cube := range cubes { + v := strings.Fields(cube) + value, _ := strconv.Atoi(v[0]) + color := v[1] + + if color == "red" && value > 12 { + add = false + } + if color == "green" && value > 13 { + add = false + } + if color == "blue" && value > 14 { + add = false + } + } + } + + if add { + sum += game_num + } + } + + fmt.Println("Sum of games with possible # of cubes:", sum) +} diff --git a/2023/day2/p1/test.text b/2023/day2/p1/test.text new file mode 100644 index 0000000..1cd7d33 --- /dev/null +++ b/2023/day2/p1/test.text @@ -0,0 +1,5 @@ +Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green \ No newline at end of file diff --git a/2023/day2/p2/input.text b/2023/day2/p2/input.text new file mode 100644 index 0000000..968fc46 --- /dev/null +++ b/2023/day2/p2/input.text @@ -0,0 +1,100 @@ +Game 1: 7 green, 14 red, 5 blue; 8 red, 4 green; 6 green, 18 red, 9 blue +Game 2: 3 blue, 15 red, 5 green; 1 blue, 14 red, 5 green; 11 red; 4 green, 1 blue, 3 red; 4 green, 1 blue; 10 red, 1 green +Game 3: 11 green, 3 red; 4 green, 15 blue; 14 blue, 2 red, 10 green; 1 red, 3 green, 10 blue +Game 4: 1 green, 6 red, 11 blue; 3 blue, 12 red; 1 green, 14 red, 8 blue; 3 blue, 7 red; 8 blue, 5 red; 7 red, 1 green +Game 5: 14 green, 3 red, 3 blue; 2 red, 1 green, 1 blue; 8 green, 3 blue, 1 red; 15 green, 8 blue, 1 red +Game 6: 4 blue, 8 green, 5 red; 9 green, 10 blue, 7 red; 11 blue, 10 red, 7 green; 8 red, 6 blue, 9 green +Game 7: 5 green, 11 blue, 9 red; 2 green, 6 red, 12 blue; 8 red, 4 blue, 3 green; 7 green, 8 red, 9 blue; 8 green, 5 red +Game 8: 7 red, 12 green; 9 blue, 15 red, 8 green; 3 blue, 11 green, 6 red; 8 blue, 12 red, 5 green +Game 9: 8 blue, 6 red, 7 green; 2 blue, 3 red, 10 green; 10 blue, 6 red, 7 green; 11 red, 7 blue, 5 green; 10 red, 11 green +Game 10: 5 red, 14 green; 2 red, 6 blue, 15 green; 3 red, 4 blue, 7 green; 6 red, 1 green, 4 blue +Game 11: 4 blue, 11 green, 6 red; 12 red, 1 blue, 5 green; 7 red, 1 blue; 11 red, 2 green, 3 blue; 2 blue, 6 red, 7 green +Game 12: 1 green, 8 red, 3 blue; 3 green, 2 red; 2 blue, 5 red, 1 green +Game 13: 2 green; 8 green, 1 blue, 12 red; 1 blue, 14 green, 2 red; 1 blue, 6 red, 6 green; 7 green, 10 red +Game 14: 9 green, 4 red, 1 blue; 5 red, 2 green; 17 green, 1 red; 6 red, 10 green; 4 green, 3 red, 1 blue +Game 15: 7 green, 13 blue, 4 red; 1 blue, 7 green, 9 red; 13 blue, 13 red, 7 green; 8 red, 9 blue; 9 red, 14 blue; 2 green, 7 red, 9 blue +Game 16: 6 green, 18 blue, 6 red; 5 green, 2 blue, 2 red; 6 green, 2 red, 17 blue; 2 red, 2 green, 8 blue; 2 red, 10 blue +Game 17: 17 red, 8 green; 4 blue, 10 green, 3 red; 8 red, 5 green, 3 blue; 12 green, 3 red +Game 18: 6 red, 1 green, 14 blue; 1 red, 10 blue, 1 green; 1 red, 17 blue, 1 green; 5 red, 1 blue; 5 red, 18 blue; 2 red, 3 blue +Game 19: 5 blue, 12 red; 6 blue, 3 red, 6 green; 8 blue, 6 red, 6 green; 8 green, 8 blue, 2 red; 4 green, 6 red, 6 blue; 1 green, 3 red, 13 blue +Game 20: 7 green, 2 blue; 4 blue, 12 red, 2 green; 7 red, 2 green, 6 blue +Game 21: 8 green, 1 red; 1 red, 9 green; 1 red, 6 green, 4 blue; 1 red, 3 green, 5 blue; 2 red, 6 green +Game 22: 11 green, 12 red, 5 blue; 5 blue, 9 red, 11 green; 8 green, 4 red, 5 blue; 7 green, 1 blue, 1 red +Game 23: 11 blue, 9 red, 5 green; 3 green, 3 blue; 11 blue, 9 red, 1 green; 2 red, 7 green; 4 green, 3 blue, 1 red; 5 green, 4 blue +Game 24: 1 green, 4 blue, 9 red; 1 green, 2 blue, 11 red; 1 green, 13 red; 1 green, 2 blue, 3 red +Game 25: 1 red, 7 green, 4 blue; 2 red, 1 green, 3 blue; 10 blue, 1 red; 7 blue, 2 red, 6 green; 7 green, 15 blue, 2 red; 14 green, 13 blue +Game 26: 5 red, 2 blue; 9 red, 2 green, 12 blue; 15 red, 1 green, 5 blue; 1 green, 16 blue, 17 red +Game 27: 2 green, 4 red; 4 red, 1 green; 1 blue, 3 red; 2 red +Game 28: 3 green; 8 green, 9 red; 9 red, 3 blue, 10 green; 16 green, 4 blue, 4 red +Game 29: 3 green, 1 red, 7 blue; 5 blue, 5 green, 2 red; 5 blue, 6 green, 2 red; 2 green, 2 red, 4 blue; 1 green, 3 red, 8 blue +Game 30: 7 red, 3 green, 7 blue; 3 green, 10 red; 5 red, 5 blue, 1 green; 9 blue, 2 green, 7 red; 1 red, 10 blue; 10 blue, 2 red, 4 green +Game 31: 9 green, 1 red; 9 blue, 6 red, 9 green; 17 blue, 4 green, 10 red; 19 blue, 11 green +Game 32: 1 red, 1 blue, 6 green; 10 blue, 4 green; 1 red, 5 blue; 9 blue, 3 green +Game 33: 4 red; 3 red; 2 red, 1 green, 1 blue; 1 green; 1 blue, 1 red +Game 34: 2 green, 9 blue, 1 red; 5 blue, 7 green, 1 red; 2 green, 1 red, 16 blue; 1 blue, 5 green, 6 red +Game 35: 11 red, 10 blue; 2 blue, 12 green, 12 red; 3 green, 6 red, 6 blue; 14 blue, 10 green, 1 red +Game 36: 2 blue, 3 red, 15 green; 2 blue, 6 green, 2 red; 14 blue, 4 red, 7 green; 13 blue, 12 green, 2 red +Game 37: 6 green, 14 blue, 7 red; 7 blue, 2 red, 6 green; 1 blue, 2 green, 6 red +Game 38: 2 green, 15 red, 2 blue; 14 red, 1 blue; 14 red, 2 green, 12 blue +Game 39: 5 green, 1 blue, 10 red; 4 red, 3 blue, 7 green; 2 red, 2 green, 4 blue; 10 blue, 5 green +Game 40: 7 red, 10 green, 2 blue; 7 green, 3 red, 2 blue; 10 red, 9 blue, 7 green; 3 green, 5 blue, 10 red +Game 41: 5 blue, 2 green, 11 red; 2 green, 18 red, 3 blue; 8 green, 10 red, 1 blue; 16 red, 13 green; 17 green, 2 blue, 17 red; 1 green, 1 blue, 9 red +Game 42: 5 red, 2 green, 1 blue; 6 red, 2 blue; 3 red, 1 blue; 9 red, 5 blue; 1 green, 8 red, 1 blue +Game 43: 1 red, 2 green; 12 red, 4 green, 5 blue; 4 blue, 9 red; 4 green, 10 red, 2 blue +Game 44: 2 blue, 9 green, 3 red; 6 red, 4 blue, 4 green; 3 red, 4 blue; 5 red, 2 green, 1 blue; 4 blue, 1 green; 8 green, 1 red, 4 blue +Game 45: 7 blue, 1 red; 2 red, 4 green, 9 blue; 3 red, 15 blue; 4 red, 4 green, 12 blue; 1 red, 18 blue +Game 46: 4 red, 14 blue, 11 green; 5 blue, 6 red, 17 green; 10 red, 8 green, 17 blue; 7 red, 10 blue, 19 green +Game 47: 7 blue, 3 red; 7 blue, 1 green, 2 red; 2 red, 6 blue; 1 green, 9 blue, 2 red; 3 red; 2 green, 1 blue +Game 48: 12 red, 6 blue, 6 green; 9 green, 19 red, 1 blue; 2 blue, 12 green, 8 red +Game 49: 1 green, 11 red, 11 blue; 10 red, 10 blue, 11 green; 4 red, 19 green, 6 blue; 11 blue, 19 green, 13 red; 9 green, 9 blue +Game 50: 1 blue, 12 green, 4 red; 1 blue, 18 green, 1 red; 1 blue, 12 green, 3 red; 1 blue, 4 green +Game 51: 10 red, 5 blue, 1 green; 10 red, 4 blue; 6 red, 8 blue +Game 52: 1 blue; 5 green, 9 red; 2 blue, 1 green, 11 red; 2 blue, 13 red, 5 green; 6 green, 1 blue, 9 red +Game 53: 8 blue, 15 red; 2 green, 4 red, 12 blue; 6 blue, 1 green, 15 red; 20 red, 12 blue; 6 red, 1 green, 2 blue +Game 54: 5 red, 16 blue; 5 green, 3 red, 17 blue; 5 red, 3 blue, 5 green; 4 green, 6 blue, 9 red; 2 blue, 6 green, 2 red +Game 55: 1 blue, 1 red; 1 green, 1 red, 3 blue; 4 blue, 1 green, 1 red; 5 blue; 2 blue +Game 56: 4 red, 4 blue; 7 blue, 11 red; 1 red, 2 green, 9 blue; 4 blue, 16 red, 2 green; 1 red; 2 green, 5 blue, 1 red +Game 57: 1 green, 8 blue; 1 red; 10 blue, 5 green; 3 blue, 4 green; 11 blue, 1 red; 4 blue, 3 green, 1 red +Game 58: 8 green, 5 blue; 9 blue, 8 red, 5 green; 6 red, 6 blue, 9 green; 1 green, 5 blue, 2 red; 3 red, 3 green, 2 blue; 2 green, 1 red, 1 blue +Game 59: 15 red, 4 blue, 8 green; 12 red, 6 green; 3 red +Game 60: 14 blue, 11 red; 12 blue, 6 red; 11 blue, 6 red; 5 red, 13 blue; 15 blue; 1 green, 1 blue, 16 red +Game 61: 5 red, 1 green; 4 red, 9 green; 1 blue, 6 green, 14 red +Game 62: 19 red, 1 green; 1 blue, 3 red; 15 red, 1 blue; 1 blue, 3 red; 5 red, 1 green, 1 blue +Game 63: 1 red, 3 green, 10 blue; 2 green, 1 red, 14 blue; 1 green, 5 blue, 1 red; 6 blue, 4 green, 1 red +Game 64: 5 red, 2 green; 5 green, 2 red, 2 blue; 3 red, 3 blue, 1 green; 3 blue, 3 green, 3 red; 1 green, 3 red +Game 65: 13 red, 2 green, 3 blue; 1 red, 2 blue, 1 green; 1 blue; 2 green, 1 red +Game 66: 7 red, 12 blue, 6 green; 2 red, 5 green, 11 blue; 3 green, 2 blue, 2 red; 9 blue, 1 red, 2 green +Game 67: 4 red, 3 green, 7 blue; 8 blue, 3 red; 2 red; 9 blue, 5 red, 2 green +Game 68: 12 blue; 10 green, 5 blue; 8 blue; 9 blue, 7 red, 18 green; 5 red, 12 blue, 8 green; 8 green, 13 red, 10 blue +Game 69: 1 green, 1 red; 2 red, 1 green, 3 blue; 1 red, 1 green, 4 blue; 1 green, 8 red +Game 70: 12 green, 1 blue, 4 red; 8 green, 1 red; 1 blue, 8 green; 2 green, 3 red; 5 green, 4 red; 2 blue, 12 green, 1 red +Game 71: 10 blue, 4 red, 14 green; 6 green, 7 red, 8 blue; 1 red, 1 blue, 13 green; 10 red, 6 blue, 3 green; 8 blue, 7 green, 4 red +Game 72: 1 green; 1 blue, 12 green, 14 red; 3 blue, 7 green, 8 red; 12 red, 18 green; 13 green, 11 red, 1 blue; 2 blue, 6 green, 6 red +Game 73: 17 red, 3 green, 15 blue; 15 blue, 2 red; 15 red, 7 blue, 4 green; 9 blue, 1 green, 18 red +Game 74: 10 red, 2 blue; 1 blue, 7 red; 5 blue, 2 green, 2 red; 3 blue, 15 red, 3 green; 4 blue, 3 green, 13 red +Game 75: 6 blue, 10 red; 2 green, 2 blue, 10 red; 10 green, 1 blue, 10 red; 4 blue, 6 red, 11 green +Game 76: 10 blue, 1 red, 2 green; 6 blue, 2 green, 10 red; 3 red, 15 green, 1 blue +Game 77: 5 green, 1 red; 2 blue, 1 green; 13 green, 2 red, 5 blue; 12 green, 1 blue, 2 red; 3 blue, 2 green, 2 red +Game 78: 1 green, 16 red; 6 red, 1 blue, 1 green; 13 red; 12 red, 3 green; 1 blue, 7 red +Game 79: 3 green, 7 blue; 1 red, 8 blue, 5 green; 1 red, 6 green, 7 blue; 11 green, 1 red, 7 blue; 1 blue +Game 80: 3 green, 13 red, 8 blue; 17 red, 9 blue; 7 blue, 1 green, 2 red; 8 red, 6 blue, 3 green; 1 red, 2 blue; 2 green, 4 blue, 10 red +Game 81: 3 red, 1 green, 7 blue; 2 green, 2 blue, 3 red; 3 red, 1 blue, 7 green; 6 green, 12 blue +Game 82: 11 red, 3 green, 2 blue; 3 red, 1 green, 1 blue; 16 red, 1 green +Game 83: 8 green, 3 blue, 2 red; 1 blue, 13 green, 6 red; 4 blue, 5 red, 1 green; 12 green, 4 red, 12 blue; 17 green, 7 blue, 3 red +Game 84: 2 blue, 13 red, 5 green; 3 green, 3 blue, 19 red; 2 red, 11 green, 5 blue; 3 green, 3 blue, 15 red; 7 green, 4 blue, 11 red; 1 red, 10 green +Game 85: 1 red, 3 blue, 4 green; 2 red, 11 green, 2 blue; 2 blue, 7 green, 1 red +Game 86: 3 blue, 4 green, 8 red; 4 green, 2 red; 9 red, 4 blue, 1 green; 18 red, 1 blue +Game 87: 3 red, 14 blue, 1 green; 10 blue, 1 green; 1 green, 4 red, 14 blue; 8 blue, 7 green, 4 red; 2 green, 7 red, 7 blue; 2 green, 10 blue +Game 88: 12 green, 6 red; 6 red, 3 blue, 2 green; 4 red, 4 blue, 9 green; 3 red, 4 green, 8 blue; 1 blue, 3 red +Game 89: 3 green, 3 red, 2 blue; 3 red, 2 green, 1 blue; 6 green, 4 blue, 12 red; 13 red, 14 blue, 1 green; 5 red; 10 red, 8 blue, 7 green +Game 90: 7 green, 10 blue; 6 green, 1 red, 2 blue; 6 blue; 5 green, 9 blue, 1 red; 10 blue, 1 red, 6 green +Game 91: 6 red, 2 blue; 3 blue, 3 red, 1 green; 19 blue, 7 red +Game 92: 9 green, 3 blue; 1 red, 5 green; 13 green, 3 blue, 2 red; 1 red, 3 blue, 7 green +Game 93: 11 red, 3 green, 11 blue; 7 green, 3 red, 10 blue; 11 green, 4 blue, 8 red; 14 green, 8 blue +Game 94: 7 blue; 1 green, 11 blue, 2 red; 1 green, 1 red, 19 blue; 7 green, 2 red, 10 blue +Game 95: 15 blue, 1 red, 9 green; 5 green, 1 red, 4 blue; 6 green, 17 blue; 9 blue, 11 green; 10 blue, 9 green; 9 blue, 7 green +Game 96: 7 red, 13 blue; 6 blue, 15 red, 3 green; 1 green, 1 red, 1 blue; 9 red, 2 green, 8 blue; 5 green, 8 red, 1 blue; 6 blue, 3 green, 13 red +Game 97: 19 blue, 10 red, 4 green; 8 red, 17 blue; 8 blue +Game 98: 2 blue, 2 red, 4 green; 5 green, 3 blue, 2 red; 5 green, 15 blue; 15 blue, 5 green, 1 red +Game 99: 1 blue, 2 green, 8 red; 1 blue, 7 red, 1 green; 11 red, 2 green; 1 red, 1 blue +Game 100: 8 green; 2 red, 20 green; 12 green, 1 red, 1 blue; 4 red, 1 blue; 1 blue, 6 red diff --git a/2023/day2/p2/main.go b/2023/day2/p2/main.go new file mode 100644 index 0000000..2e7f8e8 --- /dev/null +++ b/2023/day2/p2/main.go @@ -0,0 +1,52 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strconv" + "strings" +) + +func main() { + file, _ := os.Open("./input.text") + defer file.Close() + + scanner := bufio.NewScanner(file) + + sum := 0 + + for scanner.Scan() { + line := strings.Split(scanner.Text(), ":") + + draws := strings.Split(line[1], ";") + + max_red := 0 + max_green := 0 + max_blue := 0 + + for _, draw := range draws { + + cubes := strings.Split(draw, ",") + for _, cube := range cubes { + v := strings.Fields(cube) + value, _ := strconv.Atoi(v[0]) + color := v[1] + + if color == "red" && value > max_red { + max_red = value + } + if color == "green" && value > max_green { + max_green = value + } + if color == "blue" && value > max_blue { + max_blue = value + } + } + } + + sum += max_red * max_green * max_blue + } + + fmt.Println("Sum of the minimum power of all games:", sum) +} diff --git a/2023/day2/p2/test.text b/2023/day2/p2/test.text new file mode 100644 index 0000000..1cd7d33 --- /dev/null +++ b/2023/day2/p2/test.text @@ -0,0 +1,5 @@ +Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green \ No newline at end of file diff --git a/2023/day3/p1/input.text b/2023/day3/p1/input.text new file mode 100644 index 0000000..5bc7679 --- /dev/null +++ b/2023/day3/p1/input.text @@ -0,0 +1,140 @@ +...................15....904...........850.................329...................13....................................871....816....697.... +...........53.497........................%....906...610.......*.............735#..&...*......558...68...............68..*......&....*....... +..........*....$....................132.........*..........844....875................350............*...............*..336.364...649........ +.......726.......341..................*...186...358..................*244........57.......@.........738......*.....663.................584.. +.............952.*......33......660..704............949......................518*....234.967....551........971..&.......................*... +.......738...*....222......................706.......*..825.............474%...........*...........*.405.........779..............542...405. +.74.........366....................192..........542.737....*760...................623/..730.....718.../.....................$17......%...... +...*126.....................%........*.504...=..*.........................................................974............................... +........331/..901.........337..........*...461.698...............*461.....814............................*............975...............165. +..../.........*.....................262.......................313........*........530.56.....567.......897.....*.........*.9................ +....953....355...@703..................................609..............462.......%........./...............108.557...501.../...724......... +..............................................=.........%.......46......................533....670...............................*..%630.... +.........................91...382*204.........154..%.............+.524.995..............=.....*...........7..........692.92*56...73......... +.685....*....70.189.......*.........................773...830/....../....*........=.........565.............464................$....738..130 +.........938..*........993..............*.................................243...340...753...........*...882...............108.647....*...... +..............762..........348.......280...............364*526...........................*........552.....=....25..682....*.........164..... +.....948..............813../....644......62........................................#.....657......................*......................... +......*...........................*.................$745.......739.....*...399...30............&..@...........924.117..........309.......... +...883....544.....33.........585=.428.146................288.....*..853....*...........*891.409....429..460...*..........997....*........187 +.............*818........829..........*....846..............................248.....574..................*....789.......*.....965....-..*... +......=.....................*..........370.......850+.............313...........................573....621...............268.......58..800.. +....67....287.............481..709...............................*.......#74...................*.................965........................ +............@.291.............*.........607*....950.475..309...66..932........395..374..........155.891....472..*......774.............&.... +....207..........%..262......543..887/......711....*.......+......*............*...*........823............*...93...........377.....764..... +.....*...968.951.......#................................$.........453...366..736.972........*.............697........*618...&............... +....984..*...............-.......................884..23......492.....*..*................70..523.....25........$.....................370... +..................870...187.......548#.522..458.....*..........*....956......535....../.........*.525*........197....@..*266...123.....*.... +.........501.....*..........................&.....323........257........956..*........80..946.592.................211.........*.........311. +.....380*.....867...653..347....................*........93=...........*......515..........-...................................678.......... +..........876......&....*.......&631.950.647...631...@...........=...705..914................739..............319......713.........*97.#918. +.....805...*..........118................-.........790....559..51........../........*.........*......550......*........./.......647......... +......-..428.....599......813................413..................280............840.654.......91.....*...........236.......$............... +.............=...%.......*.....77...................#.492............................................96..........@.......175....%........... +......*427..569..........47......................999......314.....636*253.................764.................27......-..........415..386... +...142................$................@..320........969...................882*311...............#..751...........=....649...........*...... +.........*723..993.976....638........475................=..800.......................*764.710...574....*964....831..........473......531.... +...%..486...................*....#..................................831...........375........*........................=824......21.......... +559.........................441...316................................./....................618.407.......83.......972...............91...... +......*.....25..741...................%...............*63.546$..905......27........861.756........*.......*..........*...28...57............ +.......794....*./........782...236....47...........937...........*..755....*505..............23.948.......560.532...421....*..#.........405. +............566.................*........-850..872.......90....229...+..........978..684............225..................675.....591...*.... +.............................296..243...........+....691...................311.........$......321......@......827....$13.......$....&..530.. +.....664..422$....613.....@.........%.401/.$974.....-.........%.145....729......*........./.......106............%.......=.....611.......... +.......$.........*.......857...147*.............591........+.46..*.....=........306.67*...818.............................261....../........ +............823...785..............340.........-....564..777......456.......%....................891.................560...........642..181. +.....394.....*................226..........423..............................539.................*............640&.............535........... +.......@.....626..317..329....*...92........+..................374....827............*.683+....771....529.........303..........*............ +.........172.....-........*......*.....332...........288..229..+.........*.786=....468.............*....*...........*....461...249..=....... +....974...*............901..@....130..*..............$...*..........4.573................163......429....808.464*47..231....@......964...... +........183.................582........11...............310.....774.*.....567.............*....36........................................... +.......................939.....................*826............@.....892..........481......266.*...-253.........106.830....235......*..841.. +727.........177#.........&.......507........301..........................550..242*.....+./.....686.......@.446.*.....*.......*....894..*.... +....67...............468.....&......&..596......................817.600...............85.5.............973...$.805...513......378.......388. +...........*247.........*.....974.........*263....329....476....*............721............723.....................................358..... +........784.....434.....667.......................*............615.195.612...............................540#........347...........*........ +...............*.................76......121...659........@555..........-.............201......................866............628.505.509... +.............515........../.................#....................281..%...656............*670.419.......799.......*...510.786...*.......&... +....993.................540.373....709.............705............*...132..#........298$......*...232....*..@..878.......*....528...#....... +....$.........615.............*..........948..........*........565................%..........465..#.....497.67....................631....... +.........138....#....417......123...........*.......546...821...................114..=............................258.859=.380-............. +.....734*.............../.............833..399..........................+............780...288..............117..@...................925.... +................*860..........228........*...............................956....390*........=..........%...*..........839...373......*...... +..802........369........641.............763.....154.24...............302............620..............150.403.......*.........*....647....... +...................................&........466*.....@..................*827....530.............................129.628.....923.........=866 +..........&......&.............824.573.................669.........................$.....374..627...........698.....................759..... +.......499....%.812.857*653...................668..........879.......974................../......*926...852.........................-....832 +...646......284..............708...369...........*808................-.......705.......@...............%.............492.462............*... +....................959......#.......*....872..........................102....*.........80..839....996..............*.....%........83...49.. +.785............363..*.............49.......*.......667.....797....224.......586..............&....*...34..673.......650.................... +....*..*132....*.....225...................631..350..*.........*....*.............941....=.......52....*.................406...546.......... +.543............760.........305..325...330.......+.................621...........*.......63..#.......268..239...................#........... +........658..................*............*...........735......820.....145....419...........91..489.........*......404.......*....#......... +..........=....415+.....38$....844...+..366.............*.......*......*..............................43....945.....#.....563.205..211..183. +......267.......................*...519.....730........836..........277...........808...........504...&................................#.... +.....*..................705/....575..........*....../..........$866.........=.......*...975......#.......183.931........%.......611......... +.......135.......284........................246.653.972..............365..191.....376...*.....&.........*......*.........994...@.....11..... +...440../.........*.............................*..............415.....................985..838......677.......109...................*...... +...@............224....399.727$......68#..........................$......432.....214$.....................#.................591....686...... +..........&.......................................658........143....779.+....942......$.............885....567..........$................... +.461.......33....277.407......108..............47.*.............*...........*.......$.811............................390.................... +..........................907*.....#397..307...*....197.12.....3...738....254.85..393...............713..700..741...........176.....883..... +..316........180...........................*.758...................-...........................................*............*............... +....*..../........871...338..165.........683............455...701*......................540....255.......$....858........277....28....+..... +...660.469..912...#..........%......743.........439.....-.........206......363..........*.......*.......640............................144.. +..............*.........443...............610.............803.............*.............879...658............$................189........... +...........172......794........98..............646......................662..............................*....49.-210.523.257....*.......... +...87..662.....#.......*667....%..408..........*............220...524............=.....742..39..160....64.636..........*..*....974..378..... +...*.....*.....42..&.............=....371*.....804.................*..#....../.240.....*........................395%..461..818.....*........ +....706.398........452....500.............406..........57*380....365.42...635.......131...........18.....538.....................403........ +..............143........*.........80............740..........................*245......784........-...........708...................&.297.. +.230...........*.......373..341...........................$438.......*.................=.............874&..959*...........192......829.#.... +...#..........476..647.....*......................................431.728..........................................50.....$................. +........334...........*731.930......=........966........*323...................301.....%....404...............879....*372.....208.134....... +...........*.....................163..........*......509......................%.....&..785.......................*...............*.......... +...768..329....199........................................797......*368..........873..........26.565....651.....664......111..........217... +................*.....26.......705*76....415.............*................................749..........*..................#......545-..%.... +....-....473..517......*...............5*....449..........68........................751.......*399......401................................. +.730......#.........240...&..65.718.87......*.....532..............-....567............*....................675.......67..463............... +.....289#....509........200......*...*....852....................885...+....663..72..507......998.&954..213....$.....*.........672.......... +..............................403.....129........377-....................../....&.................................473...........*........... +.........855=.........250...................961........860*916.......981..........326.........633..404................676.%566..120......... +892...........532.............754.......866*....790..................#........819*..............*.........%.44..=......*............29...... +....@527.......*..................600............../...$568.....800.....................179..528........613.....358...949................... +................302...807............*..895.................+.....@.....-...........................980...........................736....... +........217...=......*............879.....+.-..........%.....793.......442.......422............209*.......&.......969....240.378...*....... +....340*.....145...%.596....................23....703...217................372..........610.................129.......*........../.....=.... +.................790.....&............904............=............795......*.......385=...+.....88*143...............891....406.......79.... +............*749.........31..............*....318.................+.......317.................................%419.............*392......... +....854..797......*..500...............614.1...*..............803.....451............330.159.143.598.......+......./827...............717... +...@............924.*........................245............-.&..........*...606................*...........461............604....#....*.... +....................73....160..406.150...............933.957...................%.......419.........665..*.........-.......*.....721..573.... +....*915.........40................*...%.............*........584.......929......377....*..404.935....&..870.....93........395.............. +.781.............@...........632.......710....769.323............$.........*.........904.....*...*.....................859.................. +.....=.......................*...646............-.........................52................149...414....................*........%......... +...51....524.625..........328...*.................................295.734......@..........................856.291.695....367..218..787..8... +.........../.*................339........................576/.417*...........445...@........................%....................-.......... +....869.85...316.....308...............345.......749.............................264.............775..777...............................89.. +.......*...............#.........$....*..........*....../.....786.713*52.................357.......&./.........#......971....74.305....-.... +............................325..770..167..@.....265..+..883................................+...57..........312.......*........*............ +......+.....266.....788.111....*..........342........588.......939..393*717.............488....*....................401....249...255........ +.......308..*............#.....816....465..........*.....492..@.............581.........-.......397..709*.................$.....*........... +.............511.....881...+.........+..........178..524*..............150..../..720.......843...........964....129.../......908............ +.......749.............*.526.$............800............................*.........*...500....*.../.................487..........200........ +..668......*639......932......139.726................#...51..436$..................775...*...834..874.......%..............859+......439.... +........810........................*.......805.......100..*...........999.....743......169............477...961......973............$....... +.574...........6*262........398....204......*.....%.......525...........*.........................412..*.........376...*.@43....=......=.... +....*836....................................25...619............658.....172.......................*...408...........*........%...776..802... +.............307.......&........537..988..............128..-.....*..........................118...327......296.......967..991............... +.....899...$...*....788.....829......=....................559.722.......519.........385$...+..................*.323*..............*123...... +........*.930...674...........*..........447.......801..............957....................................111......767..34....556.......... +..565.644..............18.....472.........*...8........................*........258........901.................296.......*..........*....... +....*............995=....*................649.*...151.........437%...445.747......-.........&......#......%.....*.........800....357.240.... +....476.491/.931.......121..732*940..682......975..$.....*..................+.358.............../.363....152.264........$................... +.............=....730*..................*584...........234.........996.................*.....701........................499............649.. +......................672......@.............................958.....&.+...........983.673........233.@981........760....................... +..942.993@......293...........939..&....@.........867..92.....*........679.........................*.............*.......27...998........... +....#.......230.$...................36.24....809..#....*...660.....$.......748..199.-.............717...@......................../.......... +......*95..............647...$..............-.........461..........757...........*...68...............728..210*680..708......$.....246...... +...355.........*..........*.538...%..............................-...............977....209*.......................*.........141.....*...... +...............680.....670.........784........171..799.........317..........................844........166........289.................463... \ No newline at end of file diff --git a/2023/day3/p1/main.py b/2023/day3/p1/main.py new file mode 100644 index 0000000..e3671eb --- /dev/null +++ b/2023/day3/p1/main.py @@ -0,0 +1,83 @@ +with open("input.text", 'r') as f: + contents = f.read().split("\n") + +sum_of_parts = 0 + +for index, line in enumerate(contents): + + # Find numbers + part_numbers = [] + num: bool = False + num_index = None + length = 0 + for char_index, char in enumerate(line): + if char.isnumeric(): + if not num: + num_index = char_index + + num = True + length += 1 + else: + if num: + part_numbers.append((num_index, length, line[num_index:num_index + length])) + num = False + length = 0 + + if num: + part_numbers.append((num_index, length, line[num_index:num_index + length])) + + if part_numbers: + print(f"index {index}, {part_numbers}") + + # Check for symbols + for part_index, part_length, part_number in part_numbers: + + symbol = False + + minus = 1 if part_index != 0 else 0 + add = 1 if part_index + length != len(line) else 0 + start_index = part_index - minus + end_index = part_index + part_length + add + + # Check line above + if index != 0: + for check_index in range(start_index, end_index): + + check_char = contents[index - 1][check_index] + + if check_char != "." and not check_char.isnumeric(): + sum_of_parts += int(part_number) + print(f"Added {part_number}, symbol at ({index - 1}, {check_index}), symbol = \"{check_char}\"") + symbol = True + break + if symbol: + continue + + # Check current line + if start_index != part_index: + if line[start_index] != "." and not line[start_index].isnumeric(): + sum_of_parts += int(part_number) + print(f"Added {part_number}, symbol at ({index}, {start_index}), symbol = \"{line[start_index]}\"") + continue + + if end_index != part_index + length - 1: + if line[end_index - 1] != "." and not line[end_index - 1].isnumeric(): + sum_of_parts += int(part_number) + print(f"Added {part_number}, symbol at ({index}, {end_index - 1}), symbol = \"{line[end_index - 1]}\"") + continue + + # Check line bellow + if index != (len(contents) - 1): + for check_index in range(start_index, end_index): + + check_char = contents[index + 1][check_index] + + if check_char != "." and not check_char.isnumeric(): + sum_of_parts += int(part_number) + print(f"Added {part_number}, symbol at ({index + 1}, {check_index}), symbol = \"{check_char}\"") + symbol = True + break + if symbol: + continue + +print(f"Sum of engine parts: {sum_of_parts}") diff --git a/2023/day3/p1/test.text b/2023/day3/p1/test.text new file mode 100644 index 0000000..624ea4f --- /dev/null +++ b/2023/day3/p1/test.text @@ -0,0 +1,10 @@ +467..114.. +...*...... +..35..633. +......#... +617*...... +.....+.58. +..592..... +......755. +...$.*.... +.664.598.. \ No newline at end of file diff --git a/2023/day3/p2/input.text b/2023/day3/p2/input.text new file mode 100644 index 0000000..5bc7679 --- /dev/null +++ b/2023/day3/p2/input.text @@ -0,0 +1,140 @@ +...................15....904...........850.................329...................13....................................871....816....697.... +...........53.497........................%....906...610.......*.............735#..&...*......558...68...............68..*......&....*....... +..........*....$....................132.........*..........844....875................350............*...............*..336.364...649........ +.......726.......341..................*...186...358..................*244........57.......@.........738......*.....663.................584.. +.............952.*......33......660..704............949......................518*....234.967....551........971..&.......................*... +.......738...*....222......................706.......*..825.............474%...........*...........*.405.........779..............542...405. +.74.........366....................192..........542.737....*760...................623/..730.....718.../.....................$17......%...... +...*126.....................%........*.504...=..*.........................................................974............................... +........331/..901.........337..........*...461.698...............*461.....814............................*............975...............165. +..../.........*.....................262.......................313........*........530.56.....567.......897.....*.........*.9................ +....953....355...@703..................................609..............462.......%........./...............108.557...501.../...724......... +..............................................=.........%.......46......................533....670...............................*..%630.... +.........................91...382*204.........154..%.............+.524.995..............=.....*...........7..........692.92*56...73......... +.685....*....70.189.......*.........................773...830/....../....*........=.........565.............464................$....738..130 +.........938..*........993..............*.................................243...340...753...........*...882...............108.647....*...... +..............762..........348.......280...............364*526...........................*........552.....=....25..682....*.........164..... +.....948..............813../....644......62........................................#.....657......................*......................... +......*...........................*.................$745.......739.....*...399...30............&..@...........924.117..........309.......... +...883....544.....33.........585=.428.146................288.....*..853....*...........*891.409....429..460...*..........997....*........187 +.............*818........829..........*....846..............................248.....574..................*....789.......*.....965....-..*... +......=.....................*..........370.......850+.............313...........................573....621...............268.......58..800.. +....67....287.............481..709...............................*.......#74...................*.................965........................ +............@.291.............*.........607*....950.475..309...66..932........395..374..........155.891....472..*......774.............&.... +....207..........%..262......543..887/......711....*.......+......*............*...*........823............*...93...........377.....764..... +.....*...968.951.......#................................$.........453...366..736.972........*.............697........*618...&............... +....984..*...............-.......................884..23......492.....*..*................70..523.....25........$.....................370... +..................870...187.......548#.522..458.....*..........*....956......535....../.........*.525*........197....@..*266...123.....*.... +.........501.....*..........................&.....323........257........956..*........80..946.592.................211.........*.........311. +.....380*.....867...653..347....................*........93=...........*......515..........-...................................678.......... +..........876......&....*.......&631.950.647...631...@...........=...705..914................739..............319......713.........*97.#918. +.....805...*..........118................-.........790....559..51........../........*.........*......550......*........./.......647......... +......-..428.....599......813................413..................280............840.654.......91.....*...........236.......$............... +.............=...%.......*.....77...................#.492............................................96..........@.......175....%........... +......*427..569..........47......................999......314.....636*253.................764.................27......-..........415..386... +...142................$................@..320........969...................882*311...............#..751...........=....649...........*...... +.........*723..993.976....638........475................=..800.......................*764.710...574....*964....831..........473......531.... +...%..486...................*....#..................................831...........375........*........................=824......21.......... +559.........................441...316................................./....................618.407.......83.......972...............91...... +......*.....25..741...................%...............*63.546$..905......27........861.756........*.......*..........*...28...57............ +.......794....*./........782...236....47...........937...........*..755....*505..............23.948.......560.532...421....*..#.........405. +............566.................*........-850..872.......90....229...+..........978..684............225..................675.....591...*.... +.............................296..243...........+....691...................311.........$......321......@......827....$13.......$....&..530.. +.....664..422$....613.....@.........%.401/.$974.....-.........%.145....729......*........./.......106............%.......=.....611.......... +.......$.........*.......857...147*.............591........+.46..*.....=........306.67*...818.............................261....../........ +............823...785..............340.........-....564..777......456.......%....................891.................560...........642..181. +.....394.....*................226..........423..............................539.................*............640&.............535........... +.......@.....626..317..329....*...92........+..................374....827............*.683+....771....529.........303..........*............ +.........172.....-........*......*.....332...........288..229..+.........*.786=....468.............*....*...........*....461...249..=....... +....974...*............901..@....130..*..............$...*..........4.573................163......429....808.464*47..231....@......964...... +........183.................582........11...............310.....774.*.....567.............*....36........................................... +.......................939.....................*826............@.....892..........481......266.*...-253.........106.830....235......*..841.. +727.........177#.........&.......507........301..........................550..242*.....+./.....686.......@.446.*.....*.......*....894..*.... +....67...............468.....&......&..596......................817.600...............85.5.............973...$.805...513......378.......388. +...........*247.........*.....974.........*263....329....476....*............721............723.....................................358..... +........784.....434.....667.......................*............615.195.612...............................540#........347...........*........ +...............*.................76......121...659........@555..........-.............201......................866............628.505.509... +.............515........../.................#....................281..%...656............*670.419.......799.......*...510.786...*.......&... +....993.................540.373....709.............705............*...132..#........298$......*...232....*..@..878.......*....528...#....... +....$.........615.............*..........948..........*........565................%..........465..#.....497.67....................631....... +.........138....#....417......123...........*.......546...821...................114..=............................258.859=.380-............. +.....734*.............../.............833..399..........................+............780...288..............117..@...................925.... +................*860..........228........*...............................956....390*........=..........%...*..........839...373......*...... +..802........369........641.............763.....154.24...............302............620..............150.403.......*.........*....647....... +...................................&........466*.....@..................*827....530.............................129.628.....923.........=866 +..........&......&.............824.573.................669.........................$.....374..627...........698.....................759..... +.......499....%.812.857*653...................668..........879.......974................../......*926...852.........................-....832 +...646......284..............708...369...........*808................-.......705.......@...............%.............492.462............*... +....................959......#.......*....872..........................102....*.........80..839....996..............*.....%........83...49.. +.785............363..*.............49.......*.......667.....797....224.......586..............&....*...34..673.......650.................... +....*..*132....*.....225...................631..350..*.........*....*.............941....=.......52....*.................406...546.......... +.543............760.........305..325...330.......+.................621...........*.......63..#.......268..239...................#........... +........658..................*............*...........735......820.....145....419...........91..489.........*......404.......*....#......... +..........=....415+.....38$....844...+..366.............*.......*......*..............................43....945.....#.....563.205..211..183. +......267.......................*...519.....730........836..........277...........808...........504...&................................#.... +.....*..................705/....575..........*....../..........$866.........=.......*...975......#.......183.931........%.......611......... +.......135.......284........................246.653.972..............365..191.....376...*.....&.........*......*.........994...@.....11..... +...440../.........*.............................*..............415.....................985..838......677.......109...................*...... +...@............224....399.727$......68#..........................$......432.....214$.....................#.................591....686...... +..........&.......................................658........143....779.+....942......$.............885....567..........$................... +.461.......33....277.407......108..............47.*.............*...........*.......$.811............................390.................... +..........................907*.....#397..307...*....197.12.....3...738....254.85..393...............713..700..741...........176.....883..... +..316........180...........................*.758...................-...........................................*............*............... +....*..../........871...338..165.........683............455...701*......................540....255.......$....858........277....28....+..... +...660.469..912...#..........%......743.........439.....-.........206......363..........*.......*.......640............................144.. +..............*.........443...............610.............803.............*.............879...658............$................189........... +...........172......794........98..............646......................662..............................*....49.-210.523.257....*.......... +...87..662.....#.......*667....%..408..........*............220...524............=.....742..39..160....64.636..........*..*....974..378..... +...*.....*.....42..&.............=....371*.....804.................*..#....../.240.....*........................395%..461..818.....*........ +....706.398........452....500.............406..........57*380....365.42...635.......131...........18.....538.....................403........ +..............143........*.........80............740..........................*245......784........-...........708...................&.297.. +.230...........*.......373..341...........................$438.......*.................=.............874&..959*...........192......829.#.... +...#..........476..647.....*......................................431.728..........................................50.....$................. +........334...........*731.930......=........966........*323...................301.....%....404...............879....*372.....208.134....... +...........*.....................163..........*......509......................%.....&..785.......................*...............*.......... +...768..329....199........................................797......*368..........873..........26.565....651.....664......111..........217... +................*.....26.......705*76....415.............*................................749..........*..................#......545-..%.... +....-....473..517......*...............5*....449..........68........................751.......*399......401................................. +.730......#.........240...&..65.718.87......*.....532..............-....567............*....................675.......67..463............... +.....289#....509........200......*...*....852....................885...+....663..72..507......998.&954..213....$.....*.........672.......... +..............................403.....129........377-....................../....&.................................473...........*........... +.........855=.........250...................961........860*916.......981..........326.........633..404................676.%566..120......... +892...........532.............754.......866*....790..................#........819*..............*.........%.44..=......*............29...... +....@527.......*..................600............../...$568.....800.....................179..528........613.....358...949................... +................302...807............*..895.................+.....@.....-...........................980...........................736....... +........217...=......*............879.....+.-..........%.....793.......442.......422............209*.......&.......969....240.378...*....... +....340*.....145...%.596....................23....703...217................372..........610.................129.......*........../.....=.... +.................790.....&............904............=............795......*.......385=...+.....88*143...............891....406.......79.... +............*749.........31..............*....318.................+.......317.................................%419.............*392......... +....854..797......*..500...............614.1...*..............803.....451............330.159.143.598.......+......./827...............717... +...@............924.*........................245............-.&..........*...606................*...........461............604....#....*.... +....................73....160..406.150...............933.957...................%.......419.........665..*.........-.......*.....721..573.... +....*915.........40................*...%.............*........584.......929......377....*..404.935....&..870.....93........395.............. +.781.............@...........632.......710....769.323............$.........*.........904.....*...*.....................859.................. +.....=.......................*...646............-.........................52................149...414....................*........%......... +...51....524.625..........328...*.................................295.734......@..........................856.291.695....367..218..787..8... +.........../.*................339........................576/.417*...........445...@........................%....................-.......... +....869.85...316.....308...............345.......749.............................264.............775..777...............................89.. +.......*...............#.........$....*..........*....../.....786.713*52.................357.......&./.........#......971....74.305....-.... +............................325..770..167..@.....265..+..883................................+...57..........312.......*........*............ +......+.....266.....788.111....*..........342........588.......939..393*717.............488....*....................401....249...255........ +.......308..*............#.....816....465..........*.....492..@.............581.........-.......397..709*.................$.....*........... +.............511.....881...+.........+..........178..524*..............150..../..720.......843...........964....129.../......908............ +.......749.............*.526.$............800............................*.........*...500....*.../.................487..........200........ +..668......*639......932......139.726................#...51..436$..................775...*...834..874.......%..............859+......439.... +........810........................*.......805.......100..*...........999.....743......169............477...961......973............$....... +.574...........6*262........398....204......*.....%.......525...........*.........................412..*.........376...*.@43....=......=.... +....*836....................................25...619............658.....172.......................*...408...........*........%...776..802... +.............307.......&........537..988..............128..-.....*..........................118...327......296.......967..991............... +.....899...$...*....788.....829......=....................559.722.......519.........385$...+..................*.323*..............*123...... +........*.930...674...........*..........447.......801..............957....................................111......767..34....556.......... +..565.644..............18.....472.........*...8........................*........258........901.................296.......*..........*....... +....*............995=....*................649.*...151.........437%...445.747......-.........&......#......%.....*.........800....357.240.... +....476.491/.931.......121..732*940..682......975..$.....*..................+.358.............../.363....152.264........$................... +.............=....730*..................*584...........234.........996.................*.....701........................499............649.. +......................672......@.............................958.....&.+...........983.673........233.@981........760....................... +..942.993@......293...........939..&....@.........867..92.....*........679.........................*.............*.......27...998........... +....#.......230.$...................36.24....809..#....*...660.....$.......748..199.-.............717...@......................../.......... +......*95..............647...$..............-.........461..........757...........*...68...............728..210*680..708......$.....246...... +...355.........*..........*.538...%..............................-...............977....209*.......................*.........141.....*...... +...............680.....670.........784........171..799.........317..........................844........166........289.................463... \ No newline at end of file diff --git a/2023/day3/p2/main.py b/2023/day3/p2/main.py new file mode 100644 index 0000000..6a4987a --- /dev/null +++ b/2023/day3/p2/main.py @@ -0,0 +1,125 @@ +with open("input.text", 'r') as f: + contents = f.read().split("\n") + +sum_of_parts = 0 + +""" +{ + (1, 3) : [467, 35] +} +""" +gears = {} + +for index, line in enumerate(contents): + + # Find numbers + part_numbers = [] + num: bool = False + num_index = None + length = 0 + for char_index, char in enumerate(line): + if char.isnumeric(): + if not num: + num_index = char_index + + num = True + length += 1 + else: + if num: + part_numbers.append((num_index, length, line[num_index:num_index + length])) + num = False + length = 0 + + if num: + part_numbers.append((num_index, length, line[num_index:num_index + length])) + + if part_numbers: + print(f"index {index}, {part_numbers}") + + # Check for symbols + for part_index, part_length, part_number in part_numbers: + + symbol = False + + minus = 1 if part_index != 0 else 0 + add = 1 if part_index + length != len(line) else 0 + start_index = part_index - minus + end_index = part_index + part_length + add + + # Check line above + if index != 0: + for check_index in range(start_index, end_index): + + coords = (index - 1, check_index) + x, y = coords + check_char = contents[x][y] + + if check_char == "*": + if coords in gears: + gears[coords].append(part_number) + else: + gears[coords] = [part_number] + + symbol = True + break + if symbol: + continue + + # Check current line + if start_index != part_index: + if line[start_index] == "*": + coords = (index, start_index) + + check_char = line[start_index] + + if check_char == "*": + if coords in gears: + gears[coords].append(part_number) + else: + gears[coords] = [part_number] + + continue + + if end_index != part_index + length - 1: + if line[end_index - 1] == "*": + coords = (index, end_index - 1) + + check_char = line[end_index - 1] + + if check_char == "*": + if coords in gears: + gears[coords].append(part_number) + else: + gears[coords] = [part_number] + + continue + + # Check line bellow + if index != (len(contents) - 1): + for check_index in range(start_index, end_index): + + coords = (index + 1, check_index) + x, y = coords + + check_char = contents[x][y] + + if check_char == "*": + if coords in gears: + gears[coords].append(part_number) + else: + gears[coords] = [part_number] + + symbol = True + break + if symbol: + continue + + +sum_of_gear_ratios = 0 +for gear in gears: + if len(gears[gear]) == 2: + gear_ratio = int(gears[gear][0]) * int(gears[gear][1]) + print(gear_ratio) + sum_of_gear_ratios += gear_ratio + +print(f"Sum of gear ratios: {sum_of_gear_ratios}") \ No newline at end of file diff --git a/2023/day3/p2/test.text b/2023/day3/p2/test.text new file mode 100644 index 0000000..624ea4f --- /dev/null +++ b/2023/day3/p2/test.text @@ -0,0 +1,10 @@ +467..114.. +...*...... +..35..633. +......#... +617*...... +.....+.58. +..592..... +......755. +...$.*.... +.664.598.. \ No newline at end of file diff --git a/2023/day4/p1/input.text b/2023/day4/p1/input.text new file mode 100644 index 0000000..81efe48 --- /dev/null +++ b/2023/day4/p1/input.text @@ -0,0 +1,213 @@ +Card 1: 69 61 27 58 89 52 81 94 40 51 | 43 40 52 90 37 97 89 80 69 42 51 70 94 58 10 73 21 29 61 63 57 79 81 27 35 +Card 2: 5 75 37 76 98 32 24 83 44 50 | 80 75 91 5 33 52 31 96 83 92 46 98 55 65 48 24 44 4 32 60 88 37 76 50 77 +Card 3: 37 39 43 53 47 20 50 56 78 65 | 80 56 32 78 72 97 40 77 17 50 87 99 36 93 63 19 39 59 44 52 23 75 9 51 43 +Card 4: 6 25 31 60 2 50 89 67 82 16 | 65 89 5 67 68 53 50 6 51 25 96 32 2 16 41 60 63 90 82 30 98 31 75 14 7 +Card 5: 43 39 98 45 33 87 36 23 61 66 | 93 61 4 21 47 32 94 99 45 23 87 64 92 43 33 5 83 16 98 44 39 77 66 18 36 +Card 6: 59 6 65 20 62 3 92 79 98 24 | 80 15 28 70 24 32 93 99 91 86 95 16 90 83 11 75 19 4 48 6 78 61 20 27 7 +Card 7: 49 54 25 44 79 68 13 60 1 43 | 16 18 4 82 99 23 80 46 79 55 14 1 32 13 54 84 37 44 20 68 25 60 27 49 43 +Card 8: 52 50 19 69 28 93 32 98 97 47 | 2 40 28 47 20 60 66 98 12 19 31 14 16 75 97 49 93 69 11 52 50 87 24 32 27 +Card 9: 47 44 94 43 75 49 77 24 93 45 | 94 47 30 43 24 77 44 31 66 75 45 54 92 49 84 53 20 11 17 16 86 93 50 85 76 +Card 10: 23 39 92 16 68 30 49 59 34 90 | 85 15 25 31 92 90 47 59 11 36 68 10 96 65 16 49 18 97 9 83 28 61 4 94 46 +Card 11: 21 37 14 89 46 31 64 90 43 45 | 63 29 14 23 7 28 13 86 83 16 19 24 78 54 47 51 58 77 71 40 56 62 20 89 39 +Card 12: 69 98 97 19 70 5 62 25 55 90 | 1 35 45 25 75 61 50 99 82 96 71 74 72 76 3 70 14 57 88 27 5 94 58 32 85 +Card 13: 24 51 65 64 29 37 86 60 41 94 | 40 13 88 85 46 59 90 55 8 72 56 93 6 71 52 87 31 91 20 5 83 36 86 43 96 +Card 14: 43 76 64 80 49 48 83 14 51 54 | 1 99 54 36 80 48 49 15 43 17 51 96 83 40 76 14 41 75 84 55 63 91 64 58 9 +Card 15: 9 33 75 53 48 76 25 83 28 24 | 1 10 69 28 76 87 71 52 26 44 66 92 75 55 7 40 93 20 12 91 30 33 46 39 31 +Card 16: 55 92 85 21 81 90 47 63 34 70 | 26 2 1 87 59 69 40 58 46 43 70 17 35 71 6 63 49 13 81 11 85 94 44 96 5 +Card 17: 21 42 95 24 35 53 39 14 18 4 | 76 23 5 79 22 20 36 69 38 77 40 37 32 89 49 15 59 44 51 25 74 34 54 16 28 +Card 18: 63 21 61 65 82 69 27 74 98 58 | 51 58 86 21 90 54 45 41 71 74 83 6 42 1 35 78 31 9 55 46 11 15 63 84 82 +Card 19: 44 41 24 51 74 20 97 31 83 39 | 17 24 2 54 73 28 13 55 49 79 42 62 58 8 95 23 86 70 76 41 26 4 80 25 11 +Card 20: 83 61 55 56 96 16 95 49 65 90 | 67 75 63 37 87 54 39 19 99 81 47 49 24 84 41 13 78 40 38 64 26 34 15 72 48 +Card 21: 23 89 57 54 90 82 2 8 65 80 | 78 14 21 39 45 42 1 80 99 20 52 11 31 50 68 82 59 4 96 55 6 46 88 38 34 +Card 22: 85 6 4 41 5 35 31 19 64 17 | 83 56 96 41 16 39 70 81 67 51 74 99 1 18 43 48 5 85 29 88 30 52 69 11 61 +Card 23: 72 88 38 82 33 10 75 44 70 53 | 7 71 56 96 19 89 30 67 21 22 48 45 80 86 39 61 4 44 74 28 23 40 46 72 78 +Card 24: 75 67 13 39 63 58 43 35 49 99 | 28 46 17 95 55 2 83 18 42 91 20 78 97 51 60 81 47 69 64 57 37 77 12 61 67 +Card 25: 87 44 62 66 82 20 7 21 51 32 | 54 97 46 1 95 14 26 47 94 25 49 30 84 12 5 73 48 89 45 53 28 74 93 88 13 +Card 26: 65 6 10 66 15 26 47 62 63 68 | 5 60 71 41 68 66 53 26 6 56 38 47 90 62 63 33 81 10 15 3 16 96 83 65 20 +Card 27: 7 95 47 35 58 87 21 68 80 37 | 94 24 39 74 43 78 69 54 10 32 84 99 41 75 6 86 11 66 56 62 16 44 5 59 65 +Card 28: 95 19 21 14 59 74 27 68 32 99 | 83 35 5 41 92 59 26 57 18 55 52 32 6 23 36 54 56 50 15 48 27 89 45 53 12 +Card 29: 1 8 93 94 72 89 13 37 58 49 | 35 62 88 26 94 50 31 87 72 78 85 1 44 49 22 5 20 91 98 13 77 93 60 48 52 +Card 30: 47 94 67 27 56 25 38 52 28 32 | 22 61 56 82 58 27 32 18 33 94 79 23 62 60 76 98 67 49 77 64 11 47 40 16 42 +Card 31: 61 68 80 67 41 6 52 33 22 91 | 54 10 72 91 31 33 95 43 39 68 81 22 63 67 32 61 27 73 66 75 36 79 6 59 80 +Card 32: 62 5 57 36 87 33 53 86 82 8 | 76 32 30 5 53 57 86 56 97 77 18 33 8 82 15 71 83 17 48 90 9 43 54 88 4 +Card 33: 79 25 27 11 17 23 76 38 15 26 | 83 80 37 36 77 24 20 55 16 59 81 7 19 1 18 91 42 29 22 2 41 27 6 50 92 +Card 34: 3 8 29 57 87 88 97 12 41 95 | 29 94 44 20 34 28 76 12 95 74 22 85 31 64 91 50 1 97 35 49 98 41 92 67 25 +Card 35: 43 79 50 20 6 76 25 14 66 89 | 93 72 50 67 38 89 13 87 46 54 36 52 20 57 56 17 3 22 43 63 14 84 15 29 16 +Card 36: 68 15 59 47 30 98 89 27 5 25 | 11 8 32 72 18 74 73 48 39 53 51 88 22 90 55 40 14 44 66 12 94 71 9 13 31 +Card 37: 11 48 72 90 12 86 34 32 51 7 | 52 80 36 46 74 64 44 27 11 47 61 84 55 28 77 26 58 54 3 5 17 60 89 16 72 +Card 38: 13 97 42 79 96 69 8 57 90 48 | 84 67 52 8 20 54 21 45 69 23 28 85 92 95 40 59 87 2 50 83 14 6 16 70 39 +Card 39: 87 67 8 38 15 20 96 30 45 97 | 36 28 43 35 9 27 14 70 29 1 40 56 60 81 63 48 53 44 31 75 49 85 64 39 69 +Card 40: 63 35 33 6 58 97 91 34 67 18 | 68 61 98 66 84 20 37 41 17 50 81 14 60 78 36 9 65 21 83 2 71 79 85 7 47 +Card 41: 75 97 62 6 92 69 53 20 45 5 | 5 53 56 69 84 97 75 62 39 18 22 64 6 92 70 41 45 20 17 63 7 9 54 29 21 +Card 42: 64 21 72 62 90 50 84 28 71 37 | 71 38 64 50 42 4 65 85 91 21 55 58 10 92 90 7 17 60 84 70 37 72 28 98 62 +Card 43: 58 28 84 32 92 18 48 73 86 5 | 43 32 33 35 84 50 64 6 21 52 92 58 29 95 11 18 28 79 48 77 5 86 60 73 10 +Card 44: 30 69 44 40 5 58 22 63 65 90 | 65 68 69 43 58 5 72 90 22 63 52 78 66 15 60 88 30 12 74 44 67 40 41 38 29 +Card 45: 69 53 87 59 27 10 16 90 52 35 | 83 4 87 89 11 30 45 70 52 13 35 92 90 79 6 68 71 86 16 97 26 72 39 96 53 +Card 46: 78 8 1 64 87 6 3 7 75 82 | 48 84 56 8 89 73 31 68 64 46 40 6 41 14 78 97 91 27 95 28 47 30 37 58 75 +Card 47: 58 24 13 97 18 50 89 9 14 81 | 97 24 54 16 14 32 78 62 50 5 18 42 20 99 15 58 13 89 96 72 81 75 29 9 86 +Card 48: 87 83 32 53 5 72 86 84 65 9 | 30 89 54 53 58 13 85 81 83 39 71 5 91 65 68 82 94 42 87 24 86 29 47 32 28 +Card 49: 38 4 66 35 19 56 78 90 81 65 | 60 16 82 68 7 49 15 32 3 22 48 11 38 53 83 45 54 23 5 81 78 34 63 27 65 +Card 50: 9 48 47 87 99 6 65 2 44 75 | 75 79 55 82 44 27 42 48 51 65 16 68 3 52 30 62 84 66 87 69 8 10 86 35 72 +Card 51: 28 24 85 63 96 30 88 29 5 50 | 71 61 30 90 65 96 41 50 82 68 39 10 81 29 48 26 80 97 28 24 27 88 38 5 63 +Card 52: 86 80 90 33 19 78 13 69 89 27 | 62 54 85 88 97 64 37 31 29 6 94 69 67 51 57 58 89 13 76 55 22 96 63 66 38 +Card 53: 75 5 78 44 10 77 3 89 39 4 | 41 61 76 56 75 85 7 22 19 51 5 87 53 10 79 24 39 94 26 57 1 35 83 32 34 +Card 54: 70 80 59 16 6 99 83 37 26 8 | 62 58 16 74 35 53 94 1 80 89 61 11 86 36 83 14 8 39 43 6 92 99 18 64 79 +Card 55: 41 39 43 58 60 65 74 76 11 46 | 58 42 60 59 13 16 83 55 37 25 32 96 22 79 69 2 89 3 21 71 35 67 95 19 45 +Card 56: 10 18 89 9 63 51 81 4 49 75 | 3 32 45 68 87 65 71 55 79 89 37 64 21 53 30 62 26 6 90 51 70 74 22 10 54 +Card 57: 27 58 75 7 80 71 45 46 26 55 | 67 76 91 16 69 82 24 48 46 87 28 20 75 36 86 8 51 42 9 84 3 43 27 34 70 +Card 58: 64 55 76 63 58 66 34 27 46 62 | 79 22 69 33 1 81 4 76 36 40 88 39 2 47 89 48 29 77 93 67 41 10 95 19 63 +Card 59: 62 1 42 32 48 12 94 36 33 86 | 71 41 46 96 12 55 10 38 15 43 1 60 67 2 30 89 37 98 19 18 69 25 50 20 77 +Card 60: 11 14 6 57 55 62 88 19 24 26 | 45 58 88 83 51 36 46 32 85 17 61 33 31 2 91 9 78 39 81 20 87 86 64 66 49 +Card 61: 9 28 27 33 53 71 38 63 55 60 | 26 77 83 57 75 50 3 68 31 52 24 94 40 18 8 80 70 5 25 72 47 44 45 89 19 +Card 62: 47 64 33 74 26 82 21 30 69 39 | 29 68 65 37 60 58 17 48 75 91 2 9 16 31 46 49 97 57 94 40 34 13 11 43 39 +Card 63: 1 16 10 67 73 48 66 78 55 32 | 31 54 78 79 42 34 81 55 37 63 29 73 90 48 11 77 67 14 46 19 16 66 89 53 32 +Card 64: 59 33 71 69 84 2 53 95 28 52 | 85 82 66 79 45 71 33 10 30 84 52 19 94 54 28 41 61 59 6 69 53 97 38 2 49 +Card 65: 17 46 40 23 93 76 45 2 43 32 | 17 32 23 2 52 7 15 77 20 39 46 64 99 59 98 89 43 40 93 4 45 11 72 76 13 +Card 66: 58 9 28 19 90 80 77 11 81 20 | 44 51 39 20 63 6 11 88 61 27 90 53 62 70 34 42 28 24 78 16 81 65 9 31 15 +Card 67: 88 42 78 9 26 43 54 95 8 40 | 58 54 10 43 60 36 40 42 95 63 4 88 82 50 38 26 8 99 31 74 13 46 91 61 44 +Card 68: 32 95 6 83 30 14 38 15 87 70 | 79 15 64 45 99 70 17 38 87 93 83 53 14 77 85 32 19 95 29 6 7 61 90 30 67 +Card 69: 76 15 92 22 48 46 42 39 84 32 | 51 26 1 9 2 73 17 94 6 62 92 77 32 90 43 48 81 22 88 58 78 46 79 98 15 +Card 70: 62 90 81 15 8 3 72 93 65 32 | 57 62 3 80 26 67 10 72 54 36 98 29 17 90 93 32 49 48 76 8 12 31 65 81 15 +Card 71: 74 46 75 14 56 20 83 28 35 61 | 57 61 75 59 54 55 56 32 71 4 18 60 72 94 39 86 30 50 48 41 7 14 77 73 85 +Card 72: 47 63 42 84 87 78 21 56 97 26 | 87 40 78 1 48 7 26 63 42 37 30 97 65 84 14 93 85 39 47 11 50 71 21 28 56 +Card 73: 20 56 88 38 50 74 76 69 63 17 | 73 47 87 89 98 18 33 14 3 78 72 39 77 97 74 80 81 51 88 59 46 2 70 69 20 +Card 74: 44 74 4 59 77 99 66 81 8 6 | 75 88 25 73 74 86 16 8 99 17 50 22 83 35 67 3 77 5 46 34 68 80 6 23 54 +Card 75: 58 25 36 26 80 12 88 51 98 71 | 71 66 77 83 51 61 23 98 33 53 18 75 43 20 26 92 70 90 25 94 86 12 34 36 22 +Card 76: 14 79 44 82 59 75 43 88 12 52 | 11 30 26 74 82 91 72 79 35 69 52 24 13 23 3 22 78 38 43 10 14 53 76 66 90 +Card 77: 65 79 38 39 3 18 89 51 9 41 | 5 87 13 45 86 85 72 7 92 22 36 69 67 82 40 73 83 15 34 59 68 57 31 84 71 +Card 78: 67 89 71 15 39 66 29 97 11 38 | 4 95 21 74 29 43 51 65 31 91 98 39 71 13 93 88 64 47 40 76 58 6 92 80 81 +Card 79: 8 60 27 44 15 52 91 99 35 47 | 97 1 35 81 53 79 16 23 52 77 11 56 2 85 21 96 46 83 5 37 49 93 13 76 69 +Card 80: 1 37 16 40 6 48 66 26 90 12 | 87 23 24 5 67 80 20 53 95 66 93 85 7 34 32 52 92 61 9 27 41 35 36 57 38 +Card 81: 72 39 83 5 69 43 73 92 88 78 | 77 74 68 78 9 75 50 65 8 14 35 96 64 80 58 6 4 46 57 61 66 85 48 40 34 +Card 82: 38 2 71 61 46 97 8 84 43 24 | 91 50 76 58 17 11 66 60 65 16 44 70 96 20 37 94 30 99 6 69 32 29 81 49 48 +Card 83: 50 89 48 66 96 97 28 5 12 76 | 89 93 79 68 16 48 44 42 28 41 83 50 97 96 76 82 15 57 10 66 5 12 74 38 4 +Card 84: 9 71 98 81 59 30 99 45 80 48 | 6 17 31 35 88 57 10 81 77 70 58 21 34 63 51 84 74 37 64 80 29 16 3 11 76 +Card 85: 36 86 69 83 56 51 19 67 65 10 | 35 3 55 38 90 59 82 2 32 10 17 36 52 69 83 65 13 92 97 99 48 30 87 68 70 +Card 86: 6 96 82 83 89 31 91 20 28 5 | 20 11 84 45 50 81 23 56 24 28 1 53 2 57 54 64 3 94 96 43 6 26 91 77 66 +Card 87: 84 22 38 2 94 23 76 64 29 42 | 13 99 48 23 62 82 38 91 31 88 14 43 66 94 36 64 49 85 26 97 71 39 22 68 60 +Card 88: 69 25 81 63 86 79 1 64 76 38 | 85 81 63 6 69 50 16 65 54 25 27 38 84 76 7 64 79 12 86 88 70 94 39 1 20 +Card 89: 7 43 74 93 60 24 33 53 97 35 | 62 51 93 86 81 71 63 2 13 99 66 83 97 37 10 77 55 27 73 92 67 19 33 88 96 +Card 90: 2 78 5 23 69 72 93 86 55 24 | 92 38 66 85 34 52 83 24 31 6 25 13 33 30 17 7 81 15 16 9 21 53 94 2 77 +Card 91: 34 21 58 13 99 32 61 65 49 30 | 50 73 18 84 99 53 21 61 94 22 26 93 30 68 34 65 58 72 77 32 49 11 13 39 9 +Card 92: 15 67 55 79 9 88 33 7 94 49 | 20 94 87 58 9 35 93 7 67 21 15 57 30 56 88 85 5 13 60 83 2 55 38 28 6 +Card 93: 16 11 80 5 33 23 96 21 56 94 | 1 37 85 94 72 42 66 16 10 70 86 77 33 21 55 11 6 45 96 29 90 14 80 48 64 +Card 94: 2 57 51 10 3 70 63 60 1 40 | 67 80 96 98 52 74 97 33 92 88 19 62 43 73 55 3 1 20 95 99 12 90 17 24 56 +Card 95: 80 18 73 50 2 3 83 65 33 26 | 7 78 28 4 2 19 14 29 61 81 17 38 57 89 11 20 5 12 13 10 24 96 75 25 55 +Card 96: 98 53 54 50 20 34 28 96 59 88 | 52 41 53 29 40 15 88 93 30 76 97 81 73 17 12 70 6 63 27 32 64 48 69 96 44 +Card 97: 66 82 79 74 75 71 29 32 96 50 | 62 46 76 30 21 50 98 17 32 75 87 96 41 42 79 73 45 92 51 91 78 35 27 72 74 +Card 98: 93 39 91 70 97 33 57 69 53 73 | 38 71 33 25 52 26 75 94 93 42 17 82 7 27 47 89 18 11 20 91 40 31 55 19 4 +Card 99: 93 31 61 29 77 60 66 92 3 10 | 55 63 56 4 61 33 60 85 45 48 78 27 25 36 42 93 20 67 49 21 7 83 65 13 71 +Card 100: 21 86 19 62 53 34 88 42 71 47 | 74 7 79 85 22 60 76 10 40 62 50 92 20 24 12 42 15 31 56 90 44 72 34 11 95 +Card 101: 8 68 64 72 98 60 56 69 57 25 | 24 5 95 77 89 58 39 63 80 48 53 66 38 61 31 3 43 1 16 71 52 82 19 14 51 +Card 102: 47 39 45 40 54 93 87 26 33 67 | 95 80 98 3 24 53 96 9 90 13 35 21 86 88 63 55 1 42 25 56 32 60 34 40 77 +Card 103: 64 18 52 28 82 54 31 49 66 44 | 4 78 40 73 32 99 33 6 29 46 11 25 47 36 14 97 79 61 63 50 55 26 30 58 77 +Card 104: 95 84 89 87 57 53 12 43 58 1 | 59 45 57 58 39 61 52 81 43 40 23 86 1 97 95 55 89 84 87 6 17 85 53 12 28 +Card 105: 98 81 56 52 37 26 46 39 88 36 | 4 34 88 32 5 73 98 26 39 77 93 42 62 82 41 81 56 1 12 33 46 36 14 52 37 +Card 106: 97 98 42 95 14 87 41 46 44 27 | 5 82 46 66 87 41 51 55 13 27 7 44 31 97 77 10 14 90 98 94 95 12 79 42 35 +Card 107: 15 30 60 32 25 73 77 63 85 81 | 16 86 56 41 20 51 25 52 73 40 74 32 15 61 99 34 60 85 77 30 5 27 63 35 81 +Card 108: 65 59 24 72 54 66 14 81 67 31 | 94 92 83 67 50 19 61 6 42 55 60 97 22 18 24 40 86 43 72 56 5 75 63 45 90 +Card 109: 90 87 3 17 80 96 36 93 34 79 | 51 11 29 96 13 66 70 99 72 67 64 42 37 30 55 98 35 12 15 84 5 10 57 19 49 +Card 110: 57 82 85 42 23 76 70 64 88 21 | 65 32 76 81 7 43 23 52 55 14 70 58 27 82 48 64 85 47 57 16 46 97 68 21 45 +Card 111: 50 62 66 33 93 43 56 70 77 35 | 94 79 19 16 35 41 78 32 91 4 14 3 13 48 63 36 75 98 64 69 27 96 77 51 74 +Card 112: 6 36 83 73 59 48 65 12 29 92 | 12 36 82 52 8 35 88 69 9 28 89 39 87 20 22 67 27 63 75 73 70 58 31 78 79 +Card 113: 25 10 29 67 87 32 54 92 62 43 | 65 19 67 75 79 29 8 73 62 97 82 87 25 18 32 93 49 5 66 27 68 42 43 11 46 +Card 114: 29 44 96 86 64 37 4 71 94 98 | 5 27 55 76 33 59 68 77 3 96 15 1 46 20 35 61 53 83 78 69 99 97 34 30 25 +Card 115: 32 90 91 88 39 66 37 35 12 21 | 85 82 71 37 87 22 72 17 35 9 58 95 64 12 33 90 68 66 15 43 4 7 91 8 84 +Card 116: 75 50 66 77 51 36 98 23 97 28 | 4 66 44 20 35 76 51 83 58 89 91 87 75 27 10 47 1 60 97 90 77 45 63 59 36 +Card 117: 85 44 56 82 39 64 30 88 79 20 | 71 88 53 27 36 85 13 11 38 91 77 19 3 99 23 73 39 44 24 45 32 15 58 79 56 +Card 118: 80 41 82 32 1 52 91 40 66 11 | 72 3 4 29 77 87 36 40 16 46 66 30 92 76 98 49 85 7 32 28 60 86 52 95 83 +Card 119: 50 66 77 26 2 49 9 25 58 81 | 80 49 50 55 16 56 20 42 31 99 69 26 28 85 66 65 70 90 84 53 40 19 60 12 38 +Card 120: 48 9 95 85 16 70 81 61 57 92 | 2 58 66 10 34 54 7 94 16 14 25 74 92 49 88 13 57 26 99 97 70 75 65 19 17 +Card 121: 50 76 20 25 53 17 2 78 85 86 | 14 40 78 89 93 48 1 28 11 4 54 71 5 69 85 61 38 94 66 64 98 95 30 67 23 +Card 122: 62 92 40 16 25 82 64 87 52 53 | 5 19 25 48 38 42 1 99 51 79 2 78 75 57 81 56 70 47 59 91 90 6 9 24 15 +Card 123: 50 91 29 69 41 73 44 51 13 26 | 66 55 22 6 17 71 1 3 67 24 88 79 65 64 60 34 7 90 78 72 28 83 82 74 10 +Card 124: 61 77 51 39 73 4 6 25 53 91 | 54 88 26 11 3 79 10 86 23 49 66 21 47 85 5 2 98 7 1 60 55 13 94 34 62 +Card 125: 31 67 93 63 21 28 12 85 39 57 | 69 46 22 59 55 75 11 97 70 1 94 14 81 96 79 44 18 36 85 34 56 48 30 72 15 +Card 126: 31 89 5 98 63 36 40 48 91 12 | 91 42 6 47 51 94 48 83 5 77 98 8 11 50 29 9 36 54 89 40 12 63 31 34 73 +Card 127: 41 88 97 87 13 80 74 49 24 6 | 43 66 62 47 36 87 6 88 24 49 96 56 25 79 8 76 23 97 41 42 80 89 13 73 74 +Card 128: 7 6 3 99 56 40 80 27 23 43 | 34 64 97 67 3 78 69 43 57 98 96 4 6 94 62 48 23 68 8 1 58 73 75 65 16 +Card 129: 46 80 39 32 35 41 61 93 57 47 | 40 63 93 89 61 4 45 46 25 96 80 39 35 14 62 95 49 32 47 2 41 99 57 82 44 +Card 130: 90 10 79 84 88 76 59 18 62 11 | 79 11 53 97 92 5 88 52 23 60 62 64 86 84 14 20 98 91 10 28 24 29 87 65 3 +Card 131: 95 50 11 76 61 4 2 8 42 47 | 40 15 46 61 8 2 29 97 65 50 19 83 76 95 59 82 48 57 43 72 42 25 31 47 53 +Card 132: 49 86 99 81 13 98 69 32 89 18 | 89 84 65 58 32 15 96 49 1 18 22 13 98 99 6 81 46 50 88 78 3 11 69 74 86 +Card 133: 18 56 75 7 48 40 38 22 10 90 | 10 42 61 18 91 38 12 67 72 54 51 22 86 77 81 87 75 34 89 97 35 6 96 7 62 +Card 134: 67 66 99 61 98 32 6 82 86 9 | 12 8 33 87 82 66 98 78 68 24 59 80 6 44 32 49 9 2 97 65 86 71 99 61 67 +Card 135: 24 59 92 68 44 20 30 8 40 77 | 28 72 51 38 58 40 30 24 21 77 92 82 59 18 50 7 19 44 20 68 91 8 32 88 94 +Card 136: 27 10 70 96 29 69 37 63 86 65 | 28 27 8 34 29 82 78 56 22 30 3 19 63 88 67 74 75 4 91 41 35 65 7 14 66 +Card 137: 74 70 86 34 89 37 73 23 29 85 | 16 65 58 88 8 5 11 26 39 91 51 31 19 78 92 87 36 34 80 94 42 81 38 40 93 +Card 138: 71 35 5 13 69 8 88 11 76 31 | 69 42 5 59 76 54 37 11 39 9 12 73 66 13 71 89 56 26 28 77 2 31 1 4 57 +Card 139: 10 50 78 91 55 61 81 19 44 59 | 97 98 39 52 56 28 94 24 3 54 45 82 14 17 5 16 27 99 37 38 26 31 53 9 35 +Card 140: 17 93 15 73 45 20 43 50 2 52 | 64 21 15 57 77 90 2 61 22 8 91 39 93 82 62 5 47 30 41 80 58 1 17 25 48 +Card 141: 52 66 4 8 87 11 14 76 23 24 | 3 55 29 16 26 61 12 43 89 15 56 24 5 36 85 62 90 75 65 71 53 45 38 50 54 +Card 142: 57 35 91 73 66 67 64 63 92 18 | 96 58 44 37 19 41 72 54 52 31 88 20 45 68 42 21 2 59 62 53 70 63 77 57 69 +Card 143: 88 70 69 13 18 97 64 89 40 29 | 74 98 30 5 85 12 38 62 66 33 36 17 71 9 97 22 47 79 39 60 89 13 83 77 8 +Card 144: 14 35 52 8 75 43 62 33 36 70 | 13 95 71 64 6 48 74 84 61 24 89 77 17 58 87 75 76 43 28 54 3 83 99 67 12 +Card 145: 53 88 65 42 72 92 43 14 3 90 | 21 19 33 59 84 61 96 41 20 31 88 71 38 72 79 48 58 55 62 36 23 11 30 18 70 +Card 146: 68 28 58 96 42 32 22 90 19 47 | 84 25 39 96 67 26 29 24 9 62 1 14 46 11 77 81 61 82 60 80 78 52 31 98 49 +Card 147: 81 85 76 67 4 63 25 97 57 27 | 2 26 43 9 56 59 29 10 13 45 35 60 86 65 15 46 19 5 79 8 44 1 6 20 21 +Card 148: 90 41 37 66 94 87 84 14 9 29 | 94 47 5 10 23 38 61 87 55 22 75 97 37 29 30 9 18 84 69 41 11 73 43 45 14 +Card 149: 84 30 17 21 47 26 81 68 57 40 | 86 78 70 5 54 40 34 38 47 72 62 56 53 7 10 37 73 92 46 61 41 74 68 23 63 +Card 150: 83 21 33 53 37 57 66 29 41 6 | 20 61 75 89 59 60 41 83 21 29 30 57 66 58 37 76 90 96 53 69 33 17 12 95 6 +Card 151: 12 5 52 36 3 29 69 6 82 27 | 82 12 27 44 50 15 76 28 29 52 57 36 73 3 34 5 94 37 6 92 84 9 10 98 69 +Card 152: 82 62 80 30 37 68 41 89 12 5 | 60 32 64 57 41 74 89 16 72 20 26 6 91 18 52 68 62 55 5 30 82 1 37 80 12 +Card 153: 97 28 55 92 70 83 58 44 67 40 | 24 58 55 88 92 40 6 83 12 70 10 22 44 76 82 97 4 98 65 28 5 32 7 67 74 +Card 154: 31 50 70 87 43 26 55 30 14 54 | 43 72 90 20 10 13 91 54 75 39 26 70 17 87 22 60 29 1 27 69 14 31 50 67 55 +Card 155: 21 4 25 52 3 16 98 43 72 81 | 87 4 21 43 90 67 39 36 13 64 6 25 29 16 83 84 5 98 9 81 78 1 74 12 96 +Card 156: 77 46 21 67 59 78 63 30 45 48 | 48 35 17 62 44 25 34 67 23 13 63 81 99 29 93 84 73 96 86 90 88 30 60 85 21 +Card 157: 43 32 99 39 58 3 38 81 79 41 | 79 41 34 8 99 80 70 43 51 38 29 68 32 83 58 2 6 36 63 95 81 67 3 28 10 +Card 158: 43 68 57 98 30 58 47 40 12 93 | 91 62 48 6 52 16 72 34 28 85 81 94 26 4 99 30 71 44 80 65 40 60 58 18 49 +Card 159: 62 30 18 57 61 68 65 98 10 56 | 98 32 29 1 15 77 55 10 13 30 80 93 38 86 70 99 97 19 85 33 17 21 48 47 89 +Card 160: 30 47 79 28 57 77 73 75 35 40 | 98 25 96 11 15 34 19 35 6 38 1 91 29 57 61 22 69 12 40 21 41 17 27 39 56 +Card 161: 62 58 10 14 73 95 77 97 47 70 | 15 46 1 36 3 66 27 77 49 45 94 65 23 61 76 8 91 42 82 13 85 67 92 68 53 +Card 162: 47 24 44 73 3 10 30 98 5 29 | 75 99 37 41 60 43 13 67 74 23 82 40 35 64 77 25 4 9 58 56 8 7 85 70 66 +Card 163: 10 17 99 41 6 14 81 23 5 84 | 95 11 99 62 53 23 8 73 48 42 96 47 39 94 56 30 58 63 22 66 33 26 35 5 43 +Card 164: 71 32 31 15 73 3 70 91 61 18 | 3 16 77 70 33 94 62 40 88 32 90 98 66 49 86 68 95 7 53 97 96 28 4 75 35 +Card 165: 61 74 1 76 17 22 19 83 5 96 | 83 5 47 29 52 40 94 32 70 95 67 84 56 31 18 62 42 9 53 36 57 48 64 15 85 +Card 166: 84 96 57 6 48 13 42 12 19 99 | 67 29 25 81 77 69 63 56 8 27 80 62 94 30 78 10 45 49 20 95 50 66 61 6 24 +Card 167: 21 41 29 39 24 98 68 40 7 78 | 44 19 53 13 17 4 2 64 87 60 1 51 10 35 94 52 25 75 92 95 80 67 82 42 86 +Card 168: 18 72 92 63 3 38 82 65 85 61 | 53 14 92 63 74 75 97 56 85 82 30 4 42 34 18 61 72 65 20 47 43 3 38 39 40 +Card 169: 98 91 13 27 52 51 36 82 80 78 | 78 42 51 62 36 38 4 95 82 17 91 27 12 98 76 13 84 52 80 32 39 50 48 19 2 +Card 170: 94 67 3 32 73 84 11 47 23 90 | 94 84 66 73 32 31 23 18 93 29 58 81 95 16 46 53 89 4 11 44 49 67 90 82 40 +Card 171: 2 55 5 19 59 73 29 65 12 23 | 33 75 5 53 90 95 68 73 29 71 11 45 72 54 59 12 55 85 56 19 17 24 8 92 2 +Card 172: 74 43 65 15 59 37 11 83 20 85 | 59 30 36 97 78 65 88 20 96 11 51 22 93 63 94 28 3 90 68 95 73 43 13 74 85 +Card 173: 53 46 64 33 65 55 8 81 1 36 | 12 22 78 35 57 96 36 3 27 29 52 80 2 79 8 76 93 54 1 24 48 32 94 14 64 +Card 174: 20 38 12 24 28 39 18 59 75 94 | 95 48 91 36 56 63 62 46 67 4 32 97 39 66 93 55 50 34 5 85 29 76 45 54 7 +Card 175: 26 96 12 74 65 57 51 18 83 75 | 26 89 74 83 65 12 58 88 92 22 8 39 18 51 34 96 75 44 94 35 30 90 69 57 23 +Card 176: 48 64 15 96 42 33 88 27 50 86 | 36 85 60 68 93 63 33 17 28 70 24 50 96 38 54 53 72 90 41 86 74 88 75 64 48 +Card 177: 66 27 35 76 89 90 31 26 20 95 | 51 94 62 77 31 5 16 20 30 86 75 42 23 11 69 24 87 76 27 60 80 46 43 57 90 +Card 178: 83 38 10 89 18 80 1 67 63 7 | 37 28 46 84 94 89 38 21 24 68 25 92 60 34 58 54 76 55 11 19 85 33 93 15 8 +Card 179: 59 82 88 8 21 16 55 2 56 45 | 2 26 73 81 90 5 13 55 21 82 69 8 22 99 36 68 53 88 86 56 16 7 45 87 28 +Card 180: 95 5 4 34 30 73 98 89 6 37 | 7 28 72 6 95 37 68 4 34 98 82 73 84 8 65 5 89 57 15 42 56 45 69 11 74 +Card 181: 85 69 79 50 37 34 11 84 5 89 | 4 35 99 48 21 97 93 25 8 37 47 79 34 16 76 26 55 67 50 75 63 15 58 84 5 +Card 182: 70 10 57 74 60 93 9 41 79 32 | 19 18 96 8 49 2 50 94 93 4 23 89 11 39 38 97 58 56 82 21 13 28 65 47 29 +Card 183: 53 70 11 25 1 37 32 4 78 45 | 23 54 83 35 11 41 1 47 18 60 36 71 10 64 95 49 69 32 45 46 61 9 4 52 25 +Card 184: 71 31 19 43 12 93 30 56 17 27 | 61 20 92 50 33 17 51 89 45 24 39 64 23 18 52 2 41 46 63 84 88 7 99 27 78 +Card 185: 44 55 78 43 18 33 69 81 82 9 | 39 57 42 79 76 67 58 1 26 63 54 82 70 22 66 55 15 38 74 96 46 53 51 28 99 +Card 186: 25 76 9 33 59 42 82 6 79 4 | 10 50 20 18 93 95 62 40 22 70 48 16 75 15 49 81 64 94 6 21 73 80 78 77 83 +Card 187: 43 33 83 89 36 31 86 22 13 14 | 3 78 63 34 8 38 23 16 81 80 54 1 95 92 60 24 82 49 44 68 62 46 66 97 28 +Card 188: 81 6 49 46 11 77 99 82 84 51 | 36 45 18 87 48 35 86 7 83 31 38 61 92 98 70 78 74 59 63 66 15 85 47 96 1 +Card 189: 50 43 3 38 20 80 40 70 82 74 | 29 55 1 2 45 97 59 49 60 79 88 90 94 57 12 24 47 61 5 52 95 75 63 48 32 +Card 190: 22 66 97 81 70 24 53 76 17 35 | 92 59 1 36 97 70 34 77 69 55 17 81 62 67 71 91 58 24 76 87 45 30 33 35 22 +Card 191: 20 65 9 10 98 71 60 83 51 34 | 68 51 10 26 20 4 56 24 34 9 65 83 60 55 5 27 8 43 71 98 14 21 32 48 64 +Card 192: 92 77 16 8 1 87 51 14 89 76 | 13 10 60 19 93 97 16 11 51 47 76 30 91 24 14 89 77 35 8 28 87 21 92 1 22 +Card 193: 53 24 36 45 60 18 35 25 12 28 | 98 29 92 35 52 99 12 45 74 18 28 30 70 68 55 24 25 77 81 36 72 20 53 50 60 +Card 194: 50 83 40 8 87 28 79 27 44 91 | 37 80 88 17 90 40 67 87 20 76 77 52 68 1 55 35 14 61 4 96 75 83 10 71 8 +Card 195: 6 41 29 40 96 49 9 55 51 18 | 69 30 77 83 47 52 59 55 70 10 92 19 85 11 86 42 53 38 35 90 51 46 80 91 84 +Card 196: 92 29 86 97 9 30 87 6 15 4 | 18 46 50 63 30 14 6 82 3 53 55 26 29 86 85 70 4 89 90 24 10 35 27 9 20 +Card 197: 80 1 81 94 98 75 58 9 19 10 | 26 37 57 58 22 1 19 94 10 87 70 5 95 40 53 81 89 93 8 80 86 9 36 75 98 +Card 198: 29 41 51 44 7 84 65 62 20 74 | 74 5 72 62 41 88 23 49 66 97 31 84 18 51 20 10 29 19 44 7 1 60 40 78 30 +Card 199: 20 2 3 95 63 60 10 81 87 90 | 60 54 3 61 38 77 42 32 62 82 90 35 9 81 2 20 87 63 8 65 95 19 30 10 85 +Card 200: 80 76 17 57 36 9 70 65 1 13 | 88 50 96 87 77 36 14 70 86 29 68 90 93 3 25 65 74 83 78 62 9 69 47 22 8 +Card 201: 19 43 79 93 31 72 66 7 18 55 | 72 20 71 43 57 19 53 83 47 35 37 67 13 31 74 81 76 18 44 55 93 97 26 84 11 +Card 202: 26 65 71 57 14 86 49 66 1 23 | 27 41 16 51 82 72 13 55 14 21 69 62 15 46 63 78 22 31 30 57 76 45 3 71 86 +Card 203: 53 43 69 4 76 74 73 11 34 88 | 46 68 63 19 55 64 88 51 33 15 17 57 53 42 76 66 80 34 11 69 73 96 59 74 16 +Card 204: 9 6 64 82 79 1 73 68 39 57 | 92 82 49 53 84 4 69 20 30 13 16 1 26 76 60 57 91 65 24 12 34 56 33 38 59 +Card 205: 45 6 76 94 78 35 95 20 85 90 | 89 94 28 15 48 87 56 32 40 88 21 33 51 53 54 67 64 9 17 78 6 57 12 98 95 +Card 206: 32 94 53 98 84 82 48 45 8 25 | 84 4 25 97 12 93 35 60 42 80 61 62 18 8 32 17 94 23 63 53 31 3 48 43 20 +Card 207: 40 18 52 70 55 29 49 43 15 20 | 38 39 78 70 35 81 34 29 51 55 17 43 52 64 16 21 69 27 47 88 2 99 18 54 3 +Card 208: 9 67 74 14 59 41 84 60 73 86 | 87 16 27 86 50 7 30 77 64 76 73 71 99 92 23 82 2 5 55 57 40 47 45 72 21 +Card 209: 45 50 11 39 28 93 77 92 41 18 | 32 6 56 34 15 87 48 64 41 30 3 46 42 21 44 72 59 29 25 77 83 66 5 12 11 +Card 210: 34 74 60 33 14 25 27 98 54 75 | 90 79 69 27 70 4 40 93 66 62 65 3 8 42 34 92 53 98 56 89 57 13 52 38 30 +Card 211: 20 21 98 93 33 65 13 48 81 53 | 19 82 78 95 77 54 89 61 58 74 39 43 1 64 73 11 72 7 32 9 17 46 8 84 86 +Card 212: 46 82 24 14 63 38 94 70 79 91 | 23 83 87 4 48 81 40 13 84 68 22 65 45 11 88 75 98 1 15 56 64 44 35 7 3 +Card 213: 79 84 12 86 58 10 11 24 32 26 | 52 94 65 29 89 7 76 80 31 21 78 37 66 69 13 41 93 73 96 16 92 44 62 3 95 diff --git a/2023/day4/p1/main.rs b/2023/day4/p1/main.rs new file mode 100644 index 0000000..31f6a8d --- /dev/null +++ b/2023/day4/p1/main.rs @@ -0,0 +1,41 @@ +use std::fs; + + +fn main() { + let file_path = "./input.text"; + + let contents = fs::read_to_string(file_path) + .unwrap(); + + let mut sum_of_points = 0; + for line in contents.lines() + { + let line_halves: Vec<&str> = line.split(" | ").collect(); + + let first_half: Vec<&str> = line_halves[0].split(": ").collect(); + + let winning_numbers: Vec<&str> = first_half[1].split(" ").filter(|num| !num.is_empty()).collect(); + + let my_numbers = line_halves[1].split(" ").filter(|num| !num.is_empty()); + + let mut points = 0; + for number in my_numbers + { + if winning_numbers.contains(&number) + { + if points == 0 + { + points = 1; + } + else + { + points *= 2; + } + } + } + + sum_of_points += points; + } + + println!("Sum of points on cards: {sum_of_points}"); +} diff --git a/2023/day4/p1/test.text b/2023/day4/p1/test.text new file mode 100644 index 0000000..71f208a --- /dev/null +++ b/2023/day4/p1/test.text @@ -0,0 +1,6 @@ +Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53 +Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 +Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1 +Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83 +Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36 +Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11 \ No newline at end of file diff --git a/2023/day4/p2/input.text b/2023/day4/p2/input.text new file mode 100644 index 0000000..81efe48 --- /dev/null +++ b/2023/day4/p2/input.text @@ -0,0 +1,213 @@ +Card 1: 69 61 27 58 89 52 81 94 40 51 | 43 40 52 90 37 97 89 80 69 42 51 70 94 58 10 73 21 29 61 63 57 79 81 27 35 +Card 2: 5 75 37 76 98 32 24 83 44 50 | 80 75 91 5 33 52 31 96 83 92 46 98 55 65 48 24 44 4 32 60 88 37 76 50 77 +Card 3: 37 39 43 53 47 20 50 56 78 65 | 80 56 32 78 72 97 40 77 17 50 87 99 36 93 63 19 39 59 44 52 23 75 9 51 43 +Card 4: 6 25 31 60 2 50 89 67 82 16 | 65 89 5 67 68 53 50 6 51 25 96 32 2 16 41 60 63 90 82 30 98 31 75 14 7 +Card 5: 43 39 98 45 33 87 36 23 61 66 | 93 61 4 21 47 32 94 99 45 23 87 64 92 43 33 5 83 16 98 44 39 77 66 18 36 +Card 6: 59 6 65 20 62 3 92 79 98 24 | 80 15 28 70 24 32 93 99 91 86 95 16 90 83 11 75 19 4 48 6 78 61 20 27 7 +Card 7: 49 54 25 44 79 68 13 60 1 43 | 16 18 4 82 99 23 80 46 79 55 14 1 32 13 54 84 37 44 20 68 25 60 27 49 43 +Card 8: 52 50 19 69 28 93 32 98 97 47 | 2 40 28 47 20 60 66 98 12 19 31 14 16 75 97 49 93 69 11 52 50 87 24 32 27 +Card 9: 47 44 94 43 75 49 77 24 93 45 | 94 47 30 43 24 77 44 31 66 75 45 54 92 49 84 53 20 11 17 16 86 93 50 85 76 +Card 10: 23 39 92 16 68 30 49 59 34 90 | 85 15 25 31 92 90 47 59 11 36 68 10 96 65 16 49 18 97 9 83 28 61 4 94 46 +Card 11: 21 37 14 89 46 31 64 90 43 45 | 63 29 14 23 7 28 13 86 83 16 19 24 78 54 47 51 58 77 71 40 56 62 20 89 39 +Card 12: 69 98 97 19 70 5 62 25 55 90 | 1 35 45 25 75 61 50 99 82 96 71 74 72 76 3 70 14 57 88 27 5 94 58 32 85 +Card 13: 24 51 65 64 29 37 86 60 41 94 | 40 13 88 85 46 59 90 55 8 72 56 93 6 71 52 87 31 91 20 5 83 36 86 43 96 +Card 14: 43 76 64 80 49 48 83 14 51 54 | 1 99 54 36 80 48 49 15 43 17 51 96 83 40 76 14 41 75 84 55 63 91 64 58 9 +Card 15: 9 33 75 53 48 76 25 83 28 24 | 1 10 69 28 76 87 71 52 26 44 66 92 75 55 7 40 93 20 12 91 30 33 46 39 31 +Card 16: 55 92 85 21 81 90 47 63 34 70 | 26 2 1 87 59 69 40 58 46 43 70 17 35 71 6 63 49 13 81 11 85 94 44 96 5 +Card 17: 21 42 95 24 35 53 39 14 18 4 | 76 23 5 79 22 20 36 69 38 77 40 37 32 89 49 15 59 44 51 25 74 34 54 16 28 +Card 18: 63 21 61 65 82 69 27 74 98 58 | 51 58 86 21 90 54 45 41 71 74 83 6 42 1 35 78 31 9 55 46 11 15 63 84 82 +Card 19: 44 41 24 51 74 20 97 31 83 39 | 17 24 2 54 73 28 13 55 49 79 42 62 58 8 95 23 86 70 76 41 26 4 80 25 11 +Card 20: 83 61 55 56 96 16 95 49 65 90 | 67 75 63 37 87 54 39 19 99 81 47 49 24 84 41 13 78 40 38 64 26 34 15 72 48 +Card 21: 23 89 57 54 90 82 2 8 65 80 | 78 14 21 39 45 42 1 80 99 20 52 11 31 50 68 82 59 4 96 55 6 46 88 38 34 +Card 22: 85 6 4 41 5 35 31 19 64 17 | 83 56 96 41 16 39 70 81 67 51 74 99 1 18 43 48 5 85 29 88 30 52 69 11 61 +Card 23: 72 88 38 82 33 10 75 44 70 53 | 7 71 56 96 19 89 30 67 21 22 48 45 80 86 39 61 4 44 74 28 23 40 46 72 78 +Card 24: 75 67 13 39 63 58 43 35 49 99 | 28 46 17 95 55 2 83 18 42 91 20 78 97 51 60 81 47 69 64 57 37 77 12 61 67 +Card 25: 87 44 62 66 82 20 7 21 51 32 | 54 97 46 1 95 14 26 47 94 25 49 30 84 12 5 73 48 89 45 53 28 74 93 88 13 +Card 26: 65 6 10 66 15 26 47 62 63 68 | 5 60 71 41 68 66 53 26 6 56 38 47 90 62 63 33 81 10 15 3 16 96 83 65 20 +Card 27: 7 95 47 35 58 87 21 68 80 37 | 94 24 39 74 43 78 69 54 10 32 84 99 41 75 6 86 11 66 56 62 16 44 5 59 65 +Card 28: 95 19 21 14 59 74 27 68 32 99 | 83 35 5 41 92 59 26 57 18 55 52 32 6 23 36 54 56 50 15 48 27 89 45 53 12 +Card 29: 1 8 93 94 72 89 13 37 58 49 | 35 62 88 26 94 50 31 87 72 78 85 1 44 49 22 5 20 91 98 13 77 93 60 48 52 +Card 30: 47 94 67 27 56 25 38 52 28 32 | 22 61 56 82 58 27 32 18 33 94 79 23 62 60 76 98 67 49 77 64 11 47 40 16 42 +Card 31: 61 68 80 67 41 6 52 33 22 91 | 54 10 72 91 31 33 95 43 39 68 81 22 63 67 32 61 27 73 66 75 36 79 6 59 80 +Card 32: 62 5 57 36 87 33 53 86 82 8 | 76 32 30 5 53 57 86 56 97 77 18 33 8 82 15 71 83 17 48 90 9 43 54 88 4 +Card 33: 79 25 27 11 17 23 76 38 15 26 | 83 80 37 36 77 24 20 55 16 59 81 7 19 1 18 91 42 29 22 2 41 27 6 50 92 +Card 34: 3 8 29 57 87 88 97 12 41 95 | 29 94 44 20 34 28 76 12 95 74 22 85 31 64 91 50 1 97 35 49 98 41 92 67 25 +Card 35: 43 79 50 20 6 76 25 14 66 89 | 93 72 50 67 38 89 13 87 46 54 36 52 20 57 56 17 3 22 43 63 14 84 15 29 16 +Card 36: 68 15 59 47 30 98 89 27 5 25 | 11 8 32 72 18 74 73 48 39 53 51 88 22 90 55 40 14 44 66 12 94 71 9 13 31 +Card 37: 11 48 72 90 12 86 34 32 51 7 | 52 80 36 46 74 64 44 27 11 47 61 84 55 28 77 26 58 54 3 5 17 60 89 16 72 +Card 38: 13 97 42 79 96 69 8 57 90 48 | 84 67 52 8 20 54 21 45 69 23 28 85 92 95 40 59 87 2 50 83 14 6 16 70 39 +Card 39: 87 67 8 38 15 20 96 30 45 97 | 36 28 43 35 9 27 14 70 29 1 40 56 60 81 63 48 53 44 31 75 49 85 64 39 69 +Card 40: 63 35 33 6 58 97 91 34 67 18 | 68 61 98 66 84 20 37 41 17 50 81 14 60 78 36 9 65 21 83 2 71 79 85 7 47 +Card 41: 75 97 62 6 92 69 53 20 45 5 | 5 53 56 69 84 97 75 62 39 18 22 64 6 92 70 41 45 20 17 63 7 9 54 29 21 +Card 42: 64 21 72 62 90 50 84 28 71 37 | 71 38 64 50 42 4 65 85 91 21 55 58 10 92 90 7 17 60 84 70 37 72 28 98 62 +Card 43: 58 28 84 32 92 18 48 73 86 5 | 43 32 33 35 84 50 64 6 21 52 92 58 29 95 11 18 28 79 48 77 5 86 60 73 10 +Card 44: 30 69 44 40 5 58 22 63 65 90 | 65 68 69 43 58 5 72 90 22 63 52 78 66 15 60 88 30 12 74 44 67 40 41 38 29 +Card 45: 69 53 87 59 27 10 16 90 52 35 | 83 4 87 89 11 30 45 70 52 13 35 92 90 79 6 68 71 86 16 97 26 72 39 96 53 +Card 46: 78 8 1 64 87 6 3 7 75 82 | 48 84 56 8 89 73 31 68 64 46 40 6 41 14 78 97 91 27 95 28 47 30 37 58 75 +Card 47: 58 24 13 97 18 50 89 9 14 81 | 97 24 54 16 14 32 78 62 50 5 18 42 20 99 15 58 13 89 96 72 81 75 29 9 86 +Card 48: 87 83 32 53 5 72 86 84 65 9 | 30 89 54 53 58 13 85 81 83 39 71 5 91 65 68 82 94 42 87 24 86 29 47 32 28 +Card 49: 38 4 66 35 19 56 78 90 81 65 | 60 16 82 68 7 49 15 32 3 22 48 11 38 53 83 45 54 23 5 81 78 34 63 27 65 +Card 50: 9 48 47 87 99 6 65 2 44 75 | 75 79 55 82 44 27 42 48 51 65 16 68 3 52 30 62 84 66 87 69 8 10 86 35 72 +Card 51: 28 24 85 63 96 30 88 29 5 50 | 71 61 30 90 65 96 41 50 82 68 39 10 81 29 48 26 80 97 28 24 27 88 38 5 63 +Card 52: 86 80 90 33 19 78 13 69 89 27 | 62 54 85 88 97 64 37 31 29 6 94 69 67 51 57 58 89 13 76 55 22 96 63 66 38 +Card 53: 75 5 78 44 10 77 3 89 39 4 | 41 61 76 56 75 85 7 22 19 51 5 87 53 10 79 24 39 94 26 57 1 35 83 32 34 +Card 54: 70 80 59 16 6 99 83 37 26 8 | 62 58 16 74 35 53 94 1 80 89 61 11 86 36 83 14 8 39 43 6 92 99 18 64 79 +Card 55: 41 39 43 58 60 65 74 76 11 46 | 58 42 60 59 13 16 83 55 37 25 32 96 22 79 69 2 89 3 21 71 35 67 95 19 45 +Card 56: 10 18 89 9 63 51 81 4 49 75 | 3 32 45 68 87 65 71 55 79 89 37 64 21 53 30 62 26 6 90 51 70 74 22 10 54 +Card 57: 27 58 75 7 80 71 45 46 26 55 | 67 76 91 16 69 82 24 48 46 87 28 20 75 36 86 8 51 42 9 84 3 43 27 34 70 +Card 58: 64 55 76 63 58 66 34 27 46 62 | 79 22 69 33 1 81 4 76 36 40 88 39 2 47 89 48 29 77 93 67 41 10 95 19 63 +Card 59: 62 1 42 32 48 12 94 36 33 86 | 71 41 46 96 12 55 10 38 15 43 1 60 67 2 30 89 37 98 19 18 69 25 50 20 77 +Card 60: 11 14 6 57 55 62 88 19 24 26 | 45 58 88 83 51 36 46 32 85 17 61 33 31 2 91 9 78 39 81 20 87 86 64 66 49 +Card 61: 9 28 27 33 53 71 38 63 55 60 | 26 77 83 57 75 50 3 68 31 52 24 94 40 18 8 80 70 5 25 72 47 44 45 89 19 +Card 62: 47 64 33 74 26 82 21 30 69 39 | 29 68 65 37 60 58 17 48 75 91 2 9 16 31 46 49 97 57 94 40 34 13 11 43 39 +Card 63: 1 16 10 67 73 48 66 78 55 32 | 31 54 78 79 42 34 81 55 37 63 29 73 90 48 11 77 67 14 46 19 16 66 89 53 32 +Card 64: 59 33 71 69 84 2 53 95 28 52 | 85 82 66 79 45 71 33 10 30 84 52 19 94 54 28 41 61 59 6 69 53 97 38 2 49 +Card 65: 17 46 40 23 93 76 45 2 43 32 | 17 32 23 2 52 7 15 77 20 39 46 64 99 59 98 89 43 40 93 4 45 11 72 76 13 +Card 66: 58 9 28 19 90 80 77 11 81 20 | 44 51 39 20 63 6 11 88 61 27 90 53 62 70 34 42 28 24 78 16 81 65 9 31 15 +Card 67: 88 42 78 9 26 43 54 95 8 40 | 58 54 10 43 60 36 40 42 95 63 4 88 82 50 38 26 8 99 31 74 13 46 91 61 44 +Card 68: 32 95 6 83 30 14 38 15 87 70 | 79 15 64 45 99 70 17 38 87 93 83 53 14 77 85 32 19 95 29 6 7 61 90 30 67 +Card 69: 76 15 92 22 48 46 42 39 84 32 | 51 26 1 9 2 73 17 94 6 62 92 77 32 90 43 48 81 22 88 58 78 46 79 98 15 +Card 70: 62 90 81 15 8 3 72 93 65 32 | 57 62 3 80 26 67 10 72 54 36 98 29 17 90 93 32 49 48 76 8 12 31 65 81 15 +Card 71: 74 46 75 14 56 20 83 28 35 61 | 57 61 75 59 54 55 56 32 71 4 18 60 72 94 39 86 30 50 48 41 7 14 77 73 85 +Card 72: 47 63 42 84 87 78 21 56 97 26 | 87 40 78 1 48 7 26 63 42 37 30 97 65 84 14 93 85 39 47 11 50 71 21 28 56 +Card 73: 20 56 88 38 50 74 76 69 63 17 | 73 47 87 89 98 18 33 14 3 78 72 39 77 97 74 80 81 51 88 59 46 2 70 69 20 +Card 74: 44 74 4 59 77 99 66 81 8 6 | 75 88 25 73 74 86 16 8 99 17 50 22 83 35 67 3 77 5 46 34 68 80 6 23 54 +Card 75: 58 25 36 26 80 12 88 51 98 71 | 71 66 77 83 51 61 23 98 33 53 18 75 43 20 26 92 70 90 25 94 86 12 34 36 22 +Card 76: 14 79 44 82 59 75 43 88 12 52 | 11 30 26 74 82 91 72 79 35 69 52 24 13 23 3 22 78 38 43 10 14 53 76 66 90 +Card 77: 65 79 38 39 3 18 89 51 9 41 | 5 87 13 45 86 85 72 7 92 22 36 69 67 82 40 73 83 15 34 59 68 57 31 84 71 +Card 78: 67 89 71 15 39 66 29 97 11 38 | 4 95 21 74 29 43 51 65 31 91 98 39 71 13 93 88 64 47 40 76 58 6 92 80 81 +Card 79: 8 60 27 44 15 52 91 99 35 47 | 97 1 35 81 53 79 16 23 52 77 11 56 2 85 21 96 46 83 5 37 49 93 13 76 69 +Card 80: 1 37 16 40 6 48 66 26 90 12 | 87 23 24 5 67 80 20 53 95 66 93 85 7 34 32 52 92 61 9 27 41 35 36 57 38 +Card 81: 72 39 83 5 69 43 73 92 88 78 | 77 74 68 78 9 75 50 65 8 14 35 96 64 80 58 6 4 46 57 61 66 85 48 40 34 +Card 82: 38 2 71 61 46 97 8 84 43 24 | 91 50 76 58 17 11 66 60 65 16 44 70 96 20 37 94 30 99 6 69 32 29 81 49 48 +Card 83: 50 89 48 66 96 97 28 5 12 76 | 89 93 79 68 16 48 44 42 28 41 83 50 97 96 76 82 15 57 10 66 5 12 74 38 4 +Card 84: 9 71 98 81 59 30 99 45 80 48 | 6 17 31 35 88 57 10 81 77 70 58 21 34 63 51 84 74 37 64 80 29 16 3 11 76 +Card 85: 36 86 69 83 56 51 19 67 65 10 | 35 3 55 38 90 59 82 2 32 10 17 36 52 69 83 65 13 92 97 99 48 30 87 68 70 +Card 86: 6 96 82 83 89 31 91 20 28 5 | 20 11 84 45 50 81 23 56 24 28 1 53 2 57 54 64 3 94 96 43 6 26 91 77 66 +Card 87: 84 22 38 2 94 23 76 64 29 42 | 13 99 48 23 62 82 38 91 31 88 14 43 66 94 36 64 49 85 26 97 71 39 22 68 60 +Card 88: 69 25 81 63 86 79 1 64 76 38 | 85 81 63 6 69 50 16 65 54 25 27 38 84 76 7 64 79 12 86 88 70 94 39 1 20 +Card 89: 7 43 74 93 60 24 33 53 97 35 | 62 51 93 86 81 71 63 2 13 99 66 83 97 37 10 77 55 27 73 92 67 19 33 88 96 +Card 90: 2 78 5 23 69 72 93 86 55 24 | 92 38 66 85 34 52 83 24 31 6 25 13 33 30 17 7 81 15 16 9 21 53 94 2 77 +Card 91: 34 21 58 13 99 32 61 65 49 30 | 50 73 18 84 99 53 21 61 94 22 26 93 30 68 34 65 58 72 77 32 49 11 13 39 9 +Card 92: 15 67 55 79 9 88 33 7 94 49 | 20 94 87 58 9 35 93 7 67 21 15 57 30 56 88 85 5 13 60 83 2 55 38 28 6 +Card 93: 16 11 80 5 33 23 96 21 56 94 | 1 37 85 94 72 42 66 16 10 70 86 77 33 21 55 11 6 45 96 29 90 14 80 48 64 +Card 94: 2 57 51 10 3 70 63 60 1 40 | 67 80 96 98 52 74 97 33 92 88 19 62 43 73 55 3 1 20 95 99 12 90 17 24 56 +Card 95: 80 18 73 50 2 3 83 65 33 26 | 7 78 28 4 2 19 14 29 61 81 17 38 57 89 11 20 5 12 13 10 24 96 75 25 55 +Card 96: 98 53 54 50 20 34 28 96 59 88 | 52 41 53 29 40 15 88 93 30 76 97 81 73 17 12 70 6 63 27 32 64 48 69 96 44 +Card 97: 66 82 79 74 75 71 29 32 96 50 | 62 46 76 30 21 50 98 17 32 75 87 96 41 42 79 73 45 92 51 91 78 35 27 72 74 +Card 98: 93 39 91 70 97 33 57 69 53 73 | 38 71 33 25 52 26 75 94 93 42 17 82 7 27 47 89 18 11 20 91 40 31 55 19 4 +Card 99: 93 31 61 29 77 60 66 92 3 10 | 55 63 56 4 61 33 60 85 45 48 78 27 25 36 42 93 20 67 49 21 7 83 65 13 71 +Card 100: 21 86 19 62 53 34 88 42 71 47 | 74 7 79 85 22 60 76 10 40 62 50 92 20 24 12 42 15 31 56 90 44 72 34 11 95 +Card 101: 8 68 64 72 98 60 56 69 57 25 | 24 5 95 77 89 58 39 63 80 48 53 66 38 61 31 3 43 1 16 71 52 82 19 14 51 +Card 102: 47 39 45 40 54 93 87 26 33 67 | 95 80 98 3 24 53 96 9 90 13 35 21 86 88 63 55 1 42 25 56 32 60 34 40 77 +Card 103: 64 18 52 28 82 54 31 49 66 44 | 4 78 40 73 32 99 33 6 29 46 11 25 47 36 14 97 79 61 63 50 55 26 30 58 77 +Card 104: 95 84 89 87 57 53 12 43 58 1 | 59 45 57 58 39 61 52 81 43 40 23 86 1 97 95 55 89 84 87 6 17 85 53 12 28 +Card 105: 98 81 56 52 37 26 46 39 88 36 | 4 34 88 32 5 73 98 26 39 77 93 42 62 82 41 81 56 1 12 33 46 36 14 52 37 +Card 106: 97 98 42 95 14 87 41 46 44 27 | 5 82 46 66 87 41 51 55 13 27 7 44 31 97 77 10 14 90 98 94 95 12 79 42 35 +Card 107: 15 30 60 32 25 73 77 63 85 81 | 16 86 56 41 20 51 25 52 73 40 74 32 15 61 99 34 60 85 77 30 5 27 63 35 81 +Card 108: 65 59 24 72 54 66 14 81 67 31 | 94 92 83 67 50 19 61 6 42 55 60 97 22 18 24 40 86 43 72 56 5 75 63 45 90 +Card 109: 90 87 3 17 80 96 36 93 34 79 | 51 11 29 96 13 66 70 99 72 67 64 42 37 30 55 98 35 12 15 84 5 10 57 19 49 +Card 110: 57 82 85 42 23 76 70 64 88 21 | 65 32 76 81 7 43 23 52 55 14 70 58 27 82 48 64 85 47 57 16 46 97 68 21 45 +Card 111: 50 62 66 33 93 43 56 70 77 35 | 94 79 19 16 35 41 78 32 91 4 14 3 13 48 63 36 75 98 64 69 27 96 77 51 74 +Card 112: 6 36 83 73 59 48 65 12 29 92 | 12 36 82 52 8 35 88 69 9 28 89 39 87 20 22 67 27 63 75 73 70 58 31 78 79 +Card 113: 25 10 29 67 87 32 54 92 62 43 | 65 19 67 75 79 29 8 73 62 97 82 87 25 18 32 93 49 5 66 27 68 42 43 11 46 +Card 114: 29 44 96 86 64 37 4 71 94 98 | 5 27 55 76 33 59 68 77 3 96 15 1 46 20 35 61 53 83 78 69 99 97 34 30 25 +Card 115: 32 90 91 88 39 66 37 35 12 21 | 85 82 71 37 87 22 72 17 35 9 58 95 64 12 33 90 68 66 15 43 4 7 91 8 84 +Card 116: 75 50 66 77 51 36 98 23 97 28 | 4 66 44 20 35 76 51 83 58 89 91 87 75 27 10 47 1 60 97 90 77 45 63 59 36 +Card 117: 85 44 56 82 39 64 30 88 79 20 | 71 88 53 27 36 85 13 11 38 91 77 19 3 99 23 73 39 44 24 45 32 15 58 79 56 +Card 118: 80 41 82 32 1 52 91 40 66 11 | 72 3 4 29 77 87 36 40 16 46 66 30 92 76 98 49 85 7 32 28 60 86 52 95 83 +Card 119: 50 66 77 26 2 49 9 25 58 81 | 80 49 50 55 16 56 20 42 31 99 69 26 28 85 66 65 70 90 84 53 40 19 60 12 38 +Card 120: 48 9 95 85 16 70 81 61 57 92 | 2 58 66 10 34 54 7 94 16 14 25 74 92 49 88 13 57 26 99 97 70 75 65 19 17 +Card 121: 50 76 20 25 53 17 2 78 85 86 | 14 40 78 89 93 48 1 28 11 4 54 71 5 69 85 61 38 94 66 64 98 95 30 67 23 +Card 122: 62 92 40 16 25 82 64 87 52 53 | 5 19 25 48 38 42 1 99 51 79 2 78 75 57 81 56 70 47 59 91 90 6 9 24 15 +Card 123: 50 91 29 69 41 73 44 51 13 26 | 66 55 22 6 17 71 1 3 67 24 88 79 65 64 60 34 7 90 78 72 28 83 82 74 10 +Card 124: 61 77 51 39 73 4 6 25 53 91 | 54 88 26 11 3 79 10 86 23 49 66 21 47 85 5 2 98 7 1 60 55 13 94 34 62 +Card 125: 31 67 93 63 21 28 12 85 39 57 | 69 46 22 59 55 75 11 97 70 1 94 14 81 96 79 44 18 36 85 34 56 48 30 72 15 +Card 126: 31 89 5 98 63 36 40 48 91 12 | 91 42 6 47 51 94 48 83 5 77 98 8 11 50 29 9 36 54 89 40 12 63 31 34 73 +Card 127: 41 88 97 87 13 80 74 49 24 6 | 43 66 62 47 36 87 6 88 24 49 96 56 25 79 8 76 23 97 41 42 80 89 13 73 74 +Card 128: 7 6 3 99 56 40 80 27 23 43 | 34 64 97 67 3 78 69 43 57 98 96 4 6 94 62 48 23 68 8 1 58 73 75 65 16 +Card 129: 46 80 39 32 35 41 61 93 57 47 | 40 63 93 89 61 4 45 46 25 96 80 39 35 14 62 95 49 32 47 2 41 99 57 82 44 +Card 130: 90 10 79 84 88 76 59 18 62 11 | 79 11 53 97 92 5 88 52 23 60 62 64 86 84 14 20 98 91 10 28 24 29 87 65 3 +Card 131: 95 50 11 76 61 4 2 8 42 47 | 40 15 46 61 8 2 29 97 65 50 19 83 76 95 59 82 48 57 43 72 42 25 31 47 53 +Card 132: 49 86 99 81 13 98 69 32 89 18 | 89 84 65 58 32 15 96 49 1 18 22 13 98 99 6 81 46 50 88 78 3 11 69 74 86 +Card 133: 18 56 75 7 48 40 38 22 10 90 | 10 42 61 18 91 38 12 67 72 54 51 22 86 77 81 87 75 34 89 97 35 6 96 7 62 +Card 134: 67 66 99 61 98 32 6 82 86 9 | 12 8 33 87 82 66 98 78 68 24 59 80 6 44 32 49 9 2 97 65 86 71 99 61 67 +Card 135: 24 59 92 68 44 20 30 8 40 77 | 28 72 51 38 58 40 30 24 21 77 92 82 59 18 50 7 19 44 20 68 91 8 32 88 94 +Card 136: 27 10 70 96 29 69 37 63 86 65 | 28 27 8 34 29 82 78 56 22 30 3 19 63 88 67 74 75 4 91 41 35 65 7 14 66 +Card 137: 74 70 86 34 89 37 73 23 29 85 | 16 65 58 88 8 5 11 26 39 91 51 31 19 78 92 87 36 34 80 94 42 81 38 40 93 +Card 138: 71 35 5 13 69 8 88 11 76 31 | 69 42 5 59 76 54 37 11 39 9 12 73 66 13 71 89 56 26 28 77 2 31 1 4 57 +Card 139: 10 50 78 91 55 61 81 19 44 59 | 97 98 39 52 56 28 94 24 3 54 45 82 14 17 5 16 27 99 37 38 26 31 53 9 35 +Card 140: 17 93 15 73 45 20 43 50 2 52 | 64 21 15 57 77 90 2 61 22 8 91 39 93 82 62 5 47 30 41 80 58 1 17 25 48 +Card 141: 52 66 4 8 87 11 14 76 23 24 | 3 55 29 16 26 61 12 43 89 15 56 24 5 36 85 62 90 75 65 71 53 45 38 50 54 +Card 142: 57 35 91 73 66 67 64 63 92 18 | 96 58 44 37 19 41 72 54 52 31 88 20 45 68 42 21 2 59 62 53 70 63 77 57 69 +Card 143: 88 70 69 13 18 97 64 89 40 29 | 74 98 30 5 85 12 38 62 66 33 36 17 71 9 97 22 47 79 39 60 89 13 83 77 8 +Card 144: 14 35 52 8 75 43 62 33 36 70 | 13 95 71 64 6 48 74 84 61 24 89 77 17 58 87 75 76 43 28 54 3 83 99 67 12 +Card 145: 53 88 65 42 72 92 43 14 3 90 | 21 19 33 59 84 61 96 41 20 31 88 71 38 72 79 48 58 55 62 36 23 11 30 18 70 +Card 146: 68 28 58 96 42 32 22 90 19 47 | 84 25 39 96 67 26 29 24 9 62 1 14 46 11 77 81 61 82 60 80 78 52 31 98 49 +Card 147: 81 85 76 67 4 63 25 97 57 27 | 2 26 43 9 56 59 29 10 13 45 35 60 86 65 15 46 19 5 79 8 44 1 6 20 21 +Card 148: 90 41 37 66 94 87 84 14 9 29 | 94 47 5 10 23 38 61 87 55 22 75 97 37 29 30 9 18 84 69 41 11 73 43 45 14 +Card 149: 84 30 17 21 47 26 81 68 57 40 | 86 78 70 5 54 40 34 38 47 72 62 56 53 7 10 37 73 92 46 61 41 74 68 23 63 +Card 150: 83 21 33 53 37 57 66 29 41 6 | 20 61 75 89 59 60 41 83 21 29 30 57 66 58 37 76 90 96 53 69 33 17 12 95 6 +Card 151: 12 5 52 36 3 29 69 6 82 27 | 82 12 27 44 50 15 76 28 29 52 57 36 73 3 34 5 94 37 6 92 84 9 10 98 69 +Card 152: 82 62 80 30 37 68 41 89 12 5 | 60 32 64 57 41 74 89 16 72 20 26 6 91 18 52 68 62 55 5 30 82 1 37 80 12 +Card 153: 97 28 55 92 70 83 58 44 67 40 | 24 58 55 88 92 40 6 83 12 70 10 22 44 76 82 97 4 98 65 28 5 32 7 67 74 +Card 154: 31 50 70 87 43 26 55 30 14 54 | 43 72 90 20 10 13 91 54 75 39 26 70 17 87 22 60 29 1 27 69 14 31 50 67 55 +Card 155: 21 4 25 52 3 16 98 43 72 81 | 87 4 21 43 90 67 39 36 13 64 6 25 29 16 83 84 5 98 9 81 78 1 74 12 96 +Card 156: 77 46 21 67 59 78 63 30 45 48 | 48 35 17 62 44 25 34 67 23 13 63 81 99 29 93 84 73 96 86 90 88 30 60 85 21 +Card 157: 43 32 99 39 58 3 38 81 79 41 | 79 41 34 8 99 80 70 43 51 38 29 68 32 83 58 2 6 36 63 95 81 67 3 28 10 +Card 158: 43 68 57 98 30 58 47 40 12 93 | 91 62 48 6 52 16 72 34 28 85 81 94 26 4 99 30 71 44 80 65 40 60 58 18 49 +Card 159: 62 30 18 57 61 68 65 98 10 56 | 98 32 29 1 15 77 55 10 13 30 80 93 38 86 70 99 97 19 85 33 17 21 48 47 89 +Card 160: 30 47 79 28 57 77 73 75 35 40 | 98 25 96 11 15 34 19 35 6 38 1 91 29 57 61 22 69 12 40 21 41 17 27 39 56 +Card 161: 62 58 10 14 73 95 77 97 47 70 | 15 46 1 36 3 66 27 77 49 45 94 65 23 61 76 8 91 42 82 13 85 67 92 68 53 +Card 162: 47 24 44 73 3 10 30 98 5 29 | 75 99 37 41 60 43 13 67 74 23 82 40 35 64 77 25 4 9 58 56 8 7 85 70 66 +Card 163: 10 17 99 41 6 14 81 23 5 84 | 95 11 99 62 53 23 8 73 48 42 96 47 39 94 56 30 58 63 22 66 33 26 35 5 43 +Card 164: 71 32 31 15 73 3 70 91 61 18 | 3 16 77 70 33 94 62 40 88 32 90 98 66 49 86 68 95 7 53 97 96 28 4 75 35 +Card 165: 61 74 1 76 17 22 19 83 5 96 | 83 5 47 29 52 40 94 32 70 95 67 84 56 31 18 62 42 9 53 36 57 48 64 15 85 +Card 166: 84 96 57 6 48 13 42 12 19 99 | 67 29 25 81 77 69 63 56 8 27 80 62 94 30 78 10 45 49 20 95 50 66 61 6 24 +Card 167: 21 41 29 39 24 98 68 40 7 78 | 44 19 53 13 17 4 2 64 87 60 1 51 10 35 94 52 25 75 92 95 80 67 82 42 86 +Card 168: 18 72 92 63 3 38 82 65 85 61 | 53 14 92 63 74 75 97 56 85 82 30 4 42 34 18 61 72 65 20 47 43 3 38 39 40 +Card 169: 98 91 13 27 52 51 36 82 80 78 | 78 42 51 62 36 38 4 95 82 17 91 27 12 98 76 13 84 52 80 32 39 50 48 19 2 +Card 170: 94 67 3 32 73 84 11 47 23 90 | 94 84 66 73 32 31 23 18 93 29 58 81 95 16 46 53 89 4 11 44 49 67 90 82 40 +Card 171: 2 55 5 19 59 73 29 65 12 23 | 33 75 5 53 90 95 68 73 29 71 11 45 72 54 59 12 55 85 56 19 17 24 8 92 2 +Card 172: 74 43 65 15 59 37 11 83 20 85 | 59 30 36 97 78 65 88 20 96 11 51 22 93 63 94 28 3 90 68 95 73 43 13 74 85 +Card 173: 53 46 64 33 65 55 8 81 1 36 | 12 22 78 35 57 96 36 3 27 29 52 80 2 79 8 76 93 54 1 24 48 32 94 14 64 +Card 174: 20 38 12 24 28 39 18 59 75 94 | 95 48 91 36 56 63 62 46 67 4 32 97 39 66 93 55 50 34 5 85 29 76 45 54 7 +Card 175: 26 96 12 74 65 57 51 18 83 75 | 26 89 74 83 65 12 58 88 92 22 8 39 18 51 34 96 75 44 94 35 30 90 69 57 23 +Card 176: 48 64 15 96 42 33 88 27 50 86 | 36 85 60 68 93 63 33 17 28 70 24 50 96 38 54 53 72 90 41 86 74 88 75 64 48 +Card 177: 66 27 35 76 89 90 31 26 20 95 | 51 94 62 77 31 5 16 20 30 86 75 42 23 11 69 24 87 76 27 60 80 46 43 57 90 +Card 178: 83 38 10 89 18 80 1 67 63 7 | 37 28 46 84 94 89 38 21 24 68 25 92 60 34 58 54 76 55 11 19 85 33 93 15 8 +Card 179: 59 82 88 8 21 16 55 2 56 45 | 2 26 73 81 90 5 13 55 21 82 69 8 22 99 36 68 53 88 86 56 16 7 45 87 28 +Card 180: 95 5 4 34 30 73 98 89 6 37 | 7 28 72 6 95 37 68 4 34 98 82 73 84 8 65 5 89 57 15 42 56 45 69 11 74 +Card 181: 85 69 79 50 37 34 11 84 5 89 | 4 35 99 48 21 97 93 25 8 37 47 79 34 16 76 26 55 67 50 75 63 15 58 84 5 +Card 182: 70 10 57 74 60 93 9 41 79 32 | 19 18 96 8 49 2 50 94 93 4 23 89 11 39 38 97 58 56 82 21 13 28 65 47 29 +Card 183: 53 70 11 25 1 37 32 4 78 45 | 23 54 83 35 11 41 1 47 18 60 36 71 10 64 95 49 69 32 45 46 61 9 4 52 25 +Card 184: 71 31 19 43 12 93 30 56 17 27 | 61 20 92 50 33 17 51 89 45 24 39 64 23 18 52 2 41 46 63 84 88 7 99 27 78 +Card 185: 44 55 78 43 18 33 69 81 82 9 | 39 57 42 79 76 67 58 1 26 63 54 82 70 22 66 55 15 38 74 96 46 53 51 28 99 +Card 186: 25 76 9 33 59 42 82 6 79 4 | 10 50 20 18 93 95 62 40 22 70 48 16 75 15 49 81 64 94 6 21 73 80 78 77 83 +Card 187: 43 33 83 89 36 31 86 22 13 14 | 3 78 63 34 8 38 23 16 81 80 54 1 95 92 60 24 82 49 44 68 62 46 66 97 28 +Card 188: 81 6 49 46 11 77 99 82 84 51 | 36 45 18 87 48 35 86 7 83 31 38 61 92 98 70 78 74 59 63 66 15 85 47 96 1 +Card 189: 50 43 3 38 20 80 40 70 82 74 | 29 55 1 2 45 97 59 49 60 79 88 90 94 57 12 24 47 61 5 52 95 75 63 48 32 +Card 190: 22 66 97 81 70 24 53 76 17 35 | 92 59 1 36 97 70 34 77 69 55 17 81 62 67 71 91 58 24 76 87 45 30 33 35 22 +Card 191: 20 65 9 10 98 71 60 83 51 34 | 68 51 10 26 20 4 56 24 34 9 65 83 60 55 5 27 8 43 71 98 14 21 32 48 64 +Card 192: 92 77 16 8 1 87 51 14 89 76 | 13 10 60 19 93 97 16 11 51 47 76 30 91 24 14 89 77 35 8 28 87 21 92 1 22 +Card 193: 53 24 36 45 60 18 35 25 12 28 | 98 29 92 35 52 99 12 45 74 18 28 30 70 68 55 24 25 77 81 36 72 20 53 50 60 +Card 194: 50 83 40 8 87 28 79 27 44 91 | 37 80 88 17 90 40 67 87 20 76 77 52 68 1 55 35 14 61 4 96 75 83 10 71 8 +Card 195: 6 41 29 40 96 49 9 55 51 18 | 69 30 77 83 47 52 59 55 70 10 92 19 85 11 86 42 53 38 35 90 51 46 80 91 84 +Card 196: 92 29 86 97 9 30 87 6 15 4 | 18 46 50 63 30 14 6 82 3 53 55 26 29 86 85 70 4 89 90 24 10 35 27 9 20 +Card 197: 80 1 81 94 98 75 58 9 19 10 | 26 37 57 58 22 1 19 94 10 87 70 5 95 40 53 81 89 93 8 80 86 9 36 75 98 +Card 198: 29 41 51 44 7 84 65 62 20 74 | 74 5 72 62 41 88 23 49 66 97 31 84 18 51 20 10 29 19 44 7 1 60 40 78 30 +Card 199: 20 2 3 95 63 60 10 81 87 90 | 60 54 3 61 38 77 42 32 62 82 90 35 9 81 2 20 87 63 8 65 95 19 30 10 85 +Card 200: 80 76 17 57 36 9 70 65 1 13 | 88 50 96 87 77 36 14 70 86 29 68 90 93 3 25 65 74 83 78 62 9 69 47 22 8 +Card 201: 19 43 79 93 31 72 66 7 18 55 | 72 20 71 43 57 19 53 83 47 35 37 67 13 31 74 81 76 18 44 55 93 97 26 84 11 +Card 202: 26 65 71 57 14 86 49 66 1 23 | 27 41 16 51 82 72 13 55 14 21 69 62 15 46 63 78 22 31 30 57 76 45 3 71 86 +Card 203: 53 43 69 4 76 74 73 11 34 88 | 46 68 63 19 55 64 88 51 33 15 17 57 53 42 76 66 80 34 11 69 73 96 59 74 16 +Card 204: 9 6 64 82 79 1 73 68 39 57 | 92 82 49 53 84 4 69 20 30 13 16 1 26 76 60 57 91 65 24 12 34 56 33 38 59 +Card 205: 45 6 76 94 78 35 95 20 85 90 | 89 94 28 15 48 87 56 32 40 88 21 33 51 53 54 67 64 9 17 78 6 57 12 98 95 +Card 206: 32 94 53 98 84 82 48 45 8 25 | 84 4 25 97 12 93 35 60 42 80 61 62 18 8 32 17 94 23 63 53 31 3 48 43 20 +Card 207: 40 18 52 70 55 29 49 43 15 20 | 38 39 78 70 35 81 34 29 51 55 17 43 52 64 16 21 69 27 47 88 2 99 18 54 3 +Card 208: 9 67 74 14 59 41 84 60 73 86 | 87 16 27 86 50 7 30 77 64 76 73 71 99 92 23 82 2 5 55 57 40 47 45 72 21 +Card 209: 45 50 11 39 28 93 77 92 41 18 | 32 6 56 34 15 87 48 64 41 30 3 46 42 21 44 72 59 29 25 77 83 66 5 12 11 +Card 210: 34 74 60 33 14 25 27 98 54 75 | 90 79 69 27 70 4 40 93 66 62 65 3 8 42 34 92 53 98 56 89 57 13 52 38 30 +Card 211: 20 21 98 93 33 65 13 48 81 53 | 19 82 78 95 77 54 89 61 58 74 39 43 1 64 73 11 72 7 32 9 17 46 8 84 86 +Card 212: 46 82 24 14 63 38 94 70 79 91 | 23 83 87 4 48 81 40 13 84 68 22 65 45 11 88 75 98 1 15 56 64 44 35 7 3 +Card 213: 79 84 12 86 58 10 11 24 32 26 | 52 94 65 29 89 7 76 80 31 21 78 37 66 69 13 41 93 73 96 16 92 44 62 3 95 diff --git a/2023/day4/p2/main.rs b/2023/day4/p2/main.rs new file mode 100644 index 0000000..04ca556 --- /dev/null +++ b/2023/day4/p2/main.rs @@ -0,0 +1,65 @@ +use std::{fs, vec}; + +const FILE_PATH: &str = "./input.text"; + +fn process_line(line: &str) -> i32 +{ + let mut cards_won = 0; + + // Line processing + let line_halves: Vec<&str> = line.split(" | ").collect(); + + let first_half: Vec<&str> = line_halves[0].split(": ").collect(); + + let winning_numbers: Vec<&str> = first_half[1].split(" ").filter(|num| !num.is_empty()).collect(); + + let my_numbers = line_halves[1].split(" ").filter(|num| !num.is_empty()); + + for number in my_numbers + { + if winning_numbers.contains(&number) + { + cards_won += 1; + } + } + + return cards_won; +} + +fn main() { + let contents = fs::read_to_string(FILE_PATH) + .unwrap(); + + let lines: Vec<&str> = contents.lines().collect(); + + let mut cards_won_sum: i64 = 0; + let mut card_values: Vec<(usize, i32)> = Vec::new(); + + for index in 0..lines.len() + { + let mut temp_vec = vec![(index, process_line(lines[index]))]; + card_values.append(&mut temp_vec); + + } + + let mut cards_won: Vec<(usize, i32)> = card_values.clone(); + + while !cards_won.is_empty() + { + let mut temp_cards_won: Vec<(usize, i32)> = Vec::new(); + for (index, cards_won_value) in cards_won.clone() + { + cards_won_sum += 1; + for i in (index + 1)..(index + 1 + cards_won_value as usize) + { + let mut temp_vec: Vec<(usize, i32)> = vec![(i, card_values[i].1)]; + temp_cards_won.append(&mut temp_vec); + } + } + + cards_won = temp_cards_won; + } + + + println!("Total cards won: {cards_won_sum}"); +} \ No newline at end of file diff --git a/2023/day4/p2/test.text b/2023/day4/p2/test.text new file mode 100644 index 0000000..71f208a --- /dev/null +++ b/2023/day4/p2/test.text @@ -0,0 +1,6 @@ +Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53 +Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 +Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1 +Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83 +Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36 +Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11 \ No newline at end of file diff --git a/2023/day5/p1/input.text b/2023/day5/p1/input.text new file mode 100644 index 0000000..c88a111 --- /dev/null +++ b/2023/day5/p1/input.text @@ -0,0 +1,243 @@ +seeds: 1514493331 295250933 3793791524 105394212 828589016 654882197 658370118 49359719 4055197159 59237418 314462259 268880047 2249227634 74967914 2370414906 38444198 3291001718 85800943 2102534948 5923540 + +seed-to-soil map: +3352941879 1247490906 129850502 +1738919961 2189748071 56658550 +1795578511 292133467 518088747 +1519757661 1666834550 130335907 +1650093568 133993362 88826393 +2813914030 2262539545 40894545 +2698412916 2661705133 115501114 +2854808575 810222214 437268692 +410530961 1545057218 121777332 +0 242661076 10731898 +532308293 2303434090 61476099 +3292077267 1797170457 2282798 +2313667258 0 133993362 +2447660620 2410952837 250752296 +3294360065 253392974 38740493 +10731898 1377341408 167715810 +1457582089 2364910189 46042648 +593784392 3009289500 824592362 +3333100558 222819755 19841321 +1418376754 1799453255 39205335 +1503624737 2246406621 16132924 +178447708 2777206247 232083253 +3482792381 1838658590 351089481 + +soil-to-fertilizer map: +3513795976 4258851234 36116062 +3393453635 4148223693 110627541 +3504081176 3494735450 6350258 +2671742993 3596285367 235915393 +991290653 256764866 25867175 +2907658386 3330719253 68855819 +3336496635 4091266693 56957000 +3161141476 2536943456 80523019 +1961696534 304660310 29551079 +812996514 1560772632 178294139 +1562163347 2321959023 78904062 +31289107 1039870587 339682886 +1520029818 1928417376 42133529 +3510431434 3832200760 3364542 +3549912038 3272523584 58195669 +0 149071717 31289107 +3608107707 3501085708 5732766 +503523937 1739066771 189350605 +3071674583 3506818474 89466893 +3241664495 3996434553 94832140 +1708133363 454333361 253563171 +3813493721 3097084118 175439466 +1991247613 1970550905 351408118 +3613840473 2897430870 199653248 +2536943456 2762631333 134799537 +1641067409 244319429 12445437 +3994753216 3913095788 83338765 +2976514205 3399575072 95160378 +1354883134 0 143118415 +1349131883 2400863085 5751251 +1498001549 282632041 22028269 +2342655731 180360824 63958605 +370971993 1379553473 126598642 +4149802438 2617466475 145164858 +1017157828 707896532 331974055 +692874542 334211389 120121972 +497570635 143118415 5953302 +3988933187 3907275759 5820029 +4078091981 3835565302 71710457 +1653512846 1506152115 54620517 + +fertilizer-to-water map: +3053686523 2028998994 1241280773 +1492748555 1562401968 269616514 +554432178 1000324407 562077561 +2944878746 3270279767 108807777 +2501520804 3379087544 52288887 +1762365069 20686928 69653413 +2028998994 3431376431 472521810 +1431309984 814973200 3653900 +409832614 0 20686928 +430519542 818627100 123912636 +1116509739 500172955 314800245 +2553809691 3903898241 391069055 +0 90340341 409832614 +1434963884 942539736 57784671 + +water-to-light map: +2774754469 1598606098 15160294 +3832622498 1469118874 129487224 +4125818569 3997047227 169148727 +1108418694 1130695768 196125912 +637654660 517892123 26551592 +2519230072 3399515763 135968347 +2751000257 3126996880 23754212 +861800165 884077239 88532605 +1469118874 2566660966 63929427 +2789914763 3150751092 63425583 +2853340346 2561960449 4700517 +1692681911 3397592997 1922766 +2858040863 1773257241 287341147 +2655198419 2851614649 15098309 +950332770 972609844 158085924 +591049922 471287385 46604738 +3482333989 3849276196 108901632 +1694604677 1613766392 159490849 +3591235621 3958177828 38869399 +3630105020 4166195954 128771342 +3205039781 3535484110 277294208 +2706794606 2060598388 44205651 +386607659 544443715 110595292 +3962109722 2540862463 21097986 +697311924 0 92263281 +558450415 404456802 11447837 +2409200012 3214176675 110030060 +569898252 862925569 21151670 +1354525884 415904639 55382746 +789575205 790700609 72224960 +3832262624 2690248164 359874 +163757080 181606223 222850579 +1533048301 2967363270 159633610 +497202951 784452458 6248151 +2670296728 3812778318 36497878 +3145382010 2630590393 59657771 +1854095526 2104804039 436058424 +0 655039007 74414138 +2390804262 2690608038 18395750 +1304544606 1326821680 49981278 +3758876362 3324206735 73386262 +664206252 1376802958 33105672 +74414138 92263281 89342942 +3983207708 2709003788 142610861 +503451102 729453145 54999313 +2290153950 2866712958 100650312 + +light-to-temperature map: +2054128675 422374783 216418447 +3729049939 3132111492 565917357 +524183620 1261361039 34450583 +723901655 638793230 74616934 +304496246 795175951 115896188 +1128506994 1008723417 50927515 +958650763 2074746732 3056214 +0 1224918384 36442655 +558634203 1059650932 165267452 +2052385426 713410164 1743249 +833053864 1953862956 120883776 +36442655 715153413 80022538 +1455705971 1506174459 386316618 +1842022589 1295811622 210362837 +2270547122 2077802946 24477429 +116465193 2102280375 188031053 +1179434509 945607414 63116003 +798518589 911072139 34535275 +3373647615 3893335786 195498774 +3696979816 3698028849 32070123 +1242550512 1892491077 43410067 +3051130577 2566857633 322517038 +3002478931 3844684140 48651646 +2311039190 3730098972 114585168 +2425624358 2311039190 187630064 +2819387158 2889374671 183091773 +1285960579 103791186 85466201 +1371426780 338095592 84279191 +1110545182 1935901144 17961812 +953937640 2290311428 4713123 +420392434 0 103791186 +961706977 189257387 148838205 +3637334768 3072466444 59645048 +3569146389 2498669254 68188379 +2613254422 4088834560 206132736 + +temperature-to-humidity map: +2032423062 2486277941 26281270 +333062067 2316624216 6051173 +1716048249 1385455997 91409968 +460397469 2512559211 69041956 +25538975 668468772 15388105 +2090913379 324344034 71221218 +2804805674 3018690414 130533369 +529439425 908821722 476634275 +1106765273 448560048 219908724 +2162134597 1476865965 445565302 +0 395565252 25538975 +4004204691 4019550481 43244121 +2058704332 0 32209047 +1516375281 2116951248 199672968 +3888833667 2764269134 115371024 +40927080 32209047 292134987 +1490276549 2581601167 26098732 +1360818538 2322675389 129458011 +1006073700 2043715496 73235752 +1079309452 421104227 27455821 +1807458217 683856877 224964845 +339113240 1922431267 121284229 +4155917040 2879640158 139050256 +2764269134 4171262830 40536540 +4047448812 4062794602 108468228 +2935339043 3149223783 870326698 +1326673997 2452133400 34144541 +3805665741 4211799370 83167926 + +humidity-to-location map: +3928575650 3147563455 98804874 +2357899446 2418187254 26586982 +449562184 2261875136 59054833 +308294839 60287808 141267345 +1872062279 1591999301 10857495 +1227084719 574109504 259895254 +1980177059 1765508840 13399403 +1162615704 1941046629 64469015 +2384486428 2654234915 114059261 +702311863 1515542756 40659242 +1993576462 2005515644 256359492 +3047301127 3246368329 27789688 +650396000 1713592977 51915863 +3701335066 3862068622 181049310 +1122863338 1673840611 39752366 +3075090815 4174917460 120049836 +3882384376 2778717800 46191274 +1626219043 201555153 245843236 +4027380524 3325898523 267586772 +3417979817 4043117932 13866284 +3281454033 2925002624 18592540 +110359150 1556201998 35797303 +2558833497 2444774236 209460679 +508617017 834004758 141778983 +1574315753 975783741 51903290 +2249935954 1027687031 107963492 +0 463750354 110359150 +2778717800 3593485295 268583327 +3195140651 2824909074 86313382 +3445626269 2943595164 203968291 +3324037823 4080975466 93941994 +742971105 1135650523 379892233 +146156453 1778908243 39038597 +3300046573 4056984216 23991250 +1503331938 1602856796 70983815 +185195050 1817946840 123099789 +3649594560 3274158017 21920411 +1486979973 447398389 16351965 +3671514971 3296078428 29820095 +2498545689 0 60287808 +3431846101 2911222456 13780168 +1882919774 2320929969 97257285 \ No newline at end of file diff --git a/2023/day5/p1/main.go b/2023/day5/p1/main.go new file mode 100644 index 0000000..90f6e06 --- /dev/null +++ b/2023/day5/p1/main.go @@ -0,0 +1,98 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strconv" + "strings" +) + +type ConversionRange struct { + source_start int + source_end int + target_start int + target_end int + translate int +} + +func convert(c *ConversionRange, num int) int { + if num >= c.source_start && num <= c.source_end { + return num + c.translate + } else { + return -1 + } +} + +func print(c ConversionRange) { + fmt.Println() +} + +func main() { + file, _ := os.Open("./test.text") + defer file.Close() + + scanner := bufio.NewScanner(file) + var seed_to_soil []*ConversionRange + + // Parse file + index := 0 + s_to_s_mapping := false + for scanner.Scan() { + line := scanner.Text() + + // Get starting seeds + + if index == 0 { + seeds_list := strings.Split(line, ": ")[1] + seeds_value_list := strings.Split(seeds_list, " ") + + var seeds []int + + for _, seed := range seeds_value_list { + seed_value, _ := strconv.Atoi(seed) + seeds = append(seeds, seed_value) + } + + fmt.Println("Seeds: ", seeds) + } + + if line == "seed-to-soil map:" { + s_to_s_mapping = true + continue + } + + if s_to_s_mapping { + if line == "" { + s_to_s_mapping = false + for _, r := range seed_to_soil { + print(r) + } + continue + } else { + var r_values []int + range_strings := strings.Split(line, " ") + for _, r := range range_strings { + r_value, _ := strconv.Atoi(r) + r_values = append(r_values, r_value) + } + + var temp *ConversionRange + temp = new(ConversionRange) + + temp.target_start = r_values[0] + temp.source_start = r_values[1] + length := r_values[2] + + temp.target_end = temp.target_start + length + temp.source_end = temp.source_start + length + temp.translate = temp.target_start - temp.target_end + + seed_to_soil = append(seed_to_soil, temp) + } + } + + index++ + } + +} diff --git a/2023/day5/p1/main.py b/2023/day5/p1/main.py new file mode 100644 index 0000000..b8e908e --- /dev/null +++ b/2023/day5/p1/main.py @@ -0,0 +1,102 @@ +#!/bin/python3.12 + +FILE_PATH = "input.text" + +class ConversionRange: + target_start : int + target_end : int + source_start : int + source_end : int + translate : int + + def __init__(self, target_start : int, source_start : int, length : int): + self.target_start = target_start + self.source_start = source_start + self.target_end = self.target_start + length + self.source_end = self.source_start + length + self.translate = self.target_start - self.source_start + + def __str__(self): + print(f"Target start: {self.target_start}") + print(f"Source start: {self.source_start}") + print(f"Translate: {self.translate}") + return "" + + + +class Conversion: + ranges : list[ConversionRange] + + def __init__(self): + self.ranges = [] + pass + + def convert(self, num : int) -> int: + for r in self.ranges: + if num >= r.source_start and num <= r.source_end: + return num + r.translate + return num + + +def main() -> None: + with open(FILE_PATH, 'r') as f: + contents = f.read().split('\n') + + # Setup + seeds: list[int] = [] + maps: dict[str, Conversion] = {} + maps["seed-to-soil"] = Conversion() + maps["soil-to-fertilizer"] = Conversion() + maps["fertilizer-to-water"] = Conversion() + maps["water-to-light"] = Conversion() + maps["light-to-temperature"] = Conversion() + maps["temperature-to-humidity"] = Conversion() + maps["humidity-to-location"] = Conversion() + + current_conversion: str = "" + + # Parse the file + for index, line in enumerate(contents): + if index == 0: + seeds_list: list[str] = line.split(": ")[1].split() + for seed in seeds_list: + seeds.append(int(seed)) + print(f"Seeds: {seeds}") + continue + + if not line: + continue + + if not line[0].isdigit(): + current_conversion = line[:-5] + print(f"Current conversion: {current_conversion}") + continue + + nums: list[int] = list(map(lambda x: int(x), line.split())) + + temp = ConversionRange(nums[0], nums[1], nums[2]) + print(temp) + maps[current_conversion].ranges.append(temp) + + # Convert the seeds + lowest_location: float = float('inf') + for seed in seeds: + temp = seed + for key, value in maps.items(): + print(f"Mapping {temp} with {key}") + temp = value.convert(temp) + + if temp < lowest_location: + lowest_location = temp + print(f"Location: {temp}") + + print(f"Lowest location: {lowest_location}") + + + + +if __name__ == "__main__": + main() + + + diff --git a/2023/day5/p1/test.text b/2023/day5/p1/test.text new file mode 100644 index 0000000..bd902a4 --- /dev/null +++ b/2023/day5/p1/test.text @@ -0,0 +1,33 @@ +seeds: 79 14 55 13 + +seed-to-soil map: +50 98 2 +52 50 48 + +soil-to-fertilizer map: +0 15 37 +37 52 2 +39 0 15 + +fertilizer-to-water map: +49 53 8 +0 11 42 +42 0 7 +57 7 4 + +water-to-light map: +88 18 7 +18 25 70 + +light-to-temperature map: +45 77 23 +81 45 19 +68 64 13 + +temperature-to-humidity map: +0 69 1 +1 0 69 + +humidity-to-location map: +60 56 37 +56 93 4 \ No newline at end of file diff --git a/2023/day5/p2/input.text b/2023/day5/p2/input.text new file mode 100644 index 0000000..c88a111 --- /dev/null +++ b/2023/day5/p2/input.text @@ -0,0 +1,243 @@ +seeds: 1514493331 295250933 3793791524 105394212 828589016 654882197 658370118 49359719 4055197159 59237418 314462259 268880047 2249227634 74967914 2370414906 38444198 3291001718 85800943 2102534948 5923540 + +seed-to-soil map: +3352941879 1247490906 129850502 +1738919961 2189748071 56658550 +1795578511 292133467 518088747 +1519757661 1666834550 130335907 +1650093568 133993362 88826393 +2813914030 2262539545 40894545 +2698412916 2661705133 115501114 +2854808575 810222214 437268692 +410530961 1545057218 121777332 +0 242661076 10731898 +532308293 2303434090 61476099 +3292077267 1797170457 2282798 +2313667258 0 133993362 +2447660620 2410952837 250752296 +3294360065 253392974 38740493 +10731898 1377341408 167715810 +1457582089 2364910189 46042648 +593784392 3009289500 824592362 +3333100558 222819755 19841321 +1418376754 1799453255 39205335 +1503624737 2246406621 16132924 +178447708 2777206247 232083253 +3482792381 1838658590 351089481 + +soil-to-fertilizer map: +3513795976 4258851234 36116062 +3393453635 4148223693 110627541 +3504081176 3494735450 6350258 +2671742993 3596285367 235915393 +991290653 256764866 25867175 +2907658386 3330719253 68855819 +3336496635 4091266693 56957000 +3161141476 2536943456 80523019 +1961696534 304660310 29551079 +812996514 1560772632 178294139 +1562163347 2321959023 78904062 +31289107 1039870587 339682886 +1520029818 1928417376 42133529 +3510431434 3832200760 3364542 +3549912038 3272523584 58195669 +0 149071717 31289107 +3608107707 3501085708 5732766 +503523937 1739066771 189350605 +3071674583 3506818474 89466893 +3241664495 3996434553 94832140 +1708133363 454333361 253563171 +3813493721 3097084118 175439466 +1991247613 1970550905 351408118 +3613840473 2897430870 199653248 +2536943456 2762631333 134799537 +1641067409 244319429 12445437 +3994753216 3913095788 83338765 +2976514205 3399575072 95160378 +1354883134 0 143118415 +1349131883 2400863085 5751251 +1498001549 282632041 22028269 +2342655731 180360824 63958605 +370971993 1379553473 126598642 +4149802438 2617466475 145164858 +1017157828 707896532 331974055 +692874542 334211389 120121972 +497570635 143118415 5953302 +3988933187 3907275759 5820029 +4078091981 3835565302 71710457 +1653512846 1506152115 54620517 + +fertilizer-to-water map: +3053686523 2028998994 1241280773 +1492748555 1562401968 269616514 +554432178 1000324407 562077561 +2944878746 3270279767 108807777 +2501520804 3379087544 52288887 +1762365069 20686928 69653413 +2028998994 3431376431 472521810 +1431309984 814973200 3653900 +409832614 0 20686928 +430519542 818627100 123912636 +1116509739 500172955 314800245 +2553809691 3903898241 391069055 +0 90340341 409832614 +1434963884 942539736 57784671 + +water-to-light map: +2774754469 1598606098 15160294 +3832622498 1469118874 129487224 +4125818569 3997047227 169148727 +1108418694 1130695768 196125912 +637654660 517892123 26551592 +2519230072 3399515763 135968347 +2751000257 3126996880 23754212 +861800165 884077239 88532605 +1469118874 2566660966 63929427 +2789914763 3150751092 63425583 +2853340346 2561960449 4700517 +1692681911 3397592997 1922766 +2858040863 1773257241 287341147 +2655198419 2851614649 15098309 +950332770 972609844 158085924 +591049922 471287385 46604738 +3482333989 3849276196 108901632 +1694604677 1613766392 159490849 +3591235621 3958177828 38869399 +3630105020 4166195954 128771342 +3205039781 3535484110 277294208 +2706794606 2060598388 44205651 +386607659 544443715 110595292 +3962109722 2540862463 21097986 +697311924 0 92263281 +558450415 404456802 11447837 +2409200012 3214176675 110030060 +569898252 862925569 21151670 +1354525884 415904639 55382746 +789575205 790700609 72224960 +3832262624 2690248164 359874 +163757080 181606223 222850579 +1533048301 2967363270 159633610 +497202951 784452458 6248151 +2670296728 3812778318 36497878 +3145382010 2630590393 59657771 +1854095526 2104804039 436058424 +0 655039007 74414138 +2390804262 2690608038 18395750 +1304544606 1326821680 49981278 +3758876362 3324206735 73386262 +664206252 1376802958 33105672 +74414138 92263281 89342942 +3983207708 2709003788 142610861 +503451102 729453145 54999313 +2290153950 2866712958 100650312 + +light-to-temperature map: +2054128675 422374783 216418447 +3729049939 3132111492 565917357 +524183620 1261361039 34450583 +723901655 638793230 74616934 +304496246 795175951 115896188 +1128506994 1008723417 50927515 +958650763 2074746732 3056214 +0 1224918384 36442655 +558634203 1059650932 165267452 +2052385426 713410164 1743249 +833053864 1953862956 120883776 +36442655 715153413 80022538 +1455705971 1506174459 386316618 +1842022589 1295811622 210362837 +2270547122 2077802946 24477429 +116465193 2102280375 188031053 +1179434509 945607414 63116003 +798518589 911072139 34535275 +3373647615 3893335786 195498774 +3696979816 3698028849 32070123 +1242550512 1892491077 43410067 +3051130577 2566857633 322517038 +3002478931 3844684140 48651646 +2311039190 3730098972 114585168 +2425624358 2311039190 187630064 +2819387158 2889374671 183091773 +1285960579 103791186 85466201 +1371426780 338095592 84279191 +1110545182 1935901144 17961812 +953937640 2290311428 4713123 +420392434 0 103791186 +961706977 189257387 148838205 +3637334768 3072466444 59645048 +3569146389 2498669254 68188379 +2613254422 4088834560 206132736 + +temperature-to-humidity map: +2032423062 2486277941 26281270 +333062067 2316624216 6051173 +1716048249 1385455997 91409968 +460397469 2512559211 69041956 +25538975 668468772 15388105 +2090913379 324344034 71221218 +2804805674 3018690414 130533369 +529439425 908821722 476634275 +1106765273 448560048 219908724 +2162134597 1476865965 445565302 +0 395565252 25538975 +4004204691 4019550481 43244121 +2058704332 0 32209047 +1516375281 2116951248 199672968 +3888833667 2764269134 115371024 +40927080 32209047 292134987 +1490276549 2581601167 26098732 +1360818538 2322675389 129458011 +1006073700 2043715496 73235752 +1079309452 421104227 27455821 +1807458217 683856877 224964845 +339113240 1922431267 121284229 +4155917040 2879640158 139050256 +2764269134 4171262830 40536540 +4047448812 4062794602 108468228 +2935339043 3149223783 870326698 +1326673997 2452133400 34144541 +3805665741 4211799370 83167926 + +humidity-to-location map: +3928575650 3147563455 98804874 +2357899446 2418187254 26586982 +449562184 2261875136 59054833 +308294839 60287808 141267345 +1872062279 1591999301 10857495 +1227084719 574109504 259895254 +1980177059 1765508840 13399403 +1162615704 1941046629 64469015 +2384486428 2654234915 114059261 +702311863 1515542756 40659242 +1993576462 2005515644 256359492 +3047301127 3246368329 27789688 +650396000 1713592977 51915863 +3701335066 3862068622 181049310 +1122863338 1673840611 39752366 +3075090815 4174917460 120049836 +3882384376 2778717800 46191274 +1626219043 201555153 245843236 +4027380524 3325898523 267586772 +3417979817 4043117932 13866284 +3281454033 2925002624 18592540 +110359150 1556201998 35797303 +2558833497 2444774236 209460679 +508617017 834004758 141778983 +1574315753 975783741 51903290 +2249935954 1027687031 107963492 +0 463750354 110359150 +2778717800 3593485295 268583327 +3195140651 2824909074 86313382 +3445626269 2943595164 203968291 +3324037823 4080975466 93941994 +742971105 1135650523 379892233 +146156453 1778908243 39038597 +3300046573 4056984216 23991250 +1503331938 1602856796 70983815 +185195050 1817946840 123099789 +3649594560 3274158017 21920411 +1486979973 447398389 16351965 +3671514971 3296078428 29820095 +2498545689 0 60287808 +3431846101 2911222456 13780168 +1882919774 2320929969 97257285 \ No newline at end of file diff --git a/2023/day5/p2/main.py b/2023/day5/p2/main.py new file mode 100644 index 0000000..410ec55 --- /dev/null +++ b/2023/day5/p2/main.py @@ -0,0 +1,151 @@ +#!/bin/python3.12 + +FILE_PATH = "input.text" + +class ConversionRange: + target_start : int + target_end : int + source_start : int + source_end : int + translate : int + + def __init__(self, target_start : int, source_start : int, length : int): + self.target_start = target_start + self.source_start = source_start + self.target_end = self.target_start + length + self.source_end = self.source_start + length + self.translate = self.target_start - self.source_start + + def __str__(self): + print(f"Target start: {self.target_start}") + print(f"Source start: {self.source_start}") + print(f"Translate: {self.translate}") + return "" + + +""" +{ + (79, 93) : { + (79, 93) : { + (52, 99) : { + (52, 53) : { + (37, 38) : { + + } + }, + (54, 99) : { + (54, 99) : { + + } + } + } + } + } +} + + +""" +class Conversion: + start : int + end : int + ranges : list + + def __init__(self, start : int, end : int): + self.start = start + self.end = end + self.ranges = [] + + def __contains__(self, r) -> bool: + if r.start >= self.start and r.end <= self.end: + return True + return False + + def add_range(self, range) -> None: + self.ranges.append(range) + + def convert(self, num : int) -> int: + for r in self.ranges: + if num >= r.source_start and num <= r.source_end: + return num + r.translate + return num + + def convert_range(self, range : tuple[int, int]) -> list: + start, end: int = range + + results: list = [] + + result: list = [None, None] + for r in self.ranges: + if r.source_start >= start: + + result[0] = r.target_start + + if r.source_end <= end: + result[1] = r.target_end + + if result[0] and result[1]: + results.append(result) + result = [] + +def main() -> None: + with open(FILE_PATH, 'r') as f: + contents = f.read().split('\n') + + # Setup + seeds: list[int] = [] + maps: dict[str, Conversion] = {} + maps["seed-to-soil"] = Conversion() + maps["soil-to-fertilizer"] = Conversion() + maps["fertilizer-to-water"] = Conversion() + maps["water-to-light"] = Conversion() + maps["light-to-temperature"] = Conversion() + maps["temperature-to-humidity"] = Conversion() + maps["humidity-to-location"] = Conversion() + + current_conversion: str = "" + + # Parse the file + for index, line in enumerate(contents): + if index == 0: + seeds_list: list[str] = line.split(": ")[1].split() + for seed in seeds_list: + seeds.append(int(seed)) + print(f"Seeds: {seeds}") + continue + + if not line: + continue + + if not line[0].isdigit(): + current_conversion = line[:-5] + print(f"Current conversion: {current_conversion}") + continue + + nums: list[int] = list(map(lambda x: int(x), line.split())) + + temp = ConversionRange(nums[0], nums[1], nums[2]) + print(temp) + maps[current_conversion].ranges.append(temp) + + # Convert the seeds + lowest_location: float = float('inf') + for seed in seeds: + temp = seed + for key, value in maps.items(): + print(f"Mapping {temp} with {key}") + temp = value.convert(temp) + + if temp < lowest_location: + lowest_location = temp + print(f"Location: {temp}") + + print(f"Lowest location: {lowest_location}") + + + + +if __name__ == "__main__": + main() + + + diff --git a/2023/day5/p2/test.py b/2023/day5/p2/test.py new file mode 100644 index 0000000..1936a03 --- /dev/null +++ b/2023/day5/p2/test.py @@ -0,0 +1,31 @@ +class Range: + start: int + end: int + + def __init__(self, s: int, e: int): + self.start = s + self.end = e + + def contains(self, key) -> tuple | None: + start, end = (key.start, key.end) + + if start > self.end or end <= self.start: + return None + + start_value = start if self.start <= start and start <= self.end else self.start + end_value = end if self.end >= end and end >= self.start else self.end + + return Range(start_value, end_value) + + def __str__(self) -> str: + return f'({self.start}, {self.end})' + + + +r = Range(1, 5) +r2 = Range(2, 3) + +print(r.contains(r2)) + + + diff --git a/2023/day5/p2/test.text b/2023/day5/p2/test.text new file mode 100644 index 0000000..bd902a4 --- /dev/null +++ b/2023/day5/p2/test.text @@ -0,0 +1,33 @@ +seeds: 79 14 55 13 + +seed-to-soil map: +50 98 2 +52 50 48 + +soil-to-fertilizer map: +0 15 37 +37 52 2 +39 0 15 + +fertilizer-to-water map: +49 53 8 +0 11 42 +42 0 7 +57 7 4 + +water-to-light map: +88 18 7 +18 25 70 + +light-to-temperature map: +45 77 23 +81 45 19 +68 64 13 + +temperature-to-humidity map: +0 69 1 +1 0 69 + +humidity-to-location map: +60 56 37 +56 93 4 \ No newline at end of file diff --git a/2023/day6/p1/input.text b/2023/day6/p1/input.text new file mode 100644 index 0000000..4aba926 --- /dev/null +++ b/2023/day6/p1/input.text @@ -0,0 +1,2 @@ +Time: 51 69 98 78 +Distance: 377 1171 1224 1505 \ No newline at end of file diff --git a/2023/day6/p1/main.py b/2023/day6/p1/main.py new file mode 100644 index 0000000..9e62460 --- /dev/null +++ b/2023/day6/p1/main.py @@ -0,0 +1,37 @@ + +FILE_PATH = "input.text" + +def main() -> None: + with open(FILE_PATH, 'r') as f: + lines = f.readlines() + + race_times: list[int] = list(map(lambda x: int(x), lines[0].split()[1:])) + race_record_distances: list[int] = list(map(lambda x: int(x), lines[1].split()[1:])) + + win_combinations: list[int] = [] + for index, time in enumerate(race_times): + + wins: int = 0 + + for v in range(1, time): + + time_left: int = time - v + distance: int = v * time_left + + if distance > race_record_distances[index]: + wins += 1 + + win_combinations.append(wins) + + product: int = win_combinations[0] + for combo in win_combinations[1:]: + product *= combo + + print(f"Product of combinations: {product}") + + + +if __name__ == "__main__": + main() + + diff --git a/2023/day6/p1/test.text b/2023/day6/p1/test.text new file mode 100644 index 0000000..b39f49d --- /dev/null +++ b/2023/day6/p1/test.text @@ -0,0 +1,2 @@ +Time: 7 15 30 +Distance: 9 40 200 \ No newline at end of file diff --git a/2023/day6/p2/input.text b/2023/day6/p2/input.text new file mode 100644 index 0000000..4aba926 --- /dev/null +++ b/2023/day6/p2/input.text @@ -0,0 +1,2 @@ +Time: 51 69 98 78 +Distance: 377 1171 1224 1505 \ No newline at end of file diff --git a/2023/day6/p2/main.py b/2023/day6/p2/main.py new file mode 100644 index 0000000..ca944a9 --- /dev/null +++ b/2023/day6/p2/main.py @@ -0,0 +1,28 @@ + +FILE_PATH = "input.text" + +def main() -> None: + with open(FILE_PATH, 'r') as f: + lines = f.readlines() + + race_time: int = int(''.join(list(map(lambda x: x if x != " " else "", lines[0][5:])))) + race_record_distance: int = int(''.join(list(map(lambda x: x if x != " " else "", lines[1][10:])))) + + win_combinations: int = 0 + for v in range(1, race_time): + + time_left: int = race_time - v + distance: int = v * time_left + + if distance > race_record_distance: + win_combinations += 1 + + + print(f"Win combinations: {win_combinations}") + + + +if __name__ == "__main__": + main() + + diff --git a/2023/day6/p2/test.text b/2023/day6/p2/test.text new file mode 100644 index 0000000..b39f49d --- /dev/null +++ b/2023/day6/p2/test.text @@ -0,0 +1,2 @@ +Time: 7 15 30 +Distance: 9 40 200 \ No newline at end of file diff --git a/2023/day7/p1/__pycache__/main.cpython-310.pyc b/2023/day7/p1/__pycache__/main.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..63644cda9fb96c8f1f88023f0b7b9e0554779901 GIT binary patch literal 2475 zcmai0TXPge6z-n;&R$4DxC!cN0lJC-f`TFn5r_mdU~Tf?)KcTH-ARV*&MrN(AgSfW z@GsP=C;XLx@3<5&3` zq(5o!;^Sa&1ugvnAei7S*5(1{Oc;S7OkoLIIKma)Pj+B_$wWc;Pnqx~-!ubD6s0Xn z(h=n^*oq}8V&79MaN#u}CgC-?X#}1)B&NiE=nLezVu)#R03%-(#ldw$U6zGShSkdT zywwg5un$(_+Pa?f+8c#TrrAs;zt090=m%wj51tz{D9XVFtFa0!P?^D;(_C#ZJ9Cs};0&BTB^5|x!~Q1SJ$paO6)N8CKk`(+4-v%8_TIwY2)TX zeQtT~+s3s{v)7hMmNr&n)rdOH*)y}}8X|gpq0v3tXh(4}(|xQcrqt32fX6Jp_w#se z)m9UWX-CPdr;^1c9eDIm1Sk|&(b9W>jP=lgPyC&}PO%rlvEa&yM8d zEpwZx)0sv7Pk5gTbDgV`=&f~|`Z~k=cAx#oe%_shW~w=hY8oqTR2PzNFRR9BwcSy& znyp1iwUfwdb1hO)Gm~mifScM+zS9)1YMeZbTCq4)rP0MIxMQ|tqV2AVlT07zcG5Jy zhqSe1hSx(ncBk<>T1fQjiIz+uv z9g33hMG=xG3J6+RTf}E=4-aMDi-j&AV%RV!9(a%9B#D#NR9mEMQcgz?$&}|j$HbC8 zau~8c2cnqjY=>9f}^#r@R&z_ilbBp&;;M)er9=D7PnoYh99zL)! zM)|mRVT5F^dC>3(I^ygNu?X{oDc6V48FSEb0f;%nT zWz;#moYLZ!;d6(Vj0vM+lz4@g_%SroeTHuA)*R#U@30Pe3>Hrki*pX6%80{|`4-2m zIpVMdK6AQN$GChPd~tBgzR2Pk=-lVJ5q~d_@%J)3@UhEvBaa2>aAEA~h_gAHU(gX- z@4~N$I~trtL}qb_T3LOFPJKi`saGcm&J)lVW=OsNV;$Wf>H+~>wCZDmy);&7NU6Pp zmQormT&z~kFAofJz$ym}8}=kqbBz2Q`b1N1K$eSmvsMZ$N%uIVDexB-?<_Bc^9x^H zS2XW%%b${zGmCEPoF92QhxE#MxwpAJ3V4@>e*iuw?xa;f2^%#`gAaes-xJ=!LS@2# Mr($|XeQy2pFMELgGXMYp literal 0 HcmV?d00001 diff --git a/2023/day7/p1/__pycache__/main.cpython-311.pyc b/2023/day7/p1/__pycache__/main.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7ea584bc7e75a59f59fac6cb5ca27e0cf01226fa GIT binary patch literal 4809 zcmbVQ-%lIa6~5yc+hcpi1`G+1K)nf+IGYljY?E|LHf6(-0I4^-kcV1Cme(`D1T!Xg z#z{d&GF2X&2q}?T3AfEkv=7;&k*fBs@BIf1a#d?2B%~@2ym`ew?NiSgGynd({7=aJ4_|7@wUgQY8)R09L?k9fW|flZX8yu0TPO`P2KR-U znO*ScvZnXy@^AGmKghR41OdT^fc+0U4Q9Y#Mh)gGgBdZH@gxYX#O&m@&q8K}$Rx%{ z1p3d!SQrORVq;E;i@79c%q_WMyyOPI`7sjq82rtIDvi(2$y?BCvV{Y>R#z;7l7)5*-Ntm@jtltL#G>EwmJ3l}G(#Qf!nxyZz9LQ#9?=4k*bn}DOLMF4Wv zRc;FAMyt@!m>Vt!n{&6y{y^?V6#@;pn|RSvH5&$(1eXjKmGul&qsiL9Lpi|_!vWjo zK)OQoJ!M()0^VL*5{a2XZ9*G$YY7rqvUV+4Fl3BmiEiqmJ|PbX75BbpNn5o55Or7g z*s}_VeIe3_?%6Hd@7p4iWh8dS^p*0E=Vow05bDS>W5njKGfVzVzCF}y^gQf}(qm9_ zAvCPcW%Q7ug=W)K4(ZbgHI!E6P;xp!6G>gBTj&pMLEUDY^N^xGNTd|$TnOJj4Z-SX zQ?hC}=cuCUM$24U)0A&u>7`^Hs>g9sG{dcEk}{>}1`A4I2kioT1`8WZ!zCOF(bFgp zQ8})sM|A{Z~<>0aW$Qz-t*mVA7GXUIcLSISfD++z(;PGdlR79{~nlaa25`42#Z8dD) z2GQ>dx(kQu|&-o-rhWD7JKg=*7L+Za@Ht*u-(H)4x_o5KG^Qz zcj6A z|GM~(uhx1lmwGP$E3)3xU+n2OtDb)!`xo9v>1Rh$dV`(otyM93^p%5}Od9sk<1o~; z6#zBZN~3rxE&U@KeZW8bEH(RTcud z(cI|LXxS^~hI7M9!{vt7B8T@H*IEuV<)XRhQnbRc&h|pGLg4W-Xg>CX|G4vfh17wn zKj=ylepW)ZH)8}6DSljx5qcT2)jrreVsLoeq&J}W*YMMjZy_FWd~VRRZaXMi!RICH zxmxgnkkgML#|$)3`(UaQXwc0ANjHydRq;Cm%~e}iV(ipw1~cwJ10bjyh6Ee!SYZf` zr$-Guc1u&8B`ath!BQ=p*ezLM>Ijx<0mN>}3QTao zx2zI!&k8KC^nVFc9v10Uc+k%fkosvD;TnSZon^BByNDl8d-PWbT?hjJcDAol1@Z+R zakWdZ#4Sp1vlDvf2hjN&Ud&HD_AmSM{(8(FJW&ev6osC8r2dZbI(&|`x{E^h+pJgHM^%f@hZ4OYcG`N|@3ONXQ{d<)Duv^sRXIcxu`|wx|uIhhjH?#X8)Wtvu zI0)aP?1$ZgD0u9t5IeZqnC`+@g}`G!Tq2y1Usz|`ifo%n_)9~NhH~arVF}j`Vsje) E5AU9{3;+NC literal 0 HcmV?d00001 diff --git a/2023/day7/p1/input.text b/2023/day7/p1/input.text new file mode 100644 index 0000000..e24f099 --- /dev/null +++ b/2023/day7/p1/input.text @@ -0,0 +1,1000 @@ +486AA 252 +24544 330 +33TTT 540 +242K2 966 +334A4 877 +3632J 651 +22K55 378 +9J656 695 +Q7478 933 +5K266 279 +AK9J8 840 +6JQ9J 697 +47JT6 545 +777K2 400 +QTTTT 115 +6J554 121 +KJAKA 677 +KKK8Q 372 +3K8A6 428 +6JTJJ 249 +2626J 909 +Q47Q9 859 +QQQKT 116 +AQAA6 200 +K88Q8 542 +TTT4T 826 +8K56A 619 +55J27 637 +TTT37 513 +62362 254 +J383K 329 +4Q89J 682 +6TQ75 222 +Q4298 774 +A3AA3 263 +86672 866 +5A5AJ 606 +K6K79 27 +88AJJ 514 +QJ725 961 +77727 509 +8T9JT 582 +6Q464 98 +75887 995 +69TT9 624 +8327K 377 +TT444 561 +9K89K 204 +JQAQ5 393 +TTTJT 331 +3T8Q2 588 +JKKKK 572 +AT5TT 810 +AJ552 162 +Q2A23 258 +688QA 816 +4T555 183 +K4342 461 +A9929 369 +7J969 730 +8KAQ9 825 +KK47K 170 +4Q4JJ 150 +444Q4 964 +A7A77 251 +999JT 186 +8A88A 325 +2623K 135 +3Q767 913 +99989 855 +4444A 556 +6J757 383 +77788 75 +57A24 185 +Q3QK3 627 +6A855 982 +6KQ23 399 +TT49T 630 +6AAAJ 443 +76K8K 940 +Q8888 747 +AK48T 250 +22A22 506 +TT547 538 +Q5J2A 11 +546A3 137 +A38Q2 753 +TK3K2 881 +22627 771 +Q67AK 298 +J2262 782 +2QAQ2 5 +JTK7K 625 +A3337 766 +6JQ45 924 +A9999 544 +45444 716 +K7777 673 +6QT4T 541 +T4222 811 +T8888 799 +QQQJQ 426 +5858J 886 +77A77 897 +QJ866 448 +48J43 73 +2Q4J7 432 +66K66 787 +69A4K 114 +T6792 685 +79A99 306 +KK9K9 860 +96666 992 +85858 558 +Q2AT4 308 +Q9QQ5 496 +8AAJA 271 +T3TJK 919 +2836J 662 +78878 431 +88887 184 +J3QQ8 609 +T4JTT 778 +AJ533 30 +3TT4J 349 +J6282 925 +6Q874 82 +AKK24 832 +3QJ33 65 +65522 288 +22Q22 749 +J8K84 497 +A343Q 794 +38J53 314 +886Q8 613 +7Q568 899 +AQAKK 990 +3978J 438 +39K6J 468 +8428J 466 +TJ4T7 776 +73825 726 +AK53Q 683 +6J434 206 +68Q84 64 +8KTTJ 505 +JJ77J 773 +73355 13 +QQJ36 441 +J6KA5 980 +Q7A88 718 +46646 449 +JQ994 460 +Q54A7 675 +A7TQT 195 +3887K 219 +J277T 16 +98J29 486 +TA777 375 +687QQ 462 +KQKQK 687 +KTT28 322 +TT3TT 181 +K4444 125 +Q8QTT 286 +JT5TQ 410 +5AA65 935 +3QTJ3 638 +5T4Q9 10 +JK3T3 595 +2A9AA 362 +A58AA 145 +94KK9 310 +88Q2Q 482 +3985A 244 +6AA96 711 +Q7337 34 +8828J 356 +7379J 903 +28288 83 +K22K2 923 +K5J25 767 +22992 500 +66787 786 +9746J 661 +765T9 31 +9J9J6 285 +6348T 264 +562J9 280 +998QQ 192 +99559 751 +999T9 817 +J5TT5 715 +37722 820 +595K5 435 +8A5A8 187 +59858 139 +42Q5Q 212 +KQQQQ 15 +5QQQQ 929 +Q777J 631 +66TTT 455 +56226 689 +73373 887 +K32T3 665 +3A36A 447 +QAAJ8 143 +84448 324 +T4344 759 +9J99Q 371 +98989 309 +72T46 717 +QQ5KT 821 +8T64A 236 +A2AA2 918 +52775 907 +7T7T7 211 +6Q782 535 +75A36 12 +Q9Q62 274 +T2463 752 +797J9 471 +K7KK7 414 +444K3 917 +4QQAQ 586 +59J64 895 +6K6J6 142 +6T464 366 +3K5AA 465 +3QQ4Q 769 +K5533 941 +T2299 39 +333TJ 597 +AA8AA 975 +9J4KK 198 +6QQ44 554 +44469 433 +264AQ 628 +9986J 178 +786J7 894 +86866 656 +5J555 156 +QTJQK 858 +A84AA 526 +32J37 132 +4666Q 427 +894QT 472 +7K469 1000 +9J77J 888 +95559 478 +44553 600 +K9J9K 37 +96979 814 +99393 148 +A99AA 88 +953TQ 708 +6KTQ3 437 +KKAJK 358 +72292 439 +63362 599 +5J88J 639 +74444 604 +6Q6J3 698 +TAA66 843 +9QQJ9 168 +TT8TT 381 +JJTA2 960 +36363 423 +455J8 602 +8A543 223 +Q8T42 884 +8A888 227 +AQAA5 872 +6K525 364 +58KA9 62 +33277 296 +KAKKA 386 +665T8 259 +KJKQK 593 +36355 85 +5KK47 926 +35539 17 +66466 19 +A979Q 589 +54888 218 +477JT 574 +66634 105 +76T25 161 +2739J 883 +J3433 808 +7J7J3 436 +7252T 721 +6QA2J 18 +2T373 334 +39393 770 +39969 262 +79T99 833 +2794Q 14 +9AK36 996 +JQ4QQ 579 +TJ53A 757 +JA7AA 302 +K3333 159 +4K4KA 424 +26T62 988 +A4582 571 +59999 841 +9999J 959 +882Q2 220 +74777 484 +48T53 179 +9T947 269 +8J62A 113 +88KAA 837 +5J2JQ 319 +9K499 904 +282A2 756 +78K63 801 +2A5A5 539 +Q6QJK 171 +55535 492 +7J775 323 +62626 291 +88883 459 +69336 196 +TTA4T 921 +6236T 667 +58K58 475 +68KK8 201 +55559 875 +26AAA 616 +4JT59 90 +T3333 831 +4A359 394 +53325 914 +T5886 268 +22T44 729 +34443 21 +TA72K 71 +KTJQJ 979 +4TT5T 790 +38983 949 +975T2 493 +AJ2KK 303 +85J75 367 +T44A4 694 +6346T 368 +83383 134 +639J2 126 +2435A 77 +6K972 741 +5TA55 622 +5TT66 567 +99949 193 +KJ973 357 +5QT38 225 +73A7A 748 +43555 233 +3A46J 335 +72272 154 +A3832 660 +74774 997 +96QAK 405 +4A844 305 +3J3J3 517 +K5KKK 720 +QQT7T 727 +55282 487 +523Q4 99 +55585 912 +QJK65 796 +222AJ 734 +TTKTT 235 +QK67J 245 +4A4JA 182 +9TAAT 84 +79K43 353 +AAQAJ 149 +8A8AA 587 +TA5J9 952 +58888 237 +79Q25 658 +258KT 512 +424T4 502 +6J666 485 +5555A 457 +7A523 809 +K5K66 188 +ATKKT 981 +33Q66 594 +75A88 987 +6J677 91 +68688 864 +QQ33Q 635 +22427 755 +AJK83 153 +42Q8K 802 +AJT8J 650 +5AK6A 691 +979K5 253 +5K45K 653 +AA459 93 +T2T8J 838 +49947 479 +7Q799 647 +J4524 208 +66K6K 943 +53232 902 +JJQQQ 869 +64K4K 534 +77799 406 +77J7J 844 +A75QK 971 +865A2 26 +KJ4AA 885 +TA856 835 +84A78 703 +J9696 92 +J28K2 891 +KKAAT 546 +K2592 531 +AA96A 676 +73KT7 793 +66JJ6 719 +99379 578 +8Q685 739 +QQQT9 282 +JJ4J4 420 +66969 106 +A7AQQ 850 +9K526 311 +AQ8TJ 246 +462K2 706 +656J6 504 +TQQ57 172 +77Q37 416 +5857Q 857 +QQQ3J 265 +44J84 354 +TT537 991 +QAT29 213 +8A9JA 823 +684Q2 275 +54T92 946 +5K55K 283 +94732 986 +55565 700 +6JA66 893 +3K33K 865 +JKKTK 641 +99636 984 +333T9 396 +24J25 828 +33AJ3 939 +J7J87 347 +84884 577 +3J366 666 +QQ4Q4 70 +KQ562 806 +95275 9 +86KKA 95 +7K67K 868 +TAATA 668 +7JK9J 614 +855J3 138 +59496 360 +66272 422 +7927A 255 +644J4 970 +3K33Q 284 +2T44J 346 +66626 775 +622AA 450 +JJJ8J 97 +T73T2 848 +26686 480 +8K58A 710 +5A55A 852 +34683 701 +2J827 834 +ATAAA 772 +9444J 853 +J2828 805 +JJ369 215 +J2962 849 +T7TTT 216 +9T23K 788 +T8759 38 +9777J 768 +934KQ 141 +K7A7J 738 +QQAAQ 446 +9J93T 524 +JAJAA 272 +22322 445 +6T699 340 +99939 203 +A5525 528 +7QKA2 754 +5J558 873 +JJJJJ 147 +24244 626 +JJJ2J 972 +JAAAA 740 +55QQQ 607 +44K45 804 +KKQKT 822 +J9A5A 905 +4A85T 892 +J3333 199 +KTA9T 798 +33393 294 +TJ986 692 +56J4T 510 +967J7 160 +JQQ33 59 +Q744Q 779 +2K8AK 87 +JJ852 189 +4K77Q 365 +42222 702 +A2272 792 +88949 874 +TKT9K 879 +Q59Q7 41 +TAT9T 477 +K4J4T 533 +2T2Q2 861 +K6JQ6 569 +JTT22 947 +2J64A 555 +K6TTQ 898 +AJJQ7 967 +QQ444 566 +TTT7Q 313 +K488T 977 +45992 723 +38Q33 495 +6T75J 927 +J323A 100 +QQQ77 395 +88799 746 +KK9KK 295 +JJ833 781 +87A2K 384 +AQ66A 61 +856Q2 191 +5765K 167 +J24TJ 591 +362QJ 640 +2JT43 654 +438J5 217 +73299 999 +33K2K 915 +2952T 300 +8666T 764 +22332 644 +3T9AA 307 +79877 575 +TJ6T7 516 +T6TJ6 163 +6T6J6 659 +4K426 511 +777A4 131 +44494 289 +QJ82J 690 +Q22Q6 760 +55527 529 +559A5 791 +KKQAK 704 +KA938 621 +KAK9A 934 +2J992 123 +QQ2QQ 994 +3TT5T 763 +6KKKK 3 +4254K 398 +J2442 522 +39J37 549 +64444 714 +KQ7Q9 226 +79T79 328 +TK3J6 20 +J5T95 762 +83882 474 +97777 916 +AT673 570 +2A333 998 +7J77K 146 +686QQ 518 +5T77T 671 +TQ2QQ 281 +J4444 784 +JK46T 118 +797QT 379 +48776 130 +484K4 173 +JK794 72 +7QQ6Q 725 +3KT24 209 +4J545 581 +63T6Q 339 +88AKQ 812 +99A89 101 +QQ799 55 +4Q8QK 610 +864J9 370 +4QJQT 107 +644QJ 669 +A3AAA 780 +9A8AT 950 +54342 25 +43433 164 +58554 559 +84887 50 +K9KKT 341 +T3JA9 104 +57T57 453 +J4JQ5 592 +KJJA5 688 +J8898 374 +59772 646 +K66QK 696 +T2T44 440 +Q7AJ3 120 +Q7777 532 +997KQ 292 +A4AAA 931 +K4KTJ 451 +4JAT8 655 +Q77Q3 169 +QTTQQ 618 +68ATK 257 +AJ4AA 948 +26636 603 +3J656 382 +4A6AT 936 +54555 846 +J3289 338 +66556 900 +J5A9J 112 +55T5T 735 +K6484 634 +444KK 862 +K6K6K 205 +K55KJ 842 +Q27QT 652 +73777 901 +949J9 4 +J26K3 889 +2AJK9 79 +22227 584 +54T9A 42 +995A5 736 +6QT48 452 +K6324 363 +7Q832 807 +6K633 951 +JKK7K 387 +2TK73 678 +T4JJT 552 +66665 908 +77877 232 +J88J8 789 +A8AA2 320 +92832 490 +44399 355 +AT953 750 +5A755 388 +KJ945 312 +JAA88 119 +QK9QK 521 +7T2T7 871 +6K4T9 583 +5AAAA 978 +T2JT4 174 +7J447 361 +8QJ8A 470 +T5263 43 +3K3KK 63 +88284 57 +48A72 722 +4T562 190 +6TT96 2 +3Q5QQ 221 +42744 401 +88442 345 +Q3Q22 686 +69Q28 177 +J33JQ 839 +833QA 392 +J8838 598 +QQK75 376 +8888J 413 +QQQQ6 488 +Q6Q6Q 127 +9T9JJ 158 +355TK 827 +4QAAA 765 +T7QJ7 498 +445T4 911 +AA2AA 337 +33733 672 +92KK4 958 +KJ746 231 +3632A 22 +3K45A 348 +T7673 938 +39J99 803 +Q8T72 58 +77444 49 +44AQ5 7 +657A4 663 +QAQQQ 580 +974TK 643 +2TJJ2 273 +89993 342 +TT333 590 +J88JT 920 +AQ2K6 240 +68644 229 +92A9J 391 +444AA 962 +48Q4Q 473 +Q3Q33 133 +7Q233 373 +2J2J2 878 +9J488 954 +AJ979 944 +8T3J8 352 +J87Q3 56 +QQ3KQ 224 +3K597 267 +9J2TQ 830 +J7444 36 +55757 605 +56556 732 +KA6QJ 290 +7T95A 955 +39344 434 +72T39 256 +3A333 102 +4K8A6 507 +55K9T 657 +622JT 24 +6J766 151 +9J9A9 238 +866J6 464 +6KJK6 851 +4T4T8 543 +KJA3K 248 +A4J86 537 +T8QJ8 454 +A93AA 421 +JJJQQ 863 +284K4 620 +9J978 67 +K7675 536 +TT7TA 287 +TJ92A 343 +4QT44 276 +7777T 78 +2QT26 444 +85558 230 +9A9A9 731 +Q5225 501 +22TQT 425 +555J6 930 +Q333A 563 +45844 202 +QA472 679 +7TJ77 442 +Q7222 122 +JK6JK 397 +99K9J 417 +44434 615 +J75A7 633 +AA2KA 728 +2Q22Q 68 +J55J5 359 +J4555 415 +66823 649 +JK3K3 896 +773J5 74 +T6777 28 +K9925 53 +K2KTK 611 +KKK44 89 +J3KKK 129 +TK8JA 109 +K3339 525 +Q59QJ 928 +J8TTT 402 +77757 612 +KKKK7 155 +85A59 197 +KQQK5 350 +6776K 301 +KKK55 910 +AQAQA 407 +92299 693 +9A779 175 +Q6A27 968 +85QQ8 761 +TA536 483 +66363 278 +Q53Q3 234 +K4A28 596 +7QA8T 565 +33355 503 +AAA67 40 +JA66A 351 +634KA 96 +JA555 489 +TA457 813 +A87JK 297 +7777J 527 +8J8T8 664 +6TK87 194 +88688 568 +QA8A6 867 +TT99T 228 +J5955 890 +52777 385 +AQ44Q 737 +9867T 299 +QTQTT 94 +QQTQ7 876 +T3TQ6 573 +5Q555 44 +A73T4 69 +QAT72 629 +K777K 636 +2222J 404 +Q4J4Q 103 +JT2A2 783 +J55JA 315 +585T5 744 +J3773 645 +5625A 608 +TA632 327 +4J4J4 523 +53535 824 +636K5 976 +4T278 318 +9Q77J 815 +64T87 758 +7QJQ7 547 +A7A8A 945 +Q6573 29 +2QQ2T 266 +AK427 152 +22592 304 +69AJ6 261 +T5T52 180 +TQ59J 705 +99669 648 +6TQJ4 785 +6AQQ5 430 +TQTQ5 389 +J7AQ5 176 +33A4A 463 +T8383 344 +Q636K 963 +Q3AAQ 1 +K29Q3 870 +JQ8TT 157 +2Q96J 491 +5KK94 709 +K44J5 856 +J233T 476 +K5555 326 +283K9 965 +TQAAA 23 +4T5JA 165 +6477A 81 +82855 836 +8T88T 973 +A3JA3 110 +49449 983 +92K2K 124 +8J777 336 +A8555 519 +JJQQA 409 +55865 617 +T4484 481 +K729T 777 +55A44 111 +667Q9 989 +A6J55 906 +3A44J 128 +K4A65 108 +Q8A88 680 +Q8K63 411 +4TT4Q 733 +893A4 937 +7374T 458 +659JK 144 +JQ642 601 +52333 712 +JQA3K 277 +QQ555 140 +5377A 117 +98T89 46 +T8T8T 674 +KQT88 243 +J7333 317 +KKQ7Q 560 +66636 33 +5AT6T 942 +24224 52 +A6276 797 +J99J9 60 +Q777A 80 +87TQJ 241 +56QT3 553 +KK9KJ 745 +AJQA9 707 +6JA99 408 +6385K 403 +K5JQQ 829 +6K644 985 +5K4Q3 530 +QQTQQ 51 +255K4 316 +T555J 499 +66Q66 882 +8K89J 166 +766T6 214 +A6AJQ 845 +886A9 969 +97264 974 +69Q69 551 +95529 642 +K569T 47 +K2222 333 +TKTKK 520 +J7JT7 632 +22822 242 +5282J 684 +9Q8T9 548 +9KJ75 957 +JKJKK 854 +6T6T6 270 +6Q6Q6 412 +AJKQ5 380 +J3335 508 +77677 623 +698K6 207 +QTT78 795 +AA5K4 332 +38838 932 +TTTJJ 956 +99TT8 418 +7454J 800 +Q7AAA 880 +TT5T5 494 +432AJ 429 +QK9AT 293 +6668Q 6 +6TT2J 847 +4A4A3 713 +4J9K2 469 +23333 136 +T4J28 819 +KA923 681 +A6256 210 +QAA33 953 +4JJ48 48 +9K5JK 576 +6Q5J3 390 +6AAAA 564 +62252 54 +AJT6J 993 +66JKJ 724 +44554 45 +992JK 260 +8T8Q4 239 +97A34 699 +KK85K 419 +8J638 557 +49K88 76 +8K99T 321 +Q9993 8 +57744 922 +24KKK 35 +TATAT 742 +QQ988 550 +5AK55 456 +5QK58 467 +T8TK5 743 +4Q66J 818 +3449J 585 +JA428 66 +8J957 562 +Q7KQQ 515 +2Q9QT 247 +8QQ88 670 +38783 86 +6646T 32 \ No newline at end of file diff --git a/2023/day7/p1/main.py b/2023/day7/p1/main.py new file mode 100644 index 0000000..85c8f5d --- /dev/null +++ b/2023/day7/p1/main.py @@ -0,0 +1,140 @@ +from enum import IntEnum + +INPUT_FILE = "input.text" + +possible_letter_cards = { + "A" : 14, + "K" : 13, + "Q" : 12, + "J" : 11, + "T" : 10 +} + +class HandType(IntEnum): + FiveOfAKind = 7 + FourOfAKind = 6 + FullHouse = 5 + ThreeOfAKind = 4 + TwoPair = 3 + OnePair = 2 + HighCard = 1 + +def card_to_value(card : str) -> int | None: + if len(card) > 1: + print("Input is more than one character") + return None + + if card in possible_letter_cards: + return possible_letter_cards[card] + + elif card.isdigit(): + num = int(card) + if num <= 9 and num >= 2: + return num + else: + print(f"Card invalid, Card: {card}") + return None + +class Hand: + cards : str + card_values : list[int] + bid : int + hand_type : HandType + + def __init__(self, hand : str, bid : int): + self.bid = bid + + self.cards = hand + self.card_values = [] + self.find_hand_type() + self.get_card_values() + print(f"Found hand type is {self.hand_type}") + print(f"Card Values: {self.card_values}") + + def find_hand_type(self) -> None: + + matches : list[int] = [] + print(f"Cards: {self.cards}") + for card in self.cards: + temp_cards = self.cards + + temp_cards = temp_cards.replace(card, "") + + matches.append(len(temp_cards)) + + print(f"Matches: {matches}") + + if matches.count(0) == 5: + self.hand_type = HandType.FiveOfAKind + elif matches.count(1) == 4: + self.hand_type = HandType.FourOfAKind + elif matches.count(2) == 3 and matches.count(3) == 2: + self.hand_type = HandType.FullHouse + elif matches.count(2) == 3: + self.hand_type = HandType.ThreeOfAKind + elif matches.count(3) == 4: + self.hand_type = HandType.TwoPair + elif matches.count(3) == 2: + self.hand_type = HandType.OnePair + else: + self.hand_type = HandType.HighCard + + def get_card_values(self) -> None: + for card in self.cards: + self.card_values.append(card_to_value(card)) + +def main() -> None: + with open(INPUT_FILE, "r") as f: + data = f.readlines() + + + # Get all our hands and figure out what they ard + hands: list[Hand] = [] + for line in data: + hand, bid = line.split() + + hands.append(Hand(hand, int(bid))) + + + # Sort and decide rank + total = 0 + sorted_hands: list[Hand] = bubbleSortHands(hands) + + for i in range(0, len(sorted_hands)): + rank = i + 1 + + total += sorted_hands[i].bid * rank + + print(f"Total Winnings: {total}") + +# is it fast? probably not, but it works +def bubbleSortHands(arr: list[Hand]) -> list[Hand]: + n: int = len(arr) + + for i in range(n): + swapped = False + + for j in range(0, n-i-1): + + if arr[j].hand_type > arr[j + 1].hand_type: + arr[j], arr[j + 1] = arr[j + 1], arr[j] + swapped = True + + elif arr[j].hand_type == arr[j + 1].hand_type: + for card_index in range(0, 5): + if arr[j].card_values[card_index] > arr[j + 1].card_values[card_index]: + arr[j], arr[j + 1] = arr[j + 1], arr[j] + swapped = True + break + elif arr[j].card_values[card_index] < arr[j + 1].card_values[card_index]: + break + + + if (swapped == False): + break + + return arr + + +if __name__ == "__main__": + main() diff --git a/2023/day7/p1/main.rs b/2023/day7/p1/main.rs new file mode 100644 index 0000000..7eebe95 --- /dev/null +++ b/2023/day7/p1/main.rs @@ -0,0 +1,86 @@ +use std::fs; +use std::collections::HashMap; + +const FILE_PATH: &str = "./test.text"; + +enum HandType +{ + FiveOfKind, + FourOfKind, + FullHouse, + ThreeOfKind, + TwoPair, + OnePair, + HighCard +} + +struct Hand +{ + value: String, + bid: i32, + hand_type: HandType +} + +fn compare_hands(hand_1: Hand, hand_2: Hand) -> Hand +{ + let result: Hand; + + result +} + +fn get_hand_type(hand: &str) //-> HandType +{ + // Parse hand into map + let mut hand_values: HashMap = HashMap::new(); + for card in hand.chars() + { + match hand_values.get(&card) { + Some(_) => { *hand_values.get_mut(&card).unwrap() += 1; }, + None => { hand_values.insert(card, 1); } + } + } + + // Decide HandType + for (card, value) in &hand_values + { + + } +} + +fn card_value(card: &str) -> i32 +{ + match card { + "A" => 13, + "K" => 12, + "Q" => 11, + "J" => 10, + "T" => 9, + "9" => 8, + "8" => 7, + "7" => 6, + "6" => 5, + "5" => 4, + "4" => 3, + "3" => 2, + "2" => 1, + _ => -1 + } +} + +fn main() +{ + let contents = fs::read_to_string(FILE_PATH).unwrap(); + + let hand_rankings: Vec = Vec::new(); + + for line in contents.lines() + { + let hand_and_bid: Vec<&str> = line.split(" ").collect(); + + let hand = hand_and_bid[0]; + let bid: i32 = hand_and_bid[1].parse().unwrap(); + + + } + +} diff --git a/2023/day7/p1/test.text b/2023/day7/p1/test.text new file mode 100644 index 0000000..bf2815e --- /dev/null +++ b/2023/day7/p1/test.text @@ -0,0 +1,5 @@ +32T3K 765 +T55J5 684 +KK677 28 +KTJJT 220 +QQQJA 483 \ No newline at end of file diff --git a/2023/day7/p2/input.text b/2023/day7/p2/input.text new file mode 100644 index 0000000..e24f099 --- /dev/null +++ b/2023/day7/p2/input.text @@ -0,0 +1,1000 @@ +486AA 252 +24544 330 +33TTT 540 +242K2 966 +334A4 877 +3632J 651 +22K55 378 +9J656 695 +Q7478 933 +5K266 279 +AK9J8 840 +6JQ9J 697 +47JT6 545 +777K2 400 +QTTTT 115 +6J554 121 +KJAKA 677 +KKK8Q 372 +3K8A6 428 +6JTJJ 249 +2626J 909 +Q47Q9 859 +QQQKT 116 +AQAA6 200 +K88Q8 542 +TTT4T 826 +8K56A 619 +55J27 637 +TTT37 513 +62362 254 +J383K 329 +4Q89J 682 +6TQ75 222 +Q4298 774 +A3AA3 263 +86672 866 +5A5AJ 606 +K6K79 27 +88AJJ 514 +QJ725 961 +77727 509 +8T9JT 582 +6Q464 98 +75887 995 +69TT9 624 +8327K 377 +TT444 561 +9K89K 204 +JQAQ5 393 +TTTJT 331 +3T8Q2 588 +JKKKK 572 +AT5TT 810 +AJ552 162 +Q2A23 258 +688QA 816 +4T555 183 +K4342 461 +A9929 369 +7J969 730 +8KAQ9 825 +KK47K 170 +4Q4JJ 150 +444Q4 964 +A7A77 251 +999JT 186 +8A88A 325 +2623K 135 +3Q767 913 +99989 855 +4444A 556 +6J757 383 +77788 75 +57A24 185 +Q3QK3 627 +6A855 982 +6KQ23 399 +TT49T 630 +6AAAJ 443 +76K8K 940 +Q8888 747 +AK48T 250 +22A22 506 +TT547 538 +Q5J2A 11 +546A3 137 +A38Q2 753 +TK3K2 881 +22627 771 +Q67AK 298 +J2262 782 +2QAQ2 5 +JTK7K 625 +A3337 766 +6JQ45 924 +A9999 544 +45444 716 +K7777 673 +6QT4T 541 +T4222 811 +T8888 799 +QQQJQ 426 +5858J 886 +77A77 897 +QJ866 448 +48J43 73 +2Q4J7 432 +66K66 787 +69A4K 114 +T6792 685 +79A99 306 +KK9K9 860 +96666 992 +85858 558 +Q2AT4 308 +Q9QQ5 496 +8AAJA 271 +T3TJK 919 +2836J 662 +78878 431 +88887 184 +J3QQ8 609 +T4JTT 778 +AJ533 30 +3TT4J 349 +J6282 925 +6Q874 82 +AKK24 832 +3QJ33 65 +65522 288 +22Q22 749 +J8K84 497 +A343Q 794 +38J53 314 +886Q8 613 +7Q568 899 +AQAKK 990 +3978J 438 +39K6J 468 +8428J 466 +TJ4T7 776 +73825 726 +AK53Q 683 +6J434 206 +68Q84 64 +8KTTJ 505 +JJ77J 773 +73355 13 +QQJ36 441 +J6KA5 980 +Q7A88 718 +46646 449 +JQ994 460 +Q54A7 675 +A7TQT 195 +3887K 219 +J277T 16 +98J29 486 +TA777 375 +687QQ 462 +KQKQK 687 +KTT28 322 +TT3TT 181 +K4444 125 +Q8QTT 286 +JT5TQ 410 +5AA65 935 +3QTJ3 638 +5T4Q9 10 +JK3T3 595 +2A9AA 362 +A58AA 145 +94KK9 310 +88Q2Q 482 +3985A 244 +6AA96 711 +Q7337 34 +8828J 356 +7379J 903 +28288 83 +K22K2 923 +K5J25 767 +22992 500 +66787 786 +9746J 661 +765T9 31 +9J9J6 285 +6348T 264 +562J9 280 +998QQ 192 +99559 751 +999T9 817 +J5TT5 715 +37722 820 +595K5 435 +8A5A8 187 +59858 139 +42Q5Q 212 +KQQQQ 15 +5QQQQ 929 +Q777J 631 +66TTT 455 +56226 689 +73373 887 +K32T3 665 +3A36A 447 +QAAJ8 143 +84448 324 +T4344 759 +9J99Q 371 +98989 309 +72T46 717 +QQ5KT 821 +8T64A 236 +A2AA2 918 +52775 907 +7T7T7 211 +6Q782 535 +75A36 12 +Q9Q62 274 +T2463 752 +797J9 471 +K7KK7 414 +444K3 917 +4QQAQ 586 +59J64 895 +6K6J6 142 +6T464 366 +3K5AA 465 +3QQ4Q 769 +K5533 941 +T2299 39 +333TJ 597 +AA8AA 975 +9J4KK 198 +6QQ44 554 +44469 433 +264AQ 628 +9986J 178 +786J7 894 +86866 656 +5J555 156 +QTJQK 858 +A84AA 526 +32J37 132 +4666Q 427 +894QT 472 +7K469 1000 +9J77J 888 +95559 478 +44553 600 +K9J9K 37 +96979 814 +99393 148 +A99AA 88 +953TQ 708 +6KTQ3 437 +KKAJK 358 +72292 439 +63362 599 +5J88J 639 +74444 604 +6Q6J3 698 +TAA66 843 +9QQJ9 168 +TT8TT 381 +JJTA2 960 +36363 423 +455J8 602 +8A543 223 +Q8T42 884 +8A888 227 +AQAA5 872 +6K525 364 +58KA9 62 +33277 296 +KAKKA 386 +665T8 259 +KJKQK 593 +36355 85 +5KK47 926 +35539 17 +66466 19 +A979Q 589 +54888 218 +477JT 574 +66634 105 +76T25 161 +2739J 883 +J3433 808 +7J7J3 436 +7252T 721 +6QA2J 18 +2T373 334 +39393 770 +39969 262 +79T99 833 +2794Q 14 +9AK36 996 +JQ4QQ 579 +TJ53A 757 +JA7AA 302 +K3333 159 +4K4KA 424 +26T62 988 +A4582 571 +59999 841 +9999J 959 +882Q2 220 +74777 484 +48T53 179 +9T947 269 +8J62A 113 +88KAA 837 +5J2JQ 319 +9K499 904 +282A2 756 +78K63 801 +2A5A5 539 +Q6QJK 171 +55535 492 +7J775 323 +62626 291 +88883 459 +69336 196 +TTA4T 921 +6236T 667 +58K58 475 +68KK8 201 +55559 875 +26AAA 616 +4JT59 90 +T3333 831 +4A359 394 +53325 914 +T5886 268 +22T44 729 +34443 21 +TA72K 71 +KTJQJ 979 +4TT5T 790 +38983 949 +975T2 493 +AJ2KK 303 +85J75 367 +T44A4 694 +6346T 368 +83383 134 +639J2 126 +2435A 77 +6K972 741 +5TA55 622 +5TT66 567 +99949 193 +KJ973 357 +5QT38 225 +73A7A 748 +43555 233 +3A46J 335 +72272 154 +A3832 660 +74774 997 +96QAK 405 +4A844 305 +3J3J3 517 +K5KKK 720 +QQT7T 727 +55282 487 +523Q4 99 +55585 912 +QJK65 796 +222AJ 734 +TTKTT 235 +QK67J 245 +4A4JA 182 +9TAAT 84 +79K43 353 +AAQAJ 149 +8A8AA 587 +TA5J9 952 +58888 237 +79Q25 658 +258KT 512 +424T4 502 +6J666 485 +5555A 457 +7A523 809 +K5K66 188 +ATKKT 981 +33Q66 594 +75A88 987 +6J677 91 +68688 864 +QQ33Q 635 +22427 755 +AJK83 153 +42Q8K 802 +AJT8J 650 +5AK6A 691 +979K5 253 +5K45K 653 +AA459 93 +T2T8J 838 +49947 479 +7Q799 647 +J4524 208 +66K6K 943 +53232 902 +JJQQQ 869 +64K4K 534 +77799 406 +77J7J 844 +A75QK 971 +865A2 26 +KJ4AA 885 +TA856 835 +84A78 703 +J9696 92 +J28K2 891 +KKAAT 546 +K2592 531 +AA96A 676 +73KT7 793 +66JJ6 719 +99379 578 +8Q685 739 +QQQT9 282 +JJ4J4 420 +66969 106 +A7AQQ 850 +9K526 311 +AQ8TJ 246 +462K2 706 +656J6 504 +TQQ57 172 +77Q37 416 +5857Q 857 +QQQ3J 265 +44J84 354 +TT537 991 +QAT29 213 +8A9JA 823 +684Q2 275 +54T92 946 +5K55K 283 +94732 986 +55565 700 +6JA66 893 +3K33K 865 +JKKTK 641 +99636 984 +333T9 396 +24J25 828 +33AJ3 939 +J7J87 347 +84884 577 +3J366 666 +QQ4Q4 70 +KQ562 806 +95275 9 +86KKA 95 +7K67K 868 +TAATA 668 +7JK9J 614 +855J3 138 +59496 360 +66272 422 +7927A 255 +644J4 970 +3K33Q 284 +2T44J 346 +66626 775 +622AA 450 +JJJ8J 97 +T73T2 848 +26686 480 +8K58A 710 +5A55A 852 +34683 701 +2J827 834 +ATAAA 772 +9444J 853 +J2828 805 +JJ369 215 +J2962 849 +T7TTT 216 +9T23K 788 +T8759 38 +9777J 768 +934KQ 141 +K7A7J 738 +QQAAQ 446 +9J93T 524 +JAJAA 272 +22322 445 +6T699 340 +99939 203 +A5525 528 +7QKA2 754 +5J558 873 +JJJJJ 147 +24244 626 +JJJ2J 972 +JAAAA 740 +55QQQ 607 +44K45 804 +KKQKT 822 +J9A5A 905 +4A85T 892 +J3333 199 +KTA9T 798 +33393 294 +TJ986 692 +56J4T 510 +967J7 160 +JQQ33 59 +Q744Q 779 +2K8AK 87 +JJ852 189 +4K77Q 365 +42222 702 +A2272 792 +88949 874 +TKT9K 879 +Q59Q7 41 +TAT9T 477 +K4J4T 533 +2T2Q2 861 +K6JQ6 569 +JTT22 947 +2J64A 555 +K6TTQ 898 +AJJQ7 967 +QQ444 566 +TTT7Q 313 +K488T 977 +45992 723 +38Q33 495 +6T75J 927 +J323A 100 +QQQ77 395 +88799 746 +KK9KK 295 +JJ833 781 +87A2K 384 +AQ66A 61 +856Q2 191 +5765K 167 +J24TJ 591 +362QJ 640 +2JT43 654 +438J5 217 +73299 999 +33K2K 915 +2952T 300 +8666T 764 +22332 644 +3T9AA 307 +79877 575 +TJ6T7 516 +T6TJ6 163 +6T6J6 659 +4K426 511 +777A4 131 +44494 289 +QJ82J 690 +Q22Q6 760 +55527 529 +559A5 791 +KKQAK 704 +KA938 621 +KAK9A 934 +2J992 123 +QQ2QQ 994 +3TT5T 763 +6KKKK 3 +4254K 398 +J2442 522 +39J37 549 +64444 714 +KQ7Q9 226 +79T79 328 +TK3J6 20 +J5T95 762 +83882 474 +97777 916 +AT673 570 +2A333 998 +7J77K 146 +686QQ 518 +5T77T 671 +TQ2QQ 281 +J4444 784 +JK46T 118 +797QT 379 +48776 130 +484K4 173 +JK794 72 +7QQ6Q 725 +3KT24 209 +4J545 581 +63T6Q 339 +88AKQ 812 +99A89 101 +QQ799 55 +4Q8QK 610 +864J9 370 +4QJQT 107 +644QJ 669 +A3AAA 780 +9A8AT 950 +54342 25 +43433 164 +58554 559 +84887 50 +K9KKT 341 +T3JA9 104 +57T57 453 +J4JQ5 592 +KJJA5 688 +J8898 374 +59772 646 +K66QK 696 +T2T44 440 +Q7AJ3 120 +Q7777 532 +997KQ 292 +A4AAA 931 +K4KTJ 451 +4JAT8 655 +Q77Q3 169 +QTTQQ 618 +68ATK 257 +AJ4AA 948 +26636 603 +3J656 382 +4A6AT 936 +54555 846 +J3289 338 +66556 900 +J5A9J 112 +55T5T 735 +K6484 634 +444KK 862 +K6K6K 205 +K55KJ 842 +Q27QT 652 +73777 901 +949J9 4 +J26K3 889 +2AJK9 79 +22227 584 +54T9A 42 +995A5 736 +6QT48 452 +K6324 363 +7Q832 807 +6K633 951 +JKK7K 387 +2TK73 678 +T4JJT 552 +66665 908 +77877 232 +J88J8 789 +A8AA2 320 +92832 490 +44399 355 +AT953 750 +5A755 388 +KJ945 312 +JAA88 119 +QK9QK 521 +7T2T7 871 +6K4T9 583 +5AAAA 978 +T2JT4 174 +7J447 361 +8QJ8A 470 +T5263 43 +3K3KK 63 +88284 57 +48A72 722 +4T562 190 +6TT96 2 +3Q5QQ 221 +42744 401 +88442 345 +Q3Q22 686 +69Q28 177 +J33JQ 839 +833QA 392 +J8838 598 +QQK75 376 +8888J 413 +QQQQ6 488 +Q6Q6Q 127 +9T9JJ 158 +355TK 827 +4QAAA 765 +T7QJ7 498 +445T4 911 +AA2AA 337 +33733 672 +92KK4 958 +KJ746 231 +3632A 22 +3K45A 348 +T7673 938 +39J99 803 +Q8T72 58 +77444 49 +44AQ5 7 +657A4 663 +QAQQQ 580 +974TK 643 +2TJJ2 273 +89993 342 +TT333 590 +J88JT 920 +AQ2K6 240 +68644 229 +92A9J 391 +444AA 962 +48Q4Q 473 +Q3Q33 133 +7Q233 373 +2J2J2 878 +9J488 954 +AJ979 944 +8T3J8 352 +J87Q3 56 +QQ3KQ 224 +3K597 267 +9J2TQ 830 +J7444 36 +55757 605 +56556 732 +KA6QJ 290 +7T95A 955 +39344 434 +72T39 256 +3A333 102 +4K8A6 507 +55K9T 657 +622JT 24 +6J766 151 +9J9A9 238 +866J6 464 +6KJK6 851 +4T4T8 543 +KJA3K 248 +A4J86 537 +T8QJ8 454 +A93AA 421 +JJJQQ 863 +284K4 620 +9J978 67 +K7675 536 +TT7TA 287 +TJ92A 343 +4QT44 276 +7777T 78 +2QT26 444 +85558 230 +9A9A9 731 +Q5225 501 +22TQT 425 +555J6 930 +Q333A 563 +45844 202 +QA472 679 +7TJ77 442 +Q7222 122 +JK6JK 397 +99K9J 417 +44434 615 +J75A7 633 +AA2KA 728 +2Q22Q 68 +J55J5 359 +J4555 415 +66823 649 +JK3K3 896 +773J5 74 +T6777 28 +K9925 53 +K2KTK 611 +KKK44 89 +J3KKK 129 +TK8JA 109 +K3339 525 +Q59QJ 928 +J8TTT 402 +77757 612 +KKKK7 155 +85A59 197 +KQQK5 350 +6776K 301 +KKK55 910 +AQAQA 407 +92299 693 +9A779 175 +Q6A27 968 +85QQ8 761 +TA536 483 +66363 278 +Q53Q3 234 +K4A28 596 +7QA8T 565 +33355 503 +AAA67 40 +JA66A 351 +634KA 96 +JA555 489 +TA457 813 +A87JK 297 +7777J 527 +8J8T8 664 +6TK87 194 +88688 568 +QA8A6 867 +TT99T 228 +J5955 890 +52777 385 +AQ44Q 737 +9867T 299 +QTQTT 94 +QQTQ7 876 +T3TQ6 573 +5Q555 44 +A73T4 69 +QAT72 629 +K777K 636 +2222J 404 +Q4J4Q 103 +JT2A2 783 +J55JA 315 +585T5 744 +J3773 645 +5625A 608 +TA632 327 +4J4J4 523 +53535 824 +636K5 976 +4T278 318 +9Q77J 815 +64T87 758 +7QJQ7 547 +A7A8A 945 +Q6573 29 +2QQ2T 266 +AK427 152 +22592 304 +69AJ6 261 +T5T52 180 +TQ59J 705 +99669 648 +6TQJ4 785 +6AQQ5 430 +TQTQ5 389 +J7AQ5 176 +33A4A 463 +T8383 344 +Q636K 963 +Q3AAQ 1 +K29Q3 870 +JQ8TT 157 +2Q96J 491 +5KK94 709 +K44J5 856 +J233T 476 +K5555 326 +283K9 965 +TQAAA 23 +4T5JA 165 +6477A 81 +82855 836 +8T88T 973 +A3JA3 110 +49449 983 +92K2K 124 +8J777 336 +A8555 519 +JJQQA 409 +55865 617 +T4484 481 +K729T 777 +55A44 111 +667Q9 989 +A6J55 906 +3A44J 128 +K4A65 108 +Q8A88 680 +Q8K63 411 +4TT4Q 733 +893A4 937 +7374T 458 +659JK 144 +JQ642 601 +52333 712 +JQA3K 277 +QQ555 140 +5377A 117 +98T89 46 +T8T8T 674 +KQT88 243 +J7333 317 +KKQ7Q 560 +66636 33 +5AT6T 942 +24224 52 +A6276 797 +J99J9 60 +Q777A 80 +87TQJ 241 +56QT3 553 +KK9KJ 745 +AJQA9 707 +6JA99 408 +6385K 403 +K5JQQ 829 +6K644 985 +5K4Q3 530 +QQTQQ 51 +255K4 316 +T555J 499 +66Q66 882 +8K89J 166 +766T6 214 +A6AJQ 845 +886A9 969 +97264 974 +69Q69 551 +95529 642 +K569T 47 +K2222 333 +TKTKK 520 +J7JT7 632 +22822 242 +5282J 684 +9Q8T9 548 +9KJ75 957 +JKJKK 854 +6T6T6 270 +6Q6Q6 412 +AJKQ5 380 +J3335 508 +77677 623 +698K6 207 +QTT78 795 +AA5K4 332 +38838 932 +TTTJJ 956 +99TT8 418 +7454J 800 +Q7AAA 880 +TT5T5 494 +432AJ 429 +QK9AT 293 +6668Q 6 +6TT2J 847 +4A4A3 713 +4J9K2 469 +23333 136 +T4J28 819 +KA923 681 +A6256 210 +QAA33 953 +4JJ48 48 +9K5JK 576 +6Q5J3 390 +6AAAA 564 +62252 54 +AJT6J 993 +66JKJ 724 +44554 45 +992JK 260 +8T8Q4 239 +97A34 699 +KK85K 419 +8J638 557 +49K88 76 +8K99T 321 +Q9993 8 +57744 922 +24KKK 35 +TATAT 742 +QQ988 550 +5AK55 456 +5QK58 467 +T8TK5 743 +4Q66J 818 +3449J 585 +JA428 66 +8J957 562 +Q7KQQ 515 +2Q9QT 247 +8QQ88 670 +38783 86 +6646T 32 \ No newline at end of file diff --git a/2023/day7/p2/main.py b/2023/day7/p2/main.py new file mode 100644 index 0000000..d19dd22 --- /dev/null +++ b/2023/day7/p2/main.py @@ -0,0 +1,158 @@ +from enum import IntEnum + +INPUT_FILE = "input.text" + +possible_letter_cards = { + "A" : 14, + "K" : 13, + "Q" : 12, + "J" : 1, + "T" : 10 +} + +class HandType(IntEnum): + FiveOfAKind = 7 + FourOfAKind = 6 + FullHouse = 5 + ThreeOfAKind = 4 + TwoPair = 3 + OnePair = 2 + HighCard = 1 + +def card_to_value(card : str) -> int | None: + if len(card) > 1: + print("Input is more than one character") + return None + + if card in possible_letter_cards: + return possible_letter_cards[card] + + elif card.isdigit(): + num = int(card) + if num <= 9 and num >= 2: + return num + else: + print(f"Card invalid, Card: {card}") + return None + +class Hand: + cards : str + card_values : list[int] + bid : int + hand_type : HandType + + def __init__(self, hand : str, bid : int): + self.bid = bid + + self.cards = hand + self.card_values = [] + self.hand_type = self.find_hand_type(self.cards) + self.get_card_values() + + def find_hand_type(self, cards: str) -> int: + + # They just had to put the edge case in here + if cards == 'JJJJJ': + return HandType.FiveOfAKind + + if 'J' in cards: + best_hand = -1 + for card in cards: + + if card == 'J': + continue + + temp_cards = cards + temp_cards = temp_cards.replace('J', card) + + hand_value = self.find_hand_type(temp_cards) + + if hand_value > best_hand: + best_hand = hand_value + + return best_hand + + + matches : list[int] = [] + for card in cards: + temp_cards = cards + + temp_cards = temp_cards.replace(card, "") + + matches.append(len(temp_cards)) + + if matches.count(0) == 5: + return HandType.FiveOfAKind + elif matches.count(1) == 4: + return HandType.FourOfAKind + elif matches.count(2) == 3 and matches.count(3) == 2: + return HandType.FullHouse + elif matches.count(2) == 3: + return HandType.ThreeOfAKind + elif matches.count(3) == 4: + return HandType.TwoPair + elif matches.count(3) == 2: + return HandType.OnePair + else: + return HandType.HighCard + + def get_card_values(self) -> None: + for card in self.cards: + self.card_values.append(card_to_value(card)) + +def main() -> None: + with open(INPUT_FILE, "r") as f: + data = f.readlines() + + + # Get all our hands and figure out what they ard + hands: list[Hand] = [] + for line in data: + hand, bid = line.split() + + hands.append(Hand(hand, int(bid))) + + + # Sort and decide rank + total = 0 + sorted_hands: list[Hand] = bubbleSortHands(hands) + + for i in range(0, len(sorted_hands)): + rank = i + 1 + + total += sorted_hands[i].bid * rank + + print(f"Total Winnings: {total}") + +# is it fast? probably not, but it works +def bubbleSortHands(arr: list[Hand]) -> list[Hand]: + n: int = len(arr) + + for i in range(n): + swapped = False + + for j in range(0, n-i-1): + + if arr[j].hand_type > arr[j + 1].hand_type: + arr[j], arr[j + 1] = arr[j + 1], arr[j] + swapped = True + + # Do tie-breaker here (J's should count as 0 or like -1) + elif arr[j].hand_type == arr[j + 1].hand_type: + for card_index in range(0, 5): + if arr[j].card_values[card_index] > arr[j + 1].card_values[card_index]: + arr[j], arr[j + 1] = arr[j + 1], arr[j] + swapped = True + break + elif arr[j].card_values[card_index] < arr[j + 1].card_values[card_index]: + break + + + if (swapped == False): + break + + return arr + + +if __name__ == "__main__": + main() diff --git a/2023/day7/p2/test.text b/2023/day7/p2/test.text new file mode 100644 index 0000000..bf2815e --- /dev/null +++ b/2023/day7/p2/test.text @@ -0,0 +1,5 @@ +32T3K 765 +T55J5 684 +KK677 28 +KTJJT 220 +QQQJA 483 \ No newline at end of file diff --git a/2023/day8/p1/input.text b/2023/day8/p1/input.text new file mode 100644 index 0000000..bc50292 --- /dev/null +++ b/2023/day8/p1/input.text @@ -0,0 +1,788 @@ +LRRLLRRLLRRRLRLRRLRLRLRRLRLRLRLLLRRRLRLRRLLRLRRRLRRRLRLRLRRRLLRRLLRLRLRRRLRLLRRRLRLLRLRRRLRLRRRLRRRLLRRRLLRRRLRRLRRRLLRRRLRRLRRLRRLLRLRRLRRLRRRLRLRLRLRLRLRRRLLRLRRLRLRRLLRRLLRLRRLRRRLRLRLRLRRRLRRLRRLRRLRRLRRLRLRRRLRRRLRRRLRLRLLRRLRRRLRRLRLRRRLRRLRRRLRRLLRRLLLRRRR + +GSC = (CLG, RPF) +NTQ = (RMN, HLB) +LTX = (XFB, CGP) +RHK = (KRS, TPX) +KPK = (PRP, MKG) +NKV = (BHD, DQJ) +JNK = (RXN, BQX) +JXJ = (JFK, CCS) +LDC = (JBF, PHQ) +QRS = (VPM, FDD) +XRL = (SQT, VGH) +VQN = (BRP, VCF) +NBP = (GKC, HKC) +FCH = (KLN, RQV) +BQT = (KKX, RNZ) +SVN = (JGN, FSL) +FPL = (SDB, VQV) +RMQ = (CCV, JST) +DRB = (MSM, VHX) +DDF = (GHC, PSX) +GLR = (LFR, THG) +DGL = (JGQ, DHD) +RFQ = (BXJ, SRQ) +XTG = (XBB, TQJ) +PCL = (DDK, GNC) +FVG = (JKL, CRC) +GXQ = (CBS, RJS) +SDR = (LFR, THG) +KBM = (PCV, DBP) +XPJ = (GCS, GJD) +XRG = (LNK, KQL) +FPQ = (TPG, MQQ) +MSM = (LQG, KRF) +LFR = (THX, GFC) +KQK = (FQH, FCH) +HPH = (HHJ, VKM) +DHC = (QGV, FNH) +PQQ = (KKX, KKX) +TNQ = (LXD, KNG) +QNB = (TLX, VLF) +VKX = (BJL, GQB) +DTM = (KRQ, CLV) +BHS = (LFH, TVV) +MCJ = (BFJ, FCS) +CGQ = (MRH, SBD) +FBM = (RXQ, CFR) +NLQ = (QSD, LFZ) +VSK = (DGR, DFT) +HJG = (TFV, XJL) +XFB = (NKP, FBF) +JGL = (RGS, KTD) +MHS = (BNM, KSK) +RMG = (QNB, MHL) +XSX = (XBG, GVD) +FMV = (LVV, CQR) +CRK = (TRN, KKG) +VQV = (BPB, RFL) +THN = (QVH, DVT) +GNT = (RGS, KTD) +DCH = (GJD, GCS) +KTD = (LSF, MJC) +BDC = (FDH, MSK) +PRQ = (JGL, GNT) +PSR = (DHF, FPL) +XBB = (FRR, GSC) +SFB = (HGX, DFS) +VTJ = (HFH, KXN) +KJV = (TKP, THL) +BFF = (PLM, DGC) +VBV = (XDK, LLS) +KMV = (XDS, VQT) +JPD = (BHL, QJF) +DGR = (MTT, JCG) +PGK = (VCX, NLQ) +BFJ = (FHX, QFR) +VSF = (VKX, CTP) +PFJ = (BRP, VCF) +XVN = (VCX, VCX) +JQG = (SKM, THM) +CXS = (CRC, JKL) +RFL = (NNT, DMH) +RBH = (KHM, PLR) +PNT = (JCQ, XSR) +XHK = (GJK, BLQ) +CFR = (FHC, CTD) +JPP = (JFD, FPB) +RRT = (VVM, NFB) +RPF = (TKG, KVK) +JTF = (FBT, DLL) +PSX = (PDS, JPD) +TCH = (TDN, FRB) +RHT = (VNR, NHB) +TQJ = (GSC, FRR) +MCK = (NJD, XDX) +NPH = (XQF, NSL) +LQQ = (LCM, PHH) +VSV = (SFT, MVL) +KRS = (TGR, TGR) +DRR = (JXT, TSF) +QRQ = (NTG, MTL) +PJB = (RMN, HLB) +VFC = (KPH, PKM) +FHC = (CJM, FTQ) +DRC = (RBC, THN) +TRB = (JHX, LSC) +GCS = (TRB, MDB) +RCG = (MFT, FXM) +HCB = (LHB, JGH) +BFN = (RMG, KJH) +TPG = (NGM, XHQ) +JCS = (VGS, NSN) +SGT = (LHX, MPF) +NXM = (VPH, KGV) +XNC = (LTX, PHJ) +DNT = (KLS, RNC) +JGN = (TNN, BXD) +QJX = (XPJ, DCH) +LQP = (FRK, NFS) +HCL = (GBS, PGB) +FDD = (XQJ, XTS) +XTS = (TJL, LGJ) +HLR = (TBR, FPG) +DLL = (VJV, MJN) +LFH = (VBM, MHT) +LMD = (VGG, RHK) +JKL = (CMQ, QCN) +DDP = (GTH, HKM) +VNL = (VVL, CFP) +SGB = (MKL, DVQ) +KBJ = (BDF, SXQ) +DVT = (NMB, LCB) +XQJ = (TJL, LGJ) +HLB = (XHH, XNC) +VPT = (BRF, JPP) +PDS = (QJF, BHL) +CGG = (PLS, SNM) +SDB = (RFL, BPB) +DVQ = (XSX, KXQ) +XQS = (BPF, XLV) +CDG = (XKV, HMT) +JCG = (CFK, RPR) +RBC = (DVT, QVH) +BJB = (MVC, KXL) +LFZ = (HTT, QTF) +FTQ = (RLM, LMQ) +TCT = (FPH, FCC) +QXL = (BPF, XLV) +MXX = (BHX, QNX) +LSR = (FFJ, DMT) +RTD = (KBS, GDV) +TXH = (QBQ, NSF) +CSB = (CBP, QDQ) +GBS = (BRN, GXP) +GMX = (LHX, MPF) +JQV = (GMX, SGT) +GML = (GLR, SDR) +GCG = (RHT, KTF) +RPR = (XTG, JGT) +NDG = (QFD, HTD) +KBK = (VFP, BSC) +FVB = (RFQ, LLH) +CGP = (NKP, FBF) +RXQ = (FHC, CTD) +KQD = (CJN, DRR) +QTF = (FVH, TRV) +QDQ = (FBM, SLV) +NMT = (JST, CCV) +BHC = (RJM, SVN) +GMR = (LNT, XFP) +MSK = (VQN, PFJ) +CBV = (CGB, PGV) +MHT = (GMC, RSH) +BRN = (KQK, FXV) +XXM = (JGL, GNT) +VLF = (VNN, RRV) +FDH = (VQN, PFJ) +NFD = (MGN, GLL) +THM = (PLL, VTJ) +MPF = (JVN, DFC) +BNG = (RNC, KLS) +LGJ = (QHV, XBR) +QTJ = (TVT, NBP) +KRQ = (MDF, RLN) +PCK = (CCS, JFK) +DQV = (FLD, CSB) +HDD = (FGX, XRG) +TFL = (DQV, CJQ) +BNM = (KMV, CVX) +MLC = (CFP, VVL) +SBD = (MKD, DKP) +PSK = (DBV, BSF) +FRB = (BBD, TPB) +RKL = (HVK, DRN) +HMZ = (DRR, CJN) +LJK = (LBN, DDG) +LSC = (MXX, VFX) +TDN = (TPB, BBD) +RNX = (FBT, DLL) +QGJ = (KTS, RBF) +RFB = (BCF, MHS) +VGN = (TJP, VSF) +HFH = (FPQ, PGF) +HXX = (QFD, HTD) +RJS = (PCK, JXJ) +TRQ = (GCG, GQF) +KXN = (FPQ, PGF) +FMS = (XJL, TFV) +NMB = (QRQ, DGD) +BPF = (VMX, GXQ) +HCX = (XSR, JCQ) +RJR = (BNG, DNT) +BQX = (GQC, VLX) +DHD = (RLC, GVS) +DQJ = (HJG, FMS) +QFD = (TNQ, HSF) +HMT = (HSG, MHM) +BHD = (FMS, HJG) +NDF = (PLK, RTX) +GMC = (PNT, HCX) +GQX = (CPB, VNP) +BXD = (VNL, MLC) +DTD = (XLK, BVR) +KQT = (MRH, SBD) +QJH = (QMD, KBJ) +NFJ = (MVL, SFT) +JMH = (FVB, BMP) +BVF = (SFB, KSS) +RBF = (JCD, NDT) +QBX = (KJV, LBX) +NTG = (DPX, CBV) +DRL = (XXM, PRQ) +QNX = (SHD, LXG) +PNN = (KQD, HMZ) +CCS = (TQQ, DDP) +QSD = (QTF, HTT) +BVN = (JNK, TRT) +HSF = (KNG, LXD) +BHL = (DSB, SGB) +VFX = (BHX, QNX) +JFH = (TCH, DCB) +DBV = (SDL, CDG) +TRT = (RXN, BQX) +VLC = (MHS, BCF) +BBM = (HCB, FMB) +THG = (THX, GFC) +XKV = (HSG, MHM) +DSB = (MKL, DVQ) +XSC = (HVK, DRN) +SKM = (VTJ, PLL) +QFR = (KXP, QNS) +BMP = (RFQ, LLH) +MLM = (KRQ, CLV) +XNH = (JJJ, DHC) +KPM = (RBC, THN) +FGX = (LNK, KQL) +TSF = (BDD, KFL) +LXG = (XCG, TRP) +TBR = (HFK, LMB) +JFK = (TQQ, DDP) +TQH = (KJG, MQD) +RKT = (FGX, XRG) +DJF = (DJJ, LNQ) +FPM = (LRR, HJP) +PCJ = (XDX, NJD) +HFK = (NQN, LQQ) +SHB = (RMG, KJH) +KPJ = (XVN, PGK) +XSH = (LNH, VPT) +SQX = (BVR, XLK) +KTB = (QRS, KPF) +RKK = (GLM, JQG) +HTT = (TRV, FVH) +SDL = (XKV, HMT) +HCK = (FCK, QBJ) +SJF = (JQV, JLB) +QMT = (FPG, TBR) +HGX = (QLS, XLB) +VKM = (QFF, NLD) +FNH = (KQV, RFD) +HPM = (TRQ, QJS) +PMS = (LHM, CJL) +JTK = (XPG, XPG) +VMN = (SJB, JCS) +LNT = (SHM, NKV) +KFL = (RCB, BVF) +ZZZ = (NBP, TVT) +QPX = (BFF, KNR) +HSG = (LBC, RCN) +SLV = (CFR, RXQ) +KJH = (MHL, QNB) +FCK = (DSS, DSS) +RLL = (GBS, PGB) +VKJ = (RFB, VLC) +VSJ = (CGQ, KQT) +XDX = (HPH, VFJ) +LCB = (DGD, QRQ) +PLL = (HFH, KXN) +DMH = (BSR, FQV) +PPQ = (XFP, LNT) +PGB = (BRN, GXP) +JMN = (DFT, DGR) +RVT = (KTL, SFV) +JCH = (SJB, JCS) +KKG = (QPX, MLL) +KNB = (CPB, VNP) +HKM = (VFC, BXC) +QBT = (CJL, LHM) +GJM = (PQQ, BQT) +RLN = (LDG, JJH) +RJM = (JGN, FSL) +LHL = (HSC, LBV) +CVX = (VQT, XDS) +LVV = (MGX, DGL) +NSN = (JBX, GKM) +MTL = (DPX, CBV) +LBN = (NDG, HXX) +KLG = (DBP, PCV) +DGD = (MTL, NTG) +LDG = (JTK, JTK) +HCR = (GMR, PPQ) +DMB = (SQT, VGH) +LGK = (DBV, BSF) +FLG = (FCK, FCK) +KXL = (TXH, LQB) +MQD = (JNF, LSR) +RNC = (SMQ, FPM) +QFF = (NTD, VCM) +QLS = (DTK, CSG) +JGH = (LJQ, NSJ) +FSL = (BXD, TNN) +KLC = (TBT, CVN) +BDF = (KBK, NDR) +QMD = (SXQ, BDF) +VQT = (VBL, XHK) +CSC = (NLG, FQP) +SJB = (VGS, NSN) +NFS = (DDR, LTK) +DRA = (CJN, DRR) +LBX = (THL, TKP) +DJJ = (PLF, PLF) +MJN = (TBX, DRB) +TJP = (VKX, CTP) +DDR = (RLL, HCL) +LQB = (QBQ, NSF) +BKV = (PSR, NKS) +NKP = (XCH, XNH) +VCX = (QSD, QSD) +FQV = (HKH, VRD) +VPH = (DDF, PLQ) +HVS = (VPH, KGV) +BHX = (LXG, SHD) +RQV = (PHB, FDQ) +NSL = (MCJ, DBM) +GVD = (JBT, HKN) +TRN = (QPX, MLL) +XCG = (CXS, FVG) +KBF = (XVR, TFT) +CTD = (CJM, FTQ) +PRH = (FVB, BMP) +TLR = (NSL, XQF) +BLS = (VVM, NFB) +VVL = (MRB, NTX) +QGV = (RFD, KQV) +SRK = (GLM, JQG) +VHX = (LQG, KRF) +NHB = (PNG, NQL) +LLK = (XDK, LLS) +GQD = (TSX, KBF) +LHV = (QRS, KPF) +VNR = (PNG, NQL) +LBP = (PCJ, MCK) +TNN = (MLC, VNL) +KNR = (PLM, DGC) +BMD = (SJF, GTJ) +FPG = (HFK, LMB) +XFP = (SHM, NKV) +RSN = (LFH, TVV) +FGN = (DVR, GLV) +JHX = (VFX, MXX) +DDG = (NDG, HXX) +NQS = (NFJ, VSV) +MKD = (DTM, MLM) +CQQ = (KTL, SFV) +DGK = (FMB, HCB) +NSJ = (NKK, DRL) +JTS = (GTF, KBP) +VDG = (MCK, PCJ) +MGN = (PVK, KLC) +LBC = (SRK, RKK) +CJQ = (FLD, CSB) +MKG = (MHB, QPK) +XVR = (PCL, QDH) +QBQ = (LRB, VSJ) +FXM = (LGK, PSK) +LMQ = (TLR, NPH) +PKM = (VBC, XXR) +VJV = (TBX, DRB) +CCV = (JFH, QNK) +DMT = (RHS, JNG) +XHQ = (PGD, TCT) +DFC = (VMN, JCH) +JJJ = (FNH, QGV) +JNG = (KBM, KLG) +THX = (RSN, BHS) +TKG = (CQQ, RVT) +HPN = (PDH, KPJ) +BGS = (PSP, CMD) +BLH = (QJX, SGJ) +PRP = (QPK, MHB) +PMV = (HDD, RKT) +TRV = (TFL, MDD) +CJL = (FMV, FJQ) +JCQ = (KXF, HGT) +GRS = (RBR, QNR) +SGJ = (DCH, XPJ) +RTX = (RJR, JJF) +AAA = (TVT, NBP) +XDK = (SPG, BMD) +FBF = (XCH, XNH) +LHM = (FMV, FJQ) +SQT = (FVT, MDT) +XPG = (JTF, RNX) +MGX = (JGQ, DHD) +PHH = (QBT, PMS) +VJL = (MKG, PRP) +DCB = (FRB, TDN) +PRM = (BHC, QJV) +FRR = (RPF, CLG) +PGF = (MQQ, TPG) +NQL = (MGL, SCP) +CSG = (RRT, BLS) +NMK = (PSR, NKS) +MRH = (MKD, DKP) +SFV = (HCH, FGN) +BDD = (BVF, RCB) +MDD = (CJQ, DQV) +TGR = (PQQ, PQQ) +MDT = (VBV, LLK) +XXR = (MLF, TCX) +DVR = (CQD, NQS) +SXQ = (NDR, KBK) +KBP = (QTJ, ZZZ) +VRD = (TJN, FGM) +VNP = (GQD, MBH) +KHM = (TMM, QGJ) +JCD = (KPK, VJL) +BXJ = (FVP, PMV) +DFT = (MTT, JCG) +JRL = (VPT, LNH) +HCH = (DVR, GLV) +FPB = (JXF, DNF) +NDR = (VFP, BSC) +MQQ = (NGM, XHQ) +XBM = (GLR, SDR) +KQL = (RVJ, VGN) +FPH = (CRK, FSD) +GDV = (TQH, VRC) +LCM = (PMS, QBT) +NTX = (HPM, PNJ) +FDQ = (NXM, HVS) +KTF = (VNR, NHB) +GTJ = (JQV, JLB) +XHH = (LTX, PHJ) +QVX = (KBS, GDV) +VGG = (KRS, TPX) +PFM = (GTF, GTF) +KSK = (KMV, CVX) +RVL = (QMD, KBJ) +KXF = (NFD, HBL) +VCM = (QVX, RTD) +MBH = (KBF, TSX) +LNK = (VGN, RVJ) +TVV = (MHT, VBM) +FXF = (MSK, FDH) +VKB = (NMK, BKV) +VGH = (MDT, FVT) +NLG = (LJK, MFN) +DSS = (KQD, KQD) +VRG = (PFM, PFM) +TQQ = (GTH, HKM) +RSH = (HCX, PNT) +TKP = (KJP, GGM) +VRC = (MQD, KJG) +HJP = (KGF, SRS) +PSP = (QRF, HFJ) +NKK = (XXM, PRQ) +JJF = (DNT, BNG) +PLF = (RBR, RBR) +NJD = (HPH, VFJ) +RRV = (KNB, GQX) +GLV = (CQD, NQS) +XBR = (DMB, XRL) +SPG = (SJF, GTJ) +DKX = (FXF, BDC) +FQH = (RQV, KLN) +QBJ = (DSS, PNN) +VVM = (MNG, CSC) +KXQ = (XBG, GVD) +CFK = (JGT, XTG) +CMA = (LQP, XBV) +FCS = (QFR, FHX) +FFJ = (JNG, RHS) +LMB = (NQN, LQQ) +TMM = (RBF, KTS) +JXH = (VRG, BRX) +FBT = (VJV, MJN) +QCN = (HPN, MKH) +XDS = (XHK, VBL) +QNK = (TCH, DCB) +MKL = (KXQ, XSX) +MLF = (SJL, JTQ) +MGL = (TMX, DKX) +MTT = (CFK, RPR) +KRF = (QMT, HLR) +BSR = (VRD, HKH) +TJL = (QHV, XBR) +PCV = (NMT, RMQ) +FVP = (RKT, HDD) +SHM = (DQJ, BHD) +PNG = (SCP, MGL) +PGD = (FCC, FPH) +QJS = (GCG, GQF) +CFP = (MRB, NTX) +QGS = (RTX, PLK) +SJL = (XSC, RKL) +JST = (JFH, QNK) +TBX = (VHX, MSM) +DDZ = (PHQ, JBF) +KXP = (XBM, GML) +HKC = (NDF, QGS) +DHF = (VQV, SDB) +JXT = (BDD, KFL) +LQG = (QMT, HLR) +LXD = (RBH, CKT) +LXM = (XPG, XKZ) +XLV = (GXQ, VMX) +GLL = (PVK, KLC) +TSX = (XVR, TFT) +QRF = (DJF, KJM) +KJG = (JNF, LSR) +GQB = (XSH, JRL) +GKR = (LMD, KVB) +GVS = (QJH, RVL) +VPM = (XQJ, XTS) +QNR = (LDC, DDZ) +PVK = (TBT, CVN) +JCX = (SNM, PLS) +HHJ = (QFF, NLD) +TLX = (VNN, RRV) +GTF = (QTJ, QTJ) +LNQ = (PLF, GRS) +VBL = (GJK, BLQ) +DGC = (DGK, BBM) +NDT = (VJL, KPK) +KBS = (VRC, TQH) +RVJ = (TJP, VSF) +RBR = (LDC, LDC) +PDH = (XVN, XVN) +JBF = (VSK, JMN) +BBD = (MQR, JXH) +FVT = (VBV, LLK) +VBC = (MLF, TCX) +XKZ = (RNX, JTF) +MNA = (JTF, RNX) +VFJ = (HHJ, VKM) +GLM = (SKM, THM) +JNF = (FFJ, DMT) +MNG = (FQP, NLG) +MVL = (PRM, KLH) +RHS = (KBM, KLG) +CRC = (CMQ, QCN) +BPB = (DMH, NNT) +NLD = (VCM, NTD) +XCH = (JJJ, DHC) +CKT = (PLR, KHM) +NNT = (BSR, FQV) +GQC = (XQS, QXL) +GKM = (QTH, KHG) +GJD = (TRB, MDB) +CGB = (VXJ, VCG) +SMQ = (HJP, LRR) +RNP = (BLH, KHP) +MMP = (NCM, XPK) +VLX = (XQS, QXL) +XJL = (BVN, KGN) +LRB = (CGQ, KQT) +NGM = (TCT, PGD) +TBT = (KTB, LHV) +JLB = (SGT, GMX) +HFJ = (DJF, KJM) +RCN = (RKK, SRK) +KJM = (DJJ, LNQ) +CVN = (KTB, LHV) +PHB = (NXM, HVS) +KJP = (HCR, QPM) +SHD = (XCG, TRP) +KKX = (LQP, XBV) +FHX = (KXP, QNS) +CLV = (MDF, RLN) +FXV = (FQH, FCH) +HTD = (TNQ, HSF) +CJM = (LMQ, RLM) +BSF = (CDG, SDL) +JVN = (VMN, JCH) +KDK = (XSG, LHL) +FGM = (PJB, NTQ) +MRB = (PNJ, HPM) +JTQ = (XSC, RKL) +CJN = (TSF, JXT) +RLC = (QJH, RVL) +XLK = (CBK, JBG) +KLN = (FDQ, PHB) +JJH = (JTK, LXM) +TVT = (GKC, HKC) +QHV = (DMB, XRL) +TCX = (SJL, JTQ) +JBX = (KHG, QTH) +CQD = (NFJ, VSV) +KPF = (VPM, FDD) +KHG = (HCF, RNP) +BSC = (QBX, JVB) +KVK = (CQQ, RVT) +CPB = (GQD, MBH) +LTK = (RLL, HCL) +HVK = (XMR, BJB) +TFT = (QDH, PCL) +MHB = (TDF, RCG) +SRQ = (PMV, FVP) +NJA = (QTF, HTT) +RMN = (XHH, XNC) +VCG = (VDG, LBP) +LSF = (JMH, PRH) +THL = (GGM, KJP) +PLK = (RJR, JJF) +DKP = (DTM, MLM) +NQN = (LCM, PHH) +KNG = (RBH, CKT) +GKC = (NDF, QGS) +BRF = (FPB, JFD) +HKH = (FGM, TJN) +KTL = (HCH, FGN) +HKN = (MMP, BFV) +JVB = (KJV, LBX) +QVH = (LCB, NMB) +HHF = (XQC, GSF) +VGS = (JBX, GKM) +BXC = (KPH, PKM) +DBM = (FCS, BFJ) +QPK = (TDF, RCG) +VXJ = (LBP, VDG) +GGM = (HCR, QPM) +LHB = (LJQ, NSJ) +LJQ = (NKK, DRL) +JXF = (FLG, HCK) +PHJ = (XFB, CGP) +MKH = (PDH, KPJ) +MFT = (PSK, LGK) +CBS = (PCK, JXJ) +FRK = (LTK, DDR) +CMQ = (HPN, MKH) +QJV = (RJM, SVN) +KHP = (SGJ, QJX) +CQR = (MGX, DGL) +FJQ = (CQR, LVV) +HCF = (KHP, BLH) +LFC = (LMD, KVB) +DPX = (CGB, PGV) +DFS = (XLB, QLS) +DDK = (GKR, LFC) +KLS = (FPM, SMQ) +JGQ = (RLC, GVS) +LBV = (HHF, STJ) +JGT = (TQJ, XBB) +QRN = (LHL, XSG) +RFD = (QRN, KDK) +HSC = (STJ, HHF) +LNH = (BRF, JPP) +FSD = (TRN, KKG) +NSF = (VSJ, LRB) +QJF = (DSB, SGB) +MQR = (VRG, BRX) +XMR = (MVC, KXL) +VNN = (KNB, GQX) +NCM = (XLP, VKJ) +KTS = (JCD, NDT) +MDF = (LDG, LDG) +PLS = (BGS, VVD) +TPX = (TGR, GJM) +GJK = (SQX, DTD) +CTP = (BJL, GQB) +GXP = (FXV, KQK) +DRN = (BJB, XMR) +QDH = (GNC, DDK) +FMB = (JGH, LHB) +STJ = (GSF, XQC) +DNF = (FLG, HCK) +XSR = (KXF, HGT) +RNZ = (XBV, LQP) +RGS = (MJC, LSF) +GFC = (BHS, RSN) +GTH = (BXC, VFC) +PLM = (DGK, BBM) +KSS = (HGX, DFS) +SCP = (TMX, DKX) +RXN = (GQC, VLX) +PLR = (TMM, QGJ) +QTH = (HCF, RNP) +BRP = (CGG, JCX) +BVR = (JBG, CBK) +DTK = (BLS, RRT) +TPB = (MQR, JXH) +MJC = (PRH, JMH) +GSF = (KPM, DRC) +RVA = (JBF, PHQ) +BLQ = (DTD, SQX) +CBK = (BFN, SHB) +VBM = (GMC, RSH) +NFB = (CSC, MNG) +NKS = (FPL, DHF) +CLG = (KVK, TKG) +KLH = (QJV, BHC) +XQF = (DBM, MCJ) +BCF = (KSK, BNM) +XLP = (RFB, VLC) +MVC = (TXH, LQB) +LLS = (BMD, SPG) +TJN = (PJB, NTQ) +FQP = (LJK, MFN) +PHQ = (VSK, JMN) +XLB = (DTK, CSG) +MHM = (RCN, LBC) +LLH = (SRQ, BXJ) +FVH = (MDD, TFL) +RLM = (TLR, NPH) +MLL = (BFF, KNR) +CBP = (FBM, SLV) +MHL = (TLX, VLF) +MDB = (LSC, JHX) +KQV = (QRN, KDK) +SNM = (BGS, VVD) +KGV = (PLQ, DDF) +FCC = (FSD, CRK) +JFD = (JXF, DNF) +NTD = (RTD, QVX) +TDF = (FXM, MFT) +TMX = (BDC, FXF) +MFN = (LBN, DDG) +KGN = (TRT, JNK) +XPK = (VKJ, XLP) +JBT = (MMP, BFV) +PLQ = (PSX, GHC) +TRP = (CXS, FVG) +QPM = (GMR, PPQ) +VMX = (CBS, RJS) +BFV = (XPK, NCM) +LRR = (KGF, SRS) +KGF = (MRL, VKB) +PGV = (VCG, VXJ) +LHX = (JVN, DFC) +KPH = (VBC, XXR) +GQF = (RHT, KTF) +XQC = (KPM, DRC) +TFV = (BVN, KGN) +VVD = (CMD, PSP) +HGT = (NFD, HBL) +HBL = (MGN, GLL) +XBG = (JBT, HKN) +XSG = (LBV, HSC) +SRS = (MRL, VKB) +XBV = (NFS, FRK) +PNJ = (TRQ, QJS) +BRX = (PFM, JTS) +GHC = (JPD, PDS) +RCB = (KSS, SFB) +QNS = (GML, XBM) +GNC = (LFC, GKR) +MRL = (BKV, NMK) +KVB = (VGG, RHK) +VCF = (JCX, CGG) +VFP = (QBX, JVB) +FLD = (QDQ, CBP) +JBG = (SHB, BFN) +BJL = (JRL, XSH) +DBP = (RMQ, NMT) +SFT = (PRM, KLH) +CMD = (HFJ, QRF) \ No newline at end of file diff --git a/2023/day8/p1/main.py b/2023/day8/p1/main.py new file mode 100644 index 0000000..8b41a07 --- /dev/null +++ b/2023/day8/p1/main.py @@ -0,0 +1,58 @@ + + +INPUT_FILE = "input.text" +INSTRUCTIONS = [] +PATH = {} + +def read_file() -> None: + with open(INPUT_FILE, 'r') as file: + lines = file.readlines() + + line_index = 0 + for line in lines: + + # This in our instruction line + if line_index == 0: + for char in line: + if char == 'L': + INSTRUCTIONS.append(0) + elif char == 'R': + INSTRUCTIONS.append(1) + + elif line_index != 1: + source: str = line.split('=')[0].strip() + + dest = line.split('=')[1].strip()[1:-1].split(', ') + + PATH[source] = dest + + line_index += 1 + +def main() -> None: + read_file() + + # print(PATH) + + pos = 'AAA' + steps = 1 + while True: + done = False + + for instruction in INSTRUCTIONS: + pos = PATH[pos][instruction] + + if pos == 'ZZZ': + done = True + break + + steps += 1 + if done: + break + + print(f'Steps taken: {steps}') + + + + +if __name__ == "__main__": + main() diff --git a/2023/day8/p1/test.text b/2023/day8/p1/test.text new file mode 100644 index 0000000..34ffa8a --- /dev/null +++ b/2023/day8/p1/test.text @@ -0,0 +1,5 @@ +LLR + +AAA = (BBB, BBB) +BBB = (AAA, ZZZ) +ZZZ = (ZZZ, ZZZ) \ No newline at end of file diff --git a/2023/day8/p2/input.text b/2023/day8/p2/input.text new file mode 100644 index 0000000..bc50292 --- /dev/null +++ b/2023/day8/p2/input.text @@ -0,0 +1,788 @@ +LRRLLRRLLRRRLRLRRLRLRLRRLRLRLRLLLRRRLRLRRLLRLRRRLRRRLRLRLRRRLLRRLLRLRLRRRLRLLRRRLRLLRLRRRLRLRRRLRRRLLRRRLLRRRLRRLRRRLLRRRLRRLRRLRRLLRLRRLRRLRRRLRLRLRLRLRLRRRLLRLRRLRLRRLLRRLLRLRRLRRRLRLRLRLRRRLRRLRRLRRLRRLRRLRLRRRLRRRLRRRLRLRLLRRLRRRLRRLRLRRRLRRLRRRLRRLLRRLLLRRRR + +GSC = (CLG, RPF) +NTQ = (RMN, HLB) +LTX = (XFB, CGP) +RHK = (KRS, TPX) +KPK = (PRP, MKG) +NKV = (BHD, DQJ) +JNK = (RXN, BQX) +JXJ = (JFK, CCS) +LDC = (JBF, PHQ) +QRS = (VPM, FDD) +XRL = (SQT, VGH) +VQN = (BRP, VCF) +NBP = (GKC, HKC) +FCH = (KLN, RQV) +BQT = (KKX, RNZ) +SVN = (JGN, FSL) +FPL = (SDB, VQV) +RMQ = (CCV, JST) +DRB = (MSM, VHX) +DDF = (GHC, PSX) +GLR = (LFR, THG) +DGL = (JGQ, DHD) +RFQ = (BXJ, SRQ) +XTG = (XBB, TQJ) +PCL = (DDK, GNC) +FVG = (JKL, CRC) +GXQ = (CBS, RJS) +SDR = (LFR, THG) +KBM = (PCV, DBP) +XPJ = (GCS, GJD) +XRG = (LNK, KQL) +FPQ = (TPG, MQQ) +MSM = (LQG, KRF) +LFR = (THX, GFC) +KQK = (FQH, FCH) +HPH = (HHJ, VKM) +DHC = (QGV, FNH) +PQQ = (KKX, KKX) +TNQ = (LXD, KNG) +QNB = (TLX, VLF) +VKX = (BJL, GQB) +DTM = (KRQ, CLV) +BHS = (LFH, TVV) +MCJ = (BFJ, FCS) +CGQ = (MRH, SBD) +FBM = (RXQ, CFR) +NLQ = (QSD, LFZ) +VSK = (DGR, DFT) +HJG = (TFV, XJL) +XFB = (NKP, FBF) +JGL = (RGS, KTD) +MHS = (BNM, KSK) +RMG = (QNB, MHL) +XSX = (XBG, GVD) +FMV = (LVV, CQR) +CRK = (TRN, KKG) +VQV = (BPB, RFL) +THN = (QVH, DVT) +GNT = (RGS, KTD) +DCH = (GJD, GCS) +KTD = (LSF, MJC) +BDC = (FDH, MSK) +PRQ = (JGL, GNT) +PSR = (DHF, FPL) +XBB = (FRR, GSC) +SFB = (HGX, DFS) +VTJ = (HFH, KXN) +KJV = (TKP, THL) +BFF = (PLM, DGC) +VBV = (XDK, LLS) +KMV = (XDS, VQT) +JPD = (BHL, QJF) +DGR = (MTT, JCG) +PGK = (VCX, NLQ) +BFJ = (FHX, QFR) +VSF = (VKX, CTP) +PFJ = (BRP, VCF) +XVN = (VCX, VCX) +JQG = (SKM, THM) +CXS = (CRC, JKL) +RFL = (NNT, DMH) +RBH = (KHM, PLR) +PNT = (JCQ, XSR) +XHK = (GJK, BLQ) +CFR = (FHC, CTD) +JPP = (JFD, FPB) +RRT = (VVM, NFB) +RPF = (TKG, KVK) +JTF = (FBT, DLL) +PSX = (PDS, JPD) +TCH = (TDN, FRB) +RHT = (VNR, NHB) +TQJ = (GSC, FRR) +MCK = (NJD, XDX) +NPH = (XQF, NSL) +LQQ = (LCM, PHH) +VSV = (SFT, MVL) +KRS = (TGR, TGR) +DRR = (JXT, TSF) +QRQ = (NTG, MTL) +PJB = (RMN, HLB) +VFC = (KPH, PKM) +FHC = (CJM, FTQ) +DRC = (RBC, THN) +TRB = (JHX, LSC) +GCS = (TRB, MDB) +RCG = (MFT, FXM) +HCB = (LHB, JGH) +BFN = (RMG, KJH) +TPG = (NGM, XHQ) +JCS = (VGS, NSN) +SGT = (LHX, MPF) +NXM = (VPH, KGV) +XNC = (LTX, PHJ) +DNT = (KLS, RNC) +JGN = (TNN, BXD) +QJX = (XPJ, DCH) +LQP = (FRK, NFS) +HCL = (GBS, PGB) +FDD = (XQJ, XTS) +XTS = (TJL, LGJ) +HLR = (TBR, FPG) +DLL = (VJV, MJN) +LFH = (VBM, MHT) +LMD = (VGG, RHK) +JKL = (CMQ, QCN) +DDP = (GTH, HKM) +VNL = (VVL, CFP) +SGB = (MKL, DVQ) +KBJ = (BDF, SXQ) +DVT = (NMB, LCB) +XQJ = (TJL, LGJ) +HLB = (XHH, XNC) +VPT = (BRF, JPP) +PDS = (QJF, BHL) +CGG = (PLS, SNM) +SDB = (RFL, BPB) +DVQ = (XSX, KXQ) +XQS = (BPF, XLV) +CDG = (XKV, HMT) +JCG = (CFK, RPR) +RBC = (DVT, QVH) +BJB = (MVC, KXL) +LFZ = (HTT, QTF) +FTQ = (RLM, LMQ) +TCT = (FPH, FCC) +QXL = (BPF, XLV) +MXX = (BHX, QNX) +LSR = (FFJ, DMT) +RTD = (KBS, GDV) +TXH = (QBQ, NSF) +CSB = (CBP, QDQ) +GBS = (BRN, GXP) +GMX = (LHX, MPF) +JQV = (GMX, SGT) +GML = (GLR, SDR) +GCG = (RHT, KTF) +RPR = (XTG, JGT) +NDG = (QFD, HTD) +KBK = (VFP, BSC) +FVB = (RFQ, LLH) +CGP = (NKP, FBF) +RXQ = (FHC, CTD) +KQD = (CJN, DRR) +QTF = (FVH, TRV) +QDQ = (FBM, SLV) +NMT = (JST, CCV) +BHC = (RJM, SVN) +GMR = (LNT, XFP) +MSK = (VQN, PFJ) +CBV = (CGB, PGV) +MHT = (GMC, RSH) +BRN = (KQK, FXV) +XXM = (JGL, GNT) +VLF = (VNN, RRV) +FDH = (VQN, PFJ) +NFD = (MGN, GLL) +THM = (PLL, VTJ) +MPF = (JVN, DFC) +BNG = (RNC, KLS) +LGJ = (QHV, XBR) +QTJ = (TVT, NBP) +KRQ = (MDF, RLN) +PCK = (CCS, JFK) +DQV = (FLD, CSB) +HDD = (FGX, XRG) +TFL = (DQV, CJQ) +BNM = (KMV, CVX) +MLC = (CFP, VVL) +SBD = (MKD, DKP) +PSK = (DBV, BSF) +FRB = (BBD, TPB) +RKL = (HVK, DRN) +HMZ = (DRR, CJN) +LJK = (LBN, DDG) +LSC = (MXX, VFX) +TDN = (TPB, BBD) +RNX = (FBT, DLL) +QGJ = (KTS, RBF) +RFB = (BCF, MHS) +VGN = (TJP, VSF) +HFH = (FPQ, PGF) +HXX = (QFD, HTD) +RJS = (PCK, JXJ) +TRQ = (GCG, GQF) +KXN = (FPQ, PGF) +FMS = (XJL, TFV) +NMB = (QRQ, DGD) +BPF = (VMX, GXQ) +HCX = (XSR, JCQ) +RJR = (BNG, DNT) +BQX = (GQC, VLX) +DHD = (RLC, GVS) +DQJ = (HJG, FMS) +QFD = (TNQ, HSF) +HMT = (HSG, MHM) +BHD = (FMS, HJG) +NDF = (PLK, RTX) +GMC = (PNT, HCX) +GQX = (CPB, VNP) +BXD = (VNL, MLC) +DTD = (XLK, BVR) +KQT = (MRH, SBD) +QJH = (QMD, KBJ) +NFJ = (MVL, SFT) +JMH = (FVB, BMP) +BVF = (SFB, KSS) +RBF = (JCD, NDT) +QBX = (KJV, LBX) +NTG = (DPX, CBV) +DRL = (XXM, PRQ) +QNX = (SHD, LXG) +PNN = (KQD, HMZ) +CCS = (TQQ, DDP) +QSD = (QTF, HTT) +BVN = (JNK, TRT) +HSF = (KNG, LXD) +BHL = (DSB, SGB) +VFX = (BHX, QNX) +JFH = (TCH, DCB) +DBV = (SDL, CDG) +TRT = (RXN, BQX) +VLC = (MHS, BCF) +BBM = (HCB, FMB) +THG = (THX, GFC) +XKV = (HSG, MHM) +DSB = (MKL, DVQ) +XSC = (HVK, DRN) +SKM = (VTJ, PLL) +QFR = (KXP, QNS) +BMP = (RFQ, LLH) +MLM = (KRQ, CLV) +XNH = (JJJ, DHC) +KPM = (RBC, THN) +FGX = (LNK, KQL) +TSF = (BDD, KFL) +LXG = (XCG, TRP) +TBR = (HFK, LMB) +JFK = (TQQ, DDP) +TQH = (KJG, MQD) +RKT = (FGX, XRG) +DJF = (DJJ, LNQ) +FPM = (LRR, HJP) +PCJ = (XDX, NJD) +HFK = (NQN, LQQ) +SHB = (RMG, KJH) +KPJ = (XVN, PGK) +XSH = (LNH, VPT) +SQX = (BVR, XLK) +KTB = (QRS, KPF) +RKK = (GLM, JQG) +HTT = (TRV, FVH) +SDL = (XKV, HMT) +HCK = (FCK, QBJ) +SJF = (JQV, JLB) +QMT = (FPG, TBR) +HGX = (QLS, XLB) +VKM = (QFF, NLD) +FNH = (KQV, RFD) +HPM = (TRQ, QJS) +PMS = (LHM, CJL) +JTK = (XPG, XPG) +VMN = (SJB, JCS) +LNT = (SHM, NKV) +KFL = (RCB, BVF) +ZZZ = (NBP, TVT) +QPX = (BFF, KNR) +HSG = (LBC, RCN) +SLV = (CFR, RXQ) +KJH = (MHL, QNB) +FCK = (DSS, DSS) +RLL = (GBS, PGB) +VKJ = (RFB, VLC) +VSJ = (CGQ, KQT) +XDX = (HPH, VFJ) +LCB = (DGD, QRQ) +PLL = (HFH, KXN) +DMH = (BSR, FQV) +PPQ = (XFP, LNT) +PGB = (BRN, GXP) +JMN = (DFT, DGR) +RVT = (KTL, SFV) +JCH = (SJB, JCS) +KKG = (QPX, MLL) +KNB = (CPB, VNP) +HKM = (VFC, BXC) +QBT = (CJL, LHM) +GJM = (PQQ, BQT) +RLN = (LDG, JJH) +RJM = (JGN, FSL) +LHL = (HSC, LBV) +CVX = (VQT, XDS) +LVV = (MGX, DGL) +NSN = (JBX, GKM) +MTL = (DPX, CBV) +LBN = (NDG, HXX) +KLG = (DBP, PCV) +DGD = (MTL, NTG) +LDG = (JTK, JTK) +HCR = (GMR, PPQ) +DMB = (SQT, VGH) +LGK = (DBV, BSF) +FLG = (FCK, FCK) +KXL = (TXH, LQB) +MQD = (JNF, LSR) +RNC = (SMQ, FPM) +QFF = (NTD, VCM) +QLS = (DTK, CSG) +JGH = (LJQ, NSJ) +FSL = (BXD, TNN) +KLC = (TBT, CVN) +BDF = (KBK, NDR) +QMD = (SXQ, BDF) +VQT = (VBL, XHK) +CSC = (NLG, FQP) +SJB = (VGS, NSN) +NFS = (DDR, LTK) +DRA = (CJN, DRR) +LBX = (THL, TKP) +DJJ = (PLF, PLF) +MJN = (TBX, DRB) +TJP = (VKX, CTP) +DDR = (RLL, HCL) +LQB = (QBQ, NSF) +BKV = (PSR, NKS) +NKP = (XCH, XNH) +VCX = (QSD, QSD) +FQV = (HKH, VRD) +VPH = (DDF, PLQ) +HVS = (VPH, KGV) +BHX = (LXG, SHD) +RQV = (PHB, FDQ) +NSL = (MCJ, DBM) +GVD = (JBT, HKN) +TRN = (QPX, MLL) +XCG = (CXS, FVG) +KBF = (XVR, TFT) +CTD = (CJM, FTQ) +PRH = (FVB, BMP) +TLR = (NSL, XQF) +BLS = (VVM, NFB) +VVL = (MRB, NTX) +QGV = (RFD, KQV) +SRK = (GLM, JQG) +VHX = (LQG, KRF) +NHB = (PNG, NQL) +LLK = (XDK, LLS) +GQD = (TSX, KBF) +LHV = (QRS, KPF) +VNR = (PNG, NQL) +LBP = (PCJ, MCK) +TNN = (MLC, VNL) +KNR = (PLM, DGC) +BMD = (SJF, GTJ) +FPG = (HFK, LMB) +XFP = (SHM, NKV) +RSN = (LFH, TVV) +FGN = (DVR, GLV) +JHX = (VFX, MXX) +DDG = (NDG, HXX) +NQS = (NFJ, VSV) +MKD = (DTM, MLM) +CQQ = (KTL, SFV) +DGK = (FMB, HCB) +NSJ = (NKK, DRL) +JTS = (GTF, KBP) +VDG = (MCK, PCJ) +MGN = (PVK, KLC) +LBC = (SRK, RKK) +CJQ = (FLD, CSB) +MKG = (MHB, QPK) +XVR = (PCL, QDH) +QBQ = (LRB, VSJ) +FXM = (LGK, PSK) +LMQ = (TLR, NPH) +PKM = (VBC, XXR) +VJV = (TBX, DRB) +CCV = (JFH, QNK) +DMT = (RHS, JNG) +XHQ = (PGD, TCT) +DFC = (VMN, JCH) +JJJ = (FNH, QGV) +JNG = (KBM, KLG) +THX = (RSN, BHS) +TKG = (CQQ, RVT) +HPN = (PDH, KPJ) +BGS = (PSP, CMD) +BLH = (QJX, SGJ) +PRP = (QPK, MHB) +PMV = (HDD, RKT) +TRV = (TFL, MDD) +CJL = (FMV, FJQ) +JCQ = (KXF, HGT) +GRS = (RBR, QNR) +SGJ = (DCH, XPJ) +RTX = (RJR, JJF) +AAA = (TVT, NBP) +XDK = (SPG, BMD) +FBF = (XCH, XNH) +LHM = (FMV, FJQ) +SQT = (FVT, MDT) +XPG = (JTF, RNX) +MGX = (JGQ, DHD) +PHH = (QBT, PMS) +VJL = (MKG, PRP) +DCB = (FRB, TDN) +PRM = (BHC, QJV) +FRR = (RPF, CLG) +PGF = (MQQ, TPG) +NQL = (MGL, SCP) +CSG = (RRT, BLS) +NMK = (PSR, NKS) +MRH = (MKD, DKP) +SFV = (HCH, FGN) +BDD = (BVF, RCB) +MDD = (CJQ, DQV) +TGR = (PQQ, PQQ) +MDT = (VBV, LLK) +XXR = (MLF, TCX) +DVR = (CQD, NQS) +SXQ = (NDR, KBK) +KBP = (QTJ, ZZZ) +VRD = (TJN, FGM) +VNP = (GQD, MBH) +KHM = (TMM, QGJ) +JCD = (KPK, VJL) +BXJ = (FVP, PMV) +DFT = (MTT, JCG) +JRL = (VPT, LNH) +HCH = (DVR, GLV) +FPB = (JXF, DNF) +NDR = (VFP, BSC) +MQQ = (NGM, XHQ) +XBM = (GLR, SDR) +KQL = (RVJ, VGN) +FPH = (CRK, FSD) +GDV = (TQH, VRC) +LCM = (PMS, QBT) +NTX = (HPM, PNJ) +FDQ = (NXM, HVS) +KTF = (VNR, NHB) +GTJ = (JQV, JLB) +XHH = (LTX, PHJ) +QVX = (KBS, GDV) +VGG = (KRS, TPX) +PFM = (GTF, GTF) +KSK = (KMV, CVX) +RVL = (QMD, KBJ) +KXF = (NFD, HBL) +VCM = (QVX, RTD) +MBH = (KBF, TSX) +LNK = (VGN, RVJ) +TVV = (MHT, VBM) +FXF = (MSK, FDH) +VKB = (NMK, BKV) +VGH = (MDT, FVT) +NLG = (LJK, MFN) +DSS = (KQD, KQD) +VRG = (PFM, PFM) +TQQ = (GTH, HKM) +RSH = (HCX, PNT) +TKP = (KJP, GGM) +VRC = (MQD, KJG) +HJP = (KGF, SRS) +PSP = (QRF, HFJ) +NKK = (XXM, PRQ) +JJF = (DNT, BNG) +PLF = (RBR, RBR) +NJD = (HPH, VFJ) +RRV = (KNB, GQX) +GLV = (CQD, NQS) +XBR = (DMB, XRL) +SPG = (SJF, GTJ) +DKX = (FXF, BDC) +FQH = (RQV, KLN) +QBJ = (DSS, PNN) +VVM = (MNG, CSC) +KXQ = (XBG, GVD) +CFK = (JGT, XTG) +CMA = (LQP, XBV) +FCS = (QFR, FHX) +FFJ = (JNG, RHS) +LMB = (NQN, LQQ) +TMM = (RBF, KTS) +JXH = (VRG, BRX) +FBT = (VJV, MJN) +QCN = (HPN, MKH) +XDS = (XHK, VBL) +QNK = (TCH, DCB) +MKL = (KXQ, XSX) +MLF = (SJL, JTQ) +MGL = (TMX, DKX) +MTT = (CFK, RPR) +KRF = (QMT, HLR) +BSR = (VRD, HKH) +TJL = (QHV, XBR) +PCV = (NMT, RMQ) +FVP = (RKT, HDD) +SHM = (DQJ, BHD) +PNG = (SCP, MGL) +PGD = (FCC, FPH) +QJS = (GCG, GQF) +CFP = (MRB, NTX) +QGS = (RTX, PLK) +SJL = (XSC, RKL) +JST = (JFH, QNK) +TBX = (VHX, MSM) +DDZ = (PHQ, JBF) +KXP = (XBM, GML) +HKC = (NDF, QGS) +DHF = (VQV, SDB) +JXT = (BDD, KFL) +LQG = (QMT, HLR) +LXD = (RBH, CKT) +LXM = (XPG, XKZ) +XLV = (GXQ, VMX) +GLL = (PVK, KLC) +TSX = (XVR, TFT) +QRF = (DJF, KJM) +KJG = (JNF, LSR) +GQB = (XSH, JRL) +GKR = (LMD, KVB) +GVS = (QJH, RVL) +VPM = (XQJ, XTS) +QNR = (LDC, DDZ) +PVK = (TBT, CVN) +JCX = (SNM, PLS) +HHJ = (QFF, NLD) +TLX = (VNN, RRV) +GTF = (QTJ, QTJ) +LNQ = (PLF, GRS) +VBL = (GJK, BLQ) +DGC = (DGK, BBM) +NDT = (VJL, KPK) +KBS = (VRC, TQH) +RVJ = (TJP, VSF) +RBR = (LDC, LDC) +PDH = (XVN, XVN) +JBF = (VSK, JMN) +BBD = (MQR, JXH) +FVT = (VBV, LLK) +VBC = (MLF, TCX) +XKZ = (RNX, JTF) +MNA = (JTF, RNX) +VFJ = (HHJ, VKM) +GLM = (SKM, THM) +JNF = (FFJ, DMT) +MNG = (FQP, NLG) +MVL = (PRM, KLH) +RHS = (KBM, KLG) +CRC = (CMQ, QCN) +BPB = (DMH, NNT) +NLD = (VCM, NTD) +XCH = (JJJ, DHC) +CKT = (PLR, KHM) +NNT = (BSR, FQV) +GQC = (XQS, QXL) +GKM = (QTH, KHG) +GJD = (TRB, MDB) +CGB = (VXJ, VCG) +SMQ = (HJP, LRR) +RNP = (BLH, KHP) +MMP = (NCM, XPK) +VLX = (XQS, QXL) +XJL = (BVN, KGN) +LRB = (CGQ, KQT) +NGM = (TCT, PGD) +TBT = (KTB, LHV) +JLB = (SGT, GMX) +HFJ = (DJF, KJM) +RCN = (RKK, SRK) +KJM = (DJJ, LNQ) +CVN = (KTB, LHV) +PHB = (NXM, HVS) +KJP = (HCR, QPM) +SHD = (XCG, TRP) +KKX = (LQP, XBV) +FHX = (KXP, QNS) +CLV = (MDF, RLN) +FXV = (FQH, FCH) +HTD = (TNQ, HSF) +CJM = (LMQ, RLM) +BSF = (CDG, SDL) +JVN = (VMN, JCH) +KDK = (XSG, LHL) +FGM = (PJB, NTQ) +MRB = (PNJ, HPM) +JTQ = (XSC, RKL) +CJN = (TSF, JXT) +RLC = (QJH, RVL) +XLK = (CBK, JBG) +KLN = (FDQ, PHB) +JJH = (JTK, LXM) +TVT = (GKC, HKC) +QHV = (DMB, XRL) +TCX = (SJL, JTQ) +JBX = (KHG, QTH) +CQD = (NFJ, VSV) +KPF = (VPM, FDD) +KHG = (HCF, RNP) +BSC = (QBX, JVB) +KVK = (CQQ, RVT) +CPB = (GQD, MBH) +LTK = (RLL, HCL) +HVK = (XMR, BJB) +TFT = (QDH, PCL) +MHB = (TDF, RCG) +SRQ = (PMV, FVP) +NJA = (QTF, HTT) +RMN = (XHH, XNC) +VCG = (VDG, LBP) +LSF = (JMH, PRH) +THL = (GGM, KJP) +PLK = (RJR, JJF) +DKP = (DTM, MLM) +NQN = (LCM, PHH) +KNG = (RBH, CKT) +GKC = (NDF, QGS) +BRF = (FPB, JFD) +HKH = (FGM, TJN) +KTL = (HCH, FGN) +HKN = (MMP, BFV) +JVB = (KJV, LBX) +QVH = (LCB, NMB) +HHF = (XQC, GSF) +VGS = (JBX, GKM) +BXC = (KPH, PKM) +DBM = (FCS, BFJ) +QPK = (TDF, RCG) +VXJ = (LBP, VDG) +GGM = (HCR, QPM) +LHB = (LJQ, NSJ) +LJQ = (NKK, DRL) +JXF = (FLG, HCK) +PHJ = (XFB, CGP) +MKH = (PDH, KPJ) +MFT = (PSK, LGK) +CBS = (PCK, JXJ) +FRK = (LTK, DDR) +CMQ = (HPN, MKH) +QJV = (RJM, SVN) +KHP = (SGJ, QJX) +CQR = (MGX, DGL) +FJQ = (CQR, LVV) +HCF = (KHP, BLH) +LFC = (LMD, KVB) +DPX = (CGB, PGV) +DFS = (XLB, QLS) +DDK = (GKR, LFC) +KLS = (FPM, SMQ) +JGQ = (RLC, GVS) +LBV = (HHF, STJ) +JGT = (TQJ, XBB) +QRN = (LHL, XSG) +RFD = (QRN, KDK) +HSC = (STJ, HHF) +LNH = (BRF, JPP) +FSD = (TRN, KKG) +NSF = (VSJ, LRB) +QJF = (DSB, SGB) +MQR = (VRG, BRX) +XMR = (MVC, KXL) +VNN = (KNB, GQX) +NCM = (XLP, VKJ) +KTS = (JCD, NDT) +MDF = (LDG, LDG) +PLS = (BGS, VVD) +TPX = (TGR, GJM) +GJK = (SQX, DTD) +CTP = (BJL, GQB) +GXP = (FXV, KQK) +DRN = (BJB, XMR) +QDH = (GNC, DDK) +FMB = (JGH, LHB) +STJ = (GSF, XQC) +DNF = (FLG, HCK) +XSR = (KXF, HGT) +RNZ = (XBV, LQP) +RGS = (MJC, LSF) +GFC = (BHS, RSN) +GTH = (BXC, VFC) +PLM = (DGK, BBM) +KSS = (HGX, DFS) +SCP = (TMX, DKX) +RXN = (GQC, VLX) +PLR = (TMM, QGJ) +QTH = (HCF, RNP) +BRP = (CGG, JCX) +BVR = (JBG, CBK) +DTK = (BLS, RRT) +TPB = (MQR, JXH) +MJC = (PRH, JMH) +GSF = (KPM, DRC) +RVA = (JBF, PHQ) +BLQ = (DTD, SQX) +CBK = (BFN, SHB) +VBM = (GMC, RSH) +NFB = (CSC, MNG) +NKS = (FPL, DHF) +CLG = (KVK, TKG) +KLH = (QJV, BHC) +XQF = (DBM, MCJ) +BCF = (KSK, BNM) +XLP = (RFB, VLC) +MVC = (TXH, LQB) +LLS = (BMD, SPG) +TJN = (PJB, NTQ) +FQP = (LJK, MFN) +PHQ = (VSK, JMN) +XLB = (DTK, CSG) +MHM = (RCN, LBC) +LLH = (SRQ, BXJ) +FVH = (MDD, TFL) +RLM = (TLR, NPH) +MLL = (BFF, KNR) +CBP = (FBM, SLV) +MHL = (TLX, VLF) +MDB = (LSC, JHX) +KQV = (QRN, KDK) +SNM = (BGS, VVD) +KGV = (PLQ, DDF) +FCC = (FSD, CRK) +JFD = (JXF, DNF) +NTD = (RTD, QVX) +TDF = (FXM, MFT) +TMX = (BDC, FXF) +MFN = (LBN, DDG) +KGN = (TRT, JNK) +XPK = (VKJ, XLP) +JBT = (MMP, BFV) +PLQ = (PSX, GHC) +TRP = (CXS, FVG) +QPM = (GMR, PPQ) +VMX = (CBS, RJS) +BFV = (XPK, NCM) +LRR = (KGF, SRS) +KGF = (MRL, VKB) +PGV = (VCG, VXJ) +LHX = (JVN, DFC) +KPH = (VBC, XXR) +GQF = (RHT, KTF) +XQC = (KPM, DRC) +TFV = (BVN, KGN) +VVD = (CMD, PSP) +HGT = (NFD, HBL) +HBL = (MGN, GLL) +XBG = (JBT, HKN) +XSG = (LBV, HSC) +SRS = (MRL, VKB) +XBV = (NFS, FRK) +PNJ = (TRQ, QJS) +BRX = (PFM, JTS) +GHC = (JPD, PDS) +RCB = (KSS, SFB) +QNS = (GML, XBM) +GNC = (LFC, GKR) +MRL = (BKV, NMK) +KVB = (VGG, RHK) +VCF = (JCX, CGG) +VFP = (QBX, JVB) +FLD = (QDQ, CBP) +JBG = (SHB, BFN) +BJL = (JRL, XSH) +DBP = (RMQ, NMT) +SFT = (PRM, KLH) +CMD = (HFJ, QRF) \ No newline at end of file diff --git a/2023/day8/p2/main.py b/2023/day8/p2/main.py new file mode 100644 index 0000000..15c1a31 --- /dev/null +++ b/2023/day8/p2/main.py @@ -0,0 +1,71 @@ + + +INPUT_FILE = "input.text" +INSTRUCTIONS = [] +PATH = {} +import math + +def read_file() -> None: + with open(INPUT_FILE, 'r') as file: + lines = file.readlines() + + line_index = 0 + for line in lines: + + # This in our instruction line + if line_index == 0: + for char in line: + if char == 'L': + INSTRUCTIONS.append(0) + elif char == 'R': + INSTRUCTIONS.append(1) + + elif line_index != 1: + source: str = line.split('=')[0].strip() + + dest = line.split('=')[1].strip()[1:-1].split(', ') + + PATH[source] = dest + + line_index += 1 + +def main() -> None: + read_file() + + # print(PATH) + + # Find all starting positions (because we're a ghost in the 4th dimension) + initial_positions = [] + for pos in PATH: + if pos[2] == 'A': + initial_positions.append(pos) + + # Find how many steps for each ghost to get to Z + steps_to_finish = [] + for pos in initial_positions: + + steps = 0 + done = False + while True: + + for instruction in INSTRUCTIONS: + + pos = PATH[pos][instruction] + + if pos[2] == 'Z': + done = True + break + + steps += 1 + + if done: + steps_to_finish.append(steps + 1) + break + + print(f'Steps to finish: {math.lcm(*steps_to_finish)}') + + + + +if __name__ == "__main__": + main() diff --git a/2023/day8/p2/test.text b/2023/day8/p2/test.text new file mode 100644 index 0000000..a8e2c98 --- /dev/null +++ b/2023/day8/p2/test.text @@ -0,0 +1,10 @@ +LR + +11A = (11B, XXX) +11B = (XXX, 11Z) +11Z = (11B, XXX) +22A = (22B, XXX) +22B = (22C, 22C) +22C = (22Z, 22Z) +22Z = (22B, 22B) +XXX = (XXX, XXX) \ No newline at end of file diff --git a/2023/day9/p1/input.text b/2023/day9/p1/input.text new file mode 100644 index 0000000..69b1925 --- /dev/null +++ b/2023/day9/p1/input.text @@ -0,0 +1,200 @@ +14 26 47 96 208 446 930 1893 3779 7407 14241 26832 49537 89675 159354 278299 478132 808704 1347259 2211424 3577270 +11 35 81 158 275 441 665 956 1323 1775 2321 2970 3731 4613 5625 6776 8075 9531 11153 12950 14931 +18 27 40 59 81 91 50 -122 -568 -1521 -3336 -6527 -11809 -20145 -32798 -51388 -77954 -115021 -165672 -233625 -323315 +7 10 19 34 55 82 115 154 199 250 307 370 439 514 595 682 775 874 979 1090 1207 +11 32 70 137 253 449 772 1300 2190 3797 6927 13359 26967 56231 119897 259515 566513 1239226 2700380 5834113 12454133 +5 20 64 149 285 480 740 1069 1469 1940 2480 3085 3749 4464 5220 6005 6805 7604 8384 9125 9805 +7 28 64 127 256 545 1192 2577 5377 10726 20428 37231 65170 109987 179636 284881 439995 663568 979432 1417711 2016004 +-2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 +18 45 90 155 249 397 664 1212 2414 5058 10686 22128 44309 85428 158632 284335 493362 831131 1363122 2181921 3416169 +10 14 9 5 21 93 304 858 2242 5556 13150 29813 64971 136807 280216 562651 1116306 2203618 4348835 8596161 17001841 +21 41 85 180 374 742 1405 2583 4714 8699 16393 31574 61822 122106 241587 476607 935964 1831346 3580258 7018773 13841427 +5 2 6 30 95 234 491 915 1554 2457 3703 5523 8713 15826 34179 82647 205703 500400 1165216 2584176 5465751 +24 36 60 106 187 320 521 806 1235 2077 4242 10247 26211 65806 157892 361020 790614 1669390 3420164 6835692 13387759 +27 36 43 64 142 360 868 1954 4203 8802 18064 36259 70860 134374 247150 442223 774975 1344404 2341497 4158158 7625686 +3 26 65 124 213 352 591 1063 2089 4356 9191 18956 37591 71334 129649 226395 381271 621574 984309 1518692 2289089 +14 11 19 50 128 315 763 1807 4114 8903 18251 35500 65780 116663 198963 327697 523222 812563 1230947 1823558 2647528 +7 25 55 96 147 207 275 350 431 517 607 700 795 891 987 1082 1175 1265 1351 1432 1507 +4 20 52 102 172 264 380 522 692 892 1124 1390 1692 2032 2412 2834 3300 3812 4372 4982 5644 +12 12 26 79 205 448 871 1577 2742 4665 7868 13347 23205 42121 80471 160487 327720 671410 1359366 2695903 5215645 +0 -5 -19 -42 -56 -11 190 707 1780 3747 7063 12320 20268 31837 48160 70597 100760 140539 192129 258058 341216 +-2 -8 -4 20 70 145 240 357 523 807 1311 2072 2738 1758 -5346 -29249 -92392 -237526 -539350 -1117924 -2149630 +-5 -10 -11 8 77 246 598 1278 2554 4945 9495 18359 36020 71695 143811 287798 568801 1101338 2079037 3821332 6855171 +4 3 21 80 211 461 917 1759 3353 6408 12262 23439 44729 85167 161385 302817 559054 1009141 1771607 3012302 4944411 +22 34 50 86 170 359 784 1749 3934 8783 19198 40724 83538 165840 319898 603491 1122806 2079904 3872226 7299442 13984490 +23 30 48 88 163 300 570 1157 2507 5632 12710 28259 61453 130759 273345 564318 1156141 2359172 4805190 9776416 19859989 +-8 -12 -15 -17 -18 -18 -17 -15 -12 -8 -3 3 10 18 27 37 48 60 73 87 102 +12 14 23 45 102 247 580 1269 2578 4894 8728 14643 23033 33638 44646 51286 44214 9398 -64873 -158619 -131618 +11 17 25 37 50 57 63 140 567 2132 6711 18277 44524 99329 206393 404850 759118 1379591 2472170 4462351 8302561 +20 30 52 106 228 481 966 1833 3292 5624 9192 14452 21964 32403 46570 65403 89988 121570 161564 211566 273364 +19 35 62 100 148 202 264 372 654 1399 3129 6654 13105 23978 41297 68130 109885 177091 290752 491872 857410 +26 53 92 147 230 362 569 880 1356 2228 4324 10158 26391 68939 172950 411497 929690 2005975 4161296 8352141 16309216 +14 28 53 109 222 414 702 1129 1859 3378 6861 14805 32108 67918 138842 274682 529326 1003298 1894435 3617291 7086724 +0 10 48 129 283 568 1090 2035 3720 6689 11927 21355 38926 72920 140574 277328 555542 1123404 2287945 4694976 9719897 +6 12 20 37 75 160 354 801 1812 4008 8543 17429 33981 63405 113625 196746 332414 556348 941370 1645501 3013355 +17 23 29 35 41 47 53 59 65 71 77 83 89 95 101 107 113 119 125 131 137 +13 27 50 83 129 193 298 531 1133 2647 6138 13499 27857 54093 99490 174523 293805 477203 751138 1150083 1718273 +28 43 58 73 88 103 118 133 148 163 178 193 208 223 238 253 268 283 298 313 328 +11 9 4 -6 -32 -95 -222 -437 -733 -973 -600 2069 11356 37240 101235 247946 568267 1246553 2656208 5549892 11427768 +25 46 78 121 175 240 316 403 501 610 730 861 1003 1156 1320 1495 1681 1878 2086 2305 2535 +17 28 57 125 276 592 1206 2313 4189 7247 12190 20366 34490 59973 107187 195096 356793 647598 1156487 2021731 3451720 +24 45 84 157 299 582 1135 2162 3951 6861 11277 17571 26268 39002 61652 112657 242756 579095 1420548 3439575 8102595 +21 38 57 74 91 122 210 467 1155 2840 6683 15001 32365 67738 138540 278114 548921 1064986 2028733 3789476 6933575 +8 19 49 99 166 247 345 489 795 1610 3796 9226 21579 47536 98494 192930 359562 641469 1101347 1828093 2944924 +13 32 68 127 228 417 781 1462 2671 4702 7946 12905 20206 30615 45051 64600 90529 124300 167584 222275 290504 +13 23 35 45 59 104 245 624 1547 3653 8200 17500 35563 69181 130275 241965 454837 889032 1837669 4008880 9069103 +13 18 24 33 50 93 221 590 1552 3829 8843 19391 41067 85240 175168 358274 730288 1481876 2987401 5972131 11825257 +14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 +8 28 71 152 288 498 803 1226 1792 2528 3463 4628 6056 7782 9843 12278 15128 18436 22247 26608 31568 +2 -3 -2 20 86 241 589 1370 3115 6958 15253 32753 68782 141126 282900 554641 1065785 2013448 3754005 6938327 12772443 +8 8 -1 -29 -91 -197 -333 -435 -345 303 2402 8180 23048 59530 145226 338410 757762 1637618 3428041 6971393 13805807 +25 40 71 134 245 417 659 984 1442 2209 3797 7534 16663 38852 91816 215490 497315 1122518 2469919 5287326 11001021 +24 36 54 96 192 399 831 1704 3396 6522 12024 21276 36204 59421 94377 145524 218496 320304 459546 646632 894024 +-5 -3 0 5 27 110 355 969 2345 5199 10832 21665 42319 81683 156661 298762 565880 1064795 1998131 3769177 7221916 +20 39 64 88 98 79 29 -13 69 503 1659 4090 8641 16751 31174 57485 106922 201351 381434 719436 1338532 +9 26 43 56 69 113 292 872 2425 6031 13527 27773 52881 94324 158808 253751 386169 560720 776603 1022950 1272285 +-2 -6 -8 10 86 287 734 1656 3486 7012 13596 25474 46150 80897 137378 226400 362814 566574 863968 1289034 1885174 +-6 -7 3 42 139 350 790 1683 3432 6711 12581 22632 39153 65332 105488 165337 252294 375813 547767 782870 1099143 +10 12 25 75 201 455 898 1591 2587 3943 5792 8557 13497 24070 49367 112747 273115 675713 1669042 4064338 9691456 +11 11 22 47 90 164 314 668 1529 3521 7802 16357 32384 60786 108782 186650 308615 493895 767918 1163723 1723558 +12 12 22 61 149 303 533 838 1202 1590 1944 2179 2179 1793 831 -940 -3800 -8080 -14166 -22503 -33599 +6 29 65 123 230 439 837 1553 2766 4713 7697 12095 18366 27059 38821 54405 74678 100629 133377 174179 224438 +-5 2 13 22 19 -10 -82 -207 -352 -353 260 2569 8758 22849 51755 106730 205305 373808 650575 1089968 1767325 +25 43 75 135 246 440 764 1306 2262 4070 7648 14810 29044 57125 112717 224571 454763 937541 1958001 4103569 8542006 +20 27 29 18 -21 -116 -301 -571 -753 -215 2708 11746 34424 84806 187656 384517 742318 1365239 2410695 4110442 6797961 +28 56 113 214 387 685 1205 2128 3805 6925 12813 23938 44815 83763 156604 294617 561270 1085954 2128813 4199674 8267127 +3 11 19 27 35 43 51 59 67 75 83 91 99 107 115 123 131 139 147 155 163 +16 22 25 25 22 16 7 -5 -20 -38 -59 -83 -110 -140 -173 -209 -248 -290 -335 -383 -434 +17 46 92 156 243 380 643 1200 2393 4915 10199 21248 44360 92691 193674 404589 845141 1764532 3675990 7618200 15646565 +5 23 62 139 281 543 1047 2052 4068 8043 15704 30263 57977 111583 217564 430738 862051 1729007 3443254 6756899 12998645 +5 6 13 33 83 196 431 902 1858 3872 8237 17722 37904 79344 160881 314223 589739 1062794 1838981 3055015 4869649 +21 39 72 145 299 592 1106 1971 3418 5879 10177 17908 32225 59414 111963 214427 414671 805855 1570414 3069167 6021443 +12 22 39 81 189 449 1030 2249 4676 9302 17822 33142 60321 108356 193645 346944 627879 1156029 2178028 4211058 8343188 +2 9 41 110 239 484 980 2034 4304 9141 19249 39957 81621 164010 324008 628617 1196110 2229297 4066273 7255760 12666283 +11 20 50 118 251 485 866 1458 2363 3758 5954 9482 15211 24503 39410 62918 99243 154184 235538 353582 521627 +7 -2 -16 -38 -68 -102 -139 -199 -356 -796 -1911 -4410 -9318 -17446 -27227 -28206 16213 211334 830958 2541314 6883432 +25 34 44 63 109 217 445 873 1582 2600 3823 4993 6005 8235 18431 58333 186163 541390 1433202 3508147 8056737 +22 31 55 107 200 354 617 1108 2089 4072 7966 15268 28301 50501 86754 143783 230584 358909 543793 804121 1163230 +-4 1 20 61 138 273 495 836 1324 1973 2770 3659 4522 5157 5253 4362 1868 -3047 -11440 -24647 -44326 +26 51 98 174 298 523 971 1896 3796 7611 15084 29440 56668 107887 203553 380634 704358 1286739 2314822 4092474 7100598 +28 52 98 193 377 697 1196 1897 2782 3766 4666 5165 4771 2771 -1820 -10315 -24416 -46280 -78590 -124631 -188371 +3 11 24 61 165 425 1023 2315 4948 10006 19169 34862 60368 99882 158494 242110 357353 511533 712838 970979 1298623 +5 15 53 147 346 734 1449 2700 4766 7957 12530 18600 26207 36006 51812 88055 189285 477498 1260375 3266770 8137126 +4 7 13 23 52 140 362 836 1741 3392 6491 12809 26807 59168 134039 303207 672818 1452161 3040389 6177303 12200838 +-8 -3 22 78 175 320 517 781 1199 2112 4564 11295 28799 71422 169312 383553 834506 1753964 3579140 7117715 13828691 +25 33 33 19 -10 -46 -75 -91 -116 -205 -381 -359 1302 9515 38559 126226 365970 976291 2443528 5803537 13177521 +26 41 56 71 86 101 116 131 146 161 176 191 206 221 236 251 266 281 296 311 326 +0 4 10 24 63 170 440 1058 2350 4848 9370 17116 29781 49686 79928 124550 188732 279004 403482 572128 797035 +4 3 6 14 22 25 43 170 654 2033 5393 12885 28748 61258 126333 254163 501624 976195 1883076 3618592 6953490 +22 33 42 43 44 97 343 1086 2929 7033 15611 32876 66900 133364 263271 518834 1025692 2036469 4052068 8045173 15858136 +18 30 39 49 73 146 364 977 2576 6439 15166 33887 72656 151295 309176 624662 1252945 2498224 4949126 9729671 18960358 +10 26 62 127 223 344 474 591 705 997 2198 6470 19248 52808 132800 309727 678524 1411248 2810806 5398157 10052261 +9 24 48 88 157 282 528 1047 2177 4658 10117 22122 48348 104795 223662 467634 955421 1907256 3726322 7145624 13494603 +2 1 10 48 139 312 601 1045 1688 2579 3772 5326 7305 9778 12819 16507 20926 26165 32318 39484 47767 +14 26 53 104 199 384 750 1457 2783 5252 9944 19154 37646 74842 148395 289719 552188 1022870 1838831 3209228 5444609 +17 16 25 67 174 387 756 1340 2207 3434 5107 7321 10180 13797 18294 23802 30461 38420 47837 58879 71722 +4 6 24 75 184 389 759 1450 2843 5837 12411 26626 56327 115965 231261 446985 840062 1541700 2774406 4912701 8580026 +9 26 64 127 219 343 497 667 817 876 722 163 -1085 -3423 -7397 -13729 -23351 -37442 -57468 -85225 -122885 +18 47 94 168 291 509 904 1620 2941 5492 10671 21464 43866 89277 178551 348989 666692 1248617 2301796 4191988 7561173 +25 47 95 183 325 535 827 1215 1713 2335 3095 4007 5085 6343 7795 9455 11337 13455 15823 18455 21365 +9 22 35 48 61 74 87 100 113 126 139 152 165 178 191 204 217 230 243 256 269 +16 26 40 58 80 106 136 170 208 250 296 346 400 458 520 586 656 730 808 890 976 +14 18 23 30 40 54 73 98 130 170 219 278 348 430 525 634 758 898 1055 1230 1424 +22 47 87 152 259 441 761 1333 2355 4160 7307 12792 22603 41153 78748 159440 337800 732977 1594851 3427508 7211535 +26 46 78 143 272 515 964 1789 3288 5964 10671 18936 33722 61281 115612 228819 474022 1013362 2193352 4725041 10009284 +23 47 81 125 179 243 317 401 495 599 713 837 971 1115 1269 1433 1607 1791 1985 2189 2403 +19 44 86 153 270 505 1009 2065 4147 8013 14899 26953 48180 86441 157631 294374 563979 1104929 2199278 4412142 8851878 +27 42 71 143 303 613 1153 2035 3460 5871 10286 18936 36386 71384 139766 268846 503841 917024 1620465 2783413 4655593 +24 41 73 128 210 319 451 598 748 885 989 1036 998 843 535 34 -704 -1727 -3087 -4840 -7046 +-7 -15 -19 -17 -12 2 68 308 979 2543 5751 11741 22150 39240 66038 106490 165629 249757 366641 525723 738344 +7 12 36 98 227 462 852 1456 2343 3592 5292 7542 10451 14138 18732 24372 31207 39396 49108 60522 73827 +11 25 48 89 153 236 320 368 319 83 -464 -1485 -3187 -5826 -9712 -15214 -22765 -32867 -46096 -63107 -84639 +8 14 30 79 187 374 638 927 1094 828 -455 -3799 -11053 -25524 -53195 -104919 -200212 -373550 -684440 -1232997 -2183333 +9 28 53 84 121 164 213 268 329 396 469 548 633 724 821 924 1033 1148 1269 1396 1529 +15 29 58 121 257 543 1139 2382 4963 10251 20886 41850 82327 158757 299574 552284 994087 1748873 3017478 5136931 8701877 +-7 -1 11 31 77 197 481 1072 2181 4129 7487 13484 25034 49038 101091 214393 455493 950327 1924467 3760853 7075295 +-5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 +-7 -8 -10 0 61 264 808 2102 4937 10772 22217 43862 83713 155717 284373 513702 925934 1682313 3113525 5917809 11583494 +2 0 -7 -16 -12 38 191 534 1190 2324 4149 6932 11000 16746 24635 35210 49098 67016 89777 118296 153596 +13 21 32 55 115 259 562 1133 2121 3721 6180 9803 14959 22087 31702 44401 60869 81885 108328 141183 181547 +9 18 48 119 260 518 978 1794 3234 5749 10092 17559 30554 54009 98935 190916 389291 828028 1798244 3906903 8369100 +8 22 51 103 183 293 432 596 778 968 1153 1317 1441 1503 1478 1338 1052 586 -97 -1037 -2277 +6 16 50 134 314 659 1265 2265 3848 6287 9984 15580 24280 38746 65263 118441 230546 468730 965038 1966202 3912990 +16 39 76 132 223 384 673 1171 1978 3205 4962 7342 10401 14134 18447 23125 27796 31891 34600 34824 31123 +10 17 28 46 90 208 501 1174 2638 5695 11846 23770 46030 86070 155575 272274 462274 763021 1226992 1926230 2957842 +20 36 67 120 206 358 672 1395 3112 7132 16249 36172 78103 163236 330419 648963 1239736 2309436 4205547 7503272 13141120 +16 33 53 67 61 16 -78 -183 -129 558 3009 9739 26128 63370 144182 313540 658314 1342251 2666789 5174343 9819879 +13 17 21 40 106 272 616 1245 2299 3955 6431 9990 14944 21658 30554 42115 56889 75493 98617 127028 161574 +10 20 41 94 213 464 978 2003 3981 7668 14348 26259 47469 85632 155317 283877 520928 952044 1715507 3016640 5125441 +-4 -6 -2 16 72 221 564 1263 2556 4772 8346 13834 21928 33471 49472 71121 99804 137118 184886 245172 320296 +0 4 13 33 74 157 326 671 1375 2805 5674 11308 22059 41912 77341 138476 240650 406402 668019 1070707 1676488 +16 34 66 125 241 471 903 1663 2947 5109 8845 15534 27854 50938 94712 179032 345723 687730 1419893 3047749 6758676 +6 28 60 100 153 244 445 932 2108 4860 11071 24608 53201 111996 230261 464071 920475 1804042 3507549 6790264 13129978 +7 29 68 130 237 445 877 1780 3613 7175 13792 25618 46221 81943 145280 263148 496108 980618 2017113 4245291 8979258 +9 11 15 16 20 72 300 982 2645 6215 13280 26652 51702 99534 194211 388433 796263 1659636 3481287 7287877 15148046 +-1 11 34 73 133 216 318 441 648 1204 2865 7406 18542 43561 96420 204128 420762 859094 1761789 3658468 7702212 +12 34 72 130 208 309 449 678 1131 2146 4523 10069 22697 50543 109858 231849 474214 939874 1806386 3370764 6115982 +19 23 27 31 35 39 43 47 51 55 59 63 67 71 75 79 83 87 91 95 99 +3 6 16 37 73 128 206 311 447 618 828 1081 1381 1732 2138 2603 3131 3726 4392 5133 5953 +4 3 15 53 130 259 453 725 1088 1555 2139 2853 3710 4723 5905 7269 8828 10595 12583 14805 17274 +19 38 64 107 192 361 683 1285 2434 4725 9470 19464 40478 84190 173982 356414 723833 1458723 2920749 5818959 11557206 +-4 -9 -15 -24 -29 -2 119 461 1296 3215 7455 16452 34707 70066 135529 251717 450140 777423 1300661 2114088 3347259 +24 41 63 89 123 187 352 805 1986 4859 11425 25635 54903 112442 220659 415917 755333 1327550 2273056 3828714 6431712 +10 14 25 52 112 230 439 780 1302 2062 3125 4564 6460 8902 11987 15820 20514 26190 32977 41012 50440 +5 9 30 88 223 518 1132 2343 4601 8591 15306 26130 42931 68164 104984 157369 230253 329669 462902 638652 867207 +-4 8 35 77 134 206 293 395 512 644 791 953 1130 1322 1529 1751 1988 2240 2507 2789 3086 +12 15 32 80 197 451 940 1782 3097 4986 7515 10715 14612 19304 25105 32779 43890 61297 89826 137154 214943 +8 27 57 116 236 463 857 1492 2456 3851 5793 8412 11852 16271 21841 28748 37192 47387 59561 73956 90828 +17 39 70 123 232 465 948 1910 3761 7214 13472 24547 43889 77697 137546 245226 440843 795256 1428293 2536897 4448110 +6 25 49 81 138 258 514 1045 2123 4286 8581 16999 33314 64915 127152 253782 521352 1103663 2388049 5213473 11340118 +15 22 48 108 222 431 826 1607 3209 6554 13507 27623 55262 107123 200271 361049 630542 1077985 1836685 3197221 5833573 +9 10 13 14 11 14 57 214 641 1713 4411 11251 28247 68675 159767 353925 746617 1503812 2902641 5389948 9664531 +19 30 45 73 127 228 408 724 1318 2589 5582 12746 29268 65253 139091 282431 547269 1015752 1813403 3126583 5225125 +16 20 29 55 129 311 712 1553 3307 7003 14827 31254 65116 133287 267071 522905 999563 1864490 3391876 6014067 10385116 +2 -7 -23 -41 -38 37 273 807 1834 3617 6497 10903 17362 26509 39097 56007 78258 107017 143609 189527 246442 +15 22 29 41 69 142 334 816 1954 4492 9890 20944 42922 85648 167321 321469 609457 1142602 2120483 3895851 7082139 +-1 -10 -21 -18 40 232 698 1683 3612 7213 13728 25306 45799 82489 150000 279284 538074 1076412 2225283 4704589 10050857 +-4 -10 -18 -28 -35 -18 87 447 1444 3852 9073 19389 38127 69546 118134 186844 273596 365122 426928 387786 116745 +1 13 37 84 190 444 1033 2304 4840 9544 17725 31197 52476 85390 137021 223308 383639 715667 1452493 3123430 6871382 +-4 -2 10 35 76 136 218 325 460 626 826 1063 1340 1660 2026 2441 2908 3430 4010 4651 5356 +11 7 -1 -12 -25 -39 -53 -66 -77 -85 -89 -88 -81 -67 -45 -14 27 79 143 220 311 +16 24 27 30 51 126 327 799 1815 3834 7516 13592 22403 32809 40023 31750 -18103 -158498 -471154 -1071166 -2065238 +4 21 58 122 227 408 749 1434 2836 5683 11399 22831 45762 91910 184594 369052 730792 1427817 2746864 5201140 9699217 +16 33 63 118 209 342 516 733 1051 1749 3734 9417 24442 60908 143137 317692 670346 1354185 2635169 4964488 9091191 +11 20 38 69 119 197 312 472 701 1108 2076 4697 11669 29001 69050 155648 332375 675404 1312794 2452645 4423163 +10 14 18 32 96 301 813 1907 4040 8034 15525 29998 59020 118782 242925 499187 1020334 2061362 4105208 8057644 15603992 +7 20 41 70 104 142 207 402 1035 2880 7693 19179 44724 98427 206472 417101 820287 1588368 3061397 5924796 11570032 +4 16 46 109 232 472 956 1952 3994 8110 16239 31970 61792 117108 217337 394505 699808 1212716 2053276 3398363 5502720 +26 39 56 82 121 184 315 656 1594 4068 10170 24277 55162 119964 251726 513673 1025774 2012673 3886936 7387644 13801107 +3 2 1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 +1 6 25 73 167 341 680 1377 2814 5665 11015 20479 36279 61179 98065 148758 211323 274636 308233 244417 -51845 +7 29 77 175 369 743 1445 2726 4995 8893 15389 25901 42445 67815 105797 161420 241247 353709 509485 721931 1007561 +22 35 48 61 74 87 100 113 126 139 152 165 178 191 204 217 230 243 256 269 282 +6 1 -4 -9 -14 -19 -24 -29 -34 -39 -44 -49 -54 -59 -64 -69 -74 -79 -84 -89 -94 +11 36 79 151 269 457 759 1277 2247 4166 7983 15367 29065 53363 94663 162189 268835 432168 675599 1029735 1533925 +8 4 -8 -27 -34 26 266 885 2220 4879 10095 20601 42610 89951 192129 409116 857116 1751451 3475128 6684512 12466550 +21 48 95 172 291 470 745 1193 1979 3471 6526 13143 27827 60277 130556 279024 585537 1206562 2446161 4889006 9643099 +16 25 43 93 225 531 1171 2431 4846 9450 18274 35317 68393 132584 256690 495465 953348 1831239 3518957 6776005 13077649 +17 32 50 83 153 296 571 1074 1957 3452 5900 9785 15773 24756 37901 56704 83049 119272 168230 233375 318833 +15 41 92 173 294 480 788 1338 2379 4446 8722 17800 37143 77674 160140 322316 631027 1202867 2241168 4103331 7423512 +10 28 70 157 328 649 1220 2177 3692 5989 9418 14662 23194 38152 65860 118292 216854 397946 720862 1278691 2212996 +9 22 54 108 197 357 667 1290 2559 5148 10391 20847 41279 80390 154106 292254 552762 1052003 2028105 3968007 7851354 +-9 1 20 46 95 223 555 1321 2899 5865 11050 19604 33067 53447 83305 125847 185023 265633 373440 515290 699239 +9 26 71 162 317 548 866 1325 2149 4001 8463 18793 40994 85147 166798 307943 536900 886355 1389742 2079103 2994882 +28 41 59 93 169 339 690 1356 2547 4618 8210 14504 25638 45346 79887 139341 239358 403455 665965 1075751 1700807 +-2 9 47 139 329 683 1301 2348 4137 7328 13358 25311 49614 99285 200148 402908 807231 1611069 3213546 6430795 12946438 +19 43 90 174 320 568 972 1594 2493 3709 5242 7026 8898 10562 11548 11166 8455 2127 -9494 -28538 -57660 +12 12 13 26 66 155 333 677 1328 2526 4653 8284 14246 23685 38141 59631 90740 134720 195597 278286 388714 +8 31 65 110 166 233 311 400 500 611 733 866 1010 1165 1331 1508 1696 1895 2105 2326 2558 +10 27 69 153 308 595 1155 2299 4654 9379 18465 35133 64344 113435 192895 317295 506386 786379 1191421 1765281 2563260 +8 28 59 101 154 218 293 379 476 584 703 833 974 1126 1289 1463 1648 1844 2051 2269 2498 +5 22 59 130 264 522 1029 2034 4008 7798 14892 27949 51974 96999 184112 358605 717667 1466714 3030153 6262196 12835776 +21 25 31 54 123 285 609 1190 2153 3657 5899 9118 13599 19677 27741 38238 51677 68633 89751 115750 147427 +12 13 20 45 102 210 414 844 1841 4201 9636 21638 47071 99020 201708 398665 765810 1431701 2607932 4633523 8038172 +24 38 52 66 80 94 108 122 136 150 164 178 192 206 220 234 248 262 276 290 304 +23 34 41 44 43 38 29 16 -1 -22 -47 -76 -109 -146 -187 -232 -281 -334 -391 -452 -517 +-10 -2 34 116 266 512 899 1528 2651 4869 9519 19415 40283 83642 172850 356227 735942 1531350 3215650 6804080 14446002 +6 18 37 58 86 150 335 844 2108 4981 11097 23545 48168 96068 188401 365462 703738 1347664 2568293 4870656 9187810 +4 5 25 75 166 320 596 1144 2313 4873 10491 22771 49495 107288 230943 491377 1029170 2115773 4263265 8418391 16301188 +1 -8 -10 15 110 361 933 2132 4500 8944 16898 30544 53235 90606 153713 267462 491595 969324 2033158 4422897 9713628 +18 33 59 97 148 213 293 389 502 633 783 953 1144 1357 1593 1853 2138 2449 2787 3153 3548 \ No newline at end of file diff --git a/2023/day9/p1/main.py b/2023/day9/p1/main.py new file mode 100644 index 0000000..711a9d8 --- /dev/null +++ b/2023/day9/p1/main.py @@ -0,0 +1,49 @@ +INPUT_FILE = "input.text" + +def extrapolate_value(line: str) -> int: + + initial_values: list[int] = [int(v) for v in line.split(' ')] + + values = [initial_values] + + # Loop until last thing is all 0, 0, 0... + while len(values[-1]) != values[-1].count(0): + new_values: list[int] = [] + + current_row: list[int] = values[-1] + for value_index in range(1, len(current_row)): + new_values.append(current_row[value_index] - current_row[value_index - 1]) + + values.append(new_values) + + # Now we can extrapolate our new values, starting from the bottom + for row_index in reversed(range(0, len(values) - 2)): # -1 because we know the last row is all 0's + current_row: list[int] = values[row_index] + row_bellow: list[int] = values[row_index + 1] + + values[row_index].append(current_row[-1] + row_bellow[-1]) + + return values[0][-1] # Return last value of the first row + + +def main(): + + with open(INPUT_FILE, 'r') as file: + lines = file.readlines() + + sum_of_values = 0 + for line in lines: + extrapolated_history_value: int = extrapolate_value(line) + + sum_of_values += extrapolated_history_value + + print(f'Sum of extrapolated values: {sum_of_values}') + + + + +if __name__ == "__main__": + main() + + + diff --git a/2023/day9/p1/test.text b/2023/day9/p1/test.text new file mode 100644 index 0000000..70c5595 --- /dev/null +++ b/2023/day9/p1/test.text @@ -0,0 +1,3 @@ +0 3 6 9 12 15 +1 3 6 10 15 21 +10 13 16 21 30 45 \ No newline at end of file diff --git a/2023/day9/p2/input.text b/2023/day9/p2/input.text new file mode 100644 index 0000000..69b1925 --- /dev/null +++ b/2023/day9/p2/input.text @@ -0,0 +1,200 @@ +14 26 47 96 208 446 930 1893 3779 7407 14241 26832 49537 89675 159354 278299 478132 808704 1347259 2211424 3577270 +11 35 81 158 275 441 665 956 1323 1775 2321 2970 3731 4613 5625 6776 8075 9531 11153 12950 14931 +18 27 40 59 81 91 50 -122 -568 -1521 -3336 -6527 -11809 -20145 -32798 -51388 -77954 -115021 -165672 -233625 -323315 +7 10 19 34 55 82 115 154 199 250 307 370 439 514 595 682 775 874 979 1090 1207 +11 32 70 137 253 449 772 1300 2190 3797 6927 13359 26967 56231 119897 259515 566513 1239226 2700380 5834113 12454133 +5 20 64 149 285 480 740 1069 1469 1940 2480 3085 3749 4464 5220 6005 6805 7604 8384 9125 9805 +7 28 64 127 256 545 1192 2577 5377 10726 20428 37231 65170 109987 179636 284881 439995 663568 979432 1417711 2016004 +-2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 +18 45 90 155 249 397 664 1212 2414 5058 10686 22128 44309 85428 158632 284335 493362 831131 1363122 2181921 3416169 +10 14 9 5 21 93 304 858 2242 5556 13150 29813 64971 136807 280216 562651 1116306 2203618 4348835 8596161 17001841 +21 41 85 180 374 742 1405 2583 4714 8699 16393 31574 61822 122106 241587 476607 935964 1831346 3580258 7018773 13841427 +5 2 6 30 95 234 491 915 1554 2457 3703 5523 8713 15826 34179 82647 205703 500400 1165216 2584176 5465751 +24 36 60 106 187 320 521 806 1235 2077 4242 10247 26211 65806 157892 361020 790614 1669390 3420164 6835692 13387759 +27 36 43 64 142 360 868 1954 4203 8802 18064 36259 70860 134374 247150 442223 774975 1344404 2341497 4158158 7625686 +3 26 65 124 213 352 591 1063 2089 4356 9191 18956 37591 71334 129649 226395 381271 621574 984309 1518692 2289089 +14 11 19 50 128 315 763 1807 4114 8903 18251 35500 65780 116663 198963 327697 523222 812563 1230947 1823558 2647528 +7 25 55 96 147 207 275 350 431 517 607 700 795 891 987 1082 1175 1265 1351 1432 1507 +4 20 52 102 172 264 380 522 692 892 1124 1390 1692 2032 2412 2834 3300 3812 4372 4982 5644 +12 12 26 79 205 448 871 1577 2742 4665 7868 13347 23205 42121 80471 160487 327720 671410 1359366 2695903 5215645 +0 -5 -19 -42 -56 -11 190 707 1780 3747 7063 12320 20268 31837 48160 70597 100760 140539 192129 258058 341216 +-2 -8 -4 20 70 145 240 357 523 807 1311 2072 2738 1758 -5346 -29249 -92392 -237526 -539350 -1117924 -2149630 +-5 -10 -11 8 77 246 598 1278 2554 4945 9495 18359 36020 71695 143811 287798 568801 1101338 2079037 3821332 6855171 +4 3 21 80 211 461 917 1759 3353 6408 12262 23439 44729 85167 161385 302817 559054 1009141 1771607 3012302 4944411 +22 34 50 86 170 359 784 1749 3934 8783 19198 40724 83538 165840 319898 603491 1122806 2079904 3872226 7299442 13984490 +23 30 48 88 163 300 570 1157 2507 5632 12710 28259 61453 130759 273345 564318 1156141 2359172 4805190 9776416 19859989 +-8 -12 -15 -17 -18 -18 -17 -15 -12 -8 -3 3 10 18 27 37 48 60 73 87 102 +12 14 23 45 102 247 580 1269 2578 4894 8728 14643 23033 33638 44646 51286 44214 9398 -64873 -158619 -131618 +11 17 25 37 50 57 63 140 567 2132 6711 18277 44524 99329 206393 404850 759118 1379591 2472170 4462351 8302561 +20 30 52 106 228 481 966 1833 3292 5624 9192 14452 21964 32403 46570 65403 89988 121570 161564 211566 273364 +19 35 62 100 148 202 264 372 654 1399 3129 6654 13105 23978 41297 68130 109885 177091 290752 491872 857410 +26 53 92 147 230 362 569 880 1356 2228 4324 10158 26391 68939 172950 411497 929690 2005975 4161296 8352141 16309216 +14 28 53 109 222 414 702 1129 1859 3378 6861 14805 32108 67918 138842 274682 529326 1003298 1894435 3617291 7086724 +0 10 48 129 283 568 1090 2035 3720 6689 11927 21355 38926 72920 140574 277328 555542 1123404 2287945 4694976 9719897 +6 12 20 37 75 160 354 801 1812 4008 8543 17429 33981 63405 113625 196746 332414 556348 941370 1645501 3013355 +17 23 29 35 41 47 53 59 65 71 77 83 89 95 101 107 113 119 125 131 137 +13 27 50 83 129 193 298 531 1133 2647 6138 13499 27857 54093 99490 174523 293805 477203 751138 1150083 1718273 +28 43 58 73 88 103 118 133 148 163 178 193 208 223 238 253 268 283 298 313 328 +11 9 4 -6 -32 -95 -222 -437 -733 -973 -600 2069 11356 37240 101235 247946 568267 1246553 2656208 5549892 11427768 +25 46 78 121 175 240 316 403 501 610 730 861 1003 1156 1320 1495 1681 1878 2086 2305 2535 +17 28 57 125 276 592 1206 2313 4189 7247 12190 20366 34490 59973 107187 195096 356793 647598 1156487 2021731 3451720 +24 45 84 157 299 582 1135 2162 3951 6861 11277 17571 26268 39002 61652 112657 242756 579095 1420548 3439575 8102595 +21 38 57 74 91 122 210 467 1155 2840 6683 15001 32365 67738 138540 278114 548921 1064986 2028733 3789476 6933575 +8 19 49 99 166 247 345 489 795 1610 3796 9226 21579 47536 98494 192930 359562 641469 1101347 1828093 2944924 +13 32 68 127 228 417 781 1462 2671 4702 7946 12905 20206 30615 45051 64600 90529 124300 167584 222275 290504 +13 23 35 45 59 104 245 624 1547 3653 8200 17500 35563 69181 130275 241965 454837 889032 1837669 4008880 9069103 +13 18 24 33 50 93 221 590 1552 3829 8843 19391 41067 85240 175168 358274 730288 1481876 2987401 5972131 11825257 +14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 +8 28 71 152 288 498 803 1226 1792 2528 3463 4628 6056 7782 9843 12278 15128 18436 22247 26608 31568 +2 -3 -2 20 86 241 589 1370 3115 6958 15253 32753 68782 141126 282900 554641 1065785 2013448 3754005 6938327 12772443 +8 8 -1 -29 -91 -197 -333 -435 -345 303 2402 8180 23048 59530 145226 338410 757762 1637618 3428041 6971393 13805807 +25 40 71 134 245 417 659 984 1442 2209 3797 7534 16663 38852 91816 215490 497315 1122518 2469919 5287326 11001021 +24 36 54 96 192 399 831 1704 3396 6522 12024 21276 36204 59421 94377 145524 218496 320304 459546 646632 894024 +-5 -3 0 5 27 110 355 969 2345 5199 10832 21665 42319 81683 156661 298762 565880 1064795 1998131 3769177 7221916 +20 39 64 88 98 79 29 -13 69 503 1659 4090 8641 16751 31174 57485 106922 201351 381434 719436 1338532 +9 26 43 56 69 113 292 872 2425 6031 13527 27773 52881 94324 158808 253751 386169 560720 776603 1022950 1272285 +-2 -6 -8 10 86 287 734 1656 3486 7012 13596 25474 46150 80897 137378 226400 362814 566574 863968 1289034 1885174 +-6 -7 3 42 139 350 790 1683 3432 6711 12581 22632 39153 65332 105488 165337 252294 375813 547767 782870 1099143 +10 12 25 75 201 455 898 1591 2587 3943 5792 8557 13497 24070 49367 112747 273115 675713 1669042 4064338 9691456 +11 11 22 47 90 164 314 668 1529 3521 7802 16357 32384 60786 108782 186650 308615 493895 767918 1163723 1723558 +12 12 22 61 149 303 533 838 1202 1590 1944 2179 2179 1793 831 -940 -3800 -8080 -14166 -22503 -33599 +6 29 65 123 230 439 837 1553 2766 4713 7697 12095 18366 27059 38821 54405 74678 100629 133377 174179 224438 +-5 2 13 22 19 -10 -82 -207 -352 -353 260 2569 8758 22849 51755 106730 205305 373808 650575 1089968 1767325 +25 43 75 135 246 440 764 1306 2262 4070 7648 14810 29044 57125 112717 224571 454763 937541 1958001 4103569 8542006 +20 27 29 18 -21 -116 -301 -571 -753 -215 2708 11746 34424 84806 187656 384517 742318 1365239 2410695 4110442 6797961 +28 56 113 214 387 685 1205 2128 3805 6925 12813 23938 44815 83763 156604 294617 561270 1085954 2128813 4199674 8267127 +3 11 19 27 35 43 51 59 67 75 83 91 99 107 115 123 131 139 147 155 163 +16 22 25 25 22 16 7 -5 -20 -38 -59 -83 -110 -140 -173 -209 -248 -290 -335 -383 -434 +17 46 92 156 243 380 643 1200 2393 4915 10199 21248 44360 92691 193674 404589 845141 1764532 3675990 7618200 15646565 +5 23 62 139 281 543 1047 2052 4068 8043 15704 30263 57977 111583 217564 430738 862051 1729007 3443254 6756899 12998645 +5 6 13 33 83 196 431 902 1858 3872 8237 17722 37904 79344 160881 314223 589739 1062794 1838981 3055015 4869649 +21 39 72 145 299 592 1106 1971 3418 5879 10177 17908 32225 59414 111963 214427 414671 805855 1570414 3069167 6021443 +12 22 39 81 189 449 1030 2249 4676 9302 17822 33142 60321 108356 193645 346944 627879 1156029 2178028 4211058 8343188 +2 9 41 110 239 484 980 2034 4304 9141 19249 39957 81621 164010 324008 628617 1196110 2229297 4066273 7255760 12666283 +11 20 50 118 251 485 866 1458 2363 3758 5954 9482 15211 24503 39410 62918 99243 154184 235538 353582 521627 +7 -2 -16 -38 -68 -102 -139 -199 -356 -796 -1911 -4410 -9318 -17446 -27227 -28206 16213 211334 830958 2541314 6883432 +25 34 44 63 109 217 445 873 1582 2600 3823 4993 6005 8235 18431 58333 186163 541390 1433202 3508147 8056737 +22 31 55 107 200 354 617 1108 2089 4072 7966 15268 28301 50501 86754 143783 230584 358909 543793 804121 1163230 +-4 1 20 61 138 273 495 836 1324 1973 2770 3659 4522 5157 5253 4362 1868 -3047 -11440 -24647 -44326 +26 51 98 174 298 523 971 1896 3796 7611 15084 29440 56668 107887 203553 380634 704358 1286739 2314822 4092474 7100598 +28 52 98 193 377 697 1196 1897 2782 3766 4666 5165 4771 2771 -1820 -10315 -24416 -46280 -78590 -124631 -188371 +3 11 24 61 165 425 1023 2315 4948 10006 19169 34862 60368 99882 158494 242110 357353 511533 712838 970979 1298623 +5 15 53 147 346 734 1449 2700 4766 7957 12530 18600 26207 36006 51812 88055 189285 477498 1260375 3266770 8137126 +4 7 13 23 52 140 362 836 1741 3392 6491 12809 26807 59168 134039 303207 672818 1452161 3040389 6177303 12200838 +-8 -3 22 78 175 320 517 781 1199 2112 4564 11295 28799 71422 169312 383553 834506 1753964 3579140 7117715 13828691 +25 33 33 19 -10 -46 -75 -91 -116 -205 -381 -359 1302 9515 38559 126226 365970 976291 2443528 5803537 13177521 +26 41 56 71 86 101 116 131 146 161 176 191 206 221 236 251 266 281 296 311 326 +0 4 10 24 63 170 440 1058 2350 4848 9370 17116 29781 49686 79928 124550 188732 279004 403482 572128 797035 +4 3 6 14 22 25 43 170 654 2033 5393 12885 28748 61258 126333 254163 501624 976195 1883076 3618592 6953490 +22 33 42 43 44 97 343 1086 2929 7033 15611 32876 66900 133364 263271 518834 1025692 2036469 4052068 8045173 15858136 +18 30 39 49 73 146 364 977 2576 6439 15166 33887 72656 151295 309176 624662 1252945 2498224 4949126 9729671 18960358 +10 26 62 127 223 344 474 591 705 997 2198 6470 19248 52808 132800 309727 678524 1411248 2810806 5398157 10052261 +9 24 48 88 157 282 528 1047 2177 4658 10117 22122 48348 104795 223662 467634 955421 1907256 3726322 7145624 13494603 +2 1 10 48 139 312 601 1045 1688 2579 3772 5326 7305 9778 12819 16507 20926 26165 32318 39484 47767 +14 26 53 104 199 384 750 1457 2783 5252 9944 19154 37646 74842 148395 289719 552188 1022870 1838831 3209228 5444609 +17 16 25 67 174 387 756 1340 2207 3434 5107 7321 10180 13797 18294 23802 30461 38420 47837 58879 71722 +4 6 24 75 184 389 759 1450 2843 5837 12411 26626 56327 115965 231261 446985 840062 1541700 2774406 4912701 8580026 +9 26 64 127 219 343 497 667 817 876 722 163 -1085 -3423 -7397 -13729 -23351 -37442 -57468 -85225 -122885 +18 47 94 168 291 509 904 1620 2941 5492 10671 21464 43866 89277 178551 348989 666692 1248617 2301796 4191988 7561173 +25 47 95 183 325 535 827 1215 1713 2335 3095 4007 5085 6343 7795 9455 11337 13455 15823 18455 21365 +9 22 35 48 61 74 87 100 113 126 139 152 165 178 191 204 217 230 243 256 269 +16 26 40 58 80 106 136 170 208 250 296 346 400 458 520 586 656 730 808 890 976 +14 18 23 30 40 54 73 98 130 170 219 278 348 430 525 634 758 898 1055 1230 1424 +22 47 87 152 259 441 761 1333 2355 4160 7307 12792 22603 41153 78748 159440 337800 732977 1594851 3427508 7211535 +26 46 78 143 272 515 964 1789 3288 5964 10671 18936 33722 61281 115612 228819 474022 1013362 2193352 4725041 10009284 +23 47 81 125 179 243 317 401 495 599 713 837 971 1115 1269 1433 1607 1791 1985 2189 2403 +19 44 86 153 270 505 1009 2065 4147 8013 14899 26953 48180 86441 157631 294374 563979 1104929 2199278 4412142 8851878 +27 42 71 143 303 613 1153 2035 3460 5871 10286 18936 36386 71384 139766 268846 503841 917024 1620465 2783413 4655593 +24 41 73 128 210 319 451 598 748 885 989 1036 998 843 535 34 -704 -1727 -3087 -4840 -7046 +-7 -15 -19 -17 -12 2 68 308 979 2543 5751 11741 22150 39240 66038 106490 165629 249757 366641 525723 738344 +7 12 36 98 227 462 852 1456 2343 3592 5292 7542 10451 14138 18732 24372 31207 39396 49108 60522 73827 +11 25 48 89 153 236 320 368 319 83 -464 -1485 -3187 -5826 -9712 -15214 -22765 -32867 -46096 -63107 -84639 +8 14 30 79 187 374 638 927 1094 828 -455 -3799 -11053 -25524 -53195 -104919 -200212 -373550 -684440 -1232997 -2183333 +9 28 53 84 121 164 213 268 329 396 469 548 633 724 821 924 1033 1148 1269 1396 1529 +15 29 58 121 257 543 1139 2382 4963 10251 20886 41850 82327 158757 299574 552284 994087 1748873 3017478 5136931 8701877 +-7 -1 11 31 77 197 481 1072 2181 4129 7487 13484 25034 49038 101091 214393 455493 950327 1924467 3760853 7075295 +-5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 +-7 -8 -10 0 61 264 808 2102 4937 10772 22217 43862 83713 155717 284373 513702 925934 1682313 3113525 5917809 11583494 +2 0 -7 -16 -12 38 191 534 1190 2324 4149 6932 11000 16746 24635 35210 49098 67016 89777 118296 153596 +13 21 32 55 115 259 562 1133 2121 3721 6180 9803 14959 22087 31702 44401 60869 81885 108328 141183 181547 +9 18 48 119 260 518 978 1794 3234 5749 10092 17559 30554 54009 98935 190916 389291 828028 1798244 3906903 8369100 +8 22 51 103 183 293 432 596 778 968 1153 1317 1441 1503 1478 1338 1052 586 -97 -1037 -2277 +6 16 50 134 314 659 1265 2265 3848 6287 9984 15580 24280 38746 65263 118441 230546 468730 965038 1966202 3912990 +16 39 76 132 223 384 673 1171 1978 3205 4962 7342 10401 14134 18447 23125 27796 31891 34600 34824 31123 +10 17 28 46 90 208 501 1174 2638 5695 11846 23770 46030 86070 155575 272274 462274 763021 1226992 1926230 2957842 +20 36 67 120 206 358 672 1395 3112 7132 16249 36172 78103 163236 330419 648963 1239736 2309436 4205547 7503272 13141120 +16 33 53 67 61 16 -78 -183 -129 558 3009 9739 26128 63370 144182 313540 658314 1342251 2666789 5174343 9819879 +13 17 21 40 106 272 616 1245 2299 3955 6431 9990 14944 21658 30554 42115 56889 75493 98617 127028 161574 +10 20 41 94 213 464 978 2003 3981 7668 14348 26259 47469 85632 155317 283877 520928 952044 1715507 3016640 5125441 +-4 -6 -2 16 72 221 564 1263 2556 4772 8346 13834 21928 33471 49472 71121 99804 137118 184886 245172 320296 +0 4 13 33 74 157 326 671 1375 2805 5674 11308 22059 41912 77341 138476 240650 406402 668019 1070707 1676488 +16 34 66 125 241 471 903 1663 2947 5109 8845 15534 27854 50938 94712 179032 345723 687730 1419893 3047749 6758676 +6 28 60 100 153 244 445 932 2108 4860 11071 24608 53201 111996 230261 464071 920475 1804042 3507549 6790264 13129978 +7 29 68 130 237 445 877 1780 3613 7175 13792 25618 46221 81943 145280 263148 496108 980618 2017113 4245291 8979258 +9 11 15 16 20 72 300 982 2645 6215 13280 26652 51702 99534 194211 388433 796263 1659636 3481287 7287877 15148046 +-1 11 34 73 133 216 318 441 648 1204 2865 7406 18542 43561 96420 204128 420762 859094 1761789 3658468 7702212 +12 34 72 130 208 309 449 678 1131 2146 4523 10069 22697 50543 109858 231849 474214 939874 1806386 3370764 6115982 +19 23 27 31 35 39 43 47 51 55 59 63 67 71 75 79 83 87 91 95 99 +3 6 16 37 73 128 206 311 447 618 828 1081 1381 1732 2138 2603 3131 3726 4392 5133 5953 +4 3 15 53 130 259 453 725 1088 1555 2139 2853 3710 4723 5905 7269 8828 10595 12583 14805 17274 +19 38 64 107 192 361 683 1285 2434 4725 9470 19464 40478 84190 173982 356414 723833 1458723 2920749 5818959 11557206 +-4 -9 -15 -24 -29 -2 119 461 1296 3215 7455 16452 34707 70066 135529 251717 450140 777423 1300661 2114088 3347259 +24 41 63 89 123 187 352 805 1986 4859 11425 25635 54903 112442 220659 415917 755333 1327550 2273056 3828714 6431712 +10 14 25 52 112 230 439 780 1302 2062 3125 4564 6460 8902 11987 15820 20514 26190 32977 41012 50440 +5 9 30 88 223 518 1132 2343 4601 8591 15306 26130 42931 68164 104984 157369 230253 329669 462902 638652 867207 +-4 8 35 77 134 206 293 395 512 644 791 953 1130 1322 1529 1751 1988 2240 2507 2789 3086 +12 15 32 80 197 451 940 1782 3097 4986 7515 10715 14612 19304 25105 32779 43890 61297 89826 137154 214943 +8 27 57 116 236 463 857 1492 2456 3851 5793 8412 11852 16271 21841 28748 37192 47387 59561 73956 90828 +17 39 70 123 232 465 948 1910 3761 7214 13472 24547 43889 77697 137546 245226 440843 795256 1428293 2536897 4448110 +6 25 49 81 138 258 514 1045 2123 4286 8581 16999 33314 64915 127152 253782 521352 1103663 2388049 5213473 11340118 +15 22 48 108 222 431 826 1607 3209 6554 13507 27623 55262 107123 200271 361049 630542 1077985 1836685 3197221 5833573 +9 10 13 14 11 14 57 214 641 1713 4411 11251 28247 68675 159767 353925 746617 1503812 2902641 5389948 9664531 +19 30 45 73 127 228 408 724 1318 2589 5582 12746 29268 65253 139091 282431 547269 1015752 1813403 3126583 5225125 +16 20 29 55 129 311 712 1553 3307 7003 14827 31254 65116 133287 267071 522905 999563 1864490 3391876 6014067 10385116 +2 -7 -23 -41 -38 37 273 807 1834 3617 6497 10903 17362 26509 39097 56007 78258 107017 143609 189527 246442 +15 22 29 41 69 142 334 816 1954 4492 9890 20944 42922 85648 167321 321469 609457 1142602 2120483 3895851 7082139 +-1 -10 -21 -18 40 232 698 1683 3612 7213 13728 25306 45799 82489 150000 279284 538074 1076412 2225283 4704589 10050857 +-4 -10 -18 -28 -35 -18 87 447 1444 3852 9073 19389 38127 69546 118134 186844 273596 365122 426928 387786 116745 +1 13 37 84 190 444 1033 2304 4840 9544 17725 31197 52476 85390 137021 223308 383639 715667 1452493 3123430 6871382 +-4 -2 10 35 76 136 218 325 460 626 826 1063 1340 1660 2026 2441 2908 3430 4010 4651 5356 +11 7 -1 -12 -25 -39 -53 -66 -77 -85 -89 -88 -81 -67 -45 -14 27 79 143 220 311 +16 24 27 30 51 126 327 799 1815 3834 7516 13592 22403 32809 40023 31750 -18103 -158498 -471154 -1071166 -2065238 +4 21 58 122 227 408 749 1434 2836 5683 11399 22831 45762 91910 184594 369052 730792 1427817 2746864 5201140 9699217 +16 33 63 118 209 342 516 733 1051 1749 3734 9417 24442 60908 143137 317692 670346 1354185 2635169 4964488 9091191 +11 20 38 69 119 197 312 472 701 1108 2076 4697 11669 29001 69050 155648 332375 675404 1312794 2452645 4423163 +10 14 18 32 96 301 813 1907 4040 8034 15525 29998 59020 118782 242925 499187 1020334 2061362 4105208 8057644 15603992 +7 20 41 70 104 142 207 402 1035 2880 7693 19179 44724 98427 206472 417101 820287 1588368 3061397 5924796 11570032 +4 16 46 109 232 472 956 1952 3994 8110 16239 31970 61792 117108 217337 394505 699808 1212716 2053276 3398363 5502720 +26 39 56 82 121 184 315 656 1594 4068 10170 24277 55162 119964 251726 513673 1025774 2012673 3886936 7387644 13801107 +3 2 1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 +1 6 25 73 167 341 680 1377 2814 5665 11015 20479 36279 61179 98065 148758 211323 274636 308233 244417 -51845 +7 29 77 175 369 743 1445 2726 4995 8893 15389 25901 42445 67815 105797 161420 241247 353709 509485 721931 1007561 +22 35 48 61 74 87 100 113 126 139 152 165 178 191 204 217 230 243 256 269 282 +6 1 -4 -9 -14 -19 -24 -29 -34 -39 -44 -49 -54 -59 -64 -69 -74 -79 -84 -89 -94 +11 36 79 151 269 457 759 1277 2247 4166 7983 15367 29065 53363 94663 162189 268835 432168 675599 1029735 1533925 +8 4 -8 -27 -34 26 266 885 2220 4879 10095 20601 42610 89951 192129 409116 857116 1751451 3475128 6684512 12466550 +21 48 95 172 291 470 745 1193 1979 3471 6526 13143 27827 60277 130556 279024 585537 1206562 2446161 4889006 9643099 +16 25 43 93 225 531 1171 2431 4846 9450 18274 35317 68393 132584 256690 495465 953348 1831239 3518957 6776005 13077649 +17 32 50 83 153 296 571 1074 1957 3452 5900 9785 15773 24756 37901 56704 83049 119272 168230 233375 318833 +15 41 92 173 294 480 788 1338 2379 4446 8722 17800 37143 77674 160140 322316 631027 1202867 2241168 4103331 7423512 +10 28 70 157 328 649 1220 2177 3692 5989 9418 14662 23194 38152 65860 118292 216854 397946 720862 1278691 2212996 +9 22 54 108 197 357 667 1290 2559 5148 10391 20847 41279 80390 154106 292254 552762 1052003 2028105 3968007 7851354 +-9 1 20 46 95 223 555 1321 2899 5865 11050 19604 33067 53447 83305 125847 185023 265633 373440 515290 699239 +9 26 71 162 317 548 866 1325 2149 4001 8463 18793 40994 85147 166798 307943 536900 886355 1389742 2079103 2994882 +28 41 59 93 169 339 690 1356 2547 4618 8210 14504 25638 45346 79887 139341 239358 403455 665965 1075751 1700807 +-2 9 47 139 329 683 1301 2348 4137 7328 13358 25311 49614 99285 200148 402908 807231 1611069 3213546 6430795 12946438 +19 43 90 174 320 568 972 1594 2493 3709 5242 7026 8898 10562 11548 11166 8455 2127 -9494 -28538 -57660 +12 12 13 26 66 155 333 677 1328 2526 4653 8284 14246 23685 38141 59631 90740 134720 195597 278286 388714 +8 31 65 110 166 233 311 400 500 611 733 866 1010 1165 1331 1508 1696 1895 2105 2326 2558 +10 27 69 153 308 595 1155 2299 4654 9379 18465 35133 64344 113435 192895 317295 506386 786379 1191421 1765281 2563260 +8 28 59 101 154 218 293 379 476 584 703 833 974 1126 1289 1463 1648 1844 2051 2269 2498 +5 22 59 130 264 522 1029 2034 4008 7798 14892 27949 51974 96999 184112 358605 717667 1466714 3030153 6262196 12835776 +21 25 31 54 123 285 609 1190 2153 3657 5899 9118 13599 19677 27741 38238 51677 68633 89751 115750 147427 +12 13 20 45 102 210 414 844 1841 4201 9636 21638 47071 99020 201708 398665 765810 1431701 2607932 4633523 8038172 +24 38 52 66 80 94 108 122 136 150 164 178 192 206 220 234 248 262 276 290 304 +23 34 41 44 43 38 29 16 -1 -22 -47 -76 -109 -146 -187 -232 -281 -334 -391 -452 -517 +-10 -2 34 116 266 512 899 1528 2651 4869 9519 19415 40283 83642 172850 356227 735942 1531350 3215650 6804080 14446002 +6 18 37 58 86 150 335 844 2108 4981 11097 23545 48168 96068 188401 365462 703738 1347664 2568293 4870656 9187810 +4 5 25 75 166 320 596 1144 2313 4873 10491 22771 49495 107288 230943 491377 1029170 2115773 4263265 8418391 16301188 +1 -8 -10 15 110 361 933 2132 4500 8944 16898 30544 53235 90606 153713 267462 491595 969324 2033158 4422897 9713628 +18 33 59 97 148 213 293 389 502 633 783 953 1144 1357 1593 1853 2138 2449 2787 3153 3548 \ No newline at end of file diff --git a/2023/day9/p2/main.py b/2023/day9/p2/main.py new file mode 100644 index 0000000..066ac98 --- /dev/null +++ b/2023/day9/p2/main.py @@ -0,0 +1,49 @@ +INPUT_FILE = "input.text" + +def extrapolate_value(line: str) -> int: + + initial_values: list[int] = [int(v) for v in line.split(' ')] + + values = [initial_values] + + # Loop until last thing is all 0, 0, 0... + while len(values[-1]) != values[-1].count(0): + new_values: list[int] = [] + + current_row: list[int] = values[-1] + for value_index in range(1, len(current_row)): + new_values.append(current_row[value_index] - current_row[value_index - 1]) + + values.append(new_values) + + # Now we can extrapolate our new values, starting from the bottom + for row_index in reversed(range(0, len(values) - 2)): # -1 because we know the last row is all 0's + current_row: list[int] = values[row_index] + row_bellow: list[int] = values[row_index + 1] + + values[row_index].insert(0, current_row[0] - row_bellow[0]) + + return values[0][0] # Return last value of the first row + + +def main(): + + with open(INPUT_FILE, 'r') as file: + lines = file.readlines() + + sum_of_values = 0 + for line in lines: + extrapolated_history_value: int = extrapolate_value(line) + + sum_of_values += extrapolated_history_value + + print(f'Sum of extrapolated values: {sum_of_values}') + + + + +if __name__ == "__main__": + main() + + + diff --git a/2023/day9/p2/test.text b/2023/day9/p2/test.text new file mode 100644 index 0000000..70c5595 --- /dev/null +++ b/2023/day9/p2/test.text @@ -0,0 +1,3 @@ +0 3 6 9 12 15 +1 3 6 10 15 21 +10 13 16 21 30 45 \ No newline at end of file diff --git a/2024/day1/input.text b/2024/day1/input.text new file mode 100644 index 0000000..33651cc --- /dev/null +++ b/2024/day1/input.text @@ -0,0 +1,1000 @@ +47078 87818 +99261 15906 +44723 23473 +87598 26876 +82172 24873 +92690 35957 +46104 92718 +17300 92112 +67643 56714 +81513 83498 +29550 67133 +41437 40271 +50927 30853 +59085 99760 +70043 30853 +60337 32788 +96311 84959 +84634 52702 +52702 63846 +24182 51218 +73443 69884 +72022 58536 +62248 41011 +41418 82128 +92718 37057 +95875 57364 +84233 38993 +49551 99582 +77689 64457 +21344 56714 +45466 41011 +13812 15968 +57869 45306 +78200 77689 +44981 43653 +35500 66963 +27169 56950 +48956 39884 +44999 26876 +87641 65881 +97594 77367 +26029 41783 +56082 48615 +37413 49812 +16310 58965 +36134 33967 +40339 69074 +87392 73592 +85426 41011 +50693 79721 +72999 51667 +37541 99170 +33772 59608 +94796 61699 +90202 55953 +38330 73424 +39478 85890 +76029 81665 +65969 11359 +63748 77256 +45284 67606 +80539 58100 +39367 92755 +81324 71861 +39057 32788 +78121 40271 +66791 59743 +15405 11016 +26614 40271 +74178 92718 +58206 56714 +58390 25035 +59886 15968 +58977 76787 +44549 27027 +43761 39854 +41990 11589 +89748 92718 +37102 72199 +74662 40220 +63702 73406 +68866 31235 +37664 40271 +21120 83642 +37562 84394 +96696 52702 +15695 57691 +77133 21919 +27827 73852 +16989 40271 +24826 63907 +37931 43112 +22793 52702 +87720 55514 +19896 40271 +35602 15968 +84179 64941 +18369 25377 +94694 26917 +59042 63583 +72595 38723 +70765 72595 +17730 85810 +14237 63353 +43121 63327 +71146 20668 +70924 73750 +35978 62758 +71771 30853 +31366 19077 +46799 46080 +17728 84290 +73057 40271 +74265 26876 +20692 70845 +98146 52702 +11555 33496 +23856 26826 +37347 89364 +71336 16570 +52686 95991 +46027 52702 +35514 15202 +83891 10187 +93746 70911 +26934 58536 +11606 15968 +90273 58100 +45589 87216 +34588 85214 +90198 40865 +99412 18291 +73574 92718 +21438 61699 +75457 85579 +64991 59375 +17631 19103 +77182 20233 +78920 28543 +81239 86731 +22547 63907 +51155 32788 +79249 58100 +90671 90991 +85690 78392 +58921 70144 +21070 44410 +62699 72595 +49573 69124 +73725 73849 +88221 94676 +51718 99007 +99760 31236 +95185 94160 +87111 57839 +28467 15202 +42315 76351 +77827 79354 +95219 99760 +38147 30853 +64826 63321 +25471 16587 +10927 81296 +41546 41011 +37315 69111 +99327 38377 +85336 84238 +40804 30853 +53516 30853 +27810 70144 +69577 70694 +25624 38809 +49041 69884 +21503 74953 +73554 57055 +75671 69264 +35839 92687 +62809 49927 +38952 71861 +47433 94883 +83751 84179 +96703 59295 +14937 71861 +88960 47466 +95895 44999 +10816 92718 +53349 58536 +78701 15202 +88121 40271 +34593 68809 +54762 81665 +43571 77689 +55916 40089 +40645 36311 +31607 40497 +81871 58536 +59108 11885 +51170 81665 +92491 50670 +52658 58212 +23221 90728 +66538 78414 +15397 96177 +44490 63907 +74261 61699 +52527 52702 +54092 12090 +85887 44240 +81916 81665 +52917 24491 +63064 19043 +67656 60571 +46500 63907 +23513 83663 +89284 54975 +70144 28556 +99155 41011 +50425 84179 +68018 61813 +63893 32788 +63846 49310 +40331 85906 +37888 52413 +64681 15202 +18619 94298 +29923 95681 +31156 72616 +70630 33220 +46149 29460 +79706 59024 +15202 58100 +38450 55528 +38540 64168 +44172 15202 +83218 29596 +87956 75221 +74674 29596 +32969 27529 +75354 70584 +80869 39769 +78375 79326 +26720 80104 +59064 93076 +17369 26876 +71018 28093 +62410 94862 +34117 13591 +84414 77689 +72343 44999 +63907 66141 +71144 81665 +29415 66425 +88830 11982 +70188 22280 +53282 99760 +18318 63138 +60397 57539 +65195 41822 +24016 13700 +88135 74622 +14071 47193 +14685 98095 +95982 91801 +33811 72723 +29333 88953 +34084 86155 +56453 62127 +10338 90318 +42757 19402 +93976 63907 +76120 83403 +30463 94304 +13958 40271 +84845 99760 +64272 57736 +57418 35445 +77223 56497 +33423 75411 +41030 19106 +82698 15202 +29524 74256 +87764 77689 +86912 10187 +68742 59684 +76640 23589 +31500 17713 +23412 99007 +22908 58536 +56584 96889 +24442 83833 +19446 56714 +59337 72595 +60529 79345 +18771 52637 +69780 50379 +45080 41011 +90135 23400 +25259 15202 +16305 29881 +84260 41011 +90895 72595 +12543 38607 +11665 63907 +96978 81665 +52028 61190 +67233 52702 +20481 81204 +12111 70144 +20206 46595 +43424 69196 +29231 58536 +98098 55798 +60225 51890 +81665 97950 +50519 90597 +10405 75939 +67815 74916 +44903 61313 +57482 93791 +24477 85715 +47814 43158 +30230 15202 +62375 26876 +94004 70796 +75531 11460 +18327 71267 +52363 44947 +86594 44999 +46404 92745 +90532 39065 +64807 30853 +24401 52702 +91341 52563 +84207 62127 +71087 73532 +63113 44999 +43813 74297 +59883 66327 +32173 91360 +18376 64927 +13447 26876 +20860 73532 +90448 22528 +61857 59032 +98601 77689 +48533 95904 +43074 80112 +77210 40271 +30853 77689 +66535 90757 +73022 24042 +40271 58513 +83490 84179 +34711 19907 +93977 90225 +48807 56714 +54844 81665 +32392 26876 +96732 99760 +97627 25611 +60706 72595 +80954 56714 +85719 84179 +72831 16614 +31090 27039 +33058 29333 +63877 29596 +72421 90853 +15747 77367 +40917 32788 +81013 17450 +89899 99199 +30106 71861 +25280 44999 +55196 62277 +70682 33511 +82706 15417 +32623 56714 +71868 95563 +31828 15968 +13986 44897 +42490 77695 +97842 11333 +47535 51124 +92501 58848 +23972 80539 +90629 35766 +99801 13773 +97880 10299 +67699 77976 +44374 68427 +12199 77367 +71056 15202 +76588 44999 +73579 57631 +99007 77689 +81619 53485 +31191 62127 +80056 84625 +64180 23225 +54280 99760 +39351 48787 +33694 72481 +59589 20554 +95067 73532 +91316 40271 +73532 26451 +49527 93539 +46775 80376 +79815 59637 +35690 57057 +78276 95579 +64869 71861 +14150 36760 +36529 69884 +41203 84659 +42188 52872 +59342 26876 +13743 15791 +35869 82919 +56530 50033 +46284 15202 +61154 69884 +35696 86345 +15254 61699 +57134 71533 +70825 21595 +66588 34391 +82940 16813 +13492 15968 +96700 71218 +97141 52702 +61389 38118 +97291 69884 +60721 26377 +51117 83200 +98847 50875 +87646 22249 +62478 14669 +79243 66768 +40877 30705 +85374 99760 +26483 97357 +50799 72595 +31201 63907 +69859 67933 +10162 97886 +65187 73532 +51941 99007 +61601 68668 +88266 71861 +77196 44999 +92169 26447 +35540 30408 +37333 96467 +91358 64059 +25360 25918 +79252 41453 +90858 95320 +29099 89894 +42949 57509 +44235 61265 +76836 30756 +58622 32788 +52544 88998 +83243 61839 +11550 81665 +75353 90674 +18733 49200 +44857 99760 +47917 18551 +46902 94882 +67800 50385 +66456 27826 +54772 35730 +29893 52702 +93137 69884 +78826 81665 +28223 22708 +54686 31988 +69884 31020 +65815 22691 +54404 68691 +33098 61699 +31777 87837 +55080 92718 +52404 17012 +78426 99007 +86123 33334 +38248 21362 +18775 92718 +18300 84179 +68027 26566 +26944 58509 +96983 49850 +16112 73532 +22976 69884 +70019 58536 +99156 56912 +18554 56714 +34219 59289 +75604 46931 +93676 99760 +80075 44664 +61524 71190 +48559 83823 +79042 15968 +10187 63907 +81634 99760 +98757 45694 +95160 32788 +49758 62127 +34595 69729 +79509 75616 +70849 70765 +19823 99007 +11674 63907 +80688 26876 +68689 44999 +99145 30681 +29803 77689 +11195 26876 +39142 78046 +89735 99760 +17954 56702 +35483 24463 +24596 55483 +29573 86792 +40311 69884 +36696 79954 +71770 84179 +48235 40271 +64473 98643 +10835 29037 +87315 40271 +82881 60460 +62963 22798 +26876 15558 +23333 51990 +12241 33180 +77191 81665 +51847 62738 +29391 44999 +67769 59925 +86133 26025 +11156 56714 +78912 42186 +68345 58100 +33464 82105 +66618 63907 +48407 63946 +18442 81320 +88673 52220 +46467 84179 +75390 34795 +39665 26232 +38181 34226 +39508 21595 +99046 41455 +99124 58536 +10567 98228 +60543 71569 +43020 97889 +38858 40271 +29190 80539 +34739 62127 +89621 69560 +30771 58536 +57289 81665 +25790 99007 +75082 40873 +48883 77898 +84768 43568 +37225 52172 +69182 21856 +56054 15202 +88455 11998 +12595 81665 +42875 54145 +73926 44999 +36122 52702 +46708 99007 +29997 15202 +42745 98773 +42375 56714 +75274 20728 +88736 72595 +62127 56145 +26385 20846 +60047 26876 +73700 63508 +99967 56386 +91205 55219 +72084 17536 +11100 30853 +86461 63549 +44630 77689 +85895 51919 +68759 33484 +74502 71645 +19619 25720 +51879 22939 +93529 28809 +95744 44892 +71040 69884 +92283 10187 +69503 52702 +69366 32834 +77924 97954 +29331 17904 +53839 32788 +39040 92718 +77367 73532 +80212 58100 +46701 15968 +81778 64498 +98144 43740 +57572 83339 +58954 63907 +43061 69884 +33284 41119 +52046 98936 +43374 52702 +45680 30069 +58466 63907 +38467 70067 +41669 15479 +97829 40271 +61699 63907 +67033 10670 +85926 72595 +81216 30476 +51978 63846 +79287 81665 +23180 36540 +25437 25410 +39375 39888 +83920 52583 +66350 84179 +71374 52702 +43715 26936 +63974 77367 +23571 69884 +43184 84982 +89441 42511 +81551 44999 +10922 71861 +31029 29596 +60099 25656 +84341 28350 +87757 99007 +23597 15202 +78234 26876 +56131 96770 +52135 97828 +26696 17764 +17491 99007 +86740 60265 +53289 77689 +60718 52171 +57714 87530 +65300 40271 +65053 19684 +97208 29064 +79814 15202 +25364 63442 +47637 39347 +96951 69884 +53474 62127 +46924 69884 +50969 52018 +37489 99007 +48578 62127 +61446 80919 +68586 34617 +49043 73532 +92466 82326 +24713 44999 +63343 55976 +35977 84179 +34245 33537 +51912 56714 +94801 52702 +43170 40215 +92867 77689 +70889 82782 +55715 32788 +58553 53227 +16471 23124 +87308 51281 +21869 75687 +42734 58536 +60655 15202 +85304 77668 +94528 10667 +52573 29966 +67022 91096 +56714 98154 +24181 10943 +72888 40347 +72526 73838 +35075 99760 +18297 77200 +33264 94679 +79398 56714 +96423 61699 +98761 99007 +47893 52463 +23998 29333 +73783 80539 +95656 85562 +39010 70144 +12750 50086 +37688 37813 +34615 99090 +89976 36475 +57208 81294 +77332 63554 +84748 77108 +91236 37247 +95049 38795 +37167 87150 +75938 81744 +13240 60220 +98249 81665 +57711 82510 +48345 50410 +34247 55076 +63735 56714 +49753 72955 +42491 57804 +95228 62498 +49153 69884 +48475 81665 +51080 16072 +99335 26876 +76428 71861 +87840 87762 +90879 63708 +78241 94882 +44228 70144 +14939 81681 +91560 72595 +60633 61699 +87704 14607 +93639 44999 +56105 29596 +32508 73607 +12567 33468 +97216 21595 +50798 92962 +22716 94002 +14778 56597 +85689 26890 +44077 99719 +19295 43088 +95073 89224 +66049 74142 +13636 55544 +14788 46689 +50539 94586 +76711 12338 +68845 99007 +58084 56714 +81373 44999 +85290 52702 +74215 81665 +83877 42928 +72744 24041 +42339 44999 +90903 77689 +95473 77689 +15968 81665 +30119 70771 +67126 62242 +28005 43891 +83542 56246 +55690 61699 +86747 52702 +95312 76423 +71809 30853 +95342 86814 +35018 44999 +66726 88424 +88452 46221 +27429 40593 +55822 74366 +55664 17591 +52298 56714 +46184 12887 +83709 73532 +96569 52521 +94130 77689 +14616 90178 +54685 61908 +46980 56034 +97505 63846 +65102 40271 +27333 54978 +50829 12173 +22972 75288 +82623 52859 +38551 43499 +93146 26876 +75782 44999 +58483 90566 +25714 14324 +93683 12547 +13255 41011 +17050 77689 +99987 69884 +87610 98164 +32788 79689 +88659 72069 +75294 77367 +83641 61674 +78128 15202 +77913 58536 +18091 56438 +44772 38894 +18123 63907 +14757 22903 +86063 10369 +58790 13571 +96646 73532 +17441 37016 +62735 79008 +19676 58536 +53952 21281 +96037 78166 +56324 41924 +91420 92847 +32075 80539 +88097 93787 +64557 77689 +86964 87922 +54705 63907 +39832 87431 +26744 29333 +94719 35503 +15467 75955 +41780 56714 +68740 33686 +78413 28597 +22458 82789 +32380 70070 +58856 66092 +31400 68116 +29596 92821 +74434 36862 +56903 60867 +68537 62762 +73882 52702 +50795 41011 +92978 80539 +15419 63907 +30824 73027 +87167 66219 +30311 23071 +69915 65438 +13875 10846 +25150 58100 +71794 69045 +67187 22217 +88571 99345 +52691 99760 +58484 65806 +55576 15217 +70871 58536 +83674 61363 +21595 43759 +62939 84792 +19915 21720 +87126 59116 +37323 97948 +16743 81665 +76646 30581 +32715 62127 +27800 67124 +50506 13412 +41711 41011 +69510 49308 +64796 44463 +72579 12149 +69190 16493 +54418 23411 +22487 58536 +99378 63907 +12668 69884 +83089 54374 +49382 69884 +97939 18992 +55613 49971 +30391 71962 +99867 86926 +22464 58536 +62800 69400 +60452 30181 +28236 41011 +19971 99007 +97670 69480 +14241 19344 +53561 61699 +62921 99007 +56358 35755 +62754 34787 +58536 99007 +30001 53814 +74539 12679 +64108 42344 +10964 15202 +31620 12133 +63140 29642 +56181 75252 +24997 77689 +83375 30853 +58316 70611 +37598 86581 +53492 55238 +94882 53526 +49886 98524 +34832 40271 +51601 96816 +86836 76006 +98028 49086 +81264 92718 +88107 99760 +92986 22844 +15192 58536 +33858 31074 +47939 51733 +11400 64586 +41733 45362 +72781 74505 +99442 42256 +33819 73532 +42475 78227 +71861 63009 +16910 77689 +66841 55855 +82076 47569 +23970 77297 +50621 30972 +82188 65987 +52027 21595 +65978 41011 +76860 73419 +33128 23741 +56773 78528 +74030 40271 +83925 56714 +19663 10575 +45965 52702 +79913 99007 +24014 73532 +82291 30853 +55050 77689 +17469 77689 +89161 32788 +77583 72595 +63786 77015 +34030 25130 +31825 11803 +58100 29596 +31899 30853 +49755 72595 +27015 71793 +26065 14784 +56821 42394 +32804 26876 +41011 73532 +89019 62241 +67037 12599 +30561 21210 +64503 38086 +99814 92718 +62163 44999 +41339 56714 +48486 24365 +73474 84198 +12943 85353 +53346 76552 +65110 10187 +14424 99714 +77324 44999 +68183 99007 +62112 97792 +91712 78301 +30715 41011 +80210 76343 +48330 99007 +46680 96360 +89265 21171 +78498 67808 +95594 60377 +81820 84843 +17509 85554 +47369 11182 +34359 84179 +45592 15347 \ No newline at end of file diff --git a/2024/day1/main.py b/2024/day1/main.py new file mode 100644 index 0000000..7ee9d0f --- /dev/null +++ b/2024/day1/main.py @@ -0,0 +1,42 @@ +with open('input.text', 'r') as file: + data: list[str] = file.readlines() + +# Parse Input + +left = [] +right = [] + +for line in data: + nums = line.split() + + left.append(int(nums[0])) + right.append(int(nums[1])) + +# Part 1 + +lc = left.copy() +rc = right.copy() + +total = 0 +while min(lc) != float('inf'): + lowest_left = min(lc) + lowest_right = min(rc) + + total += abs(lowest_left - lowest_right) + + lc[lc.index(lowest_left)] = float('inf') + rc[rc.index(lowest_right)] = float('inf') + +print(f'Part 1: {total}') + +# Part 2 + +lc = left.copy() +rc = right.copy() + +while min(lc) != float('inf'): + lowest_left = min(lc) + lowest_right = min(rc) + + + diff --git a/2024/day1/test.text b/2024/day1/test.text new file mode 100644 index 0000000..dfca0b1 --- /dev/null +++ b/2024/day1/test.text @@ -0,0 +1,6 @@ +3 4 +4 3 +2 5 +1 3 +3 9 +3 3 \ No newline at end of file