diff --git a/day_5/input.txt b/day_5/input.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9fa69f3d9f126c7d80412a78ff8b7359c7b4d06f
--- /dev/null
+++ b/day_5/input.txt
@@ -0,0 +1 @@
+3,9,8,9,10,9,4,9,99,-1,8,99,9999,3,225,1,225,6,6,1100,1,238,225,104,0,1101,72,36,225,1101,87,26,225,2,144,13,224,101,-1872,224,224,4,224,102,8,223,223,1001,224,2,224,1,223,224,223,1102,66,61,225,1102,25,49,224,101,-1225,224,224,4,224,1002,223,8,223,1001,224,5,224,1,223,224,223,1101,35,77,224,101,-112,224,224,4,224,102,8,223,223,1001,224,2,224,1,223,224,223,1002,195,30,224,1001,224,-2550,224,4,224,1002,223,8,223,1001,224,1,224,1,224,223,223,1102,30,44,225,1102,24,21,225,1,170,117,224,101,-46,224,224,4,224,1002,223,8,223,101,5,224,224,1,224,223,223,1102,63,26,225,102,74,114,224,1001,224,-3256,224,4,224,102,8,223,223,1001,224,3,224,1,224,223,223,1101,58,22,225,101,13,17,224,101,-100,224,224,4,224,1002,223,8,223,101,6,224,224,1,224,223,223,1101,85,18,225,1001,44,7,224,101,-68,224,224,4,224,102,8,223,223,1001,224,5,224,1,223,224,223,4,223,99,0,0,0,677,0,0,0,0,0,0,0,0,0,0,0,1105,0,99999,1105,227,247,1105,1,99999,1005,227,99999,1005,0,256,1105,1,99999,1106,227,99999,1106,0,265,1105,1,99999,1006,0,99999,1006,227,274,1105,1,99999,1105,1,280,1105,1,99999,1,225,225,225,1101,294,0,0,105,1,0,1105,1,99999,1106,0,300,1105,1,99999,1,225,225,225,1101,314,0,0,106,0,0,1105,1,99999,7,677,226,224,102,2,223,223,1005,224,329,101,1,223,223,8,677,226,224,1002,223,2,223,1005,224,344,1001,223,1,223,1107,677,677,224,102,2,223,223,1005,224,359,1001,223,1,223,1107,226,677,224,102,2,223,223,1005,224,374,101,1,223,223,7,226,677,224,102,2,223,223,1005,224,389,101,1,223,223,8,226,677,224,1002,223,2,223,1005,224,404,101,1,223,223,1008,226,677,224,1002,223,2,223,1005,224,419,1001,223,1,223,107,677,677,224,102,2,223,223,1005,224,434,101,1,223,223,1108,677,226,224,1002,223,2,223,1006,224,449,101,1,223,223,1108,677,677,224,102,2,223,223,1006,224,464,101,1,223,223,1007,677,226,224,102,2,223,223,1006,224,479,101,1,223,223,1008,226,226,224,102,2,223,223,1006,224,494,101,1,223,223,108,226,226,224,1002,223,2,223,1006,224,509,101,1,223,223,107,226,226,224,102,2,223,223,1006,224,524,101,1,223,223,1107,677,226,224,102,2,223,223,1005,224,539,1001,223,1,223,108,226,677,224,1002,223,2,223,1005,224,554,101,1,223,223,1007,226,226,224,102,2,223,223,1005,224,569,101,1,223,223,8,226,226,224,102,2,223,223,1006,224,584,101,1,223,223,1008,677,677,224,1002,223,2,223,1005,224,599,1001,223,1,223,107,226,677,224,1002,223,2,223,1005,224,614,1001,223,1,223,1108,226,677,224,102,2,223,223,1006,224,629,101,1,223,223,7,677,677,224,1002,223,2,223,1005,224,644,1001,223,1,223,108,677,677,224,102,2,223,223,1005,224,659,101,1,223,223,1007,677,677,224,102,2,223,223,1006,224,674,101,1,223,223,4,223,99,226
diff --git a/day_5/main.py b/day_5/main.py
new file mode 100644
index 0000000000000000000000000000000000000000..7c5dae98cd1559432b08353d6f23fd96dde25a00
--- /dev/null
+++ b/day_5/main.py
@@ -0,0 +1,171 @@
+"""1202 Program Alarm."""
+import itertools
+
+
+def get_codes():
+    with open('input.txt') as f:
+        return [int(num) for num in f.readline().strip().split(',')]
+
+
+def get_opcode(opcode):
+    tmp = int(opcode)
+    op = tmp % 100
+    tmp //= 100
+    h = tmp % 10
+    tmp //= 10
+    k = tmp % 10
+    tmp //= 10
+    t = tmp % 10
+
+    return h, k, t, op
+
+
+def get_opcode2(opcode):
+    tmp = int(opcode)
+    op = tmp % 100
+    tmp //= 100
+    h = tmp % 10
+    tmp //= 10
+    k = tmp % 10
+    tmp //= 10
+    t = tmp % 10
+
+    if op in (1, 2, 7, 8):
+        t = 1
+    if op in (3,):
+        h = 1
+
+    return (h, k, t), op
+
+
+def op_get_size(op):
+    if op == 1:
+        return 4
+    if op == 2:
+        return 4
+    if op == 3:
+        return 2
+    if op == 4:
+        return 2
+    if op == 5:
+        return 3
+    if op == 6:
+        return 3
+    if op == 7:
+        return 4
+    if op == 8:
+        return 4
+    if op == 99:
+        return 1
+
+
+def get_next_command(ip, codes):
+    parm_counts = {1:3, 2:3, 3:1, 4:1, 5:2, 6:2, 7:3, 8:3, 99:0}
+    modes, op = get_opcode2(codes[ip])
+
+    params = [0,0,0]
+    ip += 1
+    for x in range(parm_counts[op]):
+        params[x] = codes[ip]
+        if modes[x] == 0:
+            params[x] = codes[params[x]]
+        ip += 1
+
+
+    return ip, op, params
+
+
+def exec_command(ip, op, params, codes):
+    if op == 1:
+        codes[params[2]] = params[0] + params[1]
+    elif op == 2:
+        codes[params[2]] = params[0] * params[1]
+    elif op == 3:
+        val = int(input('Enter input val? '))
+        codes[params[0]] = val
+    elif op == 4:
+        print(f'Output value = ({params[0]})')
+    elif op == 5:
+        if params[0] != 0:
+            ip = params[1]
+    elif op == 6:
+        if params[0] == 0:
+            ip = params[1]
+    elif op == 7:
+        if params[0] < params[1]:
+            params[2] = 1
+    elif op == 8:
+        if params[0] == params[1]:
+            params[2] = 1
+        else:
+            params[2] = 0
+    elif op == 99:
+        ip = -1
+    else:
+        print(f'Bad Op Code {op}')
+        ip = -1
+
+    return ip
+
+
+def run_program(codes):
+    ip = 0
+    while ip != -1:
+        ip, op, params = get_next_command(ip, codes)
+        ip = exec_command(ip, op, params, codes)
+
+
+def run_computer(codes):
+    ip = 0
+    while codes[ip] != 99:
+        p1_mode, p2_mode, p3_mode, op = get_opcode(codes[ip+0])
+        # print(p1_mode, p2_mode, p3_mode, op)
+        size = op_get_size(op)
+        if size == 1:
+            pass
+
+        parm1 = codes[ip+1]
+        outpt = parm1
+        if p1_mode == 0:
+            parm1 = codes[parm1]
+
+        if size == 4:
+            parm2 = codes[ip+2]
+            if p2_mode == 0:
+                parm2 = codes[parm2]
+
+            outpt = codes[ip+3]
+
+        if op == 1:
+            codes[outpt] = parm1 + parm2
+        elif op == 2:
+            codes[outpt] = parm1 * parm2
+        elif op == 3:
+            val = int(input('Enter input val? '))
+            codes[outpt] = val
+        elif op == 4:
+            print(f'Output value = ({parm1})')
+        else:
+            print(f'Bad Op Code {op}')
+            break
+        ip += size
+
+
+def main2():
+    """Drive the program."""
+    codes = get_codes()
+
+    new_codes = [code for code in codes]
+
+    run_computer(new_codes)
+
+
+def main():
+    """Drive the program."""
+    codes = get_codes()
+
+    run_program(codes)
+
+
+if __name__ == "__main__":
+    main()