Решение на Пет функции от Теодора Добрева

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

Към профила на Теодора Добрева

Резултати

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

Код

from collections import defaultdict
from functools import cmp_to_key
def is_pangram(sentence):
alphabet = 'абвгдежзийклмнопрстуфхцчшщъьюя'
for char in sentence:
alphabet = alphabet.replace(char.lower(), '')
return alphabet == ''
def char_histogram(text):
symbols_count = defaultdict(int)
for symbol in text:
symbols_count[symbol] += 1
return dict(symbols_count)
def sort_by(func, arguments):
return sorted(arguments, key=cmp_to_key(func))
def group_by_type(dictionary):
grouped_by_key_type = defaultdict(dict)
for key, value in dictionary.items():
grouped_by_key_type[type(key)][key] = value
return dict(grouped_by_key_type)
def anagrams(words):
grouped_words = defaultdict(list)
for word in words:
key = ''.join(\
filter(lambda char: char.lower().isalpha(), sorted(word)))
grouped_words[key].append(word)
return list(grouped_words.values())

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

.FF.............
======================================================================
FAIL: test_with_different_cases (test.TestAnagrams)
----------------------------------------------------------------------
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-1gqsv5k/test.py", line 125, in test_with_different_cases
    set(map(frozenset, solution.anagrams(words))))
AssertionError: Items in the first set but not the second:
frozenset({'Ray Adverb', 'Dave Barry'})
Items in the second set but not the first:
frozenset({'Dave Barry'})
frozenset({'Ray Adverb'})

======================================================================
FAIL: test_with_different_symbols (test.TestAnagrams)
----------------------------------------------------------------------
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-1gqsv5k/test.py", line 135, in test_with_different_symbols
    set(map(frozenset, solution.anagrams(words))))
AssertionError: Items in the first set but not the second:
frozenset({'I am Lord Voldemort', 'Tom Marvolo Riddle'})
frozenset({"So I'm cuter", 'Tom Cruise'})
Items in the second set but not the first:
frozenset({'Tom Cruise'})
frozenset({'I am Lord Voldemort'})
frozenset({'Tom Marvolo Riddle'})
frozenset({"So I'm cuter"})

----------------------------------------------------------------------
Ran 16 tests in 0.010s

FAILED (failures=2)

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

Теодора обнови решението на 18.03.2014 23:28 (преди около 10 години)

+from collections import defaultdict
+
+
+def is_pangram(sentence):
+ alphabet = 'абвгдежзийклмнопрстуфхцчшщъьюя'
+ for character in sentence:
+ alphabet = alphabet.replace(character.lower(), '')
+ return alphabet == ''
+
+
+def char_histogram(text):
+ symbols_count = {}
+ for symbol in list(text):
+ if symbol not in symbols_count:
+ symbols_count[symbol] = 1
+ else:
+ symbols_count[symbol] += 1
+ return symbols_count
+
+
+def sort_by(func, arguments):
+ pass
+ #return arguments.sort(key=func)
+
+
+def group_by_type(dictionary):
+ grouped_by_key_type = defaultdict(dict)
+ for key, value in dictionary.items():
+ grouped_by_key_type[type(key)].update({key: value})
+ return dict(grouped_by_key_type)
+
+
+def anagrams(words):
+ grouped_words = defaultdict(list)
+ for word in words:
+ grouped_words[''.join(sorted(word))].append(word)
+ return list(grouped_words.values())
  • интересно как се сещаш да използваш defaultdict в group_by_type, но не и в char_histogram :)
  • не е нужно да правиш от стринг списък, за да го итерираш; for symbol in text: също работи
  • по-добре grouped_by_key_type[type(key)][key] = value вместо grouped_by_key_type[type(key)].update({key: value})
  • при анаграмите трябва да взимаш предвид само буквите(тоест a b c d e ..., другите неща не те интересуват) и то без значение дали са главни или малки

Теодора обнови решението на 19.03.2014 00:07 (преди около 10 години)

from collections import defaultdict
+from functools import cmp_to_key
+
def is_pangram(sentence):
alphabet = 'абвгдежзийклмнопрстуфхцчшщъьюя'
- for character in sentence:
- alphabet = alphabet.replace(character.lower(), '')
+ for char in sentence:
+ alphabet = alphabet.replace(char.lower(), '')
return alphabet == ''
def char_histogram(text):
- symbols_count = {}
- for symbol in list(text):
- if symbol not in symbols_count:
- symbols_count[symbol] = 1
- else:
- symbols_count[symbol] += 1
- return symbols_count
+ symbols_count = defaultdict(int)
+ for symbol in text:
+ symbols_count[symbol] += 1
+ return dict(symbols_count)
def sort_by(func, arguments):
- pass
- #return arguments.sort(key=func)
+ return sorted(arguments, key=cmp_to_key(func))
def group_by_type(dictionary):
grouped_by_key_type = defaultdict(dict)
for key, value in dictionary.items():
- grouped_by_key_type[type(key)].update({key: value})
+ grouped_by_key_type[type(key)][key] = value
return dict(grouped_by_key_type)
def anagrams(words):
grouped_words = defaultdict(list)
for word in words:
- grouped_words[''.join(sorted(word))].append(word)
+ key = ''.join(\
+ filter(lambda char: char.lower().isalpha(), sorted(word)))
+ grouped_words[key].append(word)
return list(grouped_words.values())