Предизвикателства > Мемник > Решения > Решението на Михаил Георгиев

Резултати
2 точки от тестове
0 точки от учител

2 точки общо

5 успешни теста
0 неуспешни теста
Код

 1memory = []
 2seen_phrases = set()
 3
 4def name_format(name):
 5    result = ''
 6    upper_next = True
 7
 8    for letter in name:
 9        if letter == '_':
10            result += ' '
11            upper_next = True
12        else:
13            if upper_next:
14                result += letter.upper()
15                upper_next = False
16            else:
17                result += letter
18
19    return result
20
21def memnick(*funcs):
22    if not funcs:
23        def decorator(func):
24            def wrapper(*args, **kwargs):
25                phrase = func(*args, **kwargs)
26
27                if phrase not in seen_phrases:
28                    seen_phrases.add(phrase)
29
30                    i = 0
31                    while i < len(phrase) and phrase[i] != ',':
32                        i += 1
33
34                    addressed = phrase[:i]
35                    memory.append((func.__name__, addressed, phrase))
36
37                return phrase
38
39            wrapper.__name__ = func.__name__
40            return wrapper
41        return decorator
42
43    final_result = []
44
45    for func in funcs:
46        aim = name_format(func.__name__)
47
48        for speaker, address, phrase in memory:
49            if name_format(address) == aim:
50                final_result.append(
51                    'С гласа на {}: {}'.format(name_format(speaker), phrase)
52                )
53
54    return final_result

.....
----------------------------------------------------------------------
Ran 5 tests in 0.001s

OK

Дискусия
Виктор Бечев
15.03.2026 13:20

Решението ти работи впечатляващо добре, предвид това, че си го написал на Pascal. :grin: Шегата настрана, хубаво е, че можеш да си напишеш алгоритмите сам, но in the long run ще е добре да се възползваш от вградените в езика инструменти. Например: ``` upper_next = True for letter in name: if letter == '_': result += ' ' upper_next = True else: if upper_next: result += letter.upper() upper_next = False else: result += letter ``` Е еквивалентно на: ``` name.replace("_", " ").title() ``` Не е проблем за нас да решаваш задачите както ти е кеф, просто индикираме, че имаш много неща в езика, които може да са ти от полза ако решаваш проблеми, които изискват по-сериозно количество код.
История

f1memory = []f1memory = []
2seen_phrases = set()2seen_phrases = set()
33
4def name_format(name):4def name_format(name):
5    result = ''5    result = ''
6    upper_next = True6    upper_next = True
77
8    for letter in name:8    for letter in name:
9        if letter == '_':9        if letter == '_':
10            result += ' '10            result += ' '
11            upper_next = True11            upper_next = True
12        else:12        else:
13            if upper_next:13            if upper_next:
14                result += letter.upper()14                result += letter.upper()
15                upper_next = False15                upper_next = False
16            else:16            else:
17                result += letter17                result += letter
1818
19    return result19    return result
2020
21def memnick(*funcs):21def memnick(*funcs):
22    if not funcs:22    if not funcs:
23        def decorator(func):23        def decorator(func):
24            def wrapper(*args, **kwargs):24            def wrapper(*args, **kwargs):
25                phrase = func(*args, **kwargs)25                phrase = func(*args, **kwargs)
2626
27                if phrase not in seen_phrases:27                if phrase not in seen_phrases:
28                    seen_phrases.add(phrase)28                    seen_phrases.add(phrase)
2929
30                    i = 030                    i = 0
31                    while i < len(phrase) and phrase[i] != ',':31                    while i < len(phrase) and phrase[i] != ',':
32                        i += 132                        i += 1
3333
34                    addressed = phrase[:i]34                    addressed = phrase[:i]
35                    memory.append((func.__name__, addressed, phrase))35                    memory.append((func.__name__, addressed, phrase))
3636
37                return phrase37                return phrase
3838
39            wrapper.__name__ = func.__name__39            wrapper.__name__ = func.__name__
40            return wrapper40            return wrapper
41        return decorator41        return decorator
4242
43    final_result = []43    final_result = []
4444
45    for func in funcs:45    for func in funcs:
46        aim = name_format(func.__name__)46        aim = name_format(func.__name__)
4747
48        for speaker, address, phrase in memory:48        for speaker, address, phrase in memory:
49            if name_format(address) == aim:49            if name_format(address) == aim:
50                final_result.append(50                final_result.append(
51                    'С гласа на {}: {}'.format(name_format(speaker), phrase)51                    'С гласа на {}: {}'.format(name_format(speaker), phrase)
52                )52                )
5353
t54    return '[' + ',\n '.join(f'"{i}"' for i in final_result) + ']'t54    return final_result
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op