Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Структура регулярного выражение
- class Token:
- def __init__(self):
- self.exp = '' # Сам регулярное выражение
- self.bit = set() # Всевозможное количество букв x меньших, либо равных k
- def main(exp, letter, length):
- # Избавляемся от пробельных символов
- reg = "".join(exp.split(" "))
- reg = "".join(reg.split("\n"))
- reg = "".join(reg.split("\t"))
- reg = list(reg) # Представляем выражение в виде списка
- stack = list() # Заведем список токенов
- while len(reg) > 0: # Перегоним выражение в токены по 1 символу
- tmp = Token()
- tmp.exp = reg.pop(0)
- if tmp.exp == letter:
- tmp.bit.add(1)
- else:
- tmp.bit.add(0)
- stack.append(tmp)
- index = 0
- while index < len(stack):
- if len(stack) == 1:
- break
- if stack[index].token == '+' and len(stack[index].token) == 1: # Сложение
- left = stack[index-2] # Левая часть
- right = stack[index-1] # Правая часть
- stack[index].token = '(' + left.token + '+' + right.token + ')' # Построим новое
- stack[index].bit = left.bit.union(right.bit)
- stack.pop(index - 1)
- stack.pop(index - 2)
- index -= 2
- elif stack[index].token == '.' and len(stack[index].token) == 1:
- left = stack[index-2]
- right = stack[index-1]
- tmp = set()
- for left_element in left.bit:
- for right_element in right.bit:
- new_element = left_element+right_element
- if new_element <= length:
- tmp.add(left_element+right_element)
- stack[index].token = '(' + left.token + right.token + ')'
- stack[index].bit = tmp
- stack.pop(index - 1)
- stack.pop(index - 2)
- index -= 2
- elif stack[index].token == '*' and len(stack[index].token) == 1:
- tmp = set()
- tmp.add(0)
- div = stack[index-1].bit
- for j in range(length):
- if j in stack[index-1].bit:
- for e in div:
- for k in range(length):
- index_x = j+e*k
- if index_x <= length:
- tmp.add(index_x)
- stack[index-1].token = '(' + stack[index-1].token + ')' + '*'
- stack[index-1].bit = tmp
- stack.pop(index)
- index -= 1
- index += 1
- if length in stack[0].bit:
- print("YES")
- else:
- print("NO")
- return
- if __name__ == "__main__":
- a = input()
- x = input()
- try:
- k = int(input())
- main(a, x, k)
- except ValueError:
- print("Ожидалось число")
- print('Выход программы')
- exit()
- except Exception as e:
- print(str(e))
- print('Выход программы')
- exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement