Решение задачи acmp № 196 Спираль

Sdílet
Vložit
  • čas přidán 14. 03. 2022
  • Решение задачи acmp № 196 Спираль
    На тему "Вложенные списки"
    • 29 Вложенные списки Py...

Komentáře • 65

  • @user-js4yf3dv9g
    @user-js4yf3dv9g Před 2 lety +12

    Спасибо тебе огромное! Прохожу курс на степике, очень тяжело. Эту задачу прям по полочкам разложил. И мне сама подача понравилась, емко и по делу! А не нудятина на 40+ минут.
    Однозначно подпишусь)

  • @dimitrilarios2667
    @dimitrilarios2667 Před 4 lety +45

    Если следовать хронологии уроков, то для решения задачи в таком виде явно маловато пройденного материала. Нет, конечно, она решаема, но другими, не очень красивыми способами. Задача была не лёгкой. Из данного видео я получил новые знания. Спасибо за прекрасные уроки.

    • @Chernikru
      @Chernikru Před 2 lety +3

      Это самая сложная задача из двух топовых урсов на питон на степике,которые были признаны лучшиму курсами годов)

    • @ZheKaYT
      @ZheKaYT Před rokem +5

      задача очень простая, я когда её первый раз услышал, сразу понял что делать и как. Потом первый раз в жизни открыл питон, и буквально за 8 минут без опыта в питоне, сделал спиральное заполенине массива. но мне этого показалось мало, и я сделал так же серпантиновидное заполнение, звездочное и деадрофинджетное заполнение по 4-ой актаве квадротичного корня.

    • @AveFragged
      @AveFragged Před rokem +5

      @@ZheKaYT Жека, привет! Расскажи, пожалуйста, немного о себе. Что за плечами, школа с мат уклоном? 5-10 раз пересмотрел Умницу Уилла Хантинга?

    • @ZheKaYT
      @ZheKaYT Před rokem +2

      @@AveFragged я бы это назвал талантом. Школу окончил без 3ек и 4ок, институт с красными, во дворе самый популярный, в жизни довольно успешный. Просто так повелось

    • @AveFragged
      @AveFragged Před rokem

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

  • @vladimirlutsjak1354
    @vladimirlutsjak1354 Před rokem

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

  • @LonlyLokly
    @LonlyLokly Před 2 měsíci

    С продвинутого курса по Stepik. Только благодаря этому видео решил данную задачу для прямоугольной матрицы

  • @user-gc8ko1jf3f
    @user-gc8ko1jf3f Před 3 lety +1

    Артем, Спасибо в очередной раз.

  • @Igor_UA
    @Igor_UA Před rokem +4

    Суть упрощенного алгоритма передана правильно.
    В остальном - чепуха.
    В общем виде: задача для прямоугольника, а не квадрата. Точка старта - может быть любая граничная. Цикл while элементарно меняется на for , про PEP8 вообще умалчиваю.

  • @darkhanishere
    @darkhanishere Před 2 lety +1

    Hello World! Спасибо за объяснение! Удачи в развитии канала!

  • @jaygities8549
    @jaygities8549 Před rokem

    Спасибо, очень долго с этой задачей мучался!

  • @user-wr4is2vr2o
    @user-wr4is2vr2o Před 4 lety +2

    Целый день ломал голову, но написал свое решение! теперь можно и посмотреть!

  • @user-ho5sk8nt1m
    @user-ho5sk8nt1m Před rokem

    Большое Вам спасибо, буду разбираться...

    • @ZheKaYT
      @ZheKaYT Před rokem

      Попробуй лябду заюзать, задача простая как два паольца обоссать

  • @user-evgeniy64
    @user-evgeniy64 Před 4 lety +4

    Чувак, ты взорвал мне мозг)

  • @flexo23dl
    @flexo23dl Před rokem

    Офигеть как просто. Спасибо

  • @user-pv8wl2np6i
    @user-pv8wl2np6i Před 5 měsíci

    ОГРОМНОЕ СПАСИБО! Пять дней потратила, но разобралась вроде.

  • @Dm-if3vl
    @Dm-if3vl Před 3 lety

    Очень интересно

  • @buuuxiii6681
    @buuuxiii6681 Před rokem

    Как же плакать хочется.... спасибо за видео🥲💫

  • @user-fy9zc9bm9m
    @user-fy9zc9bm9m Před 2 lety +7

    Реально ли самому решить такую задачку, не зная ее решения, тоже самое касается задач по алгоритмам, не знаю алгоритмов реально ли самому решить такие задачи?

  • @NektoNene
    @NektoNene Před 4 lety

    спасибо!

  • @sharpd1173
    @sharpd1173 Před 4 lety +1

    Побольше бы таких сложных, а не с 5% сложности

  • @phoenux969
    @phoenux969 Před 2 lety +1

    Здорова , спасибо за контент . Есть ли в планах обучалка по django restframework?

  • @bjj1423
    @bjj1423 Před rokem

    Гений

  • @nicholay_mix
    @nicholay_mix Před rokem

    решил через реверсы и транспонирование,
    это та же самая задача, только код будет работать не только для квадратной матрицы
    n, m = map(int, input().split())
    s = [[0] * m for _ in range(n)]
    count = 0
    i_range = round( (m + n) // 4) * 4 + 4
    def reversematrix(matrix):
    for i in range(len(matrix)):
    matrix[i] = matrix[i][::-1]
    return matrix
    def transpose(matrix):
    transposed = []
    for i in range(len(matrix[0])):
    tmp = []
    for j in range(len(matrix)):
    tmp.append(matrix[j][i])
    transposed.append(tmp)
    tmp = []
    return transposed
    for i in range(i_range):
    for j in range(m):
    count += 1
    try:
    if s[i // 4][j] != 0:
    count -= 1
    continue
    s[i // 4][j] = count
    except:
    IndexError
    s = reversematrix(s)
    s = transpose(s)
    n, m = m, n
    for i in range(n):
    for j in range(m):
    print(str(s[i][j]).ljust(3), end=' ')
    print()

  • @fender4921
    @fender4921 Před 2 lety +2

    Привет, почему курс ООП на степика закрыли ? (((

  • @greatgoltz
    @greatgoltz Před 2 lety +1

    а почему нет доступа к курсу по ооп?

  • @Fravije
    @Fravije Před rokem +1

    Интересное решение. Но было бы еще интереснее посмотреть на более универсальное решение, когда m != n, или (m = 1), или (m x n = 1) и т.д..
    Если я правильно понял, этот код не подойдет под прямоугольную матрицу, даже при попытке переписать его.

  • @Free-jo7ts
    @Free-jo7ts Před 2 lety +1

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

    • @Free-jo7ts
      @Free-jo7ts Před 2 lety +2

      Только написал и решил. Для матрицы не квадратной, нужно будет не I**2 а можно m*n, плюс условие поменять по столбцам не до 'n', а до 'm', ну и принять с клавиатуры две новых переменных

    • @ZheKaYT
      @ZheKaYT Před rokem

      Всё очень просто. Нужно использовать m*n а не i**2, к тому же поменять условие по столбцам не до n, а до m.

  • @karlshtolz1066
    @karlshtolz1066 Před rokem

    а код можно где-то увидеть? или надо обязательно глаза на видео ломать и паузами играть?

  • @VillyVilly-tz1vm
    @VillyVilly-tz1vm Před 10 měsíci

    Почему блок: x+=d_row
    y+=d_column
    mas[x][y]=i
    I+=1
    срабатывает в других условиях блоков if и elif, если он там не прописан?

  • @userLaravel
    @userLaravel Před 3 lety +2

    Ну так как все-таки сдать данное решение на степике?

    • @egoroffchannel
      @egoroffchannel  Před 3 lety

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

  • @krilariaspace2249
    @krilariaspace2249 Před rokem

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

  • @user-zj3kc4eq1g
    @user-zj3kc4eq1g Před 2 lety +1

    Здравствуйте!расскажите пожалуиста про функцию mod очень нужно
    Заранее спасибо!!

    • @user-zj3kc4eq1g
      @user-zj3kc4eq1g Před 2 lety

      И как сделать в цикле while чтобы числа плюсовались???

  • @user-uz8sb2es7i
    @user-uz8sb2es7i Před rokem

    спасибо Гвидо за нулевой индекс

  • @olgakolesnikova6671
    @olgakolesnikova6671 Před 2 lety +1

    ничего не понятно, но очень интересно😅

  • @metallolomov
    @metallolomov Před 2 lety

    А чем плох цикл в цикле (я про фор фор)?

  • @nto2503
    @nto2503 Před 4 lety

    степик примет это решение? сдается, что нет. из-за пробела в конце строк

    • @egoroffchannel
      @egoroffchannel  Před 4 lety +1

      в степике я сделал, чтобы он значения массива проверял, отступы его безразличны
      но не факт, что тест работает корректно

  • @fWhyJKE
    @fWhyJKE Před 2 lety +1

    ахаххааххах. Решил сейчас такую же задачу на 100+ строчек кода, решал 4 часа, потом решил посмотреть, как люди решают...
    Мда. Мне есть куда стремиться, но ничего, я только начал изучать питон.

  • @andriyyeromenko7695
    @andriyyeromenko7695 Před rokem +3

    Решение исходит из того, что количество разворотов неизвестно. Но, на самом деле, оно известно. Если матрица квадратная, то количество поворотов будет ( 2*n - 2 ) , или, другими словами, количество граней спирали будет ( 2*n - 1 ).

  • @user-wr4is2vr2o
    @user-wr4is2vr2o Před 4 lety

    мое решение отличалось.... нда, пере усложнил.. ..

  • @parus2916
    @parus2916 Před 2 lety +3

    # Как вам такое решение? Оно универсальное, как для квадрата, так и для прямогугольника.
    storona_1 = int(input ("Введите длину 1 стороны "))
    storona_2 = int(input ("Введите длину 2 стороны "))
    number = 0
    stroka = 0 # индекс строки
    razrad = len(str(storona_1 * storona_2))
    massiv = [[0]*storona_1 for item in range (storona_2)] # заполняем массив нулями
    for gl_item in range ((storona_1 * storona_2)//4):
    for item in range (0, storona_1):# двигаемся по строке вправо
    if massiv [stroka] [item] == 0:
    number = number + 1
    massiv [stroka] [item] = number
    stolbez = item

    for item in range (0, storona_2): # двигаемся по столбцу вниз
    if massiv [item] [stolbez] == 0:
    number = number + 1
    massiv [item] [stolbez] = number
    stroka = item

    for item in range (storona_1-1, -1, -1): # двигаемся по строке налево
    if massiv [stroka] [item] == 0:
    number = number + 1
    massiv [stroka] [item] = number
    stolbez = item

    for item in range (storona_2-1, -1, -1): # двигаемся по стобцу вверх
    if massiv [item] [stolbez] == 0:
    number = number + 1
    massiv [item] [stolbez] = number
    stroka = item
    for item in range(0, storona_2):
    for i in range(len(massiv[item])): massiv[item][i] = str(massiv[item][i]).zfill(razrad)
    print (",".join(massiv[item]))

    • @trap5250
      @trap5250 Před rokem

      такое себе, брат он всегда на 4 спускается вниз
      9 столбцов у тебя по кд будет 4 столбца

  • @Frontend_man
    @Frontend_man Před 2 lety +2

    Вопрос такой. С 15 апреля закрывается ютуб в России, где то есть ещё канал где можно и дальше вроходить ваши курсы?

  • @gogaserg
    @gogaserg Před 2 lety +1

    Канал взломали? Проснулся, а тут такая вакханалия на канале.

    • @egoroffchannel
      @egoroffchannel  Před 2 lety +3

      Какая?) это просто все разборы задач перешли в бесплатный статус

  • @alex_pure
    @alex_pure Před rokem

    Попросил ChatGPT написать код
    n = int(input())
    # создаем квадратную матрицу, заполненную нулями
    matrix = [[0] * n for _ in range(n)]
    # начальные значения позиции и шага
    i, j = 0, 0
    di, dj = 0, 1
    # заполняем матрицу числами от 1 до n * n
    for number in range(1, n * n + 1):
    matrix[i][j] = str(number).ljust(len(str(n * n)))
    if matrix[(i + di) % n][(j + dj) % n]:
    di, dj = dj, -di
    i += di
    j += dj
    # выводим матрицу на экран
    for row in matrix:
    print(' '.join(row))

    • @alex_pure
      @alex_pure Před rokem

      Попросил объяснить код
      Данный код создает квадратную матрицу размера n на n и заполняет ее числами от 1 до n * n в спиральной последовательности, начиная с верхнего левого угла и двигаясь по часовой стрелке.
      Переменная n считывает целочисленный ввод пользователя - это размерность квадратной матрицы.
      Создается пустая матрица matrix, заполненная нулями, используя списковое включение.
      Далее происходит заполнение матрицы числами от 1 до n * n в спиральной последовательности. Для этого используется цикл for, который перебирает числа от 1 до n * n + 1. Переменная number хранит текущее число, которое нужно добавить в матрицу.
      На каждой итерации цикла происходит добавление числа number в текущую позицию матрицы matrix[i][j]. Также каждый элемент матрицы выравнивается по ширине до длины str(n * n), чтобы все числа имели одинаковый размер.
      Для движения по спирали используются переменные i, j, di и dj. Переменные i и j определяют текущую позицию в матрице, а di и dj определяют направление движения. Начальное направление - движение вправо (di=0, dj=1).
      Если следующая позиция уже занята, то направление движения изменяется на 90 градусов. Это происходит с помощью проверки matrix[(i + di) % n][(j + dj) % n]. Если следующая позиция уже занята (то есть значение не равно нулю), то происходит изменение направления движения: di, dj = dj, -di.
      В конце, заполненная матрица выводится на экран с помощью вложенного цикла for и метода join(). Каждая строка матрицы соединяется пробелами, чтобы получить строку, которая затем выводится на экран.

    • @Apologet_2
      @Apologet_2 Před 8 měsíci

      Chatgpt - гений

  • @mr3epko73
    @mr3epko73 Před 2 lety

    Планируете перенос видео на рутубе?

  • @umni_kot
    @umni_kot Před 2 lety

    сложно.