diff --git a/TaskB00/description.txt b/TaskB00/description.txt index 6ca4676..2a8982f 100644 --- a/TaskB00/description.txt +++ b/TaskB00/description.txt @@ -5,4 +5,4 @@ Read strings from the standard input. If a string is accepted by the automaton, write YES, otherwise- write NO. -The program is invoked like this: ./run.py fsa_description.arg < test1.in > test1.out +The program is invoked like this: ./run.py fsa_description.arg < test1.in > test1.out \ No newline at end of file diff --git a/TaskB00/run.py b/TaskB00/run.py new file mode 100644 index 0000000..a92f135 --- /dev/null +++ b/TaskB00/run.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 + +import pandas as pd +import os +import sys + +def automat_fun(recursive_df: pd.DataFrame): + first_row = recursive_df.iloc[0] + recursive_df = recursive_df.iloc[1:,:] + return lambda char, state: first_row[1] if state == first_row[0] and char == first_row[2] else automat_fun(recursive_df)(char, state) + +def create_automat_from_file(file_path: str): + df = pd.read_csv(file_path, sep='\t', header=None) + accept_state = df.tail(1).iloc[0, 0] + df = df.iloc[:-1,:] + return accept_state, automat_fun(df) + +file_path = os.path.join(os.path.dirname(__file__), 'fsa_description.arg') +accept_state, automat_function = create_automat_from_file(file_path) + +input_file_path = os.path.join(os.path.dirname(__file__), 'test1.in') +output_file_path = os.path.join(os.path.dirname(__file__), 'test1.out') +results: list[str] = [] + +with open(input_file_path, 'r', encoding='utf8') as input_file: + for line in input_file: + state = 0 + for c in line: + if c == '\n': + continue + state = automat_function(c, state) + results.append('YES\n' if state == accept_state else 'NO\n') + + +with open(output_file_path, 'w') as output_file: + output_file.writelines(results) \ No newline at end of file diff --git a/TaskB00/test1.out b/TaskB00/test1.out new file mode 100644 index 0000000..4c1a9bc --- /dev/null +++ b/TaskB00/test1.out @@ -0,0 +1,9 @@ +NO +YES +NO +NO +NO +NO +NO +NO +NO