Comments 21
Решение Задачи #3
result = [k for k in list1 if k in list2]
Спасибо, за предоставленное, интересное, решение!
Постойте, уважаемый коллега! При всех недостатках авторского решений, обусловленных, несомненно, не очень высоким уровнем знания языка, это решение:
result = list(set(list1) & set(list2))
работает за O(n log n) времени. А ваше - за O(n^2). В этом отношении, на длинных списках, авторское решение превосходит ваше!
Да, сударь, соглашусь. Предложенное мной решение изрядно зубодробительней будет
Спасибо за вашу обратную связь, приму к сведению
Я работаю в основном с детьми, которым более сложное, но производительное решения покажется не понятным
Да, но есть нюанс: что, если элементы списка (хотя бы один) — non-hashable? Плюс, на коротких списках, конечно же, накладные расходы на построение сетов будут превосходить выгоду от скорости их сопоставления.
Или вот, известная уловка: [1.0, 1, True]
Да, но есть нюанс: что, если элементы списка (хотя бы один) — non-hashable?
В условиях задачи:
У вас есть два списка чисел.
Числа в python, вроде бы, всегда hashable.
Тоже правда. Пробовал сейчас придумать числа (в том числе, комплексные), которые не имеют __hash__()
. Тем не менее, `1, 1.0` всё еще удовлетворяют условиям задачи.
В дополнение к комментарию выше:
def lists_intersect_cmp(l1, l2):
return [i for i in l1 if i in l2]
def lists_intersect_set(l1, l2):
return list(set(l1) & set(l2))
# In [119]: %timeit lists_intersect_cmp([1, 2, 3], [3, 4, 5])
# 837 ns ± 50.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
# In [120]: %timeit lists_intersect_set([1, 2, 3], [3, 4, 5])
# 981 ns ± 37.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Как видим, на коротких коллекциях квадратичное сравнение "каждый с каждым" выгоднее, чем строить два сета. И это я еще взял числа из free lists.
Ваше решение работает так-то заО(n)
Решение задачи #1
def decrypt(text):
decrypted_text = ""
i = 0
while i < len(text):
if text[i].isdigit():
count = int(text[i])
i += 1
decrypted_text += text[i] * count
else:
decrypted_text += text[i]
i += 1
return decrypted_text
encrypted_text = "2h 2l i3s 2s1 t2ex3t"
decrypted_text = decrypt(encrypted_text)
print("Decrypted Text:", decrypted_text)
У вас есть последовательность чисел, представленная в виде списка. Ваша задача - найти среднее арифметическое всех элементов этой последовательности, округлить его до целого числа и вернуть результат.
У вас есть два списка чисел. Ваша задача - найти все общие элементы в этих списках и вернуть их в виде нового списка.
Это головоломки?..
Выглядит слишком тривиально, или я что-то пропускаю?
У вас есть задача - найти факториал числа. Факториал числа n обозначается n! и равен произведению всех положительных целых чисел от 1 до n.
Ваша задача - написать рекурсивную функцию, которая будет вычислять факториал числа.
..нет, это точно не головоломки. Это тривиальные задачи по программированию.
Задачи рассчитаны в основном для тех, кто только начинает разбираться в програмировании, в основном на детскую аудиторию
Они от этого головоломками не становятся. Вычисление среднего арифметического по формуле - не головоломка. Использование стандартного метода из библиотеки - не головоломка.
PS
Задачи рассчитаны [...] в основном на детскую аудиторию
...и поэтому в послесловии статьи на Хабре вы пишете:
Каждая задача предложила нам новые вызовы и позволила применить знания в практических задачах. [...] Я надеюсь, что вы [...] научились что-то новое (sic!). [...] Надеемся, что она вдохновила вас на новые творческие подходы к программированию.
Не очень понятно, какова цель вашей статьи конкретно здесь.
Криптографический Лабиринт представляет собой зашифрованный текст, который требуется раскодировать с использованием Python. Вам предоставляется строка, состоящая из букв, цифр и специальных символов. Ваша задача - разработать программу, которая раскодирует эту строку и выведет исходный текст.
Вот зашифрованный текст: 2h 2l i3s 2s1 t2ex3t
...
[объяснение решения] Ваша программа должна сначала пройтись по символам строки. Если текущий символ является числом, то это означает, что следующий символ нужно повторить столько раз, сколько указано в числе.
...а как надо догадаться, что это правильное решение? Где-то дан плейнтекст соответствующий зашифрованному? Или может быть это единственное решение, которым из зашифрованного текста получается осмысленный плейнтекст?
У меня складывается стойкое ощущение, что нейросеть здесь не только рисовала картинки, но и текст статьи писала. Живой программист никогда бы не назвал тривиальный алгоритм вычисления факториала "головоломкой".
s = "3a2b1c"
result = "" # Создаем пустую строку для хранения результата
i = 0 # Инициализируем индекс для итерации по строке
while i < len(s):
if s[i].isdigit(): # Если текущий символ - число
num = int(s[i]) # Преобразуем его в целое число
next_char = s[i + 1] # Получаем следующий символ
result += next_char * num # Добавляем следующий символ, повторенный num раз, к результату
i += 2 # Пропускаем два символа: число и следующий символ
else:
result += s[i] # Если текущий символ не число, просто добавляем его к результату
i += 1 # Переходим к следующему символу
print(result)
aaabbc
где тут ошибка?)
Щас ТС огребёт от местных снобов.
Но это же обычные задачи с семинаров, а не головоломки...
Я уж надеялся, что мне тут подкинут идей про написание головоломок на python в качестве учебных проектов.
Головоломки на Python: Увлекательный Путь к Мастерству в Программировании