Pull to refresh

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)

Ваша правда. Подумал почему-то, что set.intersection имеет О(n log n) сложность но оказывается, что нет, O(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 в качестве учебных проектов.

Sign up to leave a comment.

Articles