Решение задачи acmp № 196 Спираль На тему "Вложенные списки" • 29 Вложенные списки Py...
Пікірлер: 66
@dimitrilarios26674 жыл бұрын
Если следовать хронологии уроков, то для решения задачи в таком виде явно маловато пройденного материала. Нет, конечно, она решаема, но другими, не очень красивыми способами. Задача была не лёгкой. Из данного видео я получил новые знания. Спасибо за прекрасные уроки.
@Chernikru2 жыл бұрын
Это самая сложная задача из двух топовых урсов на питон на степике,которые были признаны лучшиму курсами годов)
@ZheKaYT Жыл бұрын
задача очень простая, я когда её первый раз услышал, сразу понял что делать и как. Потом первый раз в жизни открыл питон, и буквально за 8 минут без опыта в питоне, сделал спиральное заполенине массива. но мне этого показалось мало, и я сделал так же серпантиновидное заполнение, звездочное и деадрофинджетное заполнение по 4-ой актаве квадротичного корня.
@AveFragged Жыл бұрын
@@ZheKaYT Жека, привет! Расскажи, пожалуйста, немного о себе. Что за плечами, школа с мат уклоном? 5-10 раз пересмотрел Умницу Уилла Хантинга?
@ZheKaYT Жыл бұрын
@@AveFragged я бы это назвал талантом. Школу окончил без 3ек и 4ок, институт с красными, во дворе самый популярный, в жизни довольно успешный. Просто так повелось
@AveFragged Жыл бұрын
@@ZheKaYT спасибо за ответ. После таких историй успеха, оглядываясь на постоянные превозмогания в собственной жизни, хочется сдаться. Собственно так и нашел это видео, несколько недель бился своим умом с задачей-спиралью на степике, сдался и нашел в комментах ссылку на это видео. Успехов во всех делах!
@user-js4yf3dv9g2 жыл бұрын
Спасибо тебе огромное! Прохожу курс на степике, очень тяжело. Эту задачу прям по полочкам разложил. И мне сама подача понравилась, емко и по делу! А не нудятина на 40+ минут. Однозначно подпишусь)
@Igor_UA Жыл бұрын
Суть упрощенного алгоритма передана правильно. В остальном - чепуха. В общем виде: задача для прямоугольника, а не квадрата. Точка старта - может быть любая граничная. Цикл while элементарно меняется на for , про PEP8 вообще умалчиваю.
@vladimirlutsjak1354 Жыл бұрын
Первая часть ролика послужила хорошим вдохновением, этого было достаточно для решения задачи. Благодарю!
@LonlyLokly3 ай бұрын
С продвинутого курса по Stepik. Только благодаря этому видео решил данную задачу для прямоугольной матрицы
@user-wr4is2vr2o4 жыл бұрын
Целый день ломал голову, но написал свое решение! теперь можно и посмотреть!
@jaygities8549 Жыл бұрын
Спасибо, очень долго с этой задачей мучался!
@user-fy9zc9bm9m2 жыл бұрын
Реально ли самому решить такую задачку, не зная ее решения, тоже самое касается задач по алгоритмам, не знаю алгоритмов реально ли самому решить такие задачи?
@user-pv8wl2np6i6 ай бұрын
ОГРОМНОЕ СПАСИБО! Пять дней потратила, но разобралась вроде.
@user-evgeniy644 жыл бұрын
Чувак, ты взорвал мне мозг)
@egoroffchannel4 жыл бұрын
ну так задача такая)
@darkhanishere2 жыл бұрын
Hello World! Спасибо за объяснение! Удачи в развитии канала!
@user-gc8ko1jf3f3 жыл бұрын
Артем, Спасибо в очередной раз.
@buuuxiii6681 Жыл бұрын
Как же плакать хочется.... спасибо за видео🥲💫
@nicholay_mix Жыл бұрын
решил через реверсы и транспонирование, это та же самая задача, только код будет работать не только для квадратной матрицы 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()
@sharpd11734 жыл бұрын
Побольше бы таких сложных, а не с 5% сложности
@Fravije Жыл бұрын
Интересное решение. Но было бы еще интереснее посмотреть на более универсальное решение, когда m != n, или (m = 1), или (m x n = 1) и т.д.. Если я правильно понял, этот код не подойдет под прямоугольную матрицу, даже при попытке переписать его.
@user-ho5sk8nt1m Жыл бұрын
Большое Вам спасибо, буду разбираться...
@ZheKaYT Жыл бұрын
Попробуй лябду заюзать, задача простая как два паольца обоссать
@andriyyeromenko7695 Жыл бұрын
Решение исходит из того, что количество разворотов неизвестно. Но, на самом деле, оно известно. Если матрица квадратная, то количество поворотов будет ( 2*n - 2 ) , или, другими словами, количество граней спирали будет ( 2*n - 1 ).
@flexo23dl Жыл бұрын
Офигеть как просто. Спасибо
@user-ot2qc7fm6f27 күн бұрын
странная часть в 9 строчке (первый иф) вы проверяете через mas[][] будет ли в массиве Но тут проблемка такая что пэйчар ругается если ты выходишь за массив как быть?
@fender49212 жыл бұрын
Привет, почему курс ООП на степика закрыли ? (((
@krilariaspace2249 Жыл бұрын
На курсе просто списал эту задачу, теперь сел разбираться как её делать это прям несложно. ппц я тупой когда не знаю готового решения)
@Dm-if3vl3 жыл бұрын
Очень интересно
@VillyVilly-tz1vm11 ай бұрын
Почему блок: x+=d_row y+=d_column mas[x][y]=i I+=1 срабатывает в других условиях блоков if и elif, если он там не прописан?
@phoenux9692 жыл бұрын
Здорова , спасибо за контент . Есть ли в планах обучалка по django restframework?
@Free-jo7ts2 жыл бұрын
Привет, очень помог. Вопрос следующий, как можно видоизменить код, чтобы спираль заполнялась и по не квадратной матрице, заранее спасибо. Линукс под видео поставил 😃
@Free-jo7ts2 жыл бұрын
Только написал и решил. Для матрицы не квадратной, нужно будет не I**2 а можно m*n, плюс условие поменять по столбцам не до 'n', а до 'm', ну и принять с клавиатуры две новых переменных
@ZheKaYT Жыл бұрын
Всё очень просто. Нужно использовать m*n а не i**2, к тому же поменять условие по столбцам не до n, а до m.
@greatgoltz2 жыл бұрын
а почему нет доступа к курсу по ооп?
@NektoNene4 жыл бұрын
спасибо!
@userLaravel3 жыл бұрын
Ну так как все-таки сдать данное решение на степике?
@egoroffchannel3 жыл бұрын
со степиком все сложно, там ответ должен пробел в пробел совпадать я уже не раз говорил, что данную задачу мне со степика проще удалить ориентир правильности решения, если acmp принимает
@fWhyJKE2 жыл бұрын
ахаххааххах. Решил сейчас такую же задачу на 100+ строчек кода, решал 4 часа, потом решил посмотреть, как люди решают... Мда. Мне есть куда стремиться, но ничего, я только начал изучать питон.
@olgakolesnikova66712 жыл бұрын
ничего не понятно, но очень интересно😅
@parus29162 жыл бұрын
# Как вам такое решение? Оно универсальное, как для квадрата, так и для прямогугольника. 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 Жыл бұрын
такое себе, брат он всегда на 4 спускается вниз 9 столбцов у тебя по кд будет 4 столбца
@karlshtolz1066 Жыл бұрын
а код можно где-то увидеть? или надо обязательно глаза на видео ломать и паузами играть?
@user-uz8sb2es7i Жыл бұрын
спасибо Гвидо за нулевой индекс
@bjj1423 Жыл бұрын
Гений
@user-zj3kc4eq1g2 жыл бұрын
Здравствуйте!расскажите пожалуиста про функцию mod очень нужно Заранее спасибо!!
@user-zj3kc4eq1g2 жыл бұрын
И как сделать в цикле while чтобы числа плюсовались???
@metallolomov2 жыл бұрын
А чем плох цикл в цикле (я про фор фор)?
@Frontend_man2 жыл бұрын
Вопрос такой. С 15 апреля закрывается ютуб в России, где то есть ещё канал где можно и дальше вроходить ваши курсы?
@user-wq8kr6so9d Жыл бұрын
🤔
@nto25034 жыл бұрын
степик примет это решение? сдается, что нет. из-за пробела в конце строк
@egoroffchannel4 жыл бұрын
в степике я сделал, чтобы он значения массива проверял, отступы его безразличны но не факт, что тест работает корректно
@user-wr4is2vr2o4 жыл бұрын
мое решение отличалось.... нда, пере усложнил.. ..
@gogaserg2 жыл бұрын
Канал взломали? Проснулся, а тут такая вакханалия на канале.
@egoroffchannel2 жыл бұрын
Какая?) это просто все разборы задач перешли в бесплатный статус
@mr3epko732 жыл бұрын
Планируете перенос видео на рутубе?
@alex_pure Жыл бұрын
Попросил 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 Жыл бұрын
Попросил объяснить код Данный код создает квадратную матрицу размера 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(). Каждая строка матрицы соединяется пробелами, чтобы получить строку, которая затем выводится на экран.