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