Skip to content

Instantly share code, notes, and snippets.

@victorusachev
Created December 3, 2019 21:59
Show Gist options
  • Select an option

  • Save victorusachev/f2da96d4a5009c139a03efcab1a738ad to your computer and use it in GitHub Desktop.

Select an option

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
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