diff --git a/TaskC01/run.py b/TaskC01/run.py index 5044b2c..dd4191c 100644 --- a/TaskC01/run.py +++ b/TaskC01/run.py @@ -42,7 +42,7 @@ automat = create_automat_from_file(automat_path) test_path = os.path.join(os.path.dirname(__file__), 'test.in') - +txt = input('Write valid input: ') while txt != 'exit': print('YES' if automat.consume_word(txt) else 'NO') txt = input('Write valid input: ') \ No newline at end of file diff --git a/TaskC02/run.py b/TaskC02/run.py index eac50c0..e94dbda 100644 --- a/TaskC02/run.py +++ b/TaskC02/run.py @@ -40,6 +40,7 @@ def create_automat_from_file(file_path: str): automat_path = os.path.join(os.path.dirname(__file__), 'test.arg') automat = create_automat_from_file(automat_path) +txt = input('Write valid input: ') while txt != 'exit': print('YES' if automat.consume_word(txt) else 'NO') txt = input('Write valid input: ') \ No newline at end of file diff --git a/TaskC03/run.py b/TaskC03/run.py new file mode 100644 index 0000000..e94dbda --- /dev/null +++ b/TaskC03/run.py @@ -0,0 +1,46 @@ +import pandas as pd +import os +import sys +import random + +class Automat: + def __init__(self, df: pd.DataFrame, end_states: list): + self._df = df + self._end_states = end_states + + def _consume_character(self, state: int, char: str): + filter = (self._df[0] == state) & (self._df[2] == char) + matching_rows = self._df[filter] + if matching_rows.empty: + return None + end_states = matching_rows.iloc[:,1].tolist() + return random.choice(end_states) + + def consume_word(self, word: str): + prev_state = 0 + state = 0 + for char in word: + prev_state = state + state = self._consume_character(state, char) + if state is None: + return prev_state in self._end_states + return state in self._end_states + +def create_automat_from_file(file_path: str): + automat_df = pd.read_csv(file_path, sep=' ', header=None) + end_states_condition = (automat_df[1].isnull()) & (automat_df[2].isnull()) + end_states_df = automat_df[end_states_condition] + end_states = end_states_df.iloc[:,0].tolist() + + automat_df = automat_df[~end_states_condition] + automat_df[2] = automat_df[2].astype(str) + + return Automat(automat_df, end_states) + +automat_path = os.path.join(os.path.dirname(__file__), 'test.arg') +automat = create_automat_from_file(automat_path) + +txt = input('Write valid input: ') +while txt != 'exit': + print('YES' if automat.consume_word(txt) else 'NO') + txt = input('Write valid input: ') \ No newline at end of file diff --git a/TaskC03/test.arg b/TaskC03/test.arg new file mode 100644 index 0000000..fde892a --- /dev/null +++ b/TaskC03/test.arg @@ -0,0 +1,13 @@ +0 0 a +0 0 b +0 0 c +0 1 a +1 1 a +1 1 b +1 1 c +1 2 b +2 2 a +2 2 b +2 2 c +2 3 c +3 \ No newline at end of file