Требуется написать свой Bruteforce т. е. пользователь вводит какой-то пароль и программа методом перебора всех возможных вариантов находит этот пароль. Предполагается, что программа не может отработать и не найти пароль. Ограничение перебора осуществляется пользователем, т.е будут ли включены в перебор цифры, заглавные буквы, символы и т. д.
Рекомендую ограничить длину вводимого пароля до 4-х символов, больше не надо, иначе программа долго будет работать. Еще лучше, если на этапе разработки программы, длина пароля будет 2 — 3 символа. Кроме того, задайте в программе множество допустимых символов пароля. Например, в пароле могут использоваться только цифры и/или буквы, это заметно поможет ускорить процесс отладки программы-брутфорса.
Пишите свое решение в комментариях👇
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Условие задачи: дан двумерный массив, содержащий 0 (острова) и 1(воду).
Остров - множество нулей, соединенных в четырех направлениях (справа, снизу, слева, сверху), изолированый остров - множество нулей, окруженных со всех сторон единицами.
Надо посчитать количество изолированных островов.
Пример:
Ввод:
grid = [[1,1,1,1,1,1,1,0],[1,0,0,0,0,1,1,0],[1,0,1,0,1,1,1,0],[1,0,0,0,0,1,0,1],[1,1,1,1,1,1,1,0]]
Вывод: 2
Объяснение:
Ввод:
grid = [[0,0,1,0,0],[0,1,0,1,0],[0,1,1,1,0]]
Вывод: 1
Решение
Пишите свое решение в комментариях👇
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Проверить строки на шаблон можно с помощью модуля re
# re.findall() ищет все вхождения в строке
text = "He was carefully disguised but captured quickly by police."
re.findall(r"\w+ly\b", text) # ['carefully', 'quickly']
# re.match() позволяет объединять в групыы
m = re.match(r"(\d+)\.(\d+)", "24.1632")
m.groups() # ('24', '1632')
Пишите свое решение в комментариях👇
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Отсортировать строку в алфавитном порядке можно с помощью sorted()
word = 'Python'
# добавим ключ сортировки неучитывающий регистр
sorted(word, key=lambda x: x.lower()) # ['h', 'n', 'o', 'P', 't', 'y']
Пишите свое решение в комментариях👇
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Тестовое задание на позицию код-ревьюера Яндекс.Практикум
Дано
▪В файле main.py находится пример реального кода, который сдал студент к заданию.
Текст задания находится по ссылке
▪Общие требования к коду, с которыми ознакамливаются студенты, находятся по ссылке
Что нужно сделать
▪Нужно провести ревью этого кода. Найти в нем ошибки, неточности, неэффективные места, или дать какие-то необязательные рекомендации по улучшению.
▪Можно сделать форк репозитория или gist (не делайте Pull Request в этот репозиторий) и расставить комментарии над проблемными строками в main.py.
▪Учтите, что вы "ревьюите" студента, то есть не надо просто исправлять ошибки, нужно оставлять комментарии и рекомендации.
Как сдавать
▪В форме прикрепите ссылку на ваш репозиторий или на gist с комментариями.
▪Github
@python_job_interview
Дано
▪В файле main.py находится пример реального кода, который сдал студент к заданию.
Текст задания находится по ссылке
▪Общие требования к коду, с которыми ознакамливаются студенты, находятся по ссылке
Что нужно сделать
▪Нужно провести ревью этого кода. Найти в нем ошибки, неточности, неэффективные места, или дать какие-то необязательные рекомендации по улучшению.
▪Можно сделать форк репозитория или gist (не делайте Pull Request в этот репозиторий) и расставить комментарии над проблемными строками в main.py.
▪Учтите, что вы "ревьюите" студента, то есть не надо просто исправлять ошибки, нужно оставлять комментарии и рекомендации.
Как сдавать
▪В форме прикрепите ссылку на ваш репозиторий или на gist с комментариями.
▪Github
@python_job_interview
Задача с leetcode. Контейнер с наибольшим количеством воды
Дан целочисленный массив height длины n. Нарисовано n вертикальных линий, две конечные точки i-й линии равны (i, 0) и (i, height[i]). Найдите две линии, которые вместе с осью абсцисс образуют контейнер, содержащий наибольшее количество воды.
Верните максимальное количество воды, которое может храниться в контейнере. Обратите внимание, что вы не можете наклонять контейнер.
Пример 1 (картинка):
Ввод: height = [1,8,6,2,5,4,8,3,7]
Вывод: 49
Объяснение: Вышеуказанные вертикальные линии представлены массивом [1,8,6,2,5,4,8,3,7]. В этом случае максимальная площадь воды (синяя секция), которую может содержать контейнер, составляет 49.
Пример 2:
Ввод: height = [1,1]
Вывод: 1
Решение:
Пишите свое решение в комментариях👇
@python_job_interview
Дан целочисленный массив height длины n. Нарисовано n вертикальных линий, две конечные точки i-й линии равны (i, 0) и (i, height[i]). Найдите две линии, которые вместе с осью абсцисс образуют контейнер, содержащий наибольшее количество воды.
Верните максимальное количество воды, которое может храниться в контейнере. Обратите внимание, что вы не можете наклонять контейнер.
Пример 1 (картинка):
Ввод: height = [1,8,6,2,5,4,8,3,7]
Вывод: 49
Объяснение: Вышеуказанные вертикальные линии представлены массивом [1,8,6,2,5,4,8,3,7]. В этом случае максимальная площадь воды (синяя секция), которую может содержать контейнер, составляет 49.
Пример 2:
Ввод: height = [1,1]
Вывод: 1
Решение:
def maxWater(height):
first = 0
end = len(height) -1
ans = 0
while first < end: //condition applied
ans = max(ans, min(height[first], height[end]) * (first - end))
if height[first] < height[end]:
first += 1
else:
end -= 1
return ans
# Working Part
height=[5,1,3,4,6]
print(maxWater(height))
Пишите свое решение в комментариях👇
@python_job_interview
Реализовать функцию для транскодирования данных, содержащих битовые поля. В решении необходимо использовать побитовые операции. Неиспользуемые поля результата должны содержать нулевые биты.
Входные данные: Шестнадцатиричная строка.
Выходные данные: Десятичная строка.
Тесты должны получится такими:
main('0x9c7421314') = '40975081498'
main('0xa47c30bdf') = '25498361886'
main('0x10e55f488') = '44091072530'
main('0xcdaf1fffb') = '68684267543'
Решение
def transcode(h:str):
v = int(h, 16)
k1 = v & 0xf
k2 = (v >> 4) & 0x1ff
k4 = (v >> 21) & 0x1f
k5 = (v >> 26) & 0x3ff
d = k4 | (k5 << 13) | (k1 << 23)| (k2 << 27)
return str(d)
print(transcode('0x9c7421314'))
print(transcode('0xa47c30bdf'))
print(transcode('0x10e55f488'))
print(transcode('0xcdaf1fffb'))
*** Remote Interpreter Reinitialized ***
[Dbg]>>>
40975081498
25498361886
44091072530
68684267543
Пишите свое решение в комментариях👇
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Можно воспользоваться сторонними библиотеками, как например, UnicodeDammit
Но, к сожалению, однозначно узнать кодировку строки невозможно. Есть конечно определенные маркеры у кодировок
ASCII, UTF-8, UTF-16
, но, вцелом, для компьютера текст это просто какой-то набор байтов, и переводит он по таблице, где каждому набору соответствует какой-то символ. Но само собой он не понимает правильный ли для нас людей это символ, или нет.Пишите свое мнение в комментариях👇
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Задача. Поиск в повернутом отсортированном массиве
Условие задачи: дан массив, сдвинутый относительно опорного элемента, который неизвестен ( массив после сдвига относительно опорного элемента имеет следующий вид:
Массив
Необходимо осуществить поиск целевого элемента в сдвинутом массиве, определив его индекс, или же вывести -1 при его отсутствии.
Решение должно быть за O(log n) по времени.
Пример:
Ввод:
Вывод: 4
Ввод:
Вывод: -1
Решение:
@python_job_interview
Условие задачи: дан массив, сдвинутый относительно опорного элемента, который неизвестен ( массив после сдвига относительно опорного элемента имеет следующий вид:
[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]])
Массив
[0,1,2,4,5,6,7]
, имея опорный элемент 3, будет выглядеть следующим образом: [4,5,6,7,0,1,2].
Необходимо осуществить поиск целевого элемента в сдвинутом массиве, определив его индекс, или же вывести -1 при его отсутствии.
Решение должно быть за O(log n) по времени.
Пример:
Ввод:
nums = [4,5,6,7,0,1,2], target = 0
Вывод: 4
Ввод:
nums = [4,5,6,7,0,1,2], target = 3
Вывод: -1
Решение:
class Solution:
def search(self, nums: List[int], target: int) -> int:
if target in nums :
return nums.index(target)
else :
return -1
Пишите свое мнение в комментариях👇@python_job_interview
Задача. Слияние двух бинарных деревьев
Сложность: Лёгкая
Условие задачи: Даны два бинарных дерева, необходимо осуществить их наложение друг на друга и вывод результатов в новом дереве.
Примечание: Наложение представляет из себя суммирование соответствующих значений из узлов двух деревьев.
Пример:
Ввод: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
Вывод:[3,4,5,5,4,null,7]
Ввод: root1 = [1], root2 = [1,2]
Вывод: [2,2]
Решение
Напишем простую рекурсию с функцией
▪Если один из двух узлов не определен, мы можем просто вернуть другой узел.
▪Если 2 узла не определены, мы можем завершить рекурсию.
Пишите свое мнение в комментариях👇
@python_job_interview
Сложность: Лёгкая
Условие задачи: Даны два бинарных дерева, необходимо осуществить их наложение друг на друга и вывод результатов в новом дереве.
Примечание: Наложение представляет из себя суммирование соответствующих значений из узлов двух деревьев.
Пример:
Ввод: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
Вывод:[3,4,5,5,4,null,7]
Ввод: root1 = [1], root2 = [1,2]
Вывод: [2,2]
Решение
Напишем простую рекурсию с функцией
constructTree
.▪Если один из двух узлов не определен, мы можем просто вернуть другой узел.
▪Если 2 узла не определены, мы можем завершить рекурсию.
class Solution(object):
def mergeTrees(self, root1, root2):
def constructTree(root1, root2):
if not root1 and not root2:
return None
if not root2:
return root1
if not root1:
return root2
head = TreeNode(root1.val + root2.val)
head.left = constructTree(root1.left, root2.left)
head.right = constructTree(root1.right, root2.right)
return head
return constructTree(root1, root2)
Пишите свое мнение в комментариях👇
@python_job_interview
Это функция встроенноо модуля time, которая позволяет приостановить выполнение программы заданное время. В качестве аргумента принимаются float и int
time.sleep(secs)
Suspend execution of the calling thread for the given number of seconds. The argument may be a floating point number to indicate a more precise sleep time.
Пример
import time
time.sleep(3)
print('Этот текст напечатается через 3 секунды ожидания')
Пишите свое решение в комментариях👇
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Для генерации случайных чисел нужно импортировать модуль random, в котором есть несколько подходящих функций:
random() возвращает случайно число (class 'float') в диапазоне от 0.0 до 1.0 (верхняя граница не входит в диапазон).
from random import random
random() # 0.3380967837329142
random() # 0.07200652051529788
randint(start, stop) возвращает случайное число (class 'int') в диапазоне от start до stop (обе границы включены в диапазон).
from random import randint
randint(1, 7) # 4
randint(1, 7) # 2
randrange(start, stop, step) возвращает случайное число (class 'int') из последовательности от start до stop (верхняя граница не входит в диапазон) с шагом = step. Параметры start и step необязательные, по умолчанию start = 0, step = 1.
from random import randrange
randrange(4) # 1
randrange(4) # 3
random.randrange(4, 10) # 6
random.randrange(4, 10) # 9
random.randrange(4, 10, 2) # 4
random.randrange(4, 10, 2) # 8
#junior
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔑 Задача Ключи и комнаты
Условие: Даны n комнат проиндексированных с 0, все они закрыты кроме комнаты с номером 0. Необходимо посетить все комнаты, однако этого нельзя сдеать не имея ключа от соответствующей закрытой двери.
При посещении какой-либо комнаты в ней находится определенная связка уникальных ключей, номер ключа означет номер комнаты, для которой он отпирает дверь. Можно использовать сразу все связку ключей.
На вход подается массив комнат, где в i-ячейке дан список ключей, находящихся в текущей комнате. Необходимо определеть, можно ли обойти все комнаты.
Сложность: Средняя
Пример:
Ввод: rooms = [[1],[2],[3],[]]
Вывод: true
Объяснение: из 0 комнаты можно попасть в 1, из 1 во 2, из 2 в 3.
Ввод: rooms = [[1,3],[3,0,1],[2],[0]]
Вывод: false
Пишите свое решение в комментариях👇
📌 Решение
@python_job_interview
Условие: Даны n комнат проиндексированных с 0, все они закрыты кроме комнаты с номером 0. Необходимо посетить все комнаты, однако этого нельзя сдеать не имея ключа от соответствующей закрытой двери.
При посещении какой-либо комнаты в ней находится определенная связка уникальных ключей, номер ключа означет номер комнаты, для которой он отпирает дверь. Можно использовать сразу все связку ключей.
На вход подается массив комнат, где в i-ячейке дан список ключей, находящихся в текущей комнате. Необходимо определеть, можно ли обойти все комнаты.
Сложность: Средняя
Пример:
Ввод: rooms = [[1],[2],[3],[]]
Вывод: true
Объяснение: из 0 комнаты можно попасть в 1, из 1 во 2, из 2 в 3.
Ввод: rooms = [[1,3],[3,0,1],[2],[0]]
Вывод: false
Пишите свое решение в комментариях👇
📌 Решение
@python_job_interview
Проверить строки на шаблон можно с помощью модуля re
# re.findall() ищет все вхождения в строке
text = "He was carefully disguised but captured quickly by police."
re.findall(r"\w+ly\b", text) # ['carefully', 'quickly']
# re.match() позволяет объединять в групыы
m = re.match(r"(\d+)\.(\d+)", "24.1632")
m.groups() # ('24', '1632')
Пишите свое решение в комментариях👇
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Компания по производству видеоигр ежемесячно публикует на своем сайте несколько бесплатных игр. Вы хотите создать скрипт, который будет уведомлять вас о релизах. Но игры выходят без привязки к датам: они появляются на сайте в первый вторник месяца.
Напишите функцию, которая будет принимать год и номер месяца и возвращать строку с датой, когда станут доступны новые игры.
Примечание: месяцы считаем по порядку, 1 = январь.
Примеры:
first_tuesday_of_the_month(1997, 1) ➞
"1997-01-07"
first_tuesday_of_the_month(2021, 2) ➞
"2021-02-02"
first_tuesday_of_the_month(2023, 3) ➞
"2023-03-03"
Пишите свое решение в комментариях👇
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
📚 Книга с разбором популярных вопросов и ответов при собеседовании на позицию Python-developera.
▪Книга
@python_job_interview
▪Книга
@python_job_interview
При работе со списками в Python существует два подхода. Первый – это изменить имеющийся список. Говорят, отсортировать по месту:
>>> nums = [5, 3, 4, 1, 2]
>>> nums.sort()
>>> nums
[1, 2, 3, 4, 5]
>>>
Второй способ – создать новый массив с упорядоченными элементами:
>>> nums = [5, 3, 4, 1, 2]
>>> sorted(nums)
[1, 2, 3, 4, 5]
>>> nums # в исходном списке порядок элементов сохранился
[5, 3, 4, 1, 2]
>>>
Пишите свое решение в комментариях👇
#junior
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🧮 Задача: Abelian sandpiles
Смоделируйте гравитацию, действующую на кучу песка.
Напишите функцию apply_gravity, которая, учитывая двумерный массив numpy, представляющий песок, будет "применять гравитацию" к нему (и ничего не вернет):
1. Каждый элемент массива представляет собой целое число, отражающее высоту кучи песка.
2. Любая "куча", в которой находится 4 или более частиц песка, разрушается, в результате чего четыре частицы вычитаются из кучи и распределяются между ее соседями.
Решение:
Ресурсы
Бонус!
Используйте matplotlib для отображения результата в виде изображения:
Чтобы продемонстрировать результаты, вычислите кучу песка размером 2 ** 24 песчинки
Ваше мнение пишите в комментариях 👇
@python_job_interview
Смоделируйте гравитацию, действующую на кучу песка.
Напишите функцию apply_gravity, которая, учитывая двумерный массив numpy, представляющий песок, будет "применять гравитацию" к нему (и ничего не вернет):
1. Каждый элемент массива представляет собой целое число, отражающее высоту кучи песка.
2. Любая "куча", в которой находится 4 или более частиц песка, разрушается, в результате чего четыре частицы вычитаются из кучи и распределяются между ее соседями.
Решение:
>>> import numpy as np
>>> sandpile = np.zeros((5, 5), dtype=np.uint32)
>>> sandpile[2, 2] = 16
>>> apply_gravity(sandpile)
>>> print(sandpile)
[[0 0 1 0 0]
[0 2 1 2 0]
[1 1 0 1 1]
[0 2 1 2 0]
[0 0 1 0 0]]
Ресурсы
Бонус!
Используйте matplotlib для отображения результата в виде изображения:
apply_gravity(sandpile)
plt.imshow(sandpile)
plt.show()
Чтобы продемонстрировать результаты, вычислите кучу песка размером 2 ** 24 песчинки
Ваше мнение пишите в комментариях 👇
@python_job_interview