Задача о горном массиве
Вам даётся массив целых чисел
Существует некий
Дополнительное условие:
Для проверки:
#задача
@zen_of_python
Вам даётся массив целых чисел
arr
. Напишите функцию check_mountain()
, которая проверит ряд на последовательное увеличение, затем снижение (смотри картинку).Существует некий
i
при условии 0 < i < arr.length - 1
, чтобы:- arr[0] < arr[1] < ... < arr[i - 1] < arr[i]
- arr[i] > arr[i + 1] > ... > arr[arr.length - 1]
Дополнительное условие:
arr.length >= 3
Для проверки:
>>> arr = [3,5,5]
>>> check_mountain(arr)
... False
#задача
@zen_of_python
Telegram
Zen of Python
Полный Дзен Пайтона в одном канале
Разместить рекламу: @tproger_sales_bot
Правила общения: https://tprg.ru/rules
Другие каналы: @tproger_channels
Сайт: https://tprg.ru/site
Регистрация в перечне РКН: https://tprg.ru/xZOL
Разместить рекламу: @tproger_sales_bot
Правила общения: https://tprg.ru/rules
Другие каналы: @tproger_channels
Сайт: https://tprg.ru/site
Регистрация в перечне РКН: https://tprg.ru/xZOL
👍5
Поздравляем победителей
Задачу про поворот изображения верно решили:
— @Cheshir78;
— @ipipe_host;
— @savelevgeo;
— @vsugoyak;
— Cool and Fun Python (@Python3k).
Кратчайшие верные решения предложили @Cheshir78:
и @ipipe_host:
Отдельный респект @Python3k за решение, которое понятно на любом уровне Py-знания:
#задача
@zen_of_python
Задачу про поворот изображения верно решили:
— @Cheshir78;
— @ipipe_host;
— @savelevgeo;
— @vsugoyak;
— Cool and Fun Python (@Python3k).
Кратчайшие верные решения предложили @Cheshir78:
def flip(image):
return [[1 - x for x in row[::-1]] for row in image]
и @ipipe_host:
def flip(image):
return [[abs(j - 1) for j in i[::-1]] for i in image]
Отдельный респект @Python3k за решение, которое понятно на любом уровне Py-знания:
def flip(image: list[list[int]]) -> list[list[int]]:
"""Поворот изображения."""
n = len(image)
for row in image:
row.reverse()
for i in range(n):
row[i] = 1 - row[i]
return image
# пример работы
image = [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
flipped_image = flip(image)
for row in flipped_image:
print(row)
#задача
@zen_of_python
👍6🍾2🍌1
Задача об email
Адрес электронной почты состоит из локального и доменного имён, разделённых знаком «@». Помимо строчных букв, электронное письмо может содержать один или несколько символов «.» (точка) или «+» (плюс).
Например, в «alice@tproger.ru» alice — это локальное имя, а tproger.ru — доменное. Если вы добавите точки '.' в локальное имя (например, al.ice), почта все равно полетит на тот же адрес alice.
Если вы добавите + в локальное имя, все, что находится после первого такого плюса, будет игнорироваться. Это позволяет фильтровать определённые письма. Например, письмо на m.y+name@email.com будет перенаправлено на my@email.com».
NB! эти правила не распространяются на доменные имена. Возможно использование обоих этих правил одновременно.
Напишите функцию, которая принимает список почт и рассчитывает количество различных адресов, которые фактически получают почту.
Объяснение: из перечисленных адресов только testemail@tproger.ru и "testemail@tproger.ru" действительно получат письма.
#задача
@zen_of_python
Адрес электронной почты состоит из локального и доменного имён, разделённых знаком «@». Помимо строчных букв, электронное письмо может содержать один или несколько символов «.» (точка) или «+» (плюс).
Например, в «alice@tproger.ru» alice — это локальное имя, а tproger.ru — доменное. Если вы добавите точки '.' в локальное имя (например, al.ice), почта все равно полетит на тот же адрес alice.
Если вы добавите + в локальное имя, все, что находится после первого такого плюса, будет игнорироваться. Это позволяет фильтровать определённые письма. Например, письмо на m.y+name@email.com будет перенаправлено на my@email.com».
NB! эти правила не распространяются на доменные имена. Возможно использование обоих этих правил одновременно.
Напишите функцию, которая принимает список почт и рассчитывает количество различных адресов, которые фактически получают почту.
>>> emails = ["test.email+alex@tproger.com","test.e.mail+bob.cathy@tproger.ru","testemail+david@t.proger.ru"]
>>> count_emails()
... 2
Объяснение: из перечисленных адресов только testemail@tproger.ru и "testemail@tproger.ru" действительно получат письма.
#задача
@zen_of_python
👍4❤1😁1
Поздравляем победителей
Задачу о горном массиве верно решили:
— @ganrre;
— Sergey;
— @v1ktoriia_romanova;
— @sidor0912;
— @vsugoyak.
Кратчайшие верные решения предложили @sidor0912:
и @vsugoyak:
#задача
@zen_of_python
Задачу о горном массиве верно решили:
— @ganrre;
— Sergey;
— @v1ktoriia_romanova;
— @sidor0912;
— @vsugoyak.
Кратчайшие верные решения предложили @sidor0912:
check_mountain = lambda a: all((len(i)>1 and i == sorted(set(i)) for i in (a[:a.index(max(a))+1], a[len(a)-1:a.index(max(a))-1:-1])))
и @vsugoyak:
def check_mountain(arr):
return all([arr[nm-1]<arr[nm] for nm in range(1,len(arr))])
#задача
@zen_of_python
👍3🍾1
Поздравляем победителей
Задачу про email верно решили:
—@Indiv06;
— @nxiqns;
— @vsugoyak;
— @flydzen;
— @sidor0912.
Кратчайшее верное решение предложил @@flydzen:
#задача
@zen_of_python
Задачу про email верно решили:
—@Indiv06;
— @nxiqns;
— @vsugoyak;
— @flydzen;
— @sidor0912.
Кратчайшее верное решение предложил @@flydzen:
def count_emails(emails: list[str]) -> int:
return len({(sp[0].replace('.', '').split('+')[0], sp[1]) for m in emails if (sp := m.split('@'))})
#задача
@zen_of_python
🔥2👍1
Задача о частом числе
На входе — массив целых чисел, отсортированный в порядке возрастания, и в нем есть ровно одно целое число, которое встречается чаще в 25% случаев. Напишите функцию find_frequent_num(), которая найдёт это число.
#задача
@zen_of_python
На входе — массив целых чисел, отсортированный в порядке возрастания, и в нем есть ровно одно целое число, которое встречается чаще в 25% случаев. Напишите функцию find_frequent_num(), которая найдёт это число.
>>> arr = [1,2,2,6,6,6,6,7,10]
>>> find_frequent_num(arr)
... 6
#задача
@zen_of_python
🌚1
Задача о счастливом числе
На входе матрица m x n различных чисел. Создайте функцию find_luckiest_number(), которая вернет счастливое число — такой элемент, который является минимальным в своей строке и максимальным в своём столбце.
Объяснение: 12 — минимальное число в своем ряду № 4 и максимальное в столбце № 4.
#задача
@zen_of_python
На входе матрица m x n различных чисел. Создайте функцию find_luckiest_number(), которая вернет счастливое число — такой элемент, который является минимальным в своей строке и максимальным в своём столбце.
>>> matrix = [[1,10,4,2],[9,3,8,7],[15,16,17,12]]
>>> find_luckiest_number(matrix)
... 12
Объяснение: 12 — минимальное число в своем ряду № 4 и максимальное в столбце № 4.
#задача
@zen_of_python
❤2
Поздравляем победителей
Задачу о счастливом числе верно решили:
— @Metimol;
— @longcompetition;
— Sergey;
— @xpos587;
— @vsugoyak;
Кратчайшее верное решение предложил @vsugoyak:
Отдельный респект @longcompetition за решения с учётом временной сложности алгоритма. Самое то для новичков в этой теме.
#задача
@zen_of_python
Задачу о счастливом числе верно решили:
— @Metimol;
— @longcompetition;
— Sergey;
— @xpos587;
— @vsugoyak;
Кратчайшее верное решение предложил @vsugoyak:
def find_luckiest_number(matrix):
return ls[0] if len(ls:=[mn for arr in matrix if (mn:=min(arr)) == max(matrix[el][arr.index(mn)] for el in range(len(matrix)))])>0 else None
Отдельный респект @longcompetition за решения с учётом временной сложности алгоритма. Самое то для новичков в этой теме.
#задача
@zen_of_python
👍4🍾2
Задача о Р̶о̶с̶с̶т̶а̶т̶е̶ зарплатах
Вам дан массив уникальных целых чисел, где salary[i] — это зарплата i-го сотрудника.
Напишите функцию, которая вернёт среднюю зарплату сотрудников без учёта минимальной и максимальной зарплаты.
Для теста:
#задача
@zen_of_python
Вам дан массив уникальных целых чисел, где salary[i] — это зарплата i-го сотрудника.
Напишите функцию, которая вернёт среднюю зарплату сотрудников без учёта минимальной и максимальной зарплаты.
Для теста:
>>> salaries = [4000,3000,1000,2000]
>>> get_mean_salary(salaries)
... 2500
#задача
@zen_of_python
❤1
Поздравляем победителей
Задачу о повороте матрицы верно решили:
— @Python3k;
— @erg_y;
— @vsugoyak.
Кратчайшее верное решение предложил @vsugoyak:
#задача
@zen_of_python
Задачу о повороте матрицы верно решили:
— @Python3k;
— @erg_y;
— @vsugoyak.
Кратчайшее верное решение предложил @vsugoyak:
def turn_matrix(grid, k):
return [[grid[(place:=(_n+(n:=len(grid[0]))*_m-k))%(n*len(grid))//n][place%n] for _n in range(len(grid[0]))] for _m in range(len(grid))]
#задача
@zen_of_python
🍾1
Задача о расстоянии между массивами
На входе два массива
Расстояния определяется как количество элементов
Для проверки:
Объяснение:
#задача
@zen_of_python
На входе два массива
arr1
и arr2
и целое число d
. Напишите функцию find_arr_distance()
, которая вернёт расстояние между двумя массивами. Расстояния определяется как количество элементов
arr1[i]
таких, что не существует элемента arr2[j]
, где arr1[i] - arr2[j]| <= d
.Для проверки:
>>> arr1 = [4,5,8],
>>> arr2 = [10,9,1,8]
>>> d = 2
>>> find_arr_distance(arr1, arr2, d)
... 2
Объяснение:
Для arr1[0]=4 имеем:
|4-10|=6 > d=2
|4-9|=5 > d=2
|4-1|=3 > d=2
|4-8|=4 > d=2
Для arr1[1]=5 имеем:
|5-10|=5 > d=2
|5-9|=4 > d=2
|5-1|=4 > d=2
|5-8|=3 > d=2
Для arr1[2]=8 имеем:
|8-10|=2 <= d=2
|8-9|=1 <= d=2
|8-1|=7 > d=2
|8-8|=0 <= d=2
#задача
@zen_of_python
❤1
Задача о Рокфеллере
Вам дан тензор с суммами на счетах, где account[i][j] — это сумма денег, которую имеет i-й клиент в j-м банке.
Напишите функцию find_richest(), которая найдет Рокфеллера — самого богатого клиента.
Для проверки:
#задача
@zen_of_python
Вам дан тензор с суммами на счетах, где account[i][j] — это сумма денег, которую имеет i-й клиент в j-м банке.
accounts = [[1,2,5],[3,6,1]]
У 1-го клиента два счета на сумму 4 (1 + 3)
У 2-го — 8 (2 + 6)
У 3-го — 6 (5 + 1)
Напишите функцию find_richest(), которая найдет Рокфеллера — самого богатого клиента.
Для проверки:
>>> accounts = [[1,2,5],[3,6,1]]
>>> find_richest(accounts)
... 2
#задача
@zen_of_python
🔥4👍1🍌1