변경이력

돌아가기
3 38개 문자 추가 54개 문자 삭제

2016/11/10 05:13

Flair Sizz

첫번째 방법: 정규식 이용 ```{.python} import re def run(e, *_tuple): returnrun = lambda e, *_tuple: str(eval(e.join(_tuple))) def ins(ins = lambda _string, start, end): return: _string[:start] + '"' + _string[start:end] + '"' + _string[end:] while __name__ == '__main__': s = input('>>>') for i in reversed([*re.finditer(r'([^() ]+)', s)]): s = ins(s, *i.span()) for i in [('(', 'run('), ' ,']: exec('s = s.replace("%s", "%s")'%(*i,)) print(eval(s)) ``` 두번째 방법: 정규식 없음 ```{.python} def lisp_eval(args): return eval(args[0].join(args[1:])) def divide_eval(_list): res = [] k = 0 for n, i in enumerate(_list): if i == '(': k += 1 if i == ')': k -= 1 if i == ' ' and k == 0: res.append(n) return res def divide(_list): res = [] s = _list[:] target = reversed(sorted(divide_eval(_list))) for i in target: res.append(s[i+1:]) s = s[:i] res.append(_list[0]) res.reverse() return res def interpret(s): if len(s) == 3: return 0 s = s[1:-1] s_list = divide(s) for i in range(1, len(s_list)): if '(' in s_list[i]: s_list[i] = str(interpret(s_list[i])) return lisp_eval(s_list) while __name__ == '__main__': print(interpret(input('>>>'))) ``` 파이썬 3.5.2 64
첫번째 방법: 정규식 이용 ```{.python} import re def run(e, *_tuple): returnrun = lambda e, *_tuple: str(eval(e.join(_tuple))) def ins(ins = lambda _string, start, end): return: _string[:start] + '"' + _string[start:end] + '"' + _string[end:] while __name__ == '__main__': s = input('>>>') for i in reversed([*re.finditer(r'([^() ]+)', s)]): s = ins(s, *i.span()) for i in [('(', 'run('), ' ,']: exec('s = s.replace("%s", "%s")'%(*i,)) print(eval(s)) ``` 두번째 방법: 정규식 없음 ```{.python} def lisp_eval(args): return eval(args[0].join(args[1:])) def divide_eval(_list): res = [] k = 0 for n, i in enumerate(_list): if i == '(': k += 1 if i == ')': k -= 1 if i == ' ' and k == 0: res.append(n) return res def divide(_list): res = [] s = _list[:] target = reversed(sorted(divide_eval(_list))) for i in target: res.append(s[i+1:]) s = s[:i] res.append(_list[0]) res.reverse() return res def interpret(s): if len(s) == 3: return 0 s = s[1:-1] s_list = divide(s) for i in range(1, len(s_list)): if '(' in s_list[i]: s_list[i] = str(interpret(s_list[i])) return lisp_eval(s_list) while __name__ == '__main__': print(interpret(input('>>>'))) ``` 파이썬 3.5.2 64
2 10개 문자 추가 27개 문자 삭제

2016/11/10 05:10

Flair Sizz

1 Original

2016/11/10 05:05

Flair Sizz

코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.