Viktor
глянем.
Viktor
А по-моему Яндекс уже не тот. У меня вчера приняли нерабочее решение на интервью ^_^
ну там ж по мелочи была ошибка, или прямо сам алгоритм не рабочий?
Andrey
Задачу, кстати, так и не смог найти на литкоде. Нужно было найти в массиве пару, дающую минимальное произведение. За N^2 очевидно, за нормальное время я не могу придумать лаконичного решения. То, что мне удалось подсунуть на интервью, не так и не получилось заставить работать.
Viktor
нормально так ты продал.
Andrey
def find_min_prod_opt(lst: List[int]): if len(lst) < 2: raise ValueError("Empty list") a, b = lst[0], lst[1] current_min = a * b for x in lst[2:]: prod_a = a * x prod_b = b * x prod_min = min(prod_a, prod_b) current_min = min(prod_min, current_min) return current_min
Andrey
Это решение может давать правильный результат на некоторых данных :)
Andrey
Отрицательные тоже, в этом и проблема
Viktor
Отрицательные тоже, в этом и проблема
а нельзя найти за первый проход минимальное число, за второй проход минимально положительное?
Viktor
а нельзя найти за первый проход минимальное число, за второй проход минимально положительное?
я не очень понял определение «минимального произведения», видимо.
Ilia
На [1, 2, 3, 4] все ок, c [1, 2, 3, -4] уже беда
Я чет туплю, но здесь все сработать должно, минимальное будет -12 же?
Viktor
Ilia
И сохранять максимальные отрицательные
Viktor
похоже, что есть действительно две ситуации, которые надо отдельно обработать. и там и там линия.
Ilia
Первое проверить что есть положительные числа или все отрицательные
Ilia
Второе найти нужное
Ilia
А, ну все равно два прохода
Andrey
Вот так будет правильно, но медленно: data = [1,2,3,-4] result = min([a * b for a, b in itertools.combinations(data,2)])
Andrey
А, ну все равно два прохода
Я пока не понял твоего подхода
Ilia
Я пока не понял твоего подхода
Первый проход проверяешь есть ли положительные числа
Ilia
Дальше вилка условий
Ilia
Если есть, то ищешь максимальное положительные и минимальное отрицательное
Ilia
Если нет, то два максимальных отрицательных дадут минимальное положительное при перемножении
Andrey
Да, теперь понятно. Но это будет прям много ветвлений, и как-то некрасиво выходит. Но принцип понятен
Ilia
Зато О(N) :)
Andrey
Кстати, а что вы думаете насчет видеозаписи интервью кандидатом? Например, для разбора своих ошибок потом. Многие ли компании дадут согласие?
Ilia
мне кажется, что никто не согласится, но это никому не мешает записывать
+. Сливают же на ютуб, правда вырезают потом все данные относительно компании и собеседующих(если не вырезают - получают страйки). В ру сегменте могу привести пример archakov blog
Ivan
Потому что негромоздил такого😱 Даже optional применил (писал на плюсах)
Ivan
Но зато линия в один проход!
Ivan
Когда есть желание написать за линию в один проход, нужно грамотно выбрать, какие преобразования от просматриваемых текущих переменных будешь сохранять. Для этого нужно уловить все кейсы. Возможно, деление будет избыточным, и некоторые из них желательно объединить. У меня деление на кейсы было избыточным + я изначально выбрал не лучший вариант сбора различной инфы во время цикла. В итоге тело цикла получилось в виде нагромождения if-ов. Лучше на это не смотреть.
Andrey
Я уверен, что такая открытость была бы только на руку hr-бренду компании
Ilia
А почему не согласился бы в большой?
Риск раскрытия стандартов собеседования и риск того, что ко мне придут потом и спросят: а с хера ли? :) У нас итак в компанию невысокий уровень знаний нужен на полкозули, так если это ещё и гроккать начнут, то совсем повеситься можно будет он оверпрайснутых людей
Ivan
Вот и у меня тоже пока только жуткие нагромождения получаются :(
Посмотрим, как будет по мере набивания руки...
Alex Azarov
https://arxiv.org/pdf/2110.01111.pdf Abstract We present an extremely simple sorting algorithm. It may look like it is obviously wrong, but we prove that it is in fact correct. We compare it with other simple sorting algorithms, and analyse some of its curious properties.
Viktor
https://arxiv.org/pdf/2110.01111.pdf Abstract We present an extremely simple sorting algorithm. It may look like it is obviously wrong, but we prove that it is in fact correct. We compare it with other simple sorting algorithms, and analyse some of its curious properties.
Ага, читал. Больше всего мне понравилось, что он «открыл» его случайно, допустив опечатку в индексах 😆
V
а где вы натыкаетесь на такие статьи?
Viktor
а где вы натыкаетесь на такие статьи?
Мне переслали в личку. Я думаю на хакерньюз было или типа того, поэтому завирусился.
V
а вы читаете что-то на сабстеке?
Viktor
а вы читаете что-то на сабстеке?
не, я даже не знал пока не загуглил. стоит?
Alex Azarov
https://blog.pragmaticengineer.com/ Не совсем сабстэк но интересно
Alex Azarov
А хотя стоп, у него как раз на сабстэке подписка
V
не, я даже не знал пока не загуглил. стоит?
а хз. я узнал о нем только из-за того, что иногда читаю каких-то чуваков из less wrong, а они стали переезжать на сабстек https://astralcodexten.substack.com/
V
https://blog.pragmaticengineer.com/ Не совсем сабстэк но интересно
о, это же тот чувак, от кого я узнал про три тира зарплат!
Порридж В Ко-ливинге
А ещё ты оценишь. на конфе меня @deniil112 узнал, как человека "из чатика Виктора Карпова". вот до чего твой чатик доводит :))
"Я знаю человека из Администрации президента" == "Я знаю человека из чатика Виктора Карпова"
Alex Azarov
Вот ещё интересный блог, чел в 2006 году писал про стартапы хотя тогда даже айфонов не было http://www.paulgraham.com/mit.html
Порридж В Ко-ливинге
А по-моему Яндекс уже не тот. У меня вчера приняли нерабочее решение на интервью ^_^
Это всегда так было, так делают алекватные интервьюеры. Неадекватный бы копипастил бы код в компилятор, и говорил "есть ошибка, ищи". А когда волнуешься ну хер заметишь условную пробущенную точку с запятой/не ту переменную/не тот метод
Порридж В Ко-ливинге
Вот ещё интересный блог, чел в 2006 году писал про стартапы хотя тогда даже айфонов не было http://www.paulgraham.com/mit.html
Пхаха, "стартапы" были еще в 1999. Кто думаешь пузырь доткомов надувал?)
Порридж В Ко-ливинге
def find_min_prod_opt(lst: List[int]): if len(lst) < 2: raise ValueError("Empty list") a, b = lst[0], lst[1] current_min = a * b for x in lst[2:]: prod_a = a * x prod_b = b * x prod_min = min(prod_a, prod_b) current_min = min(prod_min, current_min) return current_min
Вообще судя по коду кажется дыже банальные тесты не проходит. Вроде бы надо просто найти 4 числа и перемнодить их, вот алгоритм: (0) Если меньше 2ух элементов, то вывести ошибку (1) Найти наибольшее по модулю отрицательное умножить на наибольшее по модулю положительное (2) найти перемножить 2 наименьших по модулю числа (3) Найти наименьшее среди выше перечисленных Почему работает? У нас 4 сценария: 1. Элементов меньше 2ух, сработает часть алгоритма (0) 2. Все положительные или отрицательные, произведение всегда положительное, нужно минимальное число, сработает часть алгоритма (2) 3. Есть положительные и отрицательные, значит наим возможное число будет отрицательным, сработает часть алгоритма (1)
TheHesoyam
Вот ещё интересный блог, чел в 2006 году писал про стартапы хотя тогда даже айфонов не было http://www.paulgraham.com/mit.html
Интересная статья. В очередной раз подтвердил что больше теряю работая на кого-то чем когда что-то ранишь
Порридж В Ко-ливинге
Порридж В Ко-ливинге
Хантят всей страной 🤣
Anonymous
Подскажите, пожалуйста, как такую функцию сделать можно? Чтобы можно было подписаться на on и если выполнилось что-то внутри функции, мы попадали в ‘hash’, если что-то ещё, то в receipt, если же ошибка, то в error. Я так понимаю, что это как-т она промисах можно реализовать? send() .on('hash', (hash) => { }) .on('receipt', (receipt) => { }) .on('error', (error) => { });
Lynn «Кофеман»
Промисы вообще мимо. Это Event Emitter https://nodejs.org/api/events.html
Lynn «Кофеман»
Паттерн не специфичен для ноды, но в ней используется повсеместно.
Anonymous
а на фронте как? и может есть пример?
Viktor
а на фронте как? и может есть пример?
мне кажется вот один-в-один интерфейс, который тебе нужен — https://github.com/developit/mitt , можно там реализацию почитать и взять себе. ну или всю библиотеку, если тебе не обязательно это реализовывать самому.
Anonymous
спасибо, посмотрю
Viktor
спасибо, посмотрю
а какой контекст вопроса, это какая-то реальная задача или собес?
Viktor
просто это один из классических вопросов для собеседований, потому что там 100 строк кода и она прекрасно укладывается в формат интервью.
Anonymous
не совсем подошёл пакет mitt на сколько я понял. У меня просто есть логика в проекте завязанная на вызов web3 контракта https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#id37 там получается внутри вызывается метод send() и далее слушает ивенты типа send().on('transactionHash', function(hash){ ... }) .on('confirmation', function(confirmationNumber, receipt){ ... }) вот мне надо было что-то подобное сделать из моей кастомной функции, чтобы можно было в существующую логику свою кастомную функцию передать и чтобы всё корректно работало
Viktor
что-то я не понял, это ж обычный event emitter, то есть интерфейс, который как реализован web3 должно быть пофигу.
Viktor
мне кажется тебе нужно сделать шаг назад, дать больше контекста какую задачу решаешь.
Viktor
пока звучит как ты берёшь mitt, вызываешь mitt() и передаёшь «будто бы это send» → и должно работать.