За Тимофея Федоровича Хирьянова лайк! А по самому собесу, красноречием человек обладает, но знании как по мне не хватает для Джуна, с учётом того что сейчас на одну позицию тысяча откликов.
Лучше не придумал) def process_string(string: 'str') -> str: """ Функция process_string принимает на вход строку и обрабатывает ее следующим образом: 1. Проверяет, пустая ли строка. Если строка пустая, она возвращает исходную строку. 2. Создает новую строку и счетчик длины символов (len_chars). 3. Проходит по всем символам в строке, кроме последнего. Если текущий символ равен следующему, увеличивает счетчик длины символов. 4. Если текущий символ не равен следующему, добавляет текущий символ и счетчик длины символов в новую строку. Сбрасывает счетчик длины символов до 1. 5. Добавляет последний символ строки и его счетчик длины символов в новую строку. 6. Возвращает новую строку. """ if not string: return string
new_string = '' len_chars = 1 for i in range(len(string) - 1): if string[i] == string[i+1]: len_chars += 1 else: new_string += string[i] + str(len_chars) len_chars = 1 new_string += string[-1] + str(len_chars) return new_string
Сперва пытаюсь сам решить задачу, потом досматриваю и смотрю коменты. Пришлось пару часов голову ломать и получил вот это: def charnum(st:str)->str: p=0 answ='' for i in range(len(st)): if i>=p : k=0 while (i+k)
Ты забыл 1 условие. Если ответ не короче оригинала, нужно вернуть оригинал. Я решал несколько иначе, но не суть. Пошел я найти подобную задачу на CodeWar, сделал и кодер и декодер на очень схожую задачу. После решения откывают доступ к решениям и как же я был приятно удивлен решению с помощью REG-EX: from re import sub def encode(s: str) -> str: answer = sub(r'(.)\1*', lambda m: m.group(1) + str(len(m.group(0))), s) return (s, answer)[len(answer) < len(s)] # последнюю строку можно заменить на более читаемый код типа: return answer if len(answer) < s else s # но мне нравится мой вариант в оригинале, это для ценителей однострочников
че-то перемудрил, рекомендую побольше алгосов порешать, потому что видно, что решение сыровато. у яндекса есть тренировки по алгоритмам, хорошая штука def compress(s): if len(s) == 0: return '' res = '' count = 1 cur = s[0] for i in range(1, len(s)): if s[i] != cur: res += f'{cur}{count}' cur = s[i] count = 1 else: count += 1 res += f'{cur}{count}' return s if len(s)
Весьма и весьма неплохо, как по мне. Теория - ну, не "отлично", но для стажера/джуна-, я думаю, точно сойдет. И чувствуется "огонь в глазах", и "шило в жопе" - что крайне неплохо. Код пишет достаточно бодро. Отдельный плюс за то, что слету написал синтаксис фильтрации для компрехеншена и еще плюс за использование нижнего подчеркивания для незначащей переменной. Но и тут сразу минус - тезис касательно нижнего подчеркивая озвучил верно, а дальше сам же и использовал переменную - при создании очередного элемента списка. Эту штуку нужно применять в тех случаях, когда действие в цикле НЕ зависит от текущего элемента итератора. Также найс, что сразу же про map() вспомнил. Хоть и пытался применить его неправильно. Что не понравилось - постоянное "могу попробовать угадать" или "так глубо не копал" и тд, вместо обычного "не знаю". Мб для HR'ов это и норм, но меня это реально триггерит, когда человек начинает увиливать. Также из минусов я бы выделил "болтливость". Нет, поговорить/пошутить/обсудить - это, конечно, в разы лучше, чем молчать, но тут он перегибает в некоторых местах. Больше похоже не на "болтливость", а на попытку оправдаться. А это не есть гуд. Все это можно одним моментом описать: когда он добавил range в цикле, то он произнес "опять генератор, между прочим". range - не генератор. И даже не итератор. Зачем нужна была эта фраза? Чтобы набить себе очков? Проблема подобного подхода в том, что если ты ошибаешься, то это куда хуже, чем если бы ты просто сказал "не знаю" или вообще ничего не сказал. То есть попытка "не упасть в грязь лицом" / "доказать, что он равный собеседнику, а какой-то залетный". В ту же степь и про тернарный оператор. Как и про Хирьянова. Вот из-за подобных моментов общее впечатление и портится. И чем больше его слушаешь, тем чаще это подмечаешь, тем сильнее ... in len(some_str) - итерирование по инту? Это прям жирнющий минус. Причем даже ИДЕ писала об этом. Тут сразу бы стоило задать вопрос насчет итераторов, итерируемых объектов и в целом о том, как устроен цикл for в питоне. Ну и интервьюер тоже хорош в этом плане "нет тела цикла". Ну тут прям фиаско для обоих. Хоть потом поправился. Ну да ладно. А вот по решению задачки сразу не зачет: не имея решения задачи в голове, он пытался писать код. Вот эти постоянные метания от индекса к элементу, какие-то промежуточные переменные и тд. Хотя стоило бы просто сформировать алгоритм решения в голове, а потом просто написать код. Да и в дальнейшем не рассмотрел корнер кейсы, получил квадратичную сложность, потенциальный IndexError и тд. Задачку зачесть тут явно нельзя, хотя и можно сказать, что для некоторых кейсов он ее решил. Ну а их финальная версия упадет, как минимум, на пустой строке. По итогу - хз, дело в остальных собесах или где - но мне, в целом, понравились ответы. Да, ему явно нужно начать лезть под капот и смотреть, как все там устроено: и генераторы, и итераторы, и range, и цикл for, и хэшмапы, и тд. Также всю эту "болтливость" нужно крайне сильно отрефакторить. Ну и поднаточить алгосы и решение задачек. Но в итоге на стажера/джуна- тянет, ИМХО. Хотя и нужен будет присмотр.
Слишком много вопросов к кандидату: Про дипкопи на вторую часть вопроса не ответил Если нарешать хотя бы пару десятков задач на литкоде или кодворсах, вопросов о том, какие индексы включаются в слайс, а какие нет, быть не может. Непонимание того, как работают словари и сеты, зачем там нужна хеш функция Конструкция _ for _ in range сильно триггернула, т.к. она показывает полное незнание предназначения андерскора, а заявление о том что она экономит память - аж вдвойне. Незнание генераторов и генэкспов Незнание, чем генератор отличается от итератора Незнание и неумение работать с мультитредингом и мультипроцессингом - это одно, но знать чем тред отличается от процесса - это самые базовые знания погромиста. Задача даже с подсказами решена плохо Интервьюер мог бы начать копать в сторону из любого вопроса, и ответ был бы одним - "не знаю, не сталкивался". В целом то, что парень не терялся, мне понравилось, но знаний очень, очень мало. Надо начать хотя бы с книги Рамальо и лекций Хеттингера.
@@MrBeltalowda, в целом, да, соглашусь - пробелов много. Но это если мы рассматриваем его на готового джуна. А если взять подгрейд чуть ниже или просто посмотреть на потенциал (особенно если сравнить со всеми остальными участниками этих собесов) - то, как по мне, весьма неплохо.
@@heybeachMIN, когда строки заменили на списки - да, тут стало О(n). Изначально там был квадрат. И, да, крайне некорректно говорить в данном случае "за 1 итерацию".
Я бы наверно после такого положительного ответа - улетел в космос. продолжаю учиться. Так одного понять не могу, для джуна достаточно знать питон как инструмент, или же ООП и Джанго?
Во1, ООП - неотъемлемая часть Питона. Не зная ООП, ты не узнаешь Питон. Во2, все зависит от твоего уровня знания языка. Если ты знаешь язык (включая SQL) и в целом всю инфраструктуру на уровне достаточном, чтобы реализовать свой собственный фреймворк типа Джанго или FastAPI - то, думаю, саму Джангу можно и не знать, ибо изучить готовый фреймворк - лишь вопрос времени. Если не знаешь на таком уровне - то нужно изучать технологии, да.
Я бы этого типа, не то, чтобы не взял программистом, я б его на пушечный выстрел не подпустил. Возможно, он будет хорош у других областях, например в продажах(там как раз языком чесать нужно).
Слишком много не нужных слов , болтун проходит собес ... если не знаешь , скажи : ''Не знаю" . Много умничает, не зная элементарных вещей . Спасибо сенсей за собес . И Жене большое спасибо что уделил время .
@@heybeachMIN для работодателя важно понимать как ты думаешь, как мыслишь. Если ты говоришь ,что типо читал, но забыл... Это то же самое что не знаешь. Не знаю... Я бы сказал не знаю. Не читал. Не проходил. Чтобы время не тянуть.
и да, я новенький в этом деле, написал за 10 минут после поставки задачи. Опыт на Python < года, VB около 10 лет, всего 20 лет сисадмин, Прокомментируйте ошибки?
Хороший вопрос :)))
Когда мы "очень глубоко погоузились" на вопросе с сетом, стало ясно что сильно интересно не будет...
За Тимофея Федоровича Хирьянова лайк! А по самому собесу, красноречием человек обладает, но знании как по мне не хватает для Джуна, с учётом того что сейчас на одну позицию тысяча откликов.
парень вроде хорошо и успешно болтает, но в его знаниях пробелов больше, чем самих знаний.
Очередной лайк, который до просмотра не жалко
Лучше не придумал)
def process_string(string: 'str') -> str:
"""
Функция process_string принимает на вход строку и обрабатывает ее следующим образом:
1. Проверяет, пустая ли строка. Если строка пустая, она возвращает исходную строку.
2. Создает новую строку и счетчик длины символов (len_chars).
3. Проходит по всем символам в строке, кроме последнего. Если текущий символ равен следующему, увеличивает счетчик длины символов.
4. Если текущий символ не равен следующему, добавляет текущий символ и счетчик длины символов в новую строку. Сбрасывает счетчик длины символов до 1.
5. Добавляет последний символ строки и его счетчик длины символов в новую строку.
6. Возвращает новую строку.
"""
if not string:
return string
new_string = ''
len_chars = 1
for i in range(len(string) - 1):
if string[i] == string[i+1]:
len_chars += 1
else:
new_string += string[i] + str(len_chars)
len_chars = 1
new_string += string[-1] + str(len_chars)
return new_string
- Простите, вы программист?
- Хороший вопрос! Я пока так глубоко не углублялся!
есть зона роста. да
Годное видео для почесывания собственной самооценки!)))
Сперва пытаюсь сам решить задачу, потом досматриваю и смотрю коменты.
Пришлось пару часов голову ломать и получил вот это:
def charnum(st:str)->str:
p=0
answ=''
for i in range(len(st)):
if i>=p :
k=0
while (i+k)
Ты забыл 1 условие. Если ответ не короче оригинала, нужно вернуть оригинал. Я решал несколько иначе, но не суть. Пошел я найти подобную задачу на CodeWar, сделал и кодер и декодер на очень схожую задачу. После решения откывают доступ к решениям и как же я был приятно удивлен решению с помощью REG-EX:
from re import sub
def encode(s: str) -> str:
answer = sub(r'(.)\1*', lambda m: m.group(1) + str(len(m.group(0))), s)
return (s, answer)[len(answer) < len(s)]
# последнюю строку можно заменить на более читаемый код типа:
return answer if len(answer) < s else s
# но мне нравится мой вариант в оригинале, это для ценителей однострочников
че-то перемудрил, рекомендую побольше алгосов порешать, потому что видно, что решение сыровато. у яндекса есть тренировки по алгоритмам, хорошая штука
def compress(s):
if len(s) == 0:
return ''
res = ''
count = 1
cur = s[0]
for i in range(1, len(s)):
if s[i] != cur:
res += f'{cur}{count}'
cur = s[i]
count = 1
else:
count += 1
res += f'{cur}{count}'
return s if len(s)
только после решения заметил, что также как собеседуемый решил
Я вот один не понял, на какого он Джуна тянет?
Очень много пробелов.
Кандидат стелит дальше чем видит, сначала сказал, потом забыл. Так и надо на собесах?)
Очень похоже на расстрел, а не на собес..., но даже при этих знаниях парень держался достойно...
Весьма и весьма неплохо, как по мне.
Теория - ну, не "отлично", но для стажера/джуна-, я думаю, точно сойдет.
И чувствуется "огонь в глазах", и "шило в жопе" - что крайне неплохо.
Код пишет достаточно бодро. Отдельный плюс за то, что слету написал синтаксис фильтрации для компрехеншена и еще плюс за использование нижнего подчеркивания для незначащей переменной. Но и тут сразу минус - тезис касательно нижнего подчеркивая озвучил верно, а дальше сам же и использовал переменную - при создании очередного элемента списка. Эту штуку нужно применять в тех случаях, когда действие в цикле НЕ зависит от текущего элемента итератора. Также найс, что сразу же про map() вспомнил. Хоть и пытался применить его неправильно.
Что не понравилось - постоянное "могу попробовать угадать" или "так глубо не копал" и тд, вместо обычного "не знаю". Мб для HR'ов это и норм, но меня это реально триггерит, когда человек начинает увиливать.
Также из минусов я бы выделил "болтливость". Нет, поговорить/пошутить/обсудить - это, конечно, в разы лучше, чем молчать, но тут он перегибает в некоторых местах. Больше похоже не на "болтливость", а на попытку оправдаться. А это не есть гуд. Все это можно одним моментом описать: когда он добавил range в цикле, то он произнес "опять генератор, между прочим". range - не генератор. И даже не итератор. Зачем нужна была эта фраза? Чтобы набить себе очков? Проблема подобного подхода в том, что если ты ошибаешься, то это куда хуже, чем если бы ты просто сказал "не знаю" или вообще ничего не сказал. То есть попытка "не упасть в грязь лицом" / "доказать, что он равный собеседнику, а какой-то залетный". В ту же степь и про тернарный оператор. Как и про Хирьянова. Вот из-за подобных моментов общее впечатление и портится. И чем больше его слушаешь, тем чаще это подмечаешь, тем сильнее
... in len(some_str) - итерирование по инту? Это прям жирнющий минус. Причем даже ИДЕ писала об этом. Тут сразу бы стоило задать вопрос насчет итераторов, итерируемых объектов и в целом о том, как устроен цикл for в питоне. Ну и интервьюер тоже хорош в этом плане "нет тела цикла". Ну тут прям фиаско для обоих. Хоть потом поправился. Ну да ладно.
А вот по решению задачки сразу не зачет: не имея решения задачи в голове, он пытался писать код. Вот эти постоянные метания от индекса к элементу, какие-то промежуточные переменные и тд. Хотя стоило бы просто сформировать алгоритм решения в голове, а потом просто написать код. Да и в дальнейшем не рассмотрел корнер кейсы, получил квадратичную сложность, потенциальный IndexError и тд. Задачку зачесть тут явно нельзя, хотя и можно сказать, что для некоторых кейсов он ее решил. Ну а их финальная версия упадет, как минимум, на пустой строке.
По итогу - хз, дело в остальных собесах или где - но мне, в целом, понравились ответы.
Да, ему явно нужно начать лезть под капот и смотреть, как все там устроено: и генераторы, и итераторы, и range, и цикл for, и хэшмапы, и тд.
Также всю эту "болтливость" нужно крайне сильно отрефакторить.
Ну и поднаточить алгосы и решение задачек.
Но в итоге на стажера/джуна- тянет, ИМХО. Хотя и нужен будет присмотр.
Слишком много вопросов к кандидату:
Про дипкопи на вторую часть вопроса не ответил
Если нарешать хотя бы пару десятков задач на литкоде или кодворсах, вопросов о том, какие индексы включаются в слайс, а какие нет, быть не может.
Непонимание того, как работают словари и сеты, зачем там нужна хеш функция
Конструкция _ for _ in range сильно триггернула, т.к. она показывает полное незнание предназначения андерскора, а заявление о том что она экономит память - аж вдвойне.
Незнание генераторов и генэкспов
Незнание, чем генератор отличается от итератора
Незнание и неумение работать с мультитредингом и мультипроцессингом - это одно, но знать чем тред отличается от процесса - это самые базовые знания погромиста.
Задача даже с подсказами решена плохо
Интервьюер мог бы начать копать в сторону из любого вопроса, и ответ был бы одним - "не знаю, не сталкивался".
В целом то, что парень не терялся, мне понравилось, но знаний очень, очень мало. Надо начать хотя бы с книги Рамальо и лекций Хеттингера.
@@MrBeltalowda, в целом, да, соглашусь - пробелов много. Но это если мы рассматриваем его на готового джуна.
А если взять подгрейд чуть ниже или просто посмотреть на потенциал (особенно если сравнить со всеми остальными участниками этих собесов) - то, как по мне, весьма неплохо.
"получил квадратичную сложность" - А разве сложность того алгоритма в конце не O(n) ? Он же за одну итерацию проходит и получает.
@@MrBeltalowda Что такое генэкспы это же и есть генераторы не?
Ну либо ген. функция
@@heybeachMIN, когда строки заменили на списки - да, тут стало О(n). Изначально там был квадрат.
И, да, крайне некорректно говорить в данном случае "за 1 итерацию".
думал думал что-то умное, но в итоге
[list_[i][j] for i in range(len(list_[0])) for j in range(len(list_))]
Как будто хороший вопрос))
Я бы наверно после такого положительного ответа - улетел в космос. продолжаю учиться. Так одного понять не могу, для джуна достаточно знать питон как инструмент, или же ООП и Джанго?
Для Джуна недостаточно всего вышеперечисленного
Во1, ООП - неотъемлемая часть Питона. Не зная ООП, ты не узнаешь Питон.
Во2, все зависит от твоего уровня знания языка. Если ты знаешь язык (включая SQL) и в целом всю инфраструктуру на уровне достаточном, чтобы реализовать свой собственный фреймворк типа Джанго или FastAPI - то, думаю, саму Джангу можно и не знать, ибо изучить готовый фреймворк - лишь вопрос времени.
Если не знаешь на таком уровне - то нужно изучать технологии, да.
Я бы этого типа, не то, чтобы не взял программистом, я б его на пушечный выстрел не подпустил. Возможно, он будет хорош у других областях, например в продажах(там как раз языком чесать нужно).
Слишком много не нужных слов , болтун проходит собес ... если не знаешь , скажи : ''Не знаю" . Много умничает, не зная элементарных вещей . Спасибо сенсей за собес . И Жене большое спасибо что уделил время .
много людей советуют не говорить "Не знаю" - это типа красный флаг.
@@heybeachMIN для работодателя важно понимать как ты думаешь, как мыслишь. Если ты говоришь ,что типо читал, но забыл... Это то же самое что не знаешь. Не знаю... Я бы сказал не знаю. Не читал. Не проходил. Чтобы время не тянуть.
если вы ставите соискателей в позицию студента на экзамене, то и вести он себя будет соответствующе
@@gerhardshreder2391 Я никого никуда не ставлю. Чел много болтает .А знаний мало .
@@Mr_robot_001у тебя забыл спросить 😂
И еще вопрос, можно дебажить во время написания кода ?)
зависит от компании. мне - ок.
Да, много говорит, мало практики...
Это же тот чел из тик-тока одной барышни, которая на шее у него весь период эмиграции сидела, лол
Кажется, отношения не так устроены, что кто-то у кого-то на шее сидит. ) это маленький коммунизм на двоих, где от каждого по возможностям.
Интересно)
Ну называть генэксп - генератором, тоже не показывает что интервьюер гений)
а в чем разница? и функция и генэксп возвращают объект генератора
@@MrBeltalowda а что такое генэксп ?
@@heybeachMIN pep 289
И в чем отличие? Это объекты одного и того же класса с тем же самым АПИ, только различная инициализация.
Так и в отличие-то?
а вот про что вы, так он же возвращает адрес той функции(объекта) разве нет?
Мои глаза ослепли от глаз Андрея
Слабый
в чём слабый ? я лично не понял даже уровень позиции.
Видно что человек работал в продажах, язык подвешенный а смысла в сказанном найти сложно))
Пилите ролики на С или С+++
Лучше на С++++.
поехали
болтун
👍
Ренж
find_str = "aabbbcaadddbbbbc"
result_str = ""
last_char = ""
count = 0
for _ in find_str:
if _ == last_char:
count += 1
else:
result_str = result_str + last_char + str(count)
count = 1
last_char = _
result_str = result_str + last_char + str(count)
print(result_str[1:])
и да, я новенький в этом деле, написал за 10 минут после поставки задачи. Опыт на Python < года, VB около 10 лет, всего 20 лет сисадмин, Прокомментируйте ошибки?
@@Ксандр-л1щ Оставайся и дальше сисадмином...
@@ЕвгенийЮрченко-с1ф поясни
@@ЕвгенийЮрченко-с1ф я для себя изучаю змею, хотелось бы конструктивную критику, что так, что не так
@@Ксандр-л1щ Спроси GPT, он тебе отлично все расскажет...
[‘tju:pl]
Хороший вопрос)