Привет, чемпион!

Возможно, ты сейчас готовишься к собеседованию в какую-нибудь IT-компанию. Скорее всего, тебе будут задавать технические вопросы, поэтому тебе приходится готовиться. Но, возможно, ты всё равно не сможешь ответить на все вопросы правильно. Как быть?!

А слышал ли ты про новую умную chatGPT? А что, если я тебе скажу, что больше готовиться к собеседованиям так усердно не нужно! Что?! Задаваемые тебе вопросы можно делегировать chatGPT.

В общем, нет времени объяснять, давай устроим собес для chatGPT по Data Science и узнаем, сможет ли сетка его пройти?! Всё по классике — спрашиваем вопросы по 4 секциям:

  • Программирование — Python и алгоритмы,
  • Написание SQL-запросов,
  • Data Science и статистика,
  • ML System Design.

▍ ????‍????Секция программирования (medium и hard)


???? Задача Medium-уровня: для заданной строки s найди длину самой длинной подстроки без повторяющихся символов. Используй язык Python.

Ответ GPT:

def find_longest_substring(s):
  # Create a dictionary to store the last seen index for each character
  char_indices = {}

  # Initialize the longest substring length to 0
  longest = 0

  # Initialize the start and end indices for the current substring
  start = 0
  end = 0

  # Iterate through the string
  while end < len(s):
    # If the current character is not in the dictionary, add it and move the end index
    if s[end] not in char_indices:
      char_indices[s[end]] = end
      end += 1

    # Otherwise, update the start index to be one past the last seen index for this character
    else:
      start = char_indices[s[end]] + 1
      char_indices[s[end]] = end
      end += 1

    # Update the longest substring length if necessary
    longest = max(longest, end - start)

  # Return the longest substring length
  return longest

# Test the function
s = "abcabcbb"
print(find_longest_substring(s))  # Should print 3

Доп. пояснение от ChatGPT
Эта функция для хранения символов в текущей подстроке использует словарь для хранения последнего увиденного индекса для каждого символа. Это позволяет ему легче обновлять начальный индекс всякий раз, когда он встречает повторяющийся символ. В остальном она перебирает строку и обновляет самую длинную длину подстроки всякий раз, когда перемещается конечный индекс. Когда цикл заканчивается, он возвращает самую длинную длину подстроки.

Эта функция имеет временную сложность O(n), где n — длина входной строки. Это связано с тем, что он перебирает каждый символ в строке ровно один раз.

Оригинальный ответ от ChatGPT (можно не смотреть)


???? Комментарий: Даже это же просто вау! Сетка сгенерировала этот ответ за пару секунд. Даже мне бы пришлось подумать, как реализовать, а тут подробное решение за мгновение. Может быть, это тупо заготовленный ответ? Попробуем дать задачу посложнее!

???? Задача Hard-уровня: Имея две строки str1 и str2, вернуть самую короткую строку, в которой есть как str1, так и str2 в качестве подпоследовательностей. Если есть несколько допустимых строк, верните любую из них. Строка s является подпоследовательностью строки t, если удаление некоторого количества символов из t (возможно, 0) приводит к строке s.

Решение от ChatGPT: Чтобы решить эту проблему, вы можете использовать двоичное дерево поиска (BST) для хранения элементов массива nums. Каждый узел в BST будет хранить значение элемента, а также количество элементов в поддереве, корнем которого является этот узел. Затем для каждого элемента в массиве nums вы можете пройти BST, начиная с корня и переходя к левому дочернему элементу, если элемент меньше текущего узла, или к правому дочернему элементу, если элемент больше или равен текущему узлу. Всякий раз, когда вы идёте влево, вы добавляете количество элементов в правом поддереве текущего узла к результату для этого элемента (поскольку все эти элементы меньше, чем текущий элемент). Когда вы достигаете конечного узла, вы вставляете элемент в дерево и обновляете количество всех узлов на обратном пути к корню. Вот некоторый псевдокод, демонстрирующий этот подход:

Псевдокод от ChatGPT
# define a Node class to represent a node in the binary search tree
class Node:
  # initialize the node with a given value
  def __init__(self, val):
    self.val = val
    self.left = None
    self.right = None
    self.count = 1

  # insert a new element into the subtree rooted at this node
  def insert(self, val):
    # if the value is smaller than the current node, go left
    if val < self.val:
      # if there is no left child, insert the element as the left child
      if not self.left:
        self.left = Node(val)

      # otherwise, insert the element into the left subtree
      else:
        self.left.insert(val)

    # if the value is greater than or equal to the current node, go right
    else:
      # if there is no right child, insert the element as the right child
      if not self.right:
        self.right = Node(val)

      # otherwise, insert the element into the right subtree
      else:
        self.right.insert(val)

    # increment the count of the node
    self.count += 1

  # search for an element in the subtree rooted at this node
  # return the number of elements smaller than the given element
  def search(self, val):
    # initialize the result to 0
    result = 0

    # if the value is smaller than the current node, go left
    if val < self.val:
      # if there is no left child, return 0
      if not self.left:
        return 0

      # otherwise, search the left subtree and return the result
      else:
        return self.left.search(val)

    # if the value is greater than or equal to the current node, go right
    else:
      # if there is no right child, insert the element into the tree
      if not self.right:
        self.right = Node(val)

      # otherwise, search the right subtree and return the result
      else:
        result = self.right.search(val)

    # add the number of elements in the right subtree of the current node to the result
    # (since all of these elements are smaller than the given element)
    result += self.count - (self.right.count if self.right else 0)

    # return the result
    return result


# initialize the binary search tree with


???? Комментарий: Ого, идейно решение верное. И действительно, задачу можно решить через BST (Binary search tree). Если сравнить с рабочим решением, то код неплох. Да, конечно, можно придраться, что это псевдокод, но смог бы живой человек накропать верно работающий код в рамках собеседования за пару секунд?! Завит от случая! Думаю, что задачу, скорее всего, засчитали бы (но это не точно).

▍ ???? Секция SQL (общие вопросы и hard-задача)


???????? Задача: Приведи примеры работы оконной функции.

Ответ: Конечно, вот несколько примеров использования функции ROW в SQL:

  • SELECT ROW(1, 2, 3) — возвращает одну строку с тремя столбцами, содержащими значения 1, 2 и 3.
  • SELECT ROW(col1, col2) FROM table — возвращает строки в таблице со значениями из столбцов col1 и col2 в виде одной строки.
  • SELECT ROW(col1 + col2, col3 - col4) FROM table — возвращает одну строку с двумя столбцами, содержащую результат указанных выражений, применённых к столбцам в table.

Это всего лишь несколько примеров того, как функция ROW может использоваться в SQL. Это полезная функция для создания строк с определёнными значениями или выражениями на основе столбцов в таблице.

Оригинал ответа


???????? Вопрос: Окей, а какие вообще оконные функции бывают?

Ответ: В SQL есть несколько функций строк, которые можно использовать для управления строками данных в таблице. Вот несколько примеров некоторых общих функций строк:

  • ROW_NUMBER — эта функция присваивает уникальный номер каждой строке в результирующем наборе, начиная с 1 для первой строки. Например, SELECT ROW_NUMBER() OVER (ORDER BY col1) FROM table присваивает уникальный номер каждой строке в таблице, упорядоченной по столбцу col1.
  • RANK — эта функция присваивает ранг каждой строке в результирующем наборе на основе значений в указанном столбце. Например, SELECT RANK() OVER (ORDER BY col1) FROM table присваивает ранг каждой строке таблицы на основе значений в столбце col1.
  • DENSE_RANK — эта функция похожа на функцию RANK, но она не пропускает ни одного ранга для ничьих. Например, SELECT DENSE_RANK() OVER (ORDER BY col1) FROM table присваивает ранг каждой строке в таблице на основе значений в столбце col1, не пропуская ни одного числа для связи.

Это всего лишь несколько примеров функций строк в SQL. Существует множество других функций, которые можно использовать для управления строками данных в таблице, например FIRST_VALUE, LAST_VALUE, LEAD и LAG.

Оригинал ответа


???? Комментарий: Отличный ответ! Такой компактный и чёткий ответ даже загуглить не получится так просто. Кажется, chatGPT умеет преобразовывать своё латентное пространство знаний в настоящий шипучий коктейль информации/знаний.

???????????? Не будем мелочиться и попросим GPT придумать себе задачу и решить её!

Задача: Можешь сама придумать и решить сложную задачу на SQL c использованием оконной функции?

Ответ: Конечно, вот более сложная табличная задача SQL, включающая функцию ROW:

Выдуманная задача: Напишите запрос SQL для создания новой таблицы с именем sales, которая содержит следующие столбцы: date, product, quantity и total_price. Столбец date должен содержать дату продажи, столбец product должен содержать название проданного продукта, столбец quantity должен содержать количество проданных единиц, а столбец total_price должен содержать общую цену продажи. Таблица также должна включать столбец с именем row_data, который содержит значения date, product, quantity и total_price для каждой строки в виде одной строки. Чтобы решить эту задачу, вы можете использовать функцию ROW для создания столбца row_data, как показано в следующем запросе:

Решение: Чтобы решить эту задачу, можем использовать функцию ROW для создания столбца row_data, как показано в следующем запросе:

CREATE TABLE sales (
    date DATE NOT NULL,
    product TEXT NOT NULL,
    quantity INTEGER NOT NULL,
    total_price REAL NOT NULL,
    row_data ROW(date, product, quantity, total_price)
);

Этот запрос создаёт таблицу с именем sales с указанными столбцами. Столбцы date, product, quantity и total_price используются для хранения сведений о продажах, а столбец row_data использует функцию ROW для создания одной строки со значениями date, product, quantity и total_price для каждой строки в таблице.

Оригинальный ответ chatGPT


????Комментарий: Очень недурно. Сходу выдумать структуру базы данных с реальными значениями и далее придумать задачку на то, чтобы написать запрос под неё — это впечатлят.

▍ ???? Секция Data Science (сразу сложные вопросы!)


???? Задача: Расскажи, что такое tf-idf, и потом реализуй этот метод с примерами.

Ответ chatGPT:

from collections import defaultdict

def tf(docs):
    # Create a dictionary where the keys are the words in the document
    # and the values are their frequencies
    tf_values = defaultdict(lambda: 0)
    for doc in docs:
        for word in doc.split():
            tf_values[word] += 1
    return tf_values

def idf(docs):
    # Create a set of words that appear in at least one document
    idf_values = set()
    for doc in docs:
        for word in doc.split():
            idf_values.add(word)
            
    # Calculate the inverse document frequency for each word
    idf_values = {word: 1 / len(docs) for word in idf_values}
    return idf_values

def tf_idf(docs):
    # Calculate the term frequency values for each document
    tf_values = tf(docs)
    
    # Calculate the inverse document frequency values for each word
    idf_values = idf(docs)
    
    # Calculate the tf-idf values for each word in each document
    tf_idf_values = []
    for doc in docs:
        tf_idf_values.append({word: tf_values[word] * idf_values[word] for word in doc.split()})
    return tf_idf_values

# Example usage
docs = [
    "this is a sentence",
    "this is another sentence",
    "yet another sentence"
]
print(tf_idf(docs))

Эта реализация вычисляет значения частоты термина (tf) для каждого слова в каждом документе, значения обратной частоты документа (idf) для каждого слова, а затем объединяет эти значения для вычисления значений tf-idf для каждого слова в каждом документе.

???? Комментарий: Вау! И это верно! Да я бы сам, если бы не подсмотрел формулу, не ответил. А тут ещё и полная почти корректная реализация, которая работает. Не хватает логарифма, но все равно зачёт!

▍ ???? Секция статистики


????Вопрос #1: Когда использовать t-test, а когда z-test?

Ответ: Z-критерий и t-критерий — это два типа тестов статистической гипотезы, которые используются для оценки различий между двумя группами. Z-критерий используется, когда известно стандартное отклонение совокупности, а t-критерий используется, когда стандартное отклонение совокупности неизвестно и должно быть оценено на основе данных выборки. В целом z-критерий используется реже, чем t-критерий, потому что обычно трудно узнать стандартное отклонение генеральной совокупности.

???? Комментарий: Верно!

???? Вопрос #2: У вас есть 40 карт четырёх цветов: 10 красных, 10 зелёных, 10 синих и 10 жёлтых. Каждый цвет имеет номер от 1 до 10. Когда вы выбираете две карты без замены, какова вероятность того, что две карты не одного цвета и не одного номера?

Давайте тут сразу оригинальный ответ посмотрим!


???? Комментарий: Верно? Давайте тут каждый читатель сам подумает и оставит ответ в комментариях, верно решена задача или нет?)

▍ ???? Секция ML System Design


???????? Вопрос: А задезайни какую-нибудь ML-систему для YouTube, сможешь?

Ответ chatGPT: Чтобы разработать систему машинного обучения для YouTube, нам сначала нужно определить конкретную проблему, для решения которой будет использоваться система. Например, систему можно использовать для рекомендации видео пользователям на основе их предыдущей истории просмотров, для классификации видео по разным категориям для улучшения организации платформы или для обнаружения и удаления неприемлемого или оскорбительного контента.

Как только конкретная проблема будет определена, мы можем приступить к разработке системы машинного обучения. Это будет включать сбор и подготовку набора данных, соответствующих данных YouTube, таких как история просмотров пользователей, метаданные видео и любая другая соответствующая информация. Затем набор данных будет использоваться для обучения модели машинного обучения, такой как алгоритм рекомендации или классификатор, с использованием подходящего метода машинного обучения.

После обучения модели её можно интегрировать в платформу YouTube и использовать для прогнозирования или выполнения действий на основе полученных данных. Систему также необходимо будет регулярно контролировать и обновлять, чтобы гарантировать, что она продолжает работать хорошо, и включать любые новые данные или изменения в платформу.

В целом разработка системы машинного обучения для YouTube будет включать сбор и подготовку данных, обучение модели и интеграцию в платформу, а также постоянный мониторинг и обслуживание.

Оригинальный ответ


???? Комментарий: В целом красивый и краткий ответ, можно было бы более развёрнуто ответить, но зато всё по фреймворку: сперва проблема, а потом решение. GPT ответила чётко по вот такому фреймворку:

Чекпоинты для проверки корректности рассуждений по ML систем-дизайну

▍ ???? А что по зарплате-то?! Сколько платить?


???????????? Вопрос: А какие твои зарплатные ожидания?

Ответ: Как крупная языковая модель, обученная OpenAI, у меня нет возможности получать зарплату или иметь зарплатные ожидания. Я цифровой помощник, призванный предоставлять информацию и отвечать на вопросы в меру своих возможностей на основе моего обучения. Моя основная цель — помогать и приносить пользу пользователям, которые взаимодействуют со мной.

▍ ???? Выводы и мысли


Можно с уверенностью сказать, что на chatGPT в некоторых вопросах можно опираться при ответе. GPT не поможет вам решать сложные математические задачки на логику, но вот покодить или написать за вас запрос, или просто подсказать вам теорию chatGPT может идеально.

Становится реально страшно, когда ты видишь, что у людей появляется такой мощный инструмент, способный дать им возможность для халявы. Теперь рекрутёрам придётся задавать более сложные вопросы, иначе люди могут просто вбивать их в chatGPT и бездумно отвечать. Кажется, что такой инструмент может сильно увеличить ваши шансы на позиции по типу junior. А возможно, даже поможет и Middle-уровню, если на собеседовании надо много кодить. Можно брать за основу код сетки, а потом уже доредачивать его самому. Круто же!

Спасибо, что дочитал статью до конца. Можешь прислать свой запрос для chatGPT в комментарии, пришлю ответ. А если тебе понравилось, то предлагаю следить за моим Telegram-каналом. Там я рассказываю о практичных вещах из мира Data Science, собеседованиях и соревнованиях на Kaggle.

Комментарии (34)


  1. Zara6502
    14.12.2022 12:26
    +4

    и в чем смысл? работу кто работать будет? тоже чат?


    1. Aleron75 Автор
      14.12.2022 12:28
      +8

      Работу порой делать проще, чем пройти удачно кодинг интевью с первого раза в условиях ограниченного времени.


      1. Zara6502
        14.12.2022 13:00
        -3

        поверьте, значит вам в этой компании делать нечего, рыба сгнила с головы.

        PS: не скажу за все-все-все компании но со мной делился опытом брат, опытом прохождения собеседований в Москве, Питере и - за границей. Так вот только в РФ задают какие-то абстрактные задачки, решать которые в работе никто и никогда не будет. Поэтому он пару лет работая за границей покатался в командировки в Москву/Питер, походил на собеседования и просто забил на это в РФ. Пусть дальше сидят и собеседуют до посинения, а он работу работает и успешно.


        1. Spunreal
          14.12.2022 14:26
          +5

          только в РФ задают какие-то абстрактные задачки

          Вот так 1 человек на своём опыте помог сделать вывод о собеседованиях во всём мире.

          Если взять реальную задачу, то её надо переделать под собеседование - убрать лишние детали и оставить только то, что важно для работы. И мы получаем опять абстрактную задачу.


          1. datacompboy
            14.12.2022 16:49
            +1

            Задача должна быть похожей на реальную.

            "У нас есть сеть предпрятия с общей шарой. Место не резиновое, а народ любит тащить копии в свои папки. Нам надо скрипт который незаметно уберёт дубликаты но так чтоб никто не догадался. Как нам это сделать?" -- покажет опыт, навык, и всегда можно сказать "сеть огорожена, такой тулзы нет, но есть баш или питон -- сможете?" и посмотреть как кандидат еще и кодить умеет а не помнит специфичные тулзы на память.


            1. anwender95
              16.12.2022 07:44

              А как правильно решить эту задачу? Симлинки\хардлинки вместо дубликатов оставить?


              1. datacompboy
                16.12.2022 13:40

                Симлинки не сделает это прозрачным, так как если удалят оригинал, пропадут все копии. То есть хардлинки. Да, это означает что редактировать их нельзя. Можно закрыть доступами. Теперь вопрос как найти дубликаты. И что такое дубликат. И равенство хеша не гарантия. И время не бесконечное, как и память.


          1. Zara6502
            15.12.2022 04:33

            Нет. Абстрактная задача - это когда вас просят сделать то, чего в реальной работе вы никогда делать не будете. А частная задача - это утрирование реальной задачи до уровня собеседования.

            Когда человек собеседуется в EA, PeopleCanFly, Blizzard и т.д. и ему дают реальные задачи, то наверное он в состоянии дать оценку тому трешу, который спрашивают в РФ.

            Как эквивалент по конкретно моей работе сисадмином с 99% вероятностью на собеседовании будет вопрос об "уровнях OSI" или "о стеке TCP", но за 25 лет работы я максимум от сети использовал только понимание того что такое управляемый маршрутизатор или неуправляемый и как работают nslookup, ping, tracert и telnet. (даже когда я занимался настройкой Cisco)

            Так же как до сих пор в некоторых учебных заведениях учат Turbo Pascal вместо питона и вместо BigData или Web - сортировку пузырьком. Да-да, я знаю что вы скажете что это основа, пусть и так, она ее можно изучать параллельно в формате методички и практического занятия, а не посвещать этому целый год.

            Мы недавно с одним товарищем запускали курс по DevOps в контакте с универом, как тестовая площадка. Занятий всего на месяц, то есть 20 академических часов, а результат куда более интересный и практически полезный для студентов, чем ква-ква Делфи/ООП.


            1. mrbald
              15.12.2022 11:34
              +1

              Об уровнях OSI важно знать, что они есть, иначе будешь тестировать TCP latency командой ping. Как у вас получилось не зацепить BGP и MPLS при настройке маршрутизаторов?


              1. Zara6502
                16.12.2022 06:56

                момент в том что моя работа никак не связана ни с OSI ни с TCP latency, я не сетевик. А чтобы поручить мне настройку цисок меня никто не спрашивал - гугл в руки и вперёд. Поэтому что такое BGP и MPLS я не знаю.

                Я и говорю об абсурдности тестовых заданий на собеседованиях. Это не значит что такой абсурд в 100% компаний, нет, но это очень частое явление.

                Пару работ назад мне распечатали опросник, я его прошел, по моему мнению на 90% верно, но принят был главным сисадмином со словами "ух как ты много всего написал, даже я не знаю и половины ответов, ну значит ты нам подходишь". При этом опросник тоже включал и модель OSI и как командной строкой посмотреть ip адрес и т.п. Словно меня берут в первый класс школы юного сисадмина.

                А на последней работе важным было администрирование сайта, нужны знания PHP и администрирование почты. Сказал что опыта такого у меня нет. По факту взяли, но "администрирование почты" это бесплатный ящик на Яндексе, а сайта - это вбивать новости через Битрикс админку.


  1. akakoychenko
    14.12.2022 12:41
    +1

    Правильно понимаю, что единственный бредовый ответ это упоминание функции ROW() в SQL?

    Хотя... Может она реально существует в какой-то малоизвестной или устаревшей БД, дока которой не гуглится. Или же это сигнал, что тот случай, что, хоть функции и не существует, но ее стоило бы придумать?


    1. Aleron75 Автор
      14.12.2022 14:27

      Возможно сетка имела в виду row_number(), но чтоб не пугать нас своей гениальность, специально немного ошиблась =) В целом ответ отличный же!


    1. fakedup
      15.12.2022 11:33

      В Presto есть тип данных ROW, контейнер объектов с именованными полями, и там все примеры будут корректно работать.


    1. mikhanoid
      15.12.2022 14:14
      +1

      Задачу о строке, содержащей две заданные подстроки, она тоже не решила. И ответ нерелевантный. Через бинарный поиск задача не решается


  1. nonickname227
    14.12.2022 12:42

        # Calculate the inverse document frequency for each word
        idf_values = {word: 1 / len(docs) for word in idf_values}
    

    Разве idf так вычисляется?


    1. Aleron75 Автор
      14.12.2022 14:23
      -1

      Согласен, логарифма не хватает


      1. nonickname227
        14.12.2022 14:37
        +1

        Ладно, пусть будет логарифма


  1. datacompboy
    14.12.2022 13:15

    Просто спросите её может ли она посчитать сумму элементов массива быстрее, чем за O(N). Меня её ответ впечатлил.


    1. Geckelberryfinn
      14.12.2022 14:06

      It is not possible to calculate the sum of an array faster than O(n), where n is the number of elements in the array. This is because in order to calculate the sum of an array, you must visit each element in the array at least once. Therefore, the best you can do is to use a linear time algorithm, which has a time complexity of O(n).

      Вроде все ок, в чем удивление? Правда, до этого она предлагала мне O(N log N) алгоритм, типа Divide-and-Conquer. При этом отмечала, что достоинства этого подхода - это возможность распараллеливания.


      1. datacompboy
        14.12.2022 16:51
        +4

        Мне вот что она предлагала. но я, конечно, жал кнопчоку что она гонит.

        Еще спросите MD5 хеш от “test” и от "test5test" напирмер. Хорошо показывает что она не вычисляет, а аппроксимирует, и что именно она там аппроксимирует -- я помолчу :)


      1. datacompboy
        14.12.2022 17:20
        +6

        Еще она мне доказывала что итерирование по вектору требует O(N) памяти. В общем, всё зависит от попадания в корпус обучения. Выводов она делать таки не умеет.


        1. Aleron75 Автор
          14.12.2022 18:44

          Красиво же =)


      1. Dharaseostad123
        15.12.2022 11:31

        STAD Solution is an IT Training and Development company. We provide Best Software testing Training in Ahmedabad. 

        Thank you for sharing this website.

        http://www.stadsolution.com/software-testing-training-ahmedabad.html


  1. Alexandroppolus
    14.12.2022 13:25
    +3

    В leethard-задаче условие и ответ совсем разные (причем ответ в общем случае хреновый). С таким подходом собес не пройти :)


  1. teleport1995
    14.12.2022 13:38
    +4

    В первой алгоритмической задаче предложенное решение неправильное. Для строки "abba" оно выдаёт ответ 3, когда правильный ответ 2. И дело не просто в ошибке +-1, а в целом алгоритм неправильный.


    1. abutorin
      14.12.2022 16:22
      +2

      тот самый случай когда "Говорит что знает vs Знает что говорит".


  1. nonickname227
    14.12.2022 13:45

    Вся сила ChatGPT в одном тексте, браво!


  1. bogolt
    14.12.2022 17:36
    +5

    Никого не смущает что функция поиска самой длинной подстроки из уникальных символов не работает?

    # Test the function
    s = "a5b5c5a5b5c5"
    print(find_longest_substring(s))  


    выводит 6 хотя вроде бы должно быть 3

    Да и по коду видно что оно просто прибавляет `end` и заменяет новые значения `char_indices` не проверяя что лучший результат мог быть ранее в строке


    1. bogolt
      14.12.2022 17:37
      +2

      Впрочем мы же разбираем возможность пройти собеседование, а не решить правильно задачу, чего это я


  1. bogolt
    14.12.2022 18:17
    +1

    > Имея две строки str1 и str2, вернуть самую короткую строку, в которой есть как str1, так и str2 в качестве подпоследовательностей.

    result += self.count - (self.right.count if self.right else 0)

    я не понял ни задачу ни решение, но скажите пожалуйста почему в вопросе «вернуть самую короткую строку» а в ответе у нас возвращается целое число?
    И по каким признакам вы засчитали этот ответ? И еще неплохо бы примеры входных параметров и решений чтобы лучше можно было разобраться в задаче. Я всего лишь кожаный мешок и мне формулировка кажется неясной.


    1. rombell
      14.12.2022 23:47

      В задаче имеется в виду вот что:

      • «aaa», «bbb» -> «aaabbb»
      • «aaabb», «bbb» -> «aaabbb»
      • «aabbbc», «bbb» -> «aabbbc»

      А решение неверное, ессно


      1. bogolt
        15.12.2022 00:03

        спасибо


  1. BugM
    15.12.2022 01:27
    +5

    1. Неверный код

    2. Просто глупость какая-то

    3. Несуществующая функция это весело, но нет.

    4. Ну еще туда-сюда.

    5. Тоже глупость какая-то

    Спасибо, мы вам перезвоним.


  1. WinPooh73
    15.12.2022 14:17
    +2

    Спросите уже у неё, кем она видит себя через пять лет.