🛒 Разбор задачи с собеседования Магнит OMNI:
Увидел в соседнем канале разбор задач с собеседования в Магнит OMNI и одна задачка была не разобрана и она показалось мне очень интересной — решил разобрать ее здесь, думаю многим будет полезно.
Условия задачи (это секция на языке Python): ✅
• Представим что вы пришли в кинотеатр зал которого состоит только из одного ряда.
• Вы хотите сидеть максимально далеко от других зрителей
• Напишите функцию которая принимает на вход список мест в виде 0/1 и возвращает расстояние от оптимального места до ближайшего соседа
• Гарантируется что есть свободные места и хотя бы один зритель
Пример того, как должна работать итоговая функция:
func([1, 0, 1]) == 0
func([1, 0, 0, 0, 0, 1]) == 1
func([1, 0, 0, 0, 0, 1, 0, 0, 0, 0]) == 3
func([0, 0, 0, 0, 0, 1, 0, 0, 0, 1]) == 4
Разбор задачи по шагам: ✅
Я сразу покажу вам решение, чтобы мы его разобрали.
def func(seats):
occupied = [i for i, seat in enumerate(seats) if seat == 1]
best = []
for i, seat in enumerate(seats):
if seat == 0:
dist = min(abs(i - j) - 1 for j in occupied)
best.append(dist)
return max(best)
Давайте разбираться, что здесь происходит:
1) Сначала проходимся по списку и находим места, которые заняты:
occupied = [i for i, seat in enumerate(seats) if seat == 1]
То есть мы проверяем, если значение равно 1, то это место занято и мы сохраним индекс этого места в списке
2) Далее посмотрим все не занятые места и найдем для каждого из них минимальное расстояние до занятого места и вычтем единицу и будем добавлять эти расстояния в список:
for i, seat in enumerate(seats):
if seat == 0:
dist = min(abs(i - j) - 1 for j in occupied)
best.append(dist)
3) Отлично, теперь остается взять наибольшее значение из списка и получить ответ:
return max(best)
Итог: 🤩
🍸 Сохраняйте пост, чтобы успешно пройти собеседование
❓ Как бы решили вы? Делать еще подобные разборы? Делитесь в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.
🚬 Готовлю вас к собесам и пишу резюме здесь: mentor.dima-sqlit.ru
@dima_sqlit
Увидел в соседнем канале разбор задач с собеседования в Магнит OMNI и одна задачка была не разобрана и она показалось мне очень интересной — решил разобрать ее здесь, думаю многим будет полезно.
Условия задачи (это секция на языке Python): ✅
• Представим что вы пришли в кинотеатр зал которого состоит только из одного ряда.
• Вы хотите сидеть максимально далеко от других зрителей
• Напишите функцию которая принимает на вход список мест в виде 0/1 и возвращает расстояние от оптимального места до ближайшего соседа
• Гарантируется что есть свободные места и хотя бы один зритель
Пример того, как должна работать итоговая функция:
func([1, 0, 1]) == 0
func([1, 0, 0, 0, 0, 1]) == 1
func([1, 0, 0, 0, 0, 1, 0, 0, 0, 0]) == 3
func([0, 0, 0, 0, 0, 1, 0, 0, 0, 1]) == 4
Разбор задачи по шагам: ✅
Я сразу покажу вам решение, чтобы мы его разобрали.
def func(seats):
occupied = [i for i, seat in enumerate(seats) if seat == 1]
best = []
for i, seat in enumerate(seats):
if seat == 0:
dist = min(abs(i - j) - 1 for j in occupied)
best.append(dist)
return max(best)
Давайте разбираться, что здесь происходит:
1) Сначала проходимся по списку и находим места, которые заняты:
occupied = [i for i, seat in enumerate(seats) if seat == 1]
То есть мы проверяем, если значение равно 1, то это место занято и мы сохраним индекс этого места в списке
2) Далее посмотрим все не занятые места и найдем для каждого из них минимальное расстояние до занятого места и вычтем единицу и будем добавлять эти расстояния в список:
for i, seat in enumerate(seats):
if seat == 0:
dist = min(abs(i - j) - 1 for j in occupied)
best.append(dist)
3) Отлично, теперь остается взять наибольшее значение из списка и получить ответ:
return max(best)
Итог: 🤩
🍸 Сохраняйте пост, чтобы успешно пройти собеседование
❓ Как бы решили вы? Делать еще подобные разборы? Делитесь в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.
🚬 Готовлю вас к собесам и пишу резюме здесь: mentor.dima-sqlit.ru
@dima_sqlit