Задача об инверсии гласных
Вам даётся строка s. Напишите функцию, которая инвертирует порядок гласных:
#задача
@zen_of_python
Вам даётся строка s. Напишите функцию, которая инвертирует порядок гласных:
>>> s = 'погода'
>>> invert_vowels(s)
... пагодо
#задача
@zen_of_python
👨💻2👍1🍌1
Поздравляем победителей
Задачу об идеальном квадрате верно решили:
— @QuantumaStelata;
— @nxiqns;
— @WhonixMan;
— @GeorKu;
— @patriarch_chesslovo;
— @maslyaev.
Кратчайшие верные решения предложили @QuantumaStelata:
@nxiqns:
и @WhonixMan:
Отдельно выделим решение @maslyaev, учитывающее случай очень больших чисел:
#задача
@zen_of_python
Задачу об идеальном квадрате верно решили:
— @QuantumaStelata;
— @nxiqns;
— @WhonixMan;
— @GeorKu;
— @patriarch_chesslovo;
— @maslyaev.
Кратчайшие верные решения предложили @QuantumaStelata:
x = lambda s: (s**(1/2)).is_integer()
@nxiqns:
def check_square_perfection(num):
return (num**0.5).is_integer()
и @WhonixMan:
def check_square_perfection(num):
return int(num**0.5) == num**0.5
Отдельно выделим решение @maslyaev, учитывающее случай очень больших чисел:
def check_square_perfection(area: int | float) -> bool:
if area == 0 or area == 1: # На 0 и 1 ломается вавилонский метод
return True
if area < 4: # Отрицательная area даст False
return False
if area % 1 != 0: # Нецелая area даст False
return False
int_area = int(area)
sqrt = int_area // 2
while True:
next_sqrt = (sqrt + int_area//sqrt)//2
if next_sqrt == sqrt:
break
sqrt = next_sqrt
return sqrt * sqrt == int_area
#задача
@zen_of_python
👍8❤3🍌1
Задача о подстроке
Получаем две строки
Подстрока формируется из исходной строки путём удаления некоторых символов (может быть, ни одного) без нарушения положения остальных.
Ограничения:
В качестве теста:
#задача
@zen_of_python
Получаем две строки
s
и t
. Напишите функцию проверки: является ли s подстрокой t. Подстрока формируется из исходной строки путём удаления некоторых символов (может быть, ни одного) без нарушения положения остальных.
"ace"
является подстрокой "abcde"
, а "aec"
— нет.Ограничения:
0 <= len(s) <= 100
0 <= len(t) <= 10^4
s
и t
состоят только из строчных английских букв.В качестве теста:
s = "abc"
t = "ahbgdc"
>>> is_substring(s, t)
... true
#задача
@zen_of_python
👍2❤1🍌1
Поздравляем победителей
Задачу об инверсии строки верно решили:
— Cool and Fun Python (@Python3k);
— Лев Выскубов;
— @sidor0912;
— @lomserman;
— @HackingSection;
— @VasilTerekin (засчитываю, хотя запрошена функция);
— @patriarch_chesslovo;
— @IvanImmortal;
— @Sentiago.
Кратчайшие верные решения предложили @patriarch_chesslovo:
и @HackingSection:
Отдельный респект Cool and Fun Python за разбор своего решения:
Отдельная благодарность @lomserman за создание тестирующей функции:
p.s. Админ подписывается на всех ребятушек, что решают задачи. Если «провалиться» в профили решивших, там полно питонической годноты.
#задача
@zen_of_python
Задачу об инверсии строки верно решили:
— Cool and Fun Python (@Python3k);
— Лев Выскубов;
— @sidor0912;
— @lomserman;
— @HackingSection;
— @VasilTerekin (засчитываю, хотя запрошена функция);
— @patriarch_chesslovo;
— @IvanImmortal;
— @Sentiago.
Кратчайшие верные решения предложили @patriarch_chesslovo:
VOWELS_LOWERCASE = set('aeoiuаоыуэяёиюе')
def invert_vowels(strng):
reversed_vowels = (i for i in strng[::-1] if i.lower() in VOWELS_LOWERCASE)
return ''.join([i if i.lower() not in VOWELS_LOWERCASE else next(reversed_vowels) for i in strng])
и @HackingSection:
def invert_vowels(s, vowels = "аяоёиыуюеэ"):
vowelsInText = [j for j in s if j in vowels]
return [vowelsInText.pop(-1) if i in vowels else i for i in s]
Отдельный респект Cool and Fun Python за разбор своего решения:
Предполагается, что все буквы в тексте строчные и русские. Иначе требуется доработать строку гласных.
У решения линейная асимптотика. Но если очень хочется, можно повысить быстродействие, превратив vowels в множество строк односимвольников: vowels = {'а', 'я', ...}
И преобразование строки в список и обратно - вынужденная мера. Строка в Python неизменяемая. Впрочем, на сохранение асимптотики O(N) это не влияет.
Кстати, если бы постановщик задачи гарантировал наличие гласных (всё же предлоги "в", "с" тоже считаются словами), можно было бы убрать проверки left < right в двух внутренних циклах.
Отдельная благодарность @lomserman за создание тестирующей функции:
def test(original: str, expected: str):
result = invert_vowels(original)
print(result)
assert result == expected
p.s. Админ подписывается на всех ребятушек, что решают задачи. Если «провалиться» в профили решивших, там полно питонической годноты.
#задача
@zen_of_python
🔥6🍌2❤1
Поздравляем победителей
Задачу о подстроке верно решили:
— @GeorKu;
— @StSav012;
— @IPyth0n (@X_Python);
— @stalker1337;
— @HackingSection;
— @Shihiyev;
— @sidor0912
— @patriarch_chesslovo.
Кратчайшие верные решения предложили @HackingSection:
и @SmirnGreg:
Отдельное спасибо @SmirnGreg за замер скорости исполнения функций (!)
NB! Учитывайте повторяющиеся буквы в подстроке s. Для некоторых решений следующая пара строк отдаёт True, что явно неверно:
Присоединяйтесь: раз в неделю задачу решить — это вполне оптимальная нагрузка для занятого кодера.
#задача
@zen_of_python
Задачу о подстроке верно решили:
— @GeorKu;
— @StSav012;
— @IPyth0n (@X_Python);
— @stalker1337;
— @HackingSection;
— @Shihiyev;
— @sidor0912
— @patriarch_chesslovo.
Кратчайшие верные решения предложили @HackingSection:
def is_substring(s, t, nxt = 0):
return len(s) == [nxt := nxt + 1 for i in t if i == s[nxt]][-1]
и @SmirnGreg:
def is_substring(s: str, t: str):
return bool(re.match('.*' + '.*'.join(s) + '.*', t))
Отдельное спасибо @SmirnGreg за замер скорости исполнения функций (!)
NB! Учитывайте повторяющиеся буквы в подстроке s. Для некоторых решений следующая пара строк отдаёт True, что явно неверно:
s = "agggc"
t = "cgxggxxgxxa"
Присоединяйтесь: раз в неделю задачу решить — это вполне оптимальная нагрузка для занятого кодера.
#задача
@zen_of_python
👍5❤1❤🔥1🔥1😁1