Compare commits

..

No commits in common. "60e00a136696c42c638bb36329ecbe9b75ce057d" and "99d78804602b00aab665cd36dda41cda413d9628" have entirely different histories.

12 changed files with 0 additions and 211 deletions

View File

@ -1,14 +0,0 @@
Read a description of a non-deterministic finite-state automaton in the AT&T format
(without weights) from the file in the first argument.
Read strings from the standard input.
If a string is accepted by the
automaton, write YES, otherwise- write NO.
The program is invoked like this: python run.py test1.arg < test1.in > test1.out
Note that not all transitions must be included in description.
If no transition is given for the given state and letter, write NO.
POINTS: 3
DEADLINE: 2023-11-12 23:59:59

View File

@ -1,64 +0,0 @@
import sys
import copy
class FSA:
def __init__(self):
self.initial_state = '0'
self.final_states = set()
self.transitions = dict()
self.alphabet = set()
def add_transition(self, state_from, state_to, symbol):
if state_from in self.transitions.keys():
if symbol not in self.transitions[state_from].keys():
self.transitions[state_from][symbol] = {state_to}
else:
self.transitions[state_from][symbol] |= {state_to}
else:
self.transitions[state_from] = dict()
self.transitions[state_from][symbol] = {state_to}
def add_final_state(self, state):
self.final_states.add(state)
def get_final_states(self, string):
current_states = {self.initial_state}
for symbol in string:
new_current_states = set()
for current_state in current_states:
try:
new_current_states |= self.transitions[current_state][symbol]
except:
pass
current_states = copy.deepcopy(new_current_states)
return current_states
def accepts(self, string):
for final_state in self.get_final_states(string):
if final_state in self.final_states:
return True
return False
fsa = FSA()
table = open(sys.argv[1])
for line in table:
line = line.rstrip()
if len(line.split('\t')) == 3:
a, b, c = line.split('\t')
fsa.add_transition(a, b, c)
fsa.alphabet.add(c)
else:
fsa.add_final_state(line)
for line in sys.stdin:
line = line.rstrip()
if fsa.accepts(line):
print('YES')
else:
print('NO')

View File

@ -1,7 +0,0 @@
0 1 a
1 0 a
1 2 b
2 4 c
1 3 b
3
4

View File

@ -1,8 +0,0 @@
YES
YES
NO
NO
NO
YES
NO
YES

View File

@ -1,8 +0,0 @@
abc
ab
abcd
aaaabc
aaaaaaaabc
aaaaaaabc
zzz
aaaaaaabc

View File

@ -1,8 +0,0 @@
YES
YES
NO
NO
NO
YES
NO
YES

View File

@ -1,14 +0,0 @@
Use a non deterministic finite-state automaton (FSA) engine from the TaskC00.
Create your own non deterministic FSA description to check whether the string
ends with "ab"
Don't use external files like in TaskF00 (description should be included in run file).
The alphabet is "a", "b", "C"
Read strings from the standard input.
If a string is accepted by the
automaton, write YES, otherwise- write NO.
POINTS: 3
DEADLINE: 2023-11-12 23:59:59
REMAINDER: 1/3

View File

@ -1,64 +0,0 @@
import sys
import copy
class FSA:
def __init__(self):
self.initial_state = '0'
self.final_states = set()
self.transitions = dict()
self.alphabet = set()
def add_transition(self, state_from, state_to, symbol):
if state_from in self.transitions.keys():
if symbol not in self.transitions[state_from].keys():
self.transitions[state_from][symbol] = {state_to}
else:
self.transitions[state_from][symbol] |= {state_to}
else:
self.transitions[state_from] = dict()
self.transitions[state_from][symbol] = {state_to}
def add_final_state(self, state):
self.final_states.add(state)
def get_final_states(self, string):
current_states = {self.initial_state}
for symbol in string:
new_current_states = set()
for current_state in current_states:
try:
new_current_states |= self.transitions[current_state][symbol]
except:
pass
current_states = copy.deepcopy(new_current_states)
return current_states
def accepts(self, string):
for final_state in self.get_final_states(string):
if final_state in self.final_states:
return True
return False
fsa = FSA()
table = open(sys.argv[1])
for line in table:
line = line.rstrip()
if len(line.split('\t')) == 3:
a, b, c = line.split('\t')
fsa.add_transition(a, b, c)
fsa.alphabet.add(c)
else:
fsa.add_final_state(line)
for line in sys.stdin:
line = line.rstrip()
if fsa.accepts(line):
print('YES')
else:
print('NO')

View File

@ -1,6 +0,0 @@
0 0 a
0 0 b
0 0 c
0 1 a
1 2 b
2

View File

@ -1,6 +0,0 @@
YES
NO
YES
NO
YES
NO

View File

@ -1,6 +0,0 @@
ab
a
abbab
bbbbb
ababaab
b

View File

@ -1,6 +0,0 @@
YES
NO
YES
NO
YES
NO