From bfac5752c4eea21e08832fb0e97a744afc9867d5 Mon Sep 17 00:00:00 2001 From: rchrdwss Date: Sun, 15 Nov 2020 14:51:00 +0100 Subject: [PATCH] Added possibility to test solution attempt of one specific result by using a solution algorithm --- EscapeRoom.py | 9 +++++++-- EscapeRoomWeb.py | 2 +- rooms/ExampleRoom.py | 6 ++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/EscapeRoom.py b/EscapeRoom.py index 9a8b9d3..c5e9bcd 100644 --- a/EscapeRoom.py +++ b/EscapeRoom.py @@ -28,9 +28,14 @@ def set_metadata(self, author, room_name): def get_metadata(self): return {"author": self.author, "room_name": self.room_name, "levels": len(self.levels)} - def check_solution(self, solution_filename, correct_function, data): + def check_solution(self, solution_filename, correct_function, data, algorithm): solution = self.run_code(solution_filename, data) - correct = solution == correct_function(data) + try: + correct = algorithm(solution) + except: + result_error = 1 + if 'result_error' in locals() and result_error == 1: + correct = solution == correct_function(data) return {"correct": correct, "solution": solution} def run_code(self, filename, data): diff --git a/EscapeRoomWeb.py b/EscapeRoomWeb.py index f458698..42b3d11 100644 --- a/EscapeRoomWeb.py +++ b/EscapeRoomWeb.py @@ -72,7 +72,7 @@ def post_solve_level(room_nr, level_nr): string.ascii_lowercase + string.digits, k=7)) file.save(filename+".py") solution = room.check_solution( - filename, level["solution_function"], level["data"]) + filename, level["solution_function"], level["data"], level.get("algorithm", None)) os.remove(filename+".py") return jsonify(solution) diff --git a/rooms/ExampleRoom.py b/rooms/ExampleRoom.py index 7f864bf..fccfb08 100644 --- a/rooms/ExampleRoom.py +++ b/rooms/ExampleRoom.py @@ -25,6 +25,8 @@ def create_level1(self): "Werfen Sie einen Blick auf die Anfangsbuchstaben!" ] return {"task_messages": task_messages, "hints": hints, "solution_function": self.first_letters, "data": secret} + # if using an algorithm to check the correctness of an answer use: + # return {"task_messages": task_messages, "hints": hints, "solution_function": self.first_letters, "data": secret, "algorithm": self.algorithm} ### SOLUTIONS ### @@ -34,3 +36,7 @@ def first_letters(self, secret): for word in words: result += word[0] return result + + def algorithm(self, solution_attempt): + # check solution and return True or False + return True