C06 fixed

This commit is contained in:
IgnBys 2023-11-25 23:47:56 +01:00
parent 7e83b40edd
commit eb3db4869e
2 changed files with 43 additions and 86 deletions

View File

@ -1,39 +1,53 @@
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:
lines = file.readlines()
with open(file_path, 'r', encoding='utf-8') as file:
with open(output_file, 'w', encoding='utf-8') as file_writed:
for line in lines:
if line.strip(): # Пропускаем пустые строки
parts = line.split()
state_from = int(parts[0])
state_to = int(parts[1])
lines = file.readlines()
if len(parts) == 3:
symbol = parts[2]
transitions.setdefault(state_from, []).append((symbol, state_to))
else:
transitions[state_from] = []
for line in lines:
if line.strip(): # Пропускаем пустые строки
parts = line.split()
state_from = int(parts[0])
current_state = 0
word = ""
if len(parts) > 1:
state_to = int(parts[1])
while current_state in transitions:
possible_transitions = transitions[current_state]
if not possible_transitions:
break
if len(parts) == 3:
symbol = parts[2]
transitions.setdefault(state_from, []).append((symbol, state_to))
else:
transitions[state_from] = []
transition_symbol, next_state = possible_transitions[0]
word += transition_symbol
current_state = next_state
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
print(f"Достигнуто конечное состояние: {current_state}")
print(f"Полученное слово: {word}")
possible_transitions = transitions[current_state]
for transition_symbol, next_state in possible_transitions:
explore_paths(next_state, current_word + transition_symbol)
# Указываем путь к файлу
file_path = "small.in"
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(file_path)
run_automaton(input_file, end_positions, output_file)

View 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)