Created
December 3, 2019 21:59
-
-
Save victorusachev/f2da96d4a5009c139a03efcab1a738ad to your computer and use it in GitHub Desktop.
python alghoritms_simple_cli.py iter_fib 0 1 2 3 4 5 6 7 8 9 10 100
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import sys | |
| from functools import lru_cache | |
| class Executor(dict): | |
| def register(self, func): | |
| if func.__name__ in self: | |
| raise NameError(f'{func.__name__} already register') | |
| self[func.__name__] = func | |
| return func | |
| def __call__(self, name, *args, **kwargs): | |
| return self[name](*args, **kwargs) | |
| executor = Executor() | |
| @executor.register | |
| def naive_fib(num): | |
| if num <= 1: | |
| return num | |
| return naive_fib(num - 1) + naive_fib(num - 2) | |
| @executor.register | |
| @lru_cache() | |
| def memo_fib(num): | |
| if num <= 1: | |
| return num | |
| return memo_fib(num - 1) + memo_fib(num - 2) | |
| @executor.register | |
| def iter_fib(num): | |
| values = { | |
| 0: 0, | |
| 1: 1, | |
| } | |
| for n in range(2, num + 1): | |
| if n in values: | |
| return n | |
| values[n] = values[n - 1] + values[n - 2] | |
| return values[num] | |
| def main(name, *args): | |
| return [executor(name, num) for num in args] | |
| if __name__ == '__main__': | |
| if len(sys.argv) < 2: | |
| raise ValueError | |
| func_name = sys.argv[1] | |
| numbers = list(map(int, sys.argv[2:])) | |
| results = main(func_name, *numbers) | |
| print(results) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment