Руслан Ситдиков. Как заруинить собеседование в Google, но получить полезный опыт.

Поділитися
Вставка
  • Опубліковано 28 лис 2024

КОМЕНТАРІ • 103

  • @СаняСашкович-ц2г
    @СаняСашкович-ц2г 2 роки тому +5

    Посмотрел как сериал, подписался. Андрей побольше таких интересных и открытых гостей как Руслан.

    • @AndyPronin
      @AndyPronin  2 роки тому

      Постараюсь приглашать. Руслан ещё есть в пару видео

    • @katerinadevis9222
      @katerinadevis9222 2 роки тому

      ПРОНИН любит делать гадости и мелкие пакости другим. Так и не повзрослел дятел стучащий по клаве.

  • @cryptocrya
    @cryptocrya 2 роки тому +1

    Спасибо, Андрей! Очень интересно, смотрю, как сериал)

    • @AndyPronin
      @AndyPronin  2 роки тому

      Рад, что нравится

  • @butcher_bom
    @butcher_bom 2 роки тому +3

    Спасибо большое, помог найти уверенность в себе 😊

  • @luckytima2315
    @luckytima2315 2 роки тому +2

    Вот ради этих видео я и подписан ))Спасибо за видео большое )

    • @AndyPronin
      @AndyPronin  2 роки тому +1

      то ли еще будет. не переключайтесь

    • @luckytima2315
      @luckytima2315 2 роки тому

      @@AndyPronin надеемся не придется долго ждать, видео про собес в организацию запрещенную на территорий РФ :p

    • @AndyPronin
      @AndyPronin  2 роки тому +1

      @@luckytima2315 на следующей неделе постараюсь. Руслан задачки найдёт, кину их в комменты

  • @nataliepodgainova6582
    @nataliepodgainova6582 2 роки тому +1

    31:14 видела пару месяцев назад похожую задачу из мат олимпиады, только там вместо нулей и единиц были белые-черные ячейки.

    • @AndyPronin
      @AndyPronin  2 роки тому

      False - True в итоге)

  • @alexeyzhurov7747
    @alexeyzhurov7747 2 роки тому +9

    Ситуация с русскими из Гугл, которые задали гробы, напомнила старую мудрость: Если хочешь, чтобы тебя надурили заграницей или оказали говняные услуги - ищи земляков )))

    • @vadka1997
      @vadka1997 Рік тому

      @@viktorsavich956 прикол в том , что у русских нет диаспоры. я из Канады!

  • @AleXXL1986
    @AleXXL1986 2 роки тому +3

    вторую задачу можно решить за сложность 0(n^2) сложность. Можно заметить что любая инверсия в квадрате 2х2 изменяет количество 0/1 на 0 или 2 (это инвариант).
    Это значит что если хотя бы в 1 квадрате 2на2 есть нечетное число 0/1, то матрицу нельзя целиком перевести во все 0 или единицы. Проверка возможности заключается в проверке количество 0 в каждом из квадратов 2х2 сложность этого 0(n^2) .
    Алгоритм правильных инверсий тоже несложно придумать (если во всех квадратах 2х2 количество 0/1 четно)
    Начнем с левого верхнего квадрата перевернем его например во все 1 (это всегда можно сделать при выполнении условия выше). Далее перейдем влево к следующему квадрату он либо уже правильный, либо нужно сделать одну инвестицию столбца и т.д. Далее спускаемся на одну строку ,здесь возможно потребуется инвертация строки. Далее все квадраты в этой же строке должны быть правильными, иначе не будет выполнено условие обозначенное вначале, далее повторяем спуски на нацдно строку пока не дойдем до конца. Всего будет 2n итераций в которых мы сделаем n изменений символов, т.е. сложность также 0(n^2)

    • @ДаниилСмольников-ы8ю
      @ДаниилСмольников-ы8ю 2 роки тому

      пусть есть матрица (пишу по строкам) 001 100 001, матрица 2 на 2 в левом верхнем углу : (00)(10). Однако если преобразовать вторую строку, а потом третий столбец - получаем матрицу нулей.

    • @AleXXL1986
      @AleXXL1986 2 роки тому

      @@ДаниилСмольников-ы8ю ошибаетесь, в центре будет стоять 1, матрица не будет состоять из нулей

    • @ДаниилСмольников-ы8ю
      @ДаниилСмольников-ы8ю 2 роки тому

      @@AleXXL1986 Да, согласен

    • @denispatrakhin
      @denispatrakhin 2 роки тому

      Алгоритм там тривиальный, после того как мы понимаем, что если матрицы 2×2 вида (1,0)х(0,0) без ограничения общности не сущствуют, то тогда строки(столбцы) матрицы либо повторяются (например по отношению к первой), либо являются обратными к ней. Таким образом, первым циклом надо обратить все строки, который обратны первой, а уже второй цикл проходит по столбцам с 0 или 1 и приводит все к 1/0 матрице.

  • @kn1ght9962
    @kn1ght9962 2 роки тому +1

    Спасибо большое, полезное видео

    • @AndyPronin
      @AndyPronin  2 роки тому

      рад, что понравилось

  • @AndyPronin
    @AndyPronin  2 роки тому +1

    Комментарии, вопросы, пожелания.

    • @mavendalzhidar3382
      @mavendalzhidar3382 2 роки тому +1

      все супер спасибо)
      расширил кругозор

  • @torburgmax
    @torburgmax 2 роки тому +2

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

    • @АлексейКутасов-п7и
      @АлексейКутасов-п7и 2 роки тому +1

      0 0
      0 0
      определитель 0, получить матрицу можно
      1 0
      0 1
      определитель 1, получить матрицу так же можно
      а математически задача действительно простая - инвертирование i строки это сумма с матрицей, у которой i строка состоит из 1, в остальных местах 0 если рассматривать матрицу над полем из 2 элементов F2. Tо есть, нужно понять, лежит ли данная матрица в F2- линейной оболочке таких матриц, где строка или столбец состоят из единиц

    • @torburgmax
      @torburgmax 2 роки тому

      @@АлексейКутасов-п7и а каков алгоритм решения?

    • @АлексейКутасов-п7и
      @АлексейКутасов-п7и 2 роки тому

      В основной ветке комментариев расписал свой вариант алгоритма

    • @comparison9436
      @comparison9436 2 роки тому

      все верно, я тупанул, такое же решение расписал, но проверял вручную существование единичной матрицы. Достаточно проверить определитель матрицы и единственный вырожденный случай со всеми 0. Алгоритм за О(n^2) получается работает, что очень быстро.

  • @creamfield6863
    @creamfield6863 2 роки тому +5

    Задача с папками:
    from collections import defaultdict
    def solution(dirs):
    children = defaultdict(list)
    for d in dirs:
    children[d[1]].append((d[0], d[2]))
    stack = [(None, '')]
    while stack:
    d, path = stack.pop()
    for child, child_name in children[d]:
    print(path + '/' + child_name)
    stack.append((child, path + '/' + child_name))
    dirs = [[0, None, 'a'], [1, 0, 'b'], [2, 1, 'c'], [4, 0, 'd']]
    solution(dirs)

  • @dmitrijloskutnikov694
    @dmitrijloskutnikov694 2 роки тому

    2 задача про матрицу.
    Начинаем проверять матрицу n*n с а[0.0]
    Цикл k=0 до (n-1)
    Если а[0.k]=0, инвертируем столбец k во всей матрице.
    Если k>=2, проверяем элементы столбца k от а[1.k] до а[k-1.k]
    На первом же элементе равном 0, заканчиваем обход и выдаём сообщение о невозможности приведения матрицы.
    Если все элементы =1. То идём дальше.
    Если а[k.0] =0 инвертируем строку k во всей матрице.
    Если k>=2, проверяем элементы строка k от а[k.1] до а[k.k]
    На первом же элементе равном 0, заканчиваем обход и выдаём сообщение о невозможности приведения матрицы.
    На второй итерации проверяется и, если нужно, инвертируются столбец и строка k.
    И так далее, пока не дойдём до матрицы n*n.
    Идея в том, что если мы собрали матрицу k*k, то все строки и столбцы этой матрицы мы уже не можем инвертировать.
    После приведения элемента а[0.k+1] к 1, в столбце (k+1) мы сможем изменить только элемент а[k+1.k+1], инвертировав строку а[k+1.*] при необходимости приводить его значение к 1.
    Поэтому столбец проверяем на единицы до этого элемента.
    После приведения элемента а[k+1.0], мы уже ничего не сможем поменять в матрице (k+1)*(k+1).
    Поэтому проверяем всю строку.
    Вроде работает.
    В примере матрица инвертируется.
    Если поменять последний элемент в первой строке, вылетит по столбцу. Если последний элемент в первом столбце, то по строке.
    Пример кода в ответе к этому.
    Сильно не пинайте, я Python 3й день учу. :)

    • @dmitrijloskutnikov694
      @dmitrijloskutnikov694 2 роки тому

      import numpy as np
      # matrix 2×2 (yes)
      #a = np.array([[1,0],[0,1]])
      # matrix 2×2 (no)
      #a = np.array([[1,1],[0,1]])
      # matrix 3×3 (yes)
      #a = np.array([[1,0,1],[0,1,0],[1,0,1]])
      # matrix 3×3 (no)
      #a = np.array([[1,1,1],[0,1,0],[1,0,1]])
      # matrix 4×4 (yes)
      a = np.array([[1,0,1,1], [0,1,0,0], [0,1,0,0], [0,1,0,0]])
      # matrix 4×4 (no, column)
      #a = np.array([[1,0,1,0], [0,1,0,0], [0,1,0,0], [0,1,0,0]])
      # matrix 4×4 (no, line)
      #a = np.array([[1,0,1,1], [0,1,0,0], [0,1,0,0], [1,1,0,0]])
      n = a.shape[1] # check dimension matrix
      matrix_yes = 'Successfully!'
      print ('Parent matrix' )
      print (a)
      flag = False
      k = 0
      while k < n:
      # change the column
      if a[0,k] == 0:
      a[:,k] = abs(a[:,k] - 1)
      print ('change the column ',k + 1)
      print (a)
      # check the column
      for i in range(n):
      list_a = list(a[0:k+1,k])
      count_zero = list_a[1:k].count(0)
      if count_zero > 0:
      flag = True
      if flag :
      print ('A column crash ',k + 1)
      break
      # change the line
      if a[k,0] == 0:
      a[k] = abs(a[k] - 1)
      print ('change the line ',k + 1)
      print (a)
      # check the line
      for i in range(n):
      list_a = list(a[k,0:k+1])
      count_zero = list_a[1:k+1].count(0)
      if count_zero > 0:
      flag = True
      if flag :
      print ('Crash by line ',k + 1)
      break
      if k == n-1:
      print(matrix_yes)
      k +=1

  • @АлексейКутасов-п7и
    @АлексейКутасов-п7и 2 роки тому +1

    во второй задаче разве не работает такое решение?
    1)замечаем, что порядок действий не влияет на результат - если инвертировать сначала строчку, потом столбец, это то же самое, что инверт крест без клетки перечесечения вне зависимости от порядка
    2)разобьем все инверсии на два блока - сначала инвертируем сколько то строчек, потом сколько то столбцов
    3)если после инвертирования нескольких столбцов получается матрица из нулей(или единиц), то до этого инвертирования матрица состояла из столбцов, таких, что внутри этого столбца одно и то же значение
    4)в заданной матрице инвертируем нужные строки, чтобы первый столбец стал нулевым - это можно сделать единственным образом - если первый элемент строки 0, то строку не инвертируем, иначе инвертируем
    5)после того, как сделали первый столбец нулевым, смотрим, верно ли, что оставшиеся столбцы заполнены одним и тем же числом, это да, то можно привести к нулевой, иначе нельзя
    если алгоритм верный, то сложность n^2

    • @АлексейКутасов-п7и
      @АлексейКутасов-п7и 2 роки тому

      более явно приведу алгоритм
      1)каждую строчку ксорим с ее первым элементом 1 0 1 1 -> 0 1 0 0
      таким образом, первый столбец стал нулевым
      2)дальше последовательно проверяем, что первая строка равна второй, потом что вторая строка равна третьей и тд, если все строки равны, то ответ True, иначе False

  • @MrLotrus
    @MrLotrus 2 роки тому

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

    • @AndyPronin
      @AndyPronin  2 роки тому +1

      Под первым видео серии есть. Не уверен, что её можно публиковать)

  • @ОлегНовиков-щ9г
    @ОлегНовиков-щ9г 2 роки тому

    Какой телеграм канал?

  • @Natusikus
    @Natusikus Рік тому

    Funk interview? Не найдено

    • @WounderVaflel
      @WounderVaflel Рік тому

      FAANG(MAANG)
      Facebook(Meta)
      Apple
      Amazon
      Netflix
      Google

  • @sleepwaalkeer
    @sleepwaalkeer 2 роки тому +2

    🔥

    • @AndyPronin
      @AndyPronin  2 роки тому

      Спасибо. Стараемся)

  • @phoenixgames4244
    @phoenixgames4244 2 роки тому

    А на собеседовании можно использовать библиотеки? Например, numpy...

  • @kwent_1916
    @kwent_1916 2 роки тому +1

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

    • @AndyPronin
      @AndyPronin  2 роки тому

      Можно начать с курсов на степике бесплатных. И книжки типа Укус Питона.

    • @kwent_1916
      @kwent_1916 2 роки тому

      @@AndyPronin спасибо, укус питона уже прочитал

    • @AndyPronin
      @AndyPronin  2 роки тому +1

      Тогда посложнее - Лутц с крысой на обложке. Двухтомник. Очень подробно и занудно. И Чистый_Python_Тонкости_программирования_для_профи - тоже с каким то грызуном в очках на обложке

  • @comparison9436
    @comparison9436 2 роки тому

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

    • @AndyPronin
      @AndyPronin  2 роки тому +1

      ua-cam.com/video/xuwImYUbQhs/v-deo.html
      там есть в описании. Леткод в следющем видео. Не перключайтесь.

    • @comparison9436
      @comparison9436 2 роки тому

      @@AndyPronin спасибо!

  • @ruslankorneev5433
    @ruslankorneev5433 2 роки тому

    1 задача, рекурсией бы решил. Путь записывал бы как аргумент с типом list, есть по умолчанию у него значение ["/"], при переходе на другую ветку очищался бы путь со старой ветки не так сложно.

    • @sinchrotron
      @sinchrotron 2 роки тому +7

      Мне только что звонили из гугла, хотели узнать твои контакты. Но я тебя не выдал

    • @IamMissAlisa
      @IamMissAlisa 2 роки тому +1

      я примерно так же решила, вот немного плохого кода, но оно работает)
      def find_path(name = None, path = '', id_ = None):
      for i in _TREE:
      if i['name'] == name or (id_ is not None and i['id'] == id_):
      path = (f'/{i["name"]}') + path
      if i['p'] is None:
      return path
      return find_path(path=path, id_ = i['p'])
      return 'Not find!'

  • @ibrahimoglu
    @ibrahimoglu 2 роки тому +1

    👍

  • @vadimvadim1662
    @vadimvadim1662 2 роки тому +1

    Вроде должно было быть продолжение или я что-то не так понял?

    • @AndyPronin
      @AndyPronin  2 роки тому

      Открою, если примет оффер и уедет. Снято и ждет своего часа

    • @vadimvadim1662
      @vadimvadim1662 2 роки тому

      @@AndyPronin а если не примет в прод не пойдёт?

    • @AndyPronin
      @AndyPronin  2 роки тому +1

      @@vadimvadim1662 Возможно, переснимем или кусочки вырежем. Примерно в начале июля будет ясно

    • @vadimvadim1662
      @vadimvadim1662 2 роки тому

      @@AndyPronin так много времени дали на подумать?

    • @AndyPronin
      @AndyPronin  2 роки тому +1

      @@vadimvadim1662 есть и технические сложности с релокацией

  • @sevka69
    @sevka69 2 роки тому

    Со скольки лет можно проходить собеседование и вообще работать в вашей компании на хоть какой нибудь должности ?

    • @AndyPronin
      @AndyPronin  2 роки тому +1

      Думаю, с 18. При наличии нужного опыта. На парктике видел студентов старших курсов, кторые успешно в IT работают

  • @phoenixgames4244
    @phoenixgames4244 2 роки тому

    А какое собеседование для кандидатов на стажировку?

    • @AndyPronin
      @AndyPronin  2 роки тому

      Спрошу, запишемся. Спасибо

  • @sinchrotron
    @sinchrotron 2 роки тому

    Вторая задача XORом же решается, не?

    • @torburgmax
      @torburgmax 2 роки тому

      что именно решается?)

  • @comparison9436
    @comparison9436 2 роки тому

    кто-нибудь может объяснить решение второй задачи или закинуть ссылку? Я не понял его алгоритма и как оно решает данную задачу. Как по мне логично решение Андрея, где проверять 1х1, потом 2х2, 3х3, и если какое-то из них нельзя получить все единички, то понятно что и матрицу большей размерности не получится получить со всеми 1. А его алгоритм с рекурсией и солюшн я вообще не понял. Или я тупой? )

    • @AndyPronin
      @AndyPronin  2 роки тому

      Кажется, подождём решений в комментарий

    • @comparison9436
      @comparison9436 2 роки тому +2

      @@AndyPronin кстати я решил его более математическим способом. Чистая линейная алгебра, странно что в гугле делают акцент на это. Получение матрицы из всех 1 == получение единичной матрицы. Это легко проверить инверсией последнего столбца и последней строки матрицы из 1. Рассматриваем n-1 матрицу. И так далее. В итоге получаем единичную матрицу. А здесь задача совсем простая. Из исходной матрицы нужно узнать можно ли получить единичную матрицу. Алгоритм следующий берем строку с 1 в первом столбце и ставим на самый верх, остальные делаем так, чтобы в первом столбце были 0 инверсией этой строки, если этот элемент равен 1. В итоге получаем матрицу [[1, ...], [0, ...], [0, ...], ...]. Дальше берем второй столбец и делаем так, чтобы позиция [1, 1] == 1, остальные 0. Если это удалось, то дальше делаем и так далее, пока не получим единичную матрицу. Если не удается такое провернуть на каком-то шаге, то значит невозможно получить единичную матрицу. А значит не получится и матрицу из всех 1.

    • @finemechanic
      @finemechanic 2 роки тому

      @@comparison9436 Единичная матрица - матрица с единицами на главной диагонали. И не очень понятно, какая операция из линейной алгебры соответствует инвертированию строки.

    • @comparison9436
      @comparison9436 2 роки тому

      @@finemechanic инверсия строки имелось ввиду инверсия списка с 0 и 1. То есть 0 в 1, и наоборот для всех элементов списка.

    • @finemechanic
      @finemechanic 2 роки тому

      @@comparison9436 Ну да. В линейной алгебре есть такая операция? Или как тогда нам может помочь линейная алгебра?

  • @raymond1489
    @raymond1489 2 роки тому +1

    Заруинить собес сейчас гораздо проще: достаточно находится в РФ

    • @AndyPronin
      @AndyPronin  2 роки тому +1

      Это снимали январе. Да. сейчас офферы отозвали. Увы

  • @dieff_automation
    @dieff_automation 2 роки тому

    Он это все на Английском должен был рассказывать, так же как на русском у тебя.

    • @AndyPronin
      @AndyPronin  2 роки тому

      B1, говорит нужен. Так что, сильно проще.

    • @dieff_automation
      @dieff_automation 2 роки тому

      @@AndyPronin он молод, для того, чтобы говорить с нэйтив спикером из гугла надо иметь хороший уровень языка (пожить в среде пару лет) обычный татарин из россии ну ему тяжко будет в любом случае, вспомни себя когда ты говоришь с таджиком - дак тут так же... хотя я способен говорить быстро - но это годы практики... и даже у меня не идеально, а,что уж говорить про инженера из гугла.

    • @AndyPronin
      @AndyPronin  2 роки тому

      Думаешь, его реджекнули из за английского?

    • @dieff_automation
      @dieff_automation 2 роки тому +2

      @@AndyPronin ты возьми и поговорим с ним на Английском с такой же скоростью как ты и говорил с ним на Русском, если он не сможет спокойно говорить - то причина ясна. Я тоже Андрюшенька не просто так в сбербанке работаю...

    • @torburgmax
      @torburgmax 2 роки тому +1

      @@dieff_automation зачем нужен "идеальный" язык? если вас понимают, на ваш словарный запас никто обращать внимания не будет. нужно просто комфортно изъясняться. школьного курса английского с постоянной практикой вполне достаточно.

  • @gaisensei6336
    @gaisensei6336 2 роки тому

    а ты смотришь аниме?

    • @AndyPronin
      @AndyPronin  2 роки тому +3

      Сын смотрит ванпанчмэн

  • @viktortemirov6809
    @viktortemirov6809 2 роки тому

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

    • @viktortemirov6809
      @viktortemirov6809 2 роки тому

      @@AndyPronin нашёл. благодарю

    • @vladislavg8895
      @vladislavg8895 2 роки тому

      @@viktortemirov6809 скинешь ссылку?

    • @vladislavg8895
      @vladislavg8895 2 роки тому

      @Андрей += Пронин скинешь ссылку?

  • @АндрейВоронин-и4т
    @АндрейВоронин-и4т 2 роки тому

    ну не манга же

    • @AndyPronin
      @AndyPronin  2 роки тому

      а как?)

    • @АндрейВоронин-и4т
      @АндрейВоронин-и4т 2 роки тому

      @@AndyPronin тогда и goggle(g) надо поменять на alfabet(a) раз уж решили называть по "головной" компании.

    • @AndyPronin
      @AndyPronin  2 роки тому

      @@АндрейВоронин-и4т ну. Не звучит)

  • @denispatrakhin
    @denispatrakhin 2 роки тому +1

    from random import randint
    class Matrix:
    def __init__(self, n):
    self.size = n
    self.ivalue = [[1]*n]*n
    self.value = self.ivalue
    def __str__(self):
    row_strings = list(map(lambda row: ",".join(str(val) for val in row), self.value))
    return "
    ".join(row for row in row_strings)
    def inverse_row(self, i):
    assert i < self.size and i >= 0
    self.value[i] = [0 if v == 1 else 1 for v in self.value[i]]
    return self.value
    def inverse_col(self, j):
    assert j < self.size and j >= 0
    for i in range(self.size):
    new_row = list(self.value[i])
    new_row[j] = 0 if new_row[j] == 1 else 1
    self.value[i] = new_row
    return self.value
    def randomize(self, _from = 6, _to = 30):
    row_inverse_qty = randint(_from, _to)
    col_inverse_qty = randint(_from, _to)
    for i in range(_from, row_inverse_qty):
    self.inverse_row(randint(0, self.size - 1))
    for i in range(_from, col_inverse_qty):
    self.inverse_col(randint(0, self.size - 1))
    return self
    def full_inversion_algo(matrix: Matrix):
    """
    O(n**2) complexity algo [inverse opertaions for row/col counted] where n is matrix.size.
    """
    first_row = matrix.value[0]
    for i in range(1, matrix.size):
    if matrix.value[i] == first_row:
    continue
    else:
    matrix.inverse_row(i)
    if matrix.value[i] == first_row:
    continue
    else:
    raise Exception("Cannot be inverted")
    for i in range(matrix.size):
    if matrix.value[0][i] == 0:
    matrix.inverse_col(i)
    if __name__ == '__main__':
    m = Matrix(10).randomize() # test matrix generation
    print("~~~~~~~INITIAL MATRIX~~~~~~~", m, sep="
    ")
    full_inversion_algo(m)
    print("~~~~~~~ALGO APPLIED MATRIX~~~~~~~", m, sep="
    ")

  • @BrownAleks
    @BrownAleks 2 роки тому +4

    Очень много жаргонных выражений и запинаний. О каких своих комуникативных супер способностя он пытается говорит? Может быть именно по этому ему в гугле и отказали, что его просто противно слушать... У меня не хватило терпения до смотреть это видео до конца... 🥴

    • @antondopira5957
      @antondopira5957 2 роки тому

      Да, мб реджект по софтам

    • @IslamLodestar
      @IslamLodestar Рік тому

      русский у него не родной язык.

  • @АлексЛис-в5э
    @АлексЛис-в5э 2 роки тому +1

    Спасибо за видео!

    • @AndyPronin
      @AndyPronin  2 роки тому +1

      рад, что понравилось. Не переключайтесь