Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- OPERATORS = {'+': (1, lambda x, y: x + y), '-': (1, lambda x, y: x - y),
- '*': (2, lambda x, y: x * y), '/': (2, lambda x, y: x / y)}
- def eval_(formula):
- def parse(formula_string):
- number = ''
- for s in formula_string:
- if s in '1234567890.':
- number += s
- elif number:
- yield float(number)
- number = ''
- if s in OPERATORS or s in "()":
- yield s
- if number:
- yield float(number)
- def shunting_yard(parsed_formula):
- stack = []
- for token in parsed_formula:
- if token in OPERATORS:
- while stack and stack[-1] != "(" and OPERATORS[token][0] <= OPERATORS[stack[-1]][0]:
- yield stack.pop()
- stack.append(token)
- elif token == ")":
- while stack:
- x = stack.pop()
- if x == "(":
- break
- yield x
- elif token == "(":
- stack.append(token)
- else:
- yield token
- while stack:
- yield stack.pop()
- def calc(polish):
- stack = []
- for token in polish:
- if token in OPERATORS:
- y, x = stack.pop(), stack.pop()
- stack.append(OPERATORS[token][1](x, y))
- else:
- stack.append(token)
- return stack[0]
- return calc(shunting_yard(parse(formula)))
- def splitting( s ):
- sout = ''
- boof = s[0]
- count = 1
- for i in s[1:]:
- if i == boof:
- count += 1
- else:
- if count == 1:
- sout += str(boof)
- else:
- sout += ( '[' + str(boof) + ':' +str(count) + ']')
- count = 1
- boof = i
- sout += ( '[' + str(boof) + ':' +str(count) + ']')
- return sout
- x = bin(eval(input()))
- print( '...[цифра:кол-во]...')
- print( splitting(x[2:]) )
- print('0 => ' + str(x.count('0')-1))
- print('1 => ' + str(x.count('1')))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement