diff --git a/TaskC00/long.out b/TaskC00/long.out index 0f1f899..7724ddd 100644 --- a/TaskC00/long.out +++ b/TaskC00/long.out @@ -1,3 +1,7 @@ NO NO YES +YES +NO +NO +NO diff --git a/TaskC00/main.py b/TaskC00/main.py deleted file mode 100644 index 70a1245..0000000 --- a/TaskC00/main.py +++ /dev/null @@ -1,66 +0,0 @@ -import sys -sys.setrecursionlimit(5000) - -def write_answer(answer): - with open(output_file, 'a') as file: - file.write(answer+'\n') - -# def remove_first_symbol_from_the_list(): - -def line_checking(row, position): - help_row = row - help_position = position - next_character_array =[] - bool_value = False - for element in row: - if element=='\n': - if position in what_is_the_ended_positions(): - return True - else: - return False - next_character_array = find_next_position(help_position, element) - if next_character_array != []: - if len(next_character_array)>1: - for element_in_next_character_array in next_character_array: - if bool_value ==True: - break - else: - bool_value =line_checking(help_row[1:], element_in_next_character_array) - else: - # remove_first_symbol_from_the_list() - help_row = help_row[1:] - bool_value = line_checking(help_row, next_character_array[0]) - else: - break - return bool_value - - -def find_next_position(position, character): - with open(used_table, 'r') as readed_used_table: - take_all_possible_positions = [] - for row_used_table in readed_used_table: - line = row_used_table.strip().split('\t') - if len(line) != 1: - if position == line[0] and character == line[2]: - take_all_possible_positions.append(line[1]) - - return take_all_possible_positions -def what_is_the_ended_positions(): - array = [] - with open(used_table, 'r') as file: - for row in file: - line = row.strip().split('\t') - if len(line)==1: - array += line - return array -used_table = 'long.arg' -input_file = 'long.in' -output_file = 'long.out' -# what_is_the_ended_positions() -with open(output_file, 'w') as readed_output_file: - with open(input_file, 'r') as readed_input_file: - for row_input_file in readed_input_file: - if line_checking(row_input_file, '0')==True: - write_answer('YES') - else: - write_answer('NO') diff --git a/TaskC00/run.py b/TaskC00/run.py index 1c8402b..c377bdb 100644 --- a/TaskC00/run.py +++ b/TaskC00/run.py @@ -1,37 +1,59 @@ import sys + +sys.setrecursionlimit(5000) + def write_answer(answer): with open(output_file, 'a') as file: file.write(answer+'\n') + +def line_checking(row, position): + stack = [(row, position)] + + while stack: + help_row, help_position = stack.pop() + if help_row == '\n': + if help_position in what_is_the_ended_positions(): + return True + else: + return False + next_character_array = find_next_position(help_position, help_row[0]) + if next_character_array: + for element_in_next_position_array in next_character_array: + + stack.append((help_row[1:], element_in_next_position_array)) + + return False + def find_next_position(position, character): with open(used_table, 'r') as readed_used_table: - # array_which_contain_accepted_positions = [] + take_all_possible_positions = [] for row_used_table in readed_used_table: line = row_used_table.strip().split('\t') if len(line) != 1: if position == line[0] and character == line[2]: + take_all_possible_positions.append(line[1]) - return True,line[1] + return take_all_possible_positions -used_table = 'testnfa.arg' -input_file = 'testnfa.in' -output_file = 'testnfa.out' -# used_table = sys.argv[1] -# input_file = sys.argv[2] -# output_file = sys.argv[3] +def what_is_the_ended_positions(): + array = [] + with open(used_table, 'r') as file: + for row in file: + line = row.strip().split('\t') + if len(line) == 1: + array += line + return array + +# used_table = 'testnfa.arg' +# input_file = 'testnfa.in' +# output_file = 'testnfa.out' +used_table = sys.argv[1] +input_file = sys.argv[2] +output_file = sys.argv[3] with open(output_file, 'w') as readed_output_file: with open(input_file, 'r') as readed_input_file: for row_input_file in readed_input_file: - result = False - next_position = None - position = '0' - for character in row_input_file: - if character =='\n': - if position=='3' or position =='4': - write_answer('YES') - break - else: - write_answer('NO') - break - result, next_position = find_next_position(position,character) - if result == True: - position = next_position \ No newline at end of file + if line_checking(row_input_file, '0'): + write_answer('YES') + else: + write_answer('NO') diff --git a/TaskC00/testnfa.out b/TaskC00/testnfa.out index 24a4794..c98399b 100644 --- a/TaskC00/testnfa.out +++ b/TaskC00/testnfa.out @@ -1,8 +1,8 @@ -Yes -Yes +YES +YES NO NO NO -Yes +YES NO -Yes +YES diff --git a/TaskC01/run.py b/TaskC01/run.py index ad82a36..6ba1fbb 100644 --- a/TaskC01/run.py +++ b/TaskC01/run.py @@ -1,39 +1,28 @@ import sys + sys.setrecursionlimit(5000) def write_answer(answer): with open(output_file, 'a') as file: file.write(answer+'\n') -# def remove_first_symbol_from_the_list(): - def line_checking(row, position): - help_row = row - help_position = position - next_character_array =[] - bool_value = False - for element in row: - if element=='\n': - if position in what_is_the_ended_positions(): - return True - else: - return False - next_character_array = find_next_position(help_position, element) - if next_character_array != []: - if len(next_character_array)>1: - for element_in_next_character_array in next_character_array: - if bool_value ==True: - break - else: - bool_value =line_checking(help_row[1:], element_in_next_character_array) - else: - # remove_first_symbol_from_the_list() - help_row = help_row[1:] - bool_value = line_checking(help_row, next_character_array[0]) - else: - break - return bool_value + stack = [(row, position)] + while stack: + help_row, help_position = stack.pop() + if help_row == '\n': + if help_position in what_is_the_ended_positions(): + return True + else: + return False + next_character_array = find_next_position(help_position, help_row[0]) + if next_character_array: + for element_in_next_position_array in next_character_array: + + stack.append((help_row[1:], element_in_next_position_array)) + + return False def find_next_position(position, character): with open(used_table, 'r') as readed_used_table: @@ -45,22 +34,26 @@ def find_next_position(position, character): take_all_possible_positions.append(line[1]) return take_all_possible_positions + def what_is_the_ended_positions(): array = [] with open(used_table, 'r') as file: for row in file: line = row.strip().split('\t') - if len(line)==1: + if len(line) == 1: array += line return array -used_table = 'test.arg' -input_file = 'test.in' -output_file = 'test.out' -# what_is_the_ended_positions() + +# used_table = 'test.arg' +# input_file = 'test.in' +# output_file = 'test.out' +used_table = sys.argv[1] +input_file = sys.argv[2] +output_file = sys.argv[3] with open(output_file, 'w') as readed_output_file: with open(input_file, 'r') as readed_input_file: for row_input_file in readed_input_file: - if line_checking(row_input_file, '0')==True: + if line_checking(row_input_file, '0'): write_answer('YES') else: write_answer('NO') diff --git a/TaskC01/test.arg b/TaskC01/test.arg index 731d8da..ffeb26d 100644 --- a/TaskC01/test.arg +++ b/TaskC01/test.arg @@ -1,14 +1,8 @@ 0 0 a +0 0 b 0 0 c 0 1 b +1 2 a 1 2 b -1 3 a -1 3 c -2 3 a -2 3 c -2 2 b -3 0 a -3 0 c -3 1 b -3 +1 2 c 2 \ No newline at end of file diff --git a/TaskC02/run.py b/TaskC02/run.py index ad82a36..6ba1fbb 100644 --- a/TaskC02/run.py +++ b/TaskC02/run.py @@ -1,39 +1,28 @@ import sys + sys.setrecursionlimit(5000) def write_answer(answer): with open(output_file, 'a') as file: file.write(answer+'\n') -# def remove_first_symbol_from_the_list(): - def line_checking(row, position): - help_row = row - help_position = position - next_character_array =[] - bool_value = False - for element in row: - if element=='\n': - if position in what_is_the_ended_positions(): - return True - else: - return False - next_character_array = find_next_position(help_position, element) - if next_character_array != []: - if len(next_character_array)>1: - for element_in_next_character_array in next_character_array: - if bool_value ==True: - break - else: - bool_value =line_checking(help_row[1:], element_in_next_character_array) - else: - # remove_first_symbol_from_the_list() - help_row = help_row[1:] - bool_value = line_checking(help_row, next_character_array[0]) - else: - break - return bool_value + stack = [(row, position)] + while stack: + help_row, help_position = stack.pop() + if help_row == '\n': + if help_position in what_is_the_ended_positions(): + return True + else: + return False + next_character_array = find_next_position(help_position, help_row[0]) + if next_character_array: + for element_in_next_position_array in next_character_array: + + stack.append((help_row[1:], element_in_next_position_array)) + + return False def find_next_position(position, character): with open(used_table, 'r') as readed_used_table: @@ -45,22 +34,26 @@ def find_next_position(position, character): take_all_possible_positions.append(line[1]) return take_all_possible_positions + def what_is_the_ended_positions(): array = [] with open(used_table, 'r') as file: for row in file: line = row.strip().split('\t') - if len(line)==1: + if len(line) == 1: array += line return array -used_table = 'test.arg' -input_file = 'test.in' -output_file = 'test.out' -# what_is_the_ended_positions() + +# used_table = 'test.arg' +# input_file = 'test.in' +# output_file = 'test.out' +used_table = sys.argv[1] +input_file = sys.argv[2] +output_file = sys.argv[3] with open(output_file, 'w') as readed_output_file: with open(input_file, 'r') as readed_input_file: for row_input_file in readed_input_file: - if line_checking(row_input_file, '0')==True: + if line_checking(row_input_file, '0'): write_answer('YES') else: write_answer('NO') diff --git a/TaskC02/test.arg b/TaskC02/test.arg new file mode 100644 index 0000000..b9dafa2 --- /dev/null +++ b/TaskC02/test.arg @@ -0,0 +1,9 @@ +0 0 a +0 0 b +0 0 c +0 1 a +1 2 b +2 0 a +2 0 b +2 0 c +2 \ No newline at end of file diff --git a/TaskC02/test.out b/TaskC02/test.out new file mode 100644 index 0000000..e09bb02 --- /dev/null +++ b/TaskC02/test.out @@ -0,0 +1,6 @@ +YES +NO +YES +NO +YES +NO diff --git a/TaskC03/run.py b/TaskC03/run.py index ad82a36..6ba1fbb 100644 --- a/TaskC03/run.py +++ b/TaskC03/run.py @@ -1,39 +1,28 @@ import sys + sys.setrecursionlimit(5000) def write_answer(answer): with open(output_file, 'a') as file: file.write(answer+'\n') -# def remove_first_symbol_from_the_list(): - def line_checking(row, position): - help_row = row - help_position = position - next_character_array =[] - bool_value = False - for element in row: - if element=='\n': - if position in what_is_the_ended_positions(): - return True - else: - return False - next_character_array = find_next_position(help_position, element) - if next_character_array != []: - if len(next_character_array)>1: - for element_in_next_character_array in next_character_array: - if bool_value ==True: - break - else: - bool_value =line_checking(help_row[1:], element_in_next_character_array) - else: - # remove_first_symbol_from_the_list() - help_row = help_row[1:] - bool_value = line_checking(help_row, next_character_array[0]) - else: - break - return bool_value + stack = [(row, position)] + while stack: + help_row, help_position = stack.pop() + if help_row == '\n': + if help_position in what_is_the_ended_positions(): + return True + else: + return False + next_character_array = find_next_position(help_position, help_row[0]) + if next_character_array: + for element_in_next_position_array in next_character_array: + + stack.append((help_row[1:], element_in_next_position_array)) + + return False def find_next_position(position, character): with open(used_table, 'r') as readed_used_table: @@ -45,22 +34,26 @@ def find_next_position(position, character): take_all_possible_positions.append(line[1]) return take_all_possible_positions + def what_is_the_ended_positions(): array = [] with open(used_table, 'r') as file: for row in file: line = row.strip().split('\t') - if len(line)==1: + if len(line) == 1: array += line return array -used_table = 'test.arg' -input_file = 'test.in' -output_file = 'test.out' -# what_is_the_ended_positions() + +# used_table = 'test.arg' +# input_file = 'test.in' +# output_file = 'test.out' +used_table = sys.argv[1] +input_file = sys.argv[2] +output_file = sys.argv[3] with open(output_file, 'w') as readed_output_file: with open(input_file, 'r') as readed_input_file: for row_input_file in readed_input_file: - if line_checking(row_input_file, '0')==True: + if line_checking(row_input_file, '0'): write_answer('YES') else: write_answer('NO') diff --git a/TaskC03/test.arg b/TaskC03/test.arg new file mode 100644 index 0000000..28b196c --- /dev/null +++ b/TaskC03/test.arg @@ -0,0 +1,13 @@ +0 0 b +0 0 c +0 1 a +1 1 a +1 2 b +2 1 a +2 3 c +3 3 a +3 3 b +3 3 c +2 0 b +1 0 c +3 \ No newline at end of file diff --git a/TaskC03/test.out b/TaskC03/test.out new file mode 100644 index 0000000..29c072b --- /dev/null +++ b/TaskC03/test.out @@ -0,0 +1,7 @@ +YES +YES +YES +NO +NO +NO +NO diff --git a/TaskC04/eps.out b/TaskC04/eps.out new file mode 100644 index 0000000..857902e --- /dev/null +++ b/TaskC04/eps.out @@ -0,0 +1,10 @@ +NO +NO +NO +NO +NO +NO +NO +NO +NO +NO diff --git a/TaskC04/run.py b/TaskC04/run.py index ad82a36..dd8f0a1 100644 --- a/TaskC04/run.py +++ b/TaskC04/run.py @@ -1,39 +1,28 @@ import sys + sys.setrecursionlimit(5000) def write_answer(answer): with open(output_file, 'a') as file: file.write(answer+'\n') -# def remove_first_symbol_from_the_list(): - def line_checking(row, position): - help_row = row - help_position = position - next_character_array =[] - bool_value = False - for element in row: - if element=='\n': - if position in what_is_the_ended_positions(): - return True - else: - return False - next_character_array = find_next_position(help_position, element) - if next_character_array != []: - if len(next_character_array)>1: - for element_in_next_character_array in next_character_array: - if bool_value ==True: - break - else: - bool_value =line_checking(help_row[1:], element_in_next_character_array) - else: - # remove_first_symbol_from_the_list() - help_row = help_row[1:] - bool_value = line_checking(help_row, next_character_array[0]) - else: - break - return bool_value + stack = [(row, position)] + while stack: + help_row, help_position = stack.pop() + if help_row == '\n': + if help_position in what_is_the_ended_positions(): + return True + else: + return False + next_character_array = find_next_position(help_position, help_row[0]) + if next_character_array: + for element_in_next_position_array in next_character_array: + + stack.append((help_row[1:], element_in_next_position_array)) + + return False def find_next_position(position, character): with open(used_table, 'r') as readed_used_table: @@ -45,22 +34,24 @@ def find_next_position(position, character): take_all_possible_positions.append(line[1]) return take_all_possible_positions + def what_is_the_ended_positions(): array = [] with open(used_table, 'r') as file: for row in file: line = row.strip().split('\t') - if len(line)==1: + if len(line) == 1: array += line return array + used_table = 'test.arg' input_file = 'test.in' output_file = 'test.out' -# what_is_the_ended_positions() + with open(output_file, 'w') as readed_output_file: with open(input_file, 'r') as readed_input_file: for row_input_file in readed_input_file: - if line_checking(row_input_file, '0')==True: + if line_checking(row_input_file, '0'): write_answer('YES') else: write_answer('NO')