Решение на Пет функции от Дамян Манев

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

Към профила на Дамян Манев

Резултати

  • 9 точки от тестове
  • 0 бонус точки
  • 9 точки общо
  • 15 успешни тест(а)
  • 1 неуспешни тест(а)

Код

from collections import Counter
from collections import defaultdict
def anagrams(words):
anagram_words = []
deputy = defaultdict(list)
for i in words:
deputy[tuple(sorted(x for x in i.lower() if x.isalpha()))].append(i)
return list(deputy[x] for x in deputy)
def char_histogram(text):
elements_and_counters = Counter(text)
return elements_and_counters
def group_by_type(some_elements):
elements_with_types = defaultdict(dict)
for key, value in some_elements.items():
elements_with_types[type(key)][key] = value
return elements_with_types
def is_pangram(seq):
return len(set(x for x in seq.lower() if 'а' <= x <= 'я' )) == 30
def sort_by(func, arg):
if arg == {}:
return {}
sort_arg = [arg[0]]
numbers_in_sort_arg = 1
for i in arg[1: len(arg)]:
counter = 0
while counter <= len(sort_arg)-1 and func(i, sort_arg[counter]) >= 0:
counter += 1
sort_arg.insert(counter, i)
return sort_arg

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

.............E..
======================================================================
ERROR: test_sort_by_empty (test.TestSortBy)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "lib/language/python/runner.py", line 60, in thread
    raise it.exc_info[1]
  File "lib/language/python/runner.py", line 48, in run
    self.result = func(*args, **kwargs)
  File "/tmp/d20140319-21201-1swycy6/test.py", line 44, in test_sort_by_empty
    self.assertEqual([], solution.sort_by(lambda x, y: x - y, []))
  File "/tmp/d20140319-21201-1swycy6/solution.py", line 32, in sort_by
    sort_arg = [arg[0]]
IndexError: list index out of range

----------------------------------------------------------------------
Ran 16 tests in 0.011s

FAILED (errors=1)

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

Дамян обнови решението на 19.03.2014 02:28 (преди над 10 години)

+from collections import Counter
+from collections import defaultdict
+
+
+def anagrams(words) :
+ anagram_words = []
+ deputy = defaultdict(list)
+ for i in words :
+ deputy[tuple(sorted(x for x in i.lower() if x.isalpha()))].append(i)
+ return list(deputy[x] for x in deputy)
+
+
+def char_histogram(text) :
+ elements_and_counters = Counter()
+ for x in text :
+ elements_and_counters[x] += 1
+ return elements_and_counters
+
+
+def group_by_type(some_elements) :
+ elements_with_types = defaultdict(dict)
+ for key, value in some_elements.items() :
+ elements_with_types[type(key)].update({key: value})
+ return dict(elements_with_types)
+
+
+def is_pangram(seq) :
+ return len(set(x for x in seq.lower() if 'а' <= x <= 'я' )) == 30
+
+
+def sort_by(func, arg) :
+ sort_arg = [arg[0]]
+ numbers_in_sort_arg = 1
+ for i in arg[1: len(arg)] :
+ counter = 0
+ while counter <= len(sort_arg)-1 and func(i, sort_arg[counter]) >= 0 :
+ counter += 1
+ sort_arg.insert(counter, i)
+ return sort_arg
  • хубаво си открил Counter, но го използваш като defaultdict; ако се замислиш Counter и char_histogram правят едно и също нещо, така че сети се какво трябва да направиш :)
  • ако искаш да сложиш в речника d ключ 'key' със стойност 1, какво би направил:
    • d.update({'key': 1})
    • d['key'] = 1
  • няма смисъл от кастването към dict от defaultdict, няма да тестваме за типа на върнатото, просто трябва да е някакъв речник
  • тая твоя сортировка не работи за празен масив; arg[0] ?
  • готино решение на anagrams

Дамян обнови решението на 19.03.2014 16:32 (преди над 10 години)

from collections import Counter
from collections import defaultdict
-def anagrams(words) :
+def anagrams(words):
anagram_words = []
deputy = defaultdict(list)
- for i in words :
+ for i in words:
deputy[tuple(sorted(x for x in i.lower() if x.isalpha()))].append(i)
return list(deputy[x] for x in deputy)
-def char_histogram(text) :
- elements_and_counters = Counter()
- for x in text :
- elements_and_counters[x] += 1
+def char_histogram(text):
+ elements_and_counters = Counter(text)
return elements_and_counters
-def group_by_type(some_elements) :
+def group_by_type(some_elements):
elements_with_types = defaultdict(dict)
- for key, value in some_elements.items() :
- elements_with_types[type(key)].update({key: value})
- return dict(elements_with_types)
+ for key, value in some_elements.items():
+ elements_with_types[type(key)][key] = value
+ return elements_with_types
-def is_pangram(seq) :
+def is_pangram(seq):
return len(set(x for x in seq.lower() if 'а' <= x <= 'я' )) == 30
-def sort_by(func, arg) :
+def sort_by(func, arg):
+ if arg == {}:
+ return {}
sort_arg = [arg[0]]
numbers_in_sort_arg = 1
- for i in arg[1: len(arg)] :
+ for i in arg[1: len(arg)]:
counter = 0
- while counter <= len(sort_arg)-1 and func(i, sort_arg[counter]) >= 0 :
+ while counter <= len(sort_arg)-1 and func(i, sort_arg[counter]) >= 0:
counter += 1
sort_arg.insert(counter, i)
return sort_arg