From 16411bcfbd8a49f8e25215fd95370282b89be17a Mon Sep 17 00:00:00 2001 From: Batool suheil Date: Tue, 16 Jan 2024 18:46:04 -0500 Subject: [PATCH 1/3] My solution, edited the first line of pytest to work locally in my PC. --- .../deletions_to_make_valid_parentheses.py | 19 +++++++++++++++++++ ...est_deletions_to_make_valid_parentheses.py | 10 +++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/brain_teasers/python/deletions_to_make_valid_parentheses/src/deletions_to_make_valid_parentheses.py b/src/brain_teasers/python/deletions_to_make_valid_parentheses/src/deletions_to_make_valid_parentheses.py index e69de29..dccd44e 100644 --- a/src/brain_teasers/python/deletions_to_make_valid_parentheses/src/deletions_to_make_valid_parentheses.py +++ b/src/brain_teasers/python/deletions_to_make_valid_parentheses/src/deletions_to_make_valid_parentheses.py @@ -0,0 +1,19 @@ + +def deletions_to_make_valid_parentheses(s: str) -> int: + """ + :param s: string of parentheses + :return: the number of required deletion to make a valid parentheses + """ + # Basic case + if len(s) <=1: + return len(s) + + # create counter to count the number of parentheses ( == increment by 1, )== decrease by 1 + inValidParentheses =0 + for char in s: + # ( == char - increment by 1 + if char == '(': inValidParentheses+=1 + # ) == char - decrease by 1 + if char == ')': inValidParentheses -= 1 + + return abs(inValidParentheses) \ No newline at end of file diff --git a/src/brain_teasers/python/deletions_to_make_valid_parentheses/tests/test_deletions_to_make_valid_parentheses.py b/src/brain_teasers/python/deletions_to_make_valid_parentheses/tests/test_deletions_to_make_valid_parentheses.py index 5ee0ec4..83ddc75 100644 --- a/src/brain_teasers/python/deletions_to_make_valid_parentheses/tests/test_deletions_to_make_valid_parentheses.py +++ b/src/brain_teasers/python/deletions_to_make_valid_parentheses/tests/test_deletions_to_make_valid_parentheses.py @@ -1,8 +1,12 @@ import unittest -from src.deletions_to_make_valid_parentheses import ( - deletions_to_make_valid_parentheses, -) +# from src.deletions_to_make_valid_parentheses import ( +# deletions_to_make_valid_parentheses, +# ) + +#Edited to test locally in my PC +from src.brain_teasers.python.deletions_to_make_valid_parentheses.src.deletions_to_make_valid_parentheses import \ + deletions_to_make_valid_parentheses class TestDeletionsToMakeValidParentheses(unittest.TestCase): From 8c8c00ec8b2c96532a55137db2de2a36c5afd3e2 Mon Sep 17 00:00:00 2001 From: Batool suheil Date: Thu, 18 Jan 2024 20:05:30 -0500 Subject: [PATCH 2/3] Batool: Solution for design a browser history --- .../src/design_browser_history.py | 51 +++++++++++++++++++ .../tests/test_design_browser_history.py | 5 +- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/brain_teasers/python/design_browser_history/src/design_browser_history.py b/src/brain_teasers/python/design_browser_history/src/design_browser_history.py index e69de29..a9d1adf 100644 --- a/src/brain_teasers/python/design_browser_history/src/design_browser_history.py +++ b/src/brain_teasers/python/design_browser_history/src/design_browser_history.py @@ -0,0 +1,51 @@ + +class BrowserHistory: + def __init__(self, homepage: str): + """ + Initializes a new BrowserHistory instance with the given homepage. + + Parameters: + - homepage (str): The URL of the homepage. + + :param homepage: str + """ + # List to store visited url webpages + self.urls_history= [homepage] + # current position index + self.index= 0 + + def visit(self, url: str) -> None: + """ + :param url: str - The url of webpage + :return: None + I tried another solution but since the test cases are fixed + , I could not change the function storing way + """ + self.urls_history = self.urls_history[: self.index + 1] + # append new webpage + self.urls_history.append(url) + + # increase webpage index + self.index = len(self.urls_history) -1 + + def back(self, steps: str) -> str: + """ + :param steps: the backward steps + :return: string - current url webpage after moving backward + """ + # go backward # steps, but not further than 0 (worst case) + self.index = max(0, self.index - steps) + + # return the new webpage url + return self.urls_history[self.index] + + def forward(self, step: int) -> str: + """ + :param step:the forward steps + :return:string - current url webpage after moving forward + """ + # move forward # steps, limited by the last index + self.index = min(len(self.urls_history)-1, self.index + step) + + ## return the new webpage url + return self.urls_history[self.index] diff --git a/src/brain_teasers/python/design_browser_history/tests/test_design_browser_history.py b/src/brain_teasers/python/design_browser_history/tests/test_design_browser_history.py index b0d1496..bbc2cc6 100644 --- a/src/brain_teasers/python/design_browser_history/tests/test_design_browser_history.py +++ b/src/brain_teasers/python/design_browser_history/tests/test_design_browser_history.py @@ -1,6 +1,9 @@ import unittest -from src.design_browser_history import BrowserHistory +# from src.design_browser_history import BrowserHistory +#Edited to test locally in my PC + +from src.brain_teasers.python.design_browser_history.src.design_browser_history import BrowserHistory class TestDesignBrowserHistory(unittest.TestCase): From 821225605d3396d08d94250b69dadaa21dd0578e Mon Sep 17 00:00:00 2001 From: Batool suheil Date: Sat, 20 Jan 2024 07:48:42 -0500 Subject: [PATCH 3/3] Batool: Added README. --- .../python/design_browser_history/README.md | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/src/brain_teasers/python/design_browser_history/README.md b/src/brain_teasers/python/design_browser_history/README.md index e69de29..3b4b4b5 100644 --- a/src/brain_teasers/python/design_browser_history/README.md +++ b/src/brain_teasers/python/design_browser_history/README.md @@ -0,0 +1,81 @@ + +--- +##BrowserHistory Class + +The `BrowserHistory` class is a Python implementation of a basic browser history tracking system. It enables navigation between webpages, keeping track of visited URLs, and supports backward and forward movements within the history. + +### Class Initialization + +#### Constructor: + +```python +def __init__(self, homepage: str): + """ + Initializes a new BrowserHistory instance with the given homepage. + + Parameters: + - homepage (str): The URL of the homepage. + + :param homepage: str + """ +``` + +- **`homepage` (str):** The URL of the homepage to initialize the browser history. + +- **`urls_history` (List[str]):** A list to store visited URL webpages. + +- **`index` (int):** The current position index in the history. + +### Methods + +#### `visit(url: str) -> None` + +```python +def visit(self, url: str) -> None: + """ + :param url: str - The URL of the webpage + :return: None + I tried another solution but since the test cases are fixed, + I could not change the function storing way + """ +``` + +- **`url` (str):** The URL of the webpage to be visited. + +- **Return:** None + +- **Description:** Adds a new webpage to the history. It truncates the history after the current index and appends the new URL. The index is then updated to the last position in the history. + +#### `back(steps: int) -> str` + +```python +def back(self, steps: int) -> str: + """ + :param steps: int - The backward steps + :return: str - Current URL webpage after moving backward + """ +``` + +- **`steps` (int):** The number of steps to move backward. + +- **Return:** str - The URL of the current webpage after moving backward. + +- **Description:** Moves backward in the history by the specified number of steps, but not beyond the first webpage. Returns the URL of the current webpage after moving backward. + +#### `forward(steps: int) -> str` + +```python +def forward(self, steps: int) -> str: + """ + :param steps: int - The forward steps + :return: str - Current URL webpage after moving forward + """ +``` + +- **`steps` (int):** The number of steps to move forward. + +- **Return:** str - The URL of the current webpage after moving forward. + +- **Description:** Moves forward in the history by the specified number of steps, limited by the last index in the history. Returns the URL of the current webpage after moving forward. + +--- \ No newline at end of file