2023-11-25 23:47:56 +01:00
|
|
|
import sys
|
2023-11-24 23:19:27 +01:00
|
|
|
|
2023-11-25 23:47:56 +01:00
|
|
|
def write_answer(answer, output_file):
|
|
|
|
with open(output_file, 'a', encoding='utf-8') as file:
|
|
|
|
file.write(answer+'\n')
|
|
|
|
def run_automaton(file_path, end_positions, output_file):
|
|
|
|
transitions = {}
|
2023-11-16 21:40:35 +01:00
|
|
|
|
2023-11-25 23:47:56 +01:00
|
|
|
with open(file_path, 'r', encoding='utf-8') as file:
|
|
|
|
with open(output_file, 'w', encoding='utf-8') as file_writed:
|
|
|
|
|
|
|
|
lines = file.readlines()
|
|
|
|
|
|
|
|
for line in lines:
|
2023-11-27 22:38:20 +01:00
|
|
|
if line.strip():
|
2023-11-25 23:47:56 +01:00
|
|
|
parts = line.split()
|
|
|
|
state_from = int(parts[0])
|
|
|
|
|
|
|
|
if len(parts) > 1:
|
|
|
|
state_to = int(parts[1])
|
|
|
|
|
|
|
|
if len(parts) == 3:
|
|
|
|
symbol = parts[2]
|
|
|
|
transitions.setdefault(state_from, []).append((symbol, state_to))
|
|
|
|
else:
|
|
|
|
transitions[state_from] = []
|
|
|
|
|
|
|
|
def explore_paths(current_state, current_word):
|
|
|
|
if current_state not in transitions:
|
|
|
|
if str(current_state) in end_positions:
|
|
|
|
write_answer(current_word, output_file)
|
|
|
|
return
|
|
|
|
|
|
|
|
possible_transitions = transitions[current_state]
|
|
|
|
for transition_symbol, next_state in possible_transitions:
|
|
|
|
explore_paths(next_state, current_word + transition_symbol)
|
|
|
|
|
|
|
|
explore_paths(0, "")
|
|
|
|
def what_is_the_ended_positions(file_path):
|
|
|
|
array = []
|
|
|
|
with open(file_path, 'r', encoding='utf-8') as file:
|
|
|
|
for row in file:
|
|
|
|
line = row.strip().split('\t')
|
|
|
|
if len(line) == 1:
|
|
|
|
array += line
|
|
|
|
return array
|
|
|
|
input_file = sys.argv[1]
|
|
|
|
output_file = sys.argv[2]
|
|
|
|
# file_path = "small.in"
|
|
|
|
# output_file = "small.out"
|
|
|
|
end_positions = what_is_the_ended_positions(input_file)
|
|
|
|
|
|
|
|
run_automaton(input_file, end_positions, output_file)
|