Решение на Четири функции от Александър Димитров

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

Към профила на Александър Димитров

Резултати

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

Код

from collections import OrderedDict
def groupby(func, seq):
keys = set(map(func, seq))
return {key: list(filter(lambda x: func(x) == key, seq)) for key in keys}
def iterate(func):
result = lambda x: x
compose = lambda f, g: lambda x: f(g(x))
while True:
yield result
result = compose(func, result)
def zip_with(func, *iterables):
args = list(zip(*iterables))
for arg in args:
yield func(*arg)
def cache(func, cache_size):
cached = OrderedDict()
def func_cached(*args):
if args in cached:
return cached[args]
result = func(*args)
if cache_size != 0:
if len(cached) == cache_size:
cached.popitem(False)
cached[args] = result
return result
return func_cached

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

....................
----------------------------------------------------------------------
Ran 20 tests in 0.015s

OK

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

Александър обнови решението на 12.03.2013 23:54 (преди около 11 години)

+from functools import lru_cache
+
+
+def groupby(func, seq):
+ keys = set(map(func, seq))
+ return {key: list(filter(lambda x: func(x) == key, seq)) for key in keys}
+
+
+def iterate(func):
+ result = lambda x: x
+ compose = lambda f, g: lambda x: f(g(x))
+ while True:
+ yield result
+ result = compose(func, result)
+
+
+def zip_with(func, *iterables):
+ args = list(zip(*iterables))
+ for arg in args:
+ yield func(*arg)
+
+
+def cache(func, cache_size):
+ @lru_cache(maxsize=cache_size, typed=True)
+ def func_cached(*args):
+ return func(*args)
+ return func_cached

Александър обнови решението на 15.03.2013 15:40 (преди около 11 години)

-from functools import lru_cache
+from collections import OrderedDict
def groupby(func, seq):
keys = set(map(func, seq))
return {key: list(filter(lambda x: func(x) == key, seq)) for key in keys}
def iterate(func):
result = lambda x: x
compose = lambda f, g: lambda x: f(g(x))
while True:
yield result
result = compose(func, result)
def zip_with(func, *iterables):
args = list(zip(*iterables))
for arg in args:
yield func(*arg)
def cache(func, cache_size):
- @lru_cache(maxsize=cache_size, typed=True)
+ cached = OrderedDict()
+
def func_cached(*args):
- return func(*args)
+ if args in cached:
+ return cached[args]
+ result = func(*args)
+ if cache_size != 0:
+ if len(cached) == cache_size:
+ cached.popitem(False)
+ cached[args] = result
+ return result
+
return func_cached