Compare commits
4 Commits
1820fc5e14
...
6fbb005972
Author | SHA1 | Date | |
---|---|---|---|
|
6fbb005972 | ||
|
5ef5ae56b5 | ||
|
9f7409a8c5 | ||
|
f60d42816e |
@ -1,4 +1,3 @@
|
||||
# automat akceptuje dwa napisy - "aaaa" i "a" powielone 4038 razy
|
||||
0 1 a
|
||||
1 2 a
|
||||
2 3 a
|
||||
|
56
TaskC00/run.py
Normal file
56
TaskC00/run.py
Normal file
@ -0,0 +1,56 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
import sys
|
||||
import random
|
||||
|
||||
class Automat:
|
||||
def __init__(self, df: pd.DataFrame, end_states: list):
|
||||
self._df = df
|
||||
self._end_states = end_states
|
||||
|
||||
def _consume_character(self, state: int, char: str):
|
||||
filter = (self._df[0] == state) & (self._df[2] == char)
|
||||
matching_rows = self._df[filter]
|
||||
if matching_rows.empty:
|
||||
return None
|
||||
end_states = matching_rows.iloc[:,1].tolist()
|
||||
return random.choice(end_states)
|
||||
|
||||
def consume_word(self, word: str):
|
||||
prev_state = 0
|
||||
state = 0
|
||||
for char in word:
|
||||
prev_state = state
|
||||
state = self._consume_character(state, char)
|
||||
if state is None:
|
||||
return prev_state in self._end_states
|
||||
return state in self._end_states
|
||||
|
||||
def create_automat_from_file(file_path: str):
|
||||
automat_df = pd.read_csv(file_path, sep='\t', header=None)
|
||||
|
||||
end_states_condition = (automat_df[1].isnull()) & (automat_df[2].isnull())
|
||||
end_states_df = automat_df[end_states_condition]
|
||||
end_states = end_states_df.iloc[:,0].tolist()
|
||||
|
||||
automat_df = automat_df[~end_states_condition]
|
||||
automat_df[2] = automat_df[2].astype(str)
|
||||
|
||||
return Automat(automat_df, end_states)
|
||||
|
||||
automat_path = os.path.join(os.path.dirname(__file__), 'test1.arg')
|
||||
automat = create_automat_from_file(automat_path)
|
||||
|
||||
test_path = os.path.join(os.path.dirname(__file__), 'test1.in')
|
||||
|
||||
|
||||
results = []
|
||||
with open(test_path, 'r') as f:
|
||||
for line in f:
|
||||
results.append('YES' if automat.consume_word(line.strip()) else 'NO')
|
||||
|
||||
out_path = os.path.join(os.path.dirname(__file__), 'test1.out')
|
||||
|
||||
with open(out_path, 'w') as f:
|
||||
for result in results:
|
||||
f.write(result + '\n')
|
9
TaskC00/test1.out
Normal file
9
TaskC00/test1.out
Normal file
@ -0,0 +1,9 @@
|
||||
NO
|
||||
YES
|
||||
NO
|
||||
NO
|
||||
NO
|
||||
NO
|
||||
NO
|
||||
NO
|
||||
NO
|
48
TaskC01/run.py
Normal file
48
TaskC01/run.py
Normal file
@ -0,0 +1,48 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
import sys
|
||||
import random
|
||||
|
||||
class Automat:
|
||||
def __init__(self, df: pd.DataFrame, end_states: list):
|
||||
self._df = df
|
||||
self._end_states = end_states
|
||||
|
||||
def _consume_character(self, state: int, char: str):
|
||||
filter = (self._df[0] == state) & (self._df[2] == char)
|
||||
matching_rows = self._df[filter]
|
||||
if matching_rows.empty:
|
||||
return None
|
||||
end_states = matching_rows.iloc[:,1].tolist()
|
||||
return random.choice(end_states)
|
||||
|
||||
def consume_word(self, word: str):
|
||||
prev_state = 0
|
||||
state = 0
|
||||
for char in word:
|
||||
prev_state = state
|
||||
state = self._consume_character(state, char)
|
||||
if state is None:
|
||||
return prev_state in self._end_states
|
||||
return state in self._end_states
|
||||
|
||||
def create_automat_from_file(file_path: str):
|
||||
automat_df = pd.read_csv(file_path, sep=' ', header=None)
|
||||
end_states_condition = (automat_df[1].isnull()) & (automat_df[2].isnull())
|
||||
end_states_df = automat_df[end_states_condition]
|
||||
end_states = end_states_df.iloc[:,0].tolist()
|
||||
|
||||
automat_df = automat_df[~end_states_condition]
|
||||
automat_df[2] = automat_df[2].astype(str)
|
||||
|
||||
return Automat(automat_df, end_states)
|
||||
|
||||
automat_path = os.path.join(os.path.dirname(__file__), 'test.arg')
|
||||
automat = create_automat_from_file(automat_path)
|
||||
|
||||
test_path = os.path.join(os.path.dirname(__file__), 'test.in')
|
||||
|
||||
txt = input('Write valid input: ')
|
||||
while txt != 'exit':
|
||||
print('YES' if automat.consume_word(txt) else 'NO')
|
||||
txt = input('Write valid input: ')
|
5
TaskC01/test.arg
Normal file
5
TaskC01/test.arg
Normal file
@ -0,0 +1,5 @@
|
||||
0 1 a
|
||||
0 1 b
|
||||
0 1 c
|
||||
1 2 b
|
||||
2
|
6
TaskC01/test.out
Normal file
6
TaskC01/test.out
Normal file
@ -0,0 +1,6 @@
|
||||
YES
|
||||
YES
|
||||
NO
|
||||
NO
|
||||
YES
|
||||
NO
|
46
TaskC02/run.py
Normal file
46
TaskC02/run.py
Normal file
@ -0,0 +1,46 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
import sys
|
||||
import random
|
||||
|
||||
class Automat:
|
||||
def __init__(self, df: pd.DataFrame, end_states: list):
|
||||
self._df = df
|
||||
self._end_states = end_states
|
||||
|
||||
def _consume_character(self, state: int, char: str):
|
||||
filter = (self._df[0] == state) & (self._df[2] == char)
|
||||
matching_rows = self._df[filter]
|
||||
if matching_rows.empty:
|
||||
return None
|
||||
end_states = matching_rows.iloc[:,1].tolist()
|
||||
return random.choice(end_states)
|
||||
|
||||
def consume_word(self, word: str):
|
||||
prev_state = 0
|
||||
state = 0
|
||||
for char in word:
|
||||
prev_state = state
|
||||
state = self._consume_character(state, char)
|
||||
if state is None:
|
||||
return prev_state in self._end_states
|
||||
return state in self._end_states
|
||||
|
||||
def create_automat_from_file(file_path: str):
|
||||
automat_df = pd.read_csv(file_path, sep=' ', header=None)
|
||||
end_states_condition = (automat_df[1].isnull()) & (automat_df[2].isnull())
|
||||
end_states_df = automat_df[end_states_condition]
|
||||
end_states = end_states_df.iloc[:,0].tolist()
|
||||
|
||||
automat_df = automat_df[~end_states_condition]
|
||||
automat_df[2] = automat_df[2].astype(str)
|
||||
|
||||
return Automat(automat_df, end_states)
|
||||
|
||||
automat_path = os.path.join(os.path.dirname(__file__), 'test.arg')
|
||||
automat = create_automat_from_file(automat_path)
|
||||
|
||||
txt = input('Write valid input: ')
|
||||
while txt != 'exit':
|
||||
print('YES' if automat.consume_word(txt) else 'NO')
|
||||
txt = input('Write valid input: ')
|
6
TaskC02/test.arg
Normal file
6
TaskC02/test.arg
Normal file
@ -0,0 +1,6 @@
|
||||
0 0 a
|
||||
0 0 b
|
||||
0 0 c
|
||||
0 1 a
|
||||
1 2 b
|
||||
2
|
6
TaskC02/test.out
Normal file
6
TaskC02/test.out
Normal file
@ -0,0 +1,6 @@
|
||||
NO
|
||||
NO
|
||||
NO
|
||||
NO
|
||||
YES
|
||||
NO
|
46
TaskC03/run.py
Normal file
46
TaskC03/run.py
Normal file
@ -0,0 +1,46 @@
|
||||
import pandas as pd
|
||||
import os
|
||||
import sys
|
||||
import random
|
||||
|
||||
class Automat:
|
||||
def __init__(self, df: pd.DataFrame, end_states: list):
|
||||
self._df = df
|
||||
self._end_states = end_states
|
||||
|
||||
def _consume_character(self, state: int, char: str):
|
||||
filter = (self._df[0] == state) & (self._df[2] == char)
|
||||
matching_rows = self._df[filter]
|
||||
if matching_rows.empty:
|
||||
return None
|
||||
end_states = matching_rows.iloc[:,1].tolist()
|
||||
return random.choice(end_states)
|
||||
|
||||
def consume_word(self, word: str):
|
||||
prev_state = 0
|
||||
state = 0
|
||||
for char in word:
|
||||
prev_state = state
|
||||
state = self._consume_character(state, char)
|
||||
if state is None:
|
||||
return prev_state in self._end_states
|
||||
return state in self._end_states
|
||||
|
||||
def create_automat_from_file(file_path: str):
|
||||
automat_df = pd.read_csv(file_path, sep=' ', header=None)
|
||||
end_states_condition = (automat_df[1].isnull()) & (automat_df[2].isnull())
|
||||
end_states_df = automat_df[end_states_condition]
|
||||
end_states = end_states_df.iloc[:,0].tolist()
|
||||
|
||||
automat_df = automat_df[~end_states_condition]
|
||||
automat_df[2] = automat_df[2].astype(str)
|
||||
|
||||
return Automat(automat_df, end_states)
|
||||
|
||||
automat_path = os.path.join(os.path.dirname(__file__), 'test.arg')
|
||||
automat = create_automat_from_file(automat_path)
|
||||
|
||||
txt = input('Write valid input: ')
|
||||
while txt != 'exit':
|
||||
print('YES' if automat.consume_word(txt) else 'NO')
|
||||
txt = input('Write valid input: ')
|
13
TaskC03/test.arg
Normal file
13
TaskC03/test.arg
Normal file
@ -0,0 +1,13 @@
|
||||
0 0 a
|
||||
0 0 b
|
||||
0 0 c
|
||||
0 1 a
|
||||
1 1 a
|
||||
1 1 b
|
||||
1 1 c
|
||||
1 2 b
|
||||
2 2 a
|
||||
2 2 b
|
||||
2 2 c
|
||||
2 3 c
|
||||
3
|
Loading…
Reference in New Issue
Block a user