Решение на Пет функции от Любомир Коев

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

Към профила на Любомир Коев

Резултати

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

Код

from collections import defaultdict
ALPHABET = {char for char
in range(ord('а'), ord('я') + 1)} - {ord('ы'), ord('э')}
def is_pangram(sentence):
return {ord(char) for char in sentence.lower()
if ord('а') <= ord(char) <= ord('я')} == ALPHABET
def char_histogram(string):
histogram = defaultdict(int)
for char in string:
histogram[char] += 1
return histogram
def sort_by(predicate, array):
class sort_wrapper:
def __init__(self, val):
self.val = val
def __lt__(self, other):
return predicate(self.val, other.val) < 0
return sorted(array, key=sort_wrapper)
def group_by_type(ungrouped):
grouped = defaultdict(dict)
for key, item in ungrouped.items():
grouped[type(key)][key] = item
return grouped
def anagrams(words):
def to_anagram_hash(word):
return ''.join(
sorted([char for char in word.lower() if char.isalpha()])
)
anagram_table = defaultdict(list)
for word in words:
anagram_table[to_anagram_hash(word)].append(word)
#defaultdict -> list
return [list(values) for key, values in anagram_table.items()]

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

................
----------------------------------------------------------------------
Ran 16 tests in 0.009s

OK

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

Любомир обнови решението на 16.03.2014 00:18 (преди около 10 години)

+from collections import defaultdict
+
+SAMPLE_SENTENCE = 'Ах, чудна българска земьо, полюшвай цъфтящи жита!'
+VALID_CHARS = {char for char in SAMPLE_SENTENCE.lower()
+ if ord('а') <= ord(char) <= ord('я')}
+
+
+def is_pangram(sentence):
+ return {char for char in sentence.lower()
+ if ord('а') <= ord(char) <= ord('я')} == VALID_CHARS
+
+
+def char_histogram(string):
+ histogram = defaultdict(int)
+ for char in string:
+ histogram[char] += 1
+
+ # defaultdict -> dict
+ return dict(histogram)
+
+
+def sort_by(predicate, array):
+ is_sorted = False
+ top = len(array)-1
+
+ while not is_sorted:
+ is_sorted = True
+ for c in range(0, top):
+ if predicate(array[c], array[c+1]) > 0:
+ array[c], array[c+1] = array[c+1], array[c]
+ is_sorted = False
+ top -= 1
+
+ return array
+
+
+def group_by_type(ungrouped):
+ grouped = defaultdict(lambda: defaultdict(int))
+ for key, item in ungrouped.items():
+ grouped[type(key)][key] = item
+
+ #defaultdict -> dict, nested
+ return dict(map(lambda item: (item[0], dict(item[1])), grouped.items()))
+
+
+def anagrams(words):
+ def to_anagram_hash(word):
+ return ''.join(sorted([char for char in word if char.isalpha()]))
+
+ anagram_table = defaultdict(list)
+ for word in words:
+ anagram_table[to_anagram_hash(word)].append(word)
+
+ #defaultdict -> list
+ return [list(values) for key, values in anagram_table.items()]

Любомир обнови решението на 16.03.2014 00:22 (преди около 10 години)

from collections import defaultdict
SAMPLE_SENTENCE = 'Ах, чудна българска земьо, полюшвай цъфтящи жита!'
VALID_CHARS = {char for char in SAMPLE_SENTENCE.lower()
if ord('а') <= ord(char) <= ord('я')}
def is_pangram(sentence):
return {char for char in sentence.lower()
if ord('а') <= ord(char) <= ord('я')} == VALID_CHARS
def char_histogram(string):
histogram = defaultdict(int)
for char in string:
histogram[char] += 1
# defaultdict -> dict
return dict(histogram)
def sort_by(predicate, array):
is_sorted = False
top = len(array)-1
while not is_sorted:
is_sorted = True
for c in range(0, top):
if predicate(array[c], array[c+1]) > 0:
array[c], array[c+1] = array[c+1], array[c]
is_sorted = False
top -= 1
return array
def group_by_type(ungrouped):
grouped = defaultdict(lambda: defaultdict(int))
for key, item in ungrouped.items():
grouped[type(key)][key] = item
#defaultdict -> dict, nested
return dict(map(lambda item: (item[0], dict(item[1])), grouped.items()))
def anagrams(words):
def to_anagram_hash(word):
- return ''.join(sorted([char for char in word if char.isalpha()]))
+ return ''.join(
+ sorted([char for char in word.lower() if char.isalpha()])
+ )
anagram_table = defaultdict(list)
for word in words:
anagram_table[to_anagram_hash(word)].append(word)
#defaultdict -> list
return [list(values) for key, values in anagram_table.items()]
  • това не е яко
SAMPLE_SENTENCE = 'Ах, чудна българска земьо, полюшвай цъфтящи жита!'
VALID_CHARS = {char for char in SAMPLE_SENTENCE.lower()
               if ord('а') <= ord(char) <= ord('я')}

имаш късмет, че в изречението има и малко a, иначе щеше да ти обърка решението; не се разбира лесно смисълът на тези константи; ако беше видял този код без да знаеш за задачата, щеше ли да се сетиш, че във VALID_CHARS се държат всички букви от азбуката при положение, че имаш някакво изречение, с което правиш някакви неща?; затова по-добре си изреди буквите, които ти трябват в един низ 'абвг...'

  • не е нужно да минаваш от defaultdict към dict
  • 24 ред спейсове около оператора
  • можеш да минеш само с defaultdict(dict) вместо defaultdict(lambda: defaultdict(int)), защото няма как да попаднеш в случай, в който използваш ключ и не му слагаш стойност
  • на последния ред(57) можеш да замениш key с _
  • anagrams е доста силно решение :thumbsup:

Любомир обнови решението на 16.03.2014 20:59 (преди около 10 години)

from collections import defaultdict
-SAMPLE_SENTENCE = 'Ах, чудна българска земьо, полюшвай цъфтящи жита!'
-VALID_CHARS = {char for char in SAMPLE_SENTENCE.lower()
- if ord('а') <= ord(char) <= ord('я')}
+ALPHABET = {char for char
+ in range(ord('а'), ord('я') + 1)} - {ord('ы'), ord('э')}
def is_pangram(sentence):
- return {char for char in sentence.lower()
- if ord('а') <= ord(char) <= ord('я')} == VALID_CHARS
+ return {ord(char) for char in sentence.lower()
+ if ord('а') <= ord(char) <= ord('я')} == ALPHABET
def char_histogram(string):
histogram = defaultdict(int)
for char in string:
histogram[char] += 1
- # defaultdict -> dict
- return dict(histogram)
+ return histogram
def sort_by(predicate, array):
is_sorted = False
- top = len(array)-1
+ top = len(array) - 1
while not is_sorted:
is_sorted = True
for c in range(0, top):
if predicate(array[c], array[c+1]) > 0:
array[c], array[c+1] = array[c+1], array[c]
is_sorted = False
top -= 1
return array
def group_by_type(ungrouped):
- grouped = defaultdict(lambda: defaultdict(int))
+ grouped = defaultdict(dict)
for key, item in ungrouped.items():
grouped[type(key)][key] = item
- #defaultdict -> dict, nested
- return dict(map(lambda item: (item[0], dict(item[1])), grouped.items()))
+ return grouped
def anagrams(words):
def to_anagram_hash(word):
return ''.join(
sorted([char for char in word.lower() if char.isalpha()])
)
anagram_table = defaultdict(list)
for word in words:
anagram_table[to_anagram_hash(word)].append(word)
#defaultdict -> list
return [list(values) for key, values in anagram_table.items()]

Любомир обнови решението на 17.03.2014 19:25 (преди около 10 години)

from collections import defaultdict
ALPHABET = {char for char
in range(ord('а'), ord('я') + 1)} - {ord('ы'), ord('э')}
def is_pangram(sentence):
return {ord(char) for char in sentence.lower()
if ord('а') <= ord(char) <= ord('я')} == ALPHABET
def char_histogram(string):
histogram = defaultdict(int)
for char in string:
histogram[char] += 1
return histogram
def sort_by(predicate, array):
- is_sorted = False
- top = len(array) - 1
+ class sort_wrapper:
+ def __init__(self, val):
+ self.val = val
- while not is_sorted:
- is_sorted = True
- for c in range(0, top):
- if predicate(array[c], array[c+1]) > 0:
- array[c], array[c+1] = array[c+1], array[c]
- is_sorted = False
- top -= 1
+ def __lt__(self, other):
+ return not predicate(other.val, self.val) < 0
- return array
+ return sorted(array, key=sort_wrapper)
def group_by_type(ungrouped):
grouped = defaultdict(dict)
for key, item in ungrouped.items():
grouped[type(key)][key] = item
return grouped
def anagrams(words):
def to_anagram_hash(word):
return ''.join(
sorted([char for char in word.lower() if char.isalpha()])
)
anagram_table = defaultdict(list)
for word in words:
anagram_table[to_anagram_hash(word)].append(word)
#defaultdict -> list
return [list(values) for key, values in anagram_table.items()]

Любомир обнови решението на 18.03.2014 13:54 (преди около 10 години)

from collections import defaultdict
ALPHABET = {char for char
in range(ord('а'), ord('я') + 1)} - {ord('ы'), ord('э')}
def is_pangram(sentence):
return {ord(char) for char in sentence.lower()
if ord('а') <= ord(char) <= ord('я')} == ALPHABET
def char_histogram(string):
histogram = defaultdict(int)
for char in string:
histogram[char] += 1
return histogram
def sort_by(predicate, array):
class sort_wrapper:
def __init__(self, val):
self.val = val
def __lt__(self, other):
- return not predicate(other.val, self.val) < 0
+ return predicate(self.val, other.val) < 0
return sorted(array, key=sort_wrapper)
def group_by_type(ungrouped):
grouped = defaultdict(dict)
for key, item in ungrouped.items():
grouped[type(key)][key] = item
return grouped
def anagrams(words):
def to_anagram_hash(word):
return ''.join(
sorted([char for char in word.lower() if char.isalpha()])
)
anagram_table = defaultdict(list)
for word in words:
anagram_table[to_anagram_hash(word)].append(word)
#defaultdict -> list
return [list(values) for key, values in anagram_table.items()]