diff --git a/TaskB01/fsa_description.arg b/TaskB01/fsa_description.arg new file mode 100644 index 0000000..c7fd905 --- /dev/null +++ b/TaskB01/fsa_description.arg @@ -0,0 +1,13 @@ +0 1 0 +0 5 1 +1 5 0 +1 2 1 +2 3 0 +2 4 1 +3 3 0 +3 2 1 +4 3 0 +4 4 1 +5 5 0 +5 5 1 +2 \ No newline at end of file diff --git a/TaskB01/run.py b/TaskB01/run.py new file mode 100644 index 0000000..165725d --- /dev/null +++ b/TaskB01/run.py @@ -0,0 +1,48 @@ +from logging import ERROR +import sys +import csv + +from numpy import append + +if len(sys.argv) == 1: + print("Default arguments parsed\n") + sys.argv.append("fsa_description.arg") + sys.argv.append("test.in") + sys.argv.append("test.exp") + +with open(sys.argv[1], "r", newline="", encoding="utf8") as csvfile: + filereader = csv.reader(csvfile, delimiter="\t", quotechar="|") + fsa_description = list(filereader) + accepting_state = int(fsa_description[-1][0]) + fsa_description = fsa_description[:-1] + fsa_description_map = {} + for item in fsa_description: + tuple = (int(item[0]), item[2]) + fsa_description_map[tuple] = int(item[1]) + + +with open(sys.argv[2], "r", newline="", encoding="utf8") as csvfile: + filereader = csv.reader(csvfile, delimiter="\t", quotechar="|") + test_in = list(filereader) + +with open(sys.argv[3], "r", newline="", encoding="utf8") as csvfile: + filereader = csv.reader(csvfile, delimiter="\t", quotechar="|") + test_out = list(filereader) + + +for i, word in enumerate(test_in): + current_state = 0 + if len(word) != 0: + for letter in word[0]: + current_state = fsa_description_map[(current_state, letter)] + + print(str(i + 1) + "\t", end="") + if current_state == accepting_state: + print("YES\t", end="") + if "YES" != test_out[i][0]: + print(" ERROR", end="") + else: + print("NO", end="") + if "NO" != test_out[i][0]: + print(" ERROR", end="") + print()