From a238a1bf4b354fe95be561a7a336c08cd1ce42a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20Th=C3=B6ni?= <florian.thoni@floth.fr>
Date: Sun, 8 Dec 2019 09:47:34 +0100
Subject: [PATCH 1/3] Day 2 question 1

---
 .gitlab-ci.yml                             |   9 +-
 day_1/question_2/resolve.material          | 100 ---------------------
 day_1/{question_1 => }/resolve.material    |   0
 day_1/{question_1 => }/resolve_1_1.py      |   2 +-
 day_1/{question_2 => }/resolve_1_2.py      |   2 +-
 day_1/{question_1 => }/test_resolve_1_1.py |   2 +-
 day_1/{question_2 => }/test_resolve_1_2.py |   2 +-
 day_2/resolve.material                     |   1 +
 day_2/resolve_2_1.py                       |  44 +++++++++
 day_2/test_resolve_2_1.py                  |  60 +++++++++++++
 10 files changed, 116 insertions(+), 106 deletions(-)
 delete mode 100644 day_1/question_2/resolve.material
 rename day_1/{question_1 => }/resolve.material (100%)
 rename day_1/{question_1 => }/resolve_1_1.py (91%)
 rename day_1/{question_2 => }/resolve_1_2.py (92%)
 rename day_1/{question_1 => }/test_resolve_1_1.py (96%)
 rename day_1/{question_2 => }/test_resolve_1_2.py (96%)
 create mode 100644 day_2/resolve.material
 create mode 100644 day_2/resolve_2_1.py
 create mode 100644 day_2/test_resolve_2_1.py

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index aa2db0f..5c60142 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -61,9 +61,14 @@ pytest:
 day_1_question_1:
   stage: run
   script:
-    - pipenv run python3 day_1/question_1/resolve_1_1.py
+    - pipenv run python3 day_1/resolve_1_1.py
 
 day_1_question_2:
   stage: run
   script:
-    - pipenv run python3 day_1/question_2/resolve_1_2.py
\ No newline at end of file
+    - pipenv run python3 day_1/resolve_1_2.py
+
+day_2_question_1:
+  stage: run
+  script:
+    - pipenv run python3 day_2/resolve_2_1.py
\ No newline at end of file
diff --git a/day_1/question_2/resolve.material b/day_1/question_2/resolve.material
deleted file mode 100644
index 37ec6c6..0000000
--- a/day_1/question_2/resolve.material
+++ /dev/null
@@ -1,100 +0,0 @@
-100725
-63593
-84738
-143809
-108595
-94419
-91617
-91573
-102728
-143383
-74613
-80331
-76530
-139884
-104607
-107171
-107640
-87284
-120827
-85742
-62474
-97582
-110668
-73426
-57656
-70819
-89848
-138732
-54386
-116905
-107954
-131488
-75056
-97660
-55295
-146265
-58026
-94712
-73636
-138077
-61480
-148868
-119364
-145430
-103901
-134202
-106759
-50254
-82440
-117801
-80263
-97022
-145229
-57702
-57460
-58401
-145652
-127341
-123585
-65291
-70219
-147009
-88728
-72059
-83815
-99635
-80913
-149475
-61798
-110054
-102505
-148511
-95160
-50208
-129867
-57079
-138435
-75865
-63185
-142389
-78370
-108077
-106438
-86267
-100785
-101165
-68501
-146079
-122420
-121429
-62608
-115338
-90667
-131391
-50260
-85343
-76411
-94432
-130126
-80915
diff --git a/day_1/question_1/resolve.material b/day_1/resolve.material
similarity index 100%
rename from day_1/question_1/resolve.material
rename to day_1/resolve.material
diff --git a/day_1/question_1/resolve_1_1.py b/day_1/resolve_1_1.py
similarity index 91%
rename from day_1/question_1/resolve_1_1.py
rename to day_1/resolve_1_1.py
index 25a7bfb..166caae 100644
--- a/day_1/question_1/resolve_1_1.py
+++ b/day_1/resolve_1_1.py
@@ -17,7 +17,7 @@ def main():
 def get_data():
     """Get data from file."""
     data_set = None
-    with open("day_1/question_1/resolve.material") as material:
+    with open("day_1/resolve.material") as material:
         data_set = material.read().split("\n")
     return data_set
 
diff --git a/day_1/question_2/resolve_1_2.py b/day_1/resolve_1_2.py
similarity index 92%
rename from day_1/question_2/resolve_1_2.py
rename to day_1/resolve_1_2.py
index 0324efa..6324494 100644
--- a/day_1/question_2/resolve_1_2.py
+++ b/day_1/resolve_1_2.py
@@ -17,7 +17,7 @@ def main():
 def get_data():
     """Get data from file."""
     data_set = None
-    with open("day_1/question_1/resolve.material") as material:
+    with open("day_1/resolve.material") as material:
         data_set = material.read().split("\n")
     return data_set
 
diff --git a/day_1/question_1/test_resolve_1_1.py b/day_1/test_resolve_1_1.py
similarity index 96%
rename from day_1/question_1/test_resolve_1_1.py
rename to day_1/test_resolve_1_1.py
index c9d12be..0c5df84 100644
--- a/day_1/question_1/test_resolve_1_1.py
+++ b/day_1/test_resolve_1_1.py
@@ -1,7 +1,7 @@
 """Tests for question 1 day 1."""
 import pytest
 from unittest.mock import patch, mock_open
-from day_1.question_1 import resolve_1_1
+from day_1 import resolve_1_1
 
 
 def test_main(capsys):
diff --git a/day_1/question_2/test_resolve_1_2.py b/day_1/test_resolve_1_2.py
similarity index 96%
rename from day_1/question_2/test_resolve_1_2.py
rename to day_1/test_resolve_1_2.py
index e6e2beb..370fdd7 100644
--- a/day_1/question_2/test_resolve_1_2.py
+++ b/day_1/test_resolve_1_2.py
@@ -1,7 +1,7 @@
 """Tests for question 2 day 1."""
 import pytest
 from unittest.mock import patch, mock_open
-from day_1.question_2 import resolve_1_2
+from day_1 import resolve_1_2
 
 
 def test_main(capsys):
diff --git a/day_2/resolve.material b/day_2/resolve.material
new file mode 100644
index 0000000..aa94710
--- /dev/null
+++ b/day_2/resolve.material
@@ -0,0 +1 @@
+1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,13,1,19,1,5,19,23,2,10,23,27,1,27,5,31,2,9,31,35,1,35,5,39,2,6,39,43,1,43,5,47,2,47,10,51,2,51,6,55,1,5,55,59,2,10,59,63,1,63,6,67,2,67,6,71,1,71,5,75,1,13,75,79,1,6,79,83,2,83,13,87,1,87,6,91,1,10,91,95,1,95,9,99,2,99,13,103,1,103,6,107,2,107,6,111,1,111,2,115,1,115,13,0,99,2,0,14,0
diff --git a/day_2/resolve_2_1.py b/day_2/resolve_2_1.py
new file mode 100644
index 0000000..5d5ac6b
--- /dev/null
+++ b/day_2/resolve_2_1.py
@@ -0,0 +1,44 @@
+"""Resolution for the day 2 question 1."""
+import math
+
+
+def main():
+    """Main function for day 2 question 1."""
+    data_set = get_data()
+    computed_program = compute_program(data_set)
+
+    print(computed_program[0])
+
+
+def get_data():
+    """Get data from file."""
+    data_set = None
+    with open("day_2/resolve.material") as material:
+        raw_data_set = material.read().replace("\n", "")
+
+        data_set = [int(data) for data in raw_data_set.split(",")]
+    return data_set
+
+
+def compute_program(program):
+    """Computes the given program."""
+    cur_pos = 0
+    order = program[0]
+    while order != 99:
+        operand_1_pos = program[cur_pos + 1]
+        operand_2_pos = program[cur_pos + 2]
+        op_result_pos = program[cur_pos + 3]
+        if order == 1:
+            program[op_result_pos] = program[operand_1_pos] + program[operand_2_pos]
+        if order == 2:
+            program[op_result_pos] = program[operand_1_pos] * program[operand_2_pos]
+        cur_pos += 4
+        try:
+            order = program[cur_pos]
+        except IndexError:
+            order = 99
+    return program
+
+
+if __name__ == "__main__":
+    main()
diff --git a/day_2/test_resolve_2_1.py b/day_2/test_resolve_2_1.py
new file mode 100644
index 0000000..0baf418
--- /dev/null
+++ b/day_2/test_resolve_2_1.py
@@ -0,0 +1,60 @@
+"""Tests for question 1 day 1."""
+import pytest
+from unittest.mock import patch, mock_open
+from day_2 import resolve_2_1
+
+
+@pytest.mark.parametrize(
+    "material, expected",
+    [
+        ("1, 9, 10, 3, 2, 3, 11, 0, 99, 30, 40, 50\n", "3500\n"),
+        ("1, 0, 0, 0, 99\n", "2\n"),
+        ("2, 3, 0, 3, 99\n", "2\n"),
+        ("2, 4, 4, 5, 99, 0\n", "2\n"),
+        ("1, 1, 1, 4, 99, 5, 6, 0, 99\n", "30\n"),
+    ],
+)
+def test_main(material, expected, capsys):
+    """Test for the main function."""
+    real = None
+
+    with patch("builtins.open", mock_open(read_data=material)):
+        resolve_2_1.main()
+
+        captured = capsys.readouterr()
+        real = captured.out
+
+    assert real == expected
+
+
+def test_get_data():
+    """Test for the get_data function."""
+    material = "3, 4\n\n"
+    expected = [3, 4]
+
+    real = None
+    with patch("builtins.open", mock_open(read_data=material)):
+        real = resolve_2_1.get_data()
+
+    assert real == expected
+
+
+@pytest.mark.parametrize(
+    "material, expected",
+    [
+        (
+            [1, 9, 10, 3, 2, 3, 11, 0, 99, 30, 40, 50],
+            [3500, 9, 10, 70, 2, 3, 11, 0, 99, 30, 40, 50],
+        ),
+        ([1, 0, 0, 0, 99], [2, 0, 0, 0, 99]),
+        ([2, 3, 0, 3, 99], [2, 3, 0, 6, 99]),
+        ([2, 4, 4, 5, 99, 0], [2, 4, 4, 5, 99, 9801]),
+        ([1, 1, 1, 4, 99, 5, 6, 0, 99], [30, 1, 1, 4, 2, 5, 6, 0, 99]),
+        ([1, 1, 1, 1], [1, 2, 1, 1]),
+    ],
+)
+def test_compute_program(material, expected):
+    """Test for the compute_program function."""
+    real = resolve_2_1.compute_program(material)
+
+    assert real == expected
-- 
GitLab


From 4e11578a899ce6d403af31a66b969d3c1674d2ee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20Th=C3=B6ni?= <florian.thoni@floth.fr>
Date: Sun, 8 Dec 2019 09:51:42 +0100
Subject: [PATCH 2/3] Day 2 question 1

---
 day_2/resolve_2_1.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/day_2/resolve_2_1.py b/day_2/resolve_2_1.py
index 5d5ac6b..80968a3 100644
--- a/day_2/resolve_2_1.py
+++ b/day_2/resolve_2_1.py
@@ -1,5 +1,4 @@
 """Resolution for the day 2 question 1."""
-import math
 
 
 def main():
-- 
GitLab


From 60fdc0bd4966160354ba4a2c4430221633de99a0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20Th=C3=B6ni?= <florian.thoni@floth.fr>
Date: Sun, 8 Dec 2019 10:25:51 +0100
Subject: [PATCH 3/3] Forgot to patch the sequence

---
 day_2/resolve_2_1.py      | 12 +++++++++++-
 day_2/test_resolve_2_1.py | 21 ++++++++++++++++++---
 2 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/day_2/resolve_2_1.py b/day_2/resolve_2_1.py
index 80968a3..ba8a060 100644
--- a/day_2/resolve_2_1.py
+++ b/day_2/resolve_2_1.py
@@ -4,11 +4,19 @@
 def main():
     """Main function for day 2 question 1."""
     data_set = get_data()
+    data_set = patch_program(data_set)
     computed_program = compute_program(data_set)
 
     print(computed_program[0])
 
 
+def patch_program(program):
+    """Apply the replaces requested."""
+    program[1] = 12
+    program[2] = 2
+    return program
+
+
 def get_data():
     """Get data from file."""
     data_set = None
@@ -29,8 +37,10 @@ def compute_program(program):
         op_result_pos = program[cur_pos + 3]
         if order == 1:
             program[op_result_pos] = program[operand_1_pos] + program[operand_2_pos]
-        if order == 2:
+        elif order == 2:
             program[op_result_pos] = program[operand_1_pos] * program[operand_2_pos]
+        else:
+            print("Something went wrong, unknown opcode")
         cur_pos += 4
         try:
             order = program[cur_pos]
diff --git a/day_2/test_resolve_2_1.py b/day_2/test_resolve_2_1.py
index 0baf418..a0ca250 100644
--- a/day_2/test_resolve_2_1.py
+++ b/day_2/test_resolve_2_1.py
@@ -19,10 +19,24 @@ def test_main(material, expected, capsys):
     real = None
 
     with patch("builtins.open", mock_open(read_data=material)):
-        resolve_2_1.main()
+        with patch("day_2.resolve_2_1.patch_program") as patch_program:
+            patch_program.return_value = [
+                int(data) for data in material.replace("\n", "").split(",")
+            ]
+            resolve_2_1.main()
 
-        captured = capsys.readouterr()
-        real = captured.out
+            captured = capsys.readouterr()
+            real = captured.out
+
+    assert real == expected
+
+
+def test_patch_program():
+    """Test for the patch_program function."""
+    material = [0, 0, 0, 0]
+    expected = [0, 12, 2, 0]
+
+    real = resolve_2_1.patch_program(material)
 
     assert real == expected
 
@@ -51,6 +65,7 @@ def test_get_data():
         ([2, 4, 4, 5, 99, 0], [2, 4, 4, 5, 99, 9801]),
         ([1, 1, 1, 4, 99, 5, 6, 0, 99], [30, 1, 1, 4, 2, 5, 6, 0, 99]),
         ([1, 1, 1, 1], [1, 2, 1, 1]),
+        ([10, 0, 0, 0], [10, 0, 0, 0]),
     ],
 )
 def test_compute_program(material, expected):
-- 
GitLab