C06 fixed
This commit is contained in:
parent
7e83b40edd
commit
eb3db4869e
@ -1,14 +1,22 @@
|
||||
def run_automaton(file_path):
|
||||
import sys
|
||||
|
||||
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 = {}
|
||||
|
||||
# Чтение информации из файла
|
||||
with open(file_path, 'r') as file:
|
||||
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:
|
||||
if line.strip(): # Пропускаем пустые строки
|
||||
parts = line.split()
|
||||
state_from = int(parts[0])
|
||||
|
||||
if len(parts) > 1:
|
||||
state_to = int(parts[1])
|
||||
|
||||
if len(parts) == 3:
|
||||
@ -17,23 +25,29 @@ def run_automaton(file_path):
|
||||
else:
|
||||
transitions[state_from] = []
|
||||
|
||||
current_state = 0
|
||||
word = ""
|
||||
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
|
||||
|
||||
while current_state in transitions:
|
||||
possible_transitions = transitions[current_state]
|
||||
if not possible_transitions:
|
||||
break
|
||||
for transition_symbol, next_state in possible_transitions:
|
||||
explore_paths(next_state, current_word + transition_symbol)
|
||||
|
||||
transition_symbol, next_state = possible_transitions[0]
|
||||
word += transition_symbol
|
||||
current_state = next_state
|
||||
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)
|
||||
|
||||
print(f"Достигнуто конечное состояние: {current_state}")
|
||||
print(f"Полученное слово: {word}")
|
||||
|
||||
# Указываем путь к файлу
|
||||
file_path = "small.in"
|
||||
|
||||
# Запускаем автомат
|
||||
run_automaton(file_path)
|
||||
run_automaton(input_file, end_positions, output_file)
|
||||
|
@ -1,57 +0,0 @@
|
||||
|
||||
|
||||
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 = {}
|
||||
|
||||
# Чтение информации из файла
|
||||
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:
|
||||
if line.strip(): # Пропускаем пустые строки
|
||||
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
|
||||
|
||||
# Указываем путь к файлу
|
||||
file_path = "small.in"
|
||||
output_file = "small.out"
|
||||
# Получаем конечные позиции из файла
|
||||
end_positions = what_is_the_ended_positions(file_path)
|
||||
|
||||
# Запускаем автомат
|
||||
run_automaton(file_path, end_positions, output_file)
|
Loading…
Reference in New Issue
Block a user