diff --git a/2022/.idea/runConfigurations/Day_05.xml b/2022/.idea/runConfigurations/Day_05.xml
new file mode 100644
index 0000000..101a76a
--- /dev/null
+++ b/2022/.idea/runConfigurations/Day_05.xml
@@ -0,0 +1,24 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="Day 05" type="PythonConfigurationType" factoryName="Python">
+    <module name="2022" />
+    <option name="INTERPRETER_OPTIONS" value="" />
+    <option name="PARENT_ENVS" value="true" />
+    <envs>
+      <env name="PYTHONUNBUFFERED" value="1" />
+    </envs>
+    <option name="SDK_HOME" value="" />
+    <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/05" />
+    <option name="IS_MODULE_SDK" value="true" />
+    <option name="ADD_CONTENT_ROOTS" value="true" />
+    <option name="ADD_SOURCE_ROOTS" value="true" />
+    <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
+    <option name="SCRIPT_NAME" value="$PROJECT_DIR$/05/main.py" />
+    <option name="PARAMETERS" value="" />
+    <option name="SHOW_COMMAND_LINE" value="false" />
+    <option name="EMULATE_TERMINAL" value="false" />
+    <option name="MODULE_MODE" value="false" />
+    <option name="REDIRECT_INPUT" value="false" />
+    <option name="INPUT_FILE" value="" />
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/2022/05/input.txt b/2022/05/input.txt
new file mode 100644
index 0000000..2e430d9
--- /dev/null
+++ b/2022/05/input.txt
@@ -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
diff --git a/2022/05/main.py b/2022/05/main.py
new file mode 100644
index 0000000..e297076
--- /dev/null
+++ b/2022/05/main.py
@@ -0,0 +1,37 @@
+import itertools
+import re
+
+from utils.input import read_input_lines
+
+lines = iter(read_input_lines())
+initial_stack_configuration_lines = list(itertools.takewhile(lambda line: len(line) > 0, lines))[:-1]
+
+stacks = list()
+
+for line in reversed(initial_stack_configuration_lines):
+    for stack_index, character_index in enumerate(range(1, len(line), 4)):
+        crate = line[character_index]
+        
+        if crate == " ":
+            continue
+        
+        for i in range(len(stacks), stack_index + 1):
+            stacks.append(list())
+        
+        stacks[stack_index].append(crate)
+
+for instruction in lines:
+    parsed = re.search(r"move (\d+) from (\d+) to (\d+)", instruction)
+    
+    moved_count = int(parsed.group(1))
+    from_column = int(parsed.group(2)) - 1
+    to_column = int(parsed.group(3)) - 1
+    
+    for i in range(moved_count):
+        moved_crate = stacks[from_column].pop()
+        stacks[to_column].append(moved_crate)
+
+print("Top of each stack: ", end = "")
+
+for stack in stacks:
+    print(stack[-1], end = "")
diff --git a/2022/utils/input.py b/2022/utils/input.py
index 88a3793..41d0fbf 100644
--- a/2022/utils/input.py
+++ b/2022/utils/input.py
@@ -1,3 +1,3 @@
 def read_input_lines() -> list[str]:
     with open("input.txt") as f:
-        return [line.strip() for line in f.readlines()]
+        return [line.rstrip() for line in f.readlines()]
diff --git a/README.md b/README.md
index e1278e4..62b09cb 100644
--- a/README.md
+++ b/README.md
@@ -84,7 +84,7 @@ The versions should not matter, but I used Visual Studio 2019 with `MSVC v142 (1
 | 2021 |  02 | Kotlin   |  /  | 2022 |  02 | Python   |
 | 2021 |  03 | Kotlin   |  /  | 2022 |  03 | Python   |
 | 2021 |  04 | Kotlin   |  /  | 2022 |  04 | Python   |
-| 2021 |  05 | Kotlin   |  /  |      |     |          |
+| 2021 |  05 | Kotlin   |  /  | 2022 |  05 | Python   |
 | 2021 |  06 | Kotlin   |  /  |      |     |          |
 | 2021 |  07 | Kotlin   |  /  |      |     |          |
 | 2021 |  08 | Kotlin   |  /  |      |     |          |