Решение на Четири функции от Мартин Маринов

Обратно към всички решения

Към профила на Мартин Маринов

Резултати

  • 6 точки от тестове
  • 0 бонус точки
  • 6 точки общо
  • 20 успешни тест(а)
  • 0 неуспешни тест(а)

Код

from collections import defaultdict, OrderedDict
def groupby(func, seq):
result = defaultdict(list)
for x in seq:
result[func(x)].append(x)
return result
def iterate(func):
def compose(outer, inner):
return lambda *args: outer(inner(*args))
def generator():
f = lambda *args: args if len(args) > 1 else args[0]
while True:
yield f
f = compose(f, func)
return generator()
def zip_with(func, *iterables):
return (func(*ntuple) for ntuple in zip(*iterables))
def cache(func, cache_size):
cached_args = OrderedDict()
def func_cached(*args):
result = cached_args[args] if args in cached_args else func(*args)
cached_args[args] = result
if len(cached_args) > cache_size:
cached_args.popitem(last=False)
return result
return func_cached

Лог от изпълнението

....................
----------------------------------------------------------------------
Ran 20 tests in 0.010s

OK

История (2 версии и 3 коментара)

Мартин обнови решението на 14.03.2013 17:32 (преди около 11 години)

+from collections import defaultdict, OrderedDict
+
+
+def groupby(func, seq):
+ result = defaultdict(list)
+ for x in seq:
+ result[func(x)].append(x)
+ return result
+
+
+def iterate(func):
+ def compose(outer, inner):
+ return lambda *args: outer(inner(*args))
+
+ def generator():
+ f = lambda *args: args if len(args) > 1 else args[0]
+ while True:
+ yield f
+ f = compose(f, func)
+ return generator()
+
+
+def zip_with(func, *iterables):
+ return (func(*ntuple) for ntuple in zip(*iterables))
+
+
+def cache(func, cache_size):
+ cached_args = OrderedDict()
+
+ def func_cached(*args):
+ retval = cached_args.get(args) if cached_args.get(args) else func(*args)
+ cached_args[args] = retval
+ if len(cached_args) > cache_size:
+ cached_args.popitem(last=False)
+ return retval
+ return func_cached

Мартин обнови решението на 15.03.2013 11:19 (преди около 11 години)

from collections import defaultdict, OrderedDict
def groupby(func, seq):
result = defaultdict(list)
for x in seq:
result[func(x)].append(x)
return result
def iterate(func):
def compose(outer, inner):
return lambda *args: outer(inner(*args))
def generator():
f = lambda *args: args if len(args) > 1 else args[0]
while True:
yield f
f = compose(f, func)
return generator()
def zip_with(func, *iterables):
return (func(*ntuple) for ntuple in zip(*iterables))
def cache(func, cache_size):
cached_args = OrderedDict()
def func_cached(*args):
- retval = cached_args.get(args) if cached_args.get(args) else func(*args)
- cached_args[args] = retval
+ result = cached_args[args] if args in cached_args else func(*args)
+ cached_args[args] = result
if len(cached_args) > cache_size:
cached_args.popitem(last=False)
- return retval
+ return result
return func_cached