Спасибо тебе огромное! Прохожу курс на степике, очень тяжело. Эту задачу прям по полочкам разложил. И мне сама подача понравилась, емко и по делу! А не нудятина на 40+ минут. Однозначно подпишусь)
Если следовать хронологии уроков, то для решения задачи в таком виде явно маловато пройденного материала. Нет, конечно, она решаема, но другими, не очень красивыми способами. Задача была не лёгкой. Из данного видео я получил новые знания. Спасибо за прекрасные уроки.
задача очень простая, я когда её первый раз услышал, сразу понял что делать и как. Потом первый раз в жизни открыл питон, и буквально за 8 минут без опыта в питоне, сделал спиральное заполенине массива. но мне этого показалось мало, и я сделал так же серпантиновидное заполнение, звездочное и деадрофинджетное заполнение по 4-ой актаве квадротичного корня.
@@AveFragged я бы это назвал талантом. Школу окончил без 3ек и 4ок, институт с красными, во дворе самый популярный, в жизни довольно успешный. Просто так повелось
@@ZheKaYT спасибо за ответ. После таких историй успеха, оглядываясь на постоянные превозмогания в собственной жизни, хочется сдаться. Собственно так и нашел это видео, несколько недель бился своим умом с задачей-спиралью на степике, сдался и нашел в комментах ссылку на это видео. Успехов во всех делах!
Суть упрощенного алгоритма передана правильно. В остальном - чепуха. В общем виде: задача для прямоугольника, а не квадрата. Точка старта - может быть любая граничная. Цикл while элементарно меняется на for , про PEP8 вообще умалчиваю.
Реально ли самому решить такую задачку, не зная ее решения, тоже самое касается задач по алгоритмам, не знаю алгоритмов реально ли самому решить такие задачи?
решил через реверсы и транспонирование, это та же самая задача, только код будет работать не только для квадратной матрицы 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()
Интересное решение. Но было бы еще интереснее посмотреть на более универсальное решение, когда m != n, или (m = 1), или (m x n = 1) и т.д.. Если я правильно понял, этот код не подойдет под прямоугольную матрицу, даже при попытке переписать его.
Привет, очень помог. Вопрос следующий, как можно видоизменить код, чтобы спираль заполнялась и по не квадратной матрице, заранее спасибо. Линукс под видео поставил 😃
Только написал и решил. Для матрицы не квадратной, нужно будет не I**2 а можно m*n, плюс условие поменять по столбцам не до 'n', а до 'm', ну и принять с клавиатуры две новых переменных
со степиком все сложно, там ответ должен пробел в пробел совпадать я уже не раз говорил, что данную задачу мне со степика проще удалить ориентир правильности решения, если acmp принимает
ахаххааххах. Решил сейчас такую же задачу на 100+ строчек кода, решал 4 часа, потом решил посмотреть, как люди решают... Мда. Мне есть куда стремиться, но ничего, я только начал изучать питон.
Решение исходит из того, что количество разворотов неизвестно. Но, на самом деле, оно известно. Если матрица квадратная, то количество поворотов будет ( 2*n - 2 ) , или, другими словами, количество граней спирали будет ( 2*n - 1 ).
# Как вам такое решение? Оно универсальное, как для квадрата, так и для прямогугольника. 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]))
Попросил 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))
Попросил объяснить код Данный код создает квадратную матрицу размера 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(). Каждая строка матрицы соединяется пробелами, чтобы получить строку, которая затем выводится на экран.
Спасибо тебе огромное! Прохожу курс на степике, очень тяжело. Эту задачу прям по полочкам разложил. И мне сама подача понравилась, емко и по делу! А не нудятина на 40+ минут.
Однозначно подпишусь)
Если следовать хронологии уроков, то для решения задачи в таком виде явно маловато пройденного материала. Нет, конечно, она решаема, но другими, не очень красивыми способами. Задача была не лёгкой. Из данного видео я получил новые знания. Спасибо за прекрасные уроки.
Это самая сложная задача из двух топовых урсов на питон на степике,которые были признаны лучшиму курсами годов)
задача очень простая, я когда её первый раз услышал, сразу понял что делать и как. Потом первый раз в жизни открыл питон, и буквально за 8 минут без опыта в питоне, сделал спиральное заполенине массива. но мне этого показалось мало, и я сделал так же серпантиновидное заполнение, звездочное и деадрофинджетное заполнение по 4-ой актаве квадротичного корня.
@@ZheKaYT Жека, привет! Расскажи, пожалуйста, немного о себе. Что за плечами, школа с мат уклоном? 5-10 раз пересмотрел Умницу Уилла Хантинга?
@@AveFragged я бы это назвал талантом. Школу окончил без 3ек и 4ок, институт с красными, во дворе самый популярный, в жизни довольно успешный. Просто так повелось
@@ZheKaYT спасибо за ответ. После таких историй успеха, оглядываясь на постоянные превозмогания в собственной жизни, хочется сдаться. Собственно так и нашел это видео, несколько недель бился своим умом с задачей-спиралью на степике, сдался и нашел в комментах ссылку на это видео. Успехов во всех делах!
Первая часть ролика послужила хорошим вдохновением, этого было достаточно для решения задачи. Благодарю!
С продвинутого курса по Stepik. Только благодаря этому видео решил данную задачу для прямоугольной матрицы
Артем, Спасибо в очередной раз.
Суть упрощенного алгоритма передана правильно.
В остальном - чепуха.
В общем виде: задача для прямоугольника, а не квадрата. Точка старта - может быть любая граничная. Цикл while элементарно меняется на for , про PEP8 вообще умалчиваю.
Hello World! Спасибо за объяснение! Удачи в развитии канала!
Спасибо, очень долго с этой задачей мучался!
Целый день ломал голову, но написал свое решение! теперь можно и посмотреть!
Большое Вам спасибо, буду разбираться...
Попробуй лябду заюзать, задача простая как два паольца обоссать
Чувак, ты взорвал мне мозг)
ну так задача такая)
Офигеть как просто. Спасибо
ОГРОМНОЕ СПАСИБО! Пять дней потратила, но разобралась вроде.
Очень интересно
Как же плакать хочется.... спасибо за видео🥲💫
Реально ли самому решить такую задачку, не зная ее решения, тоже самое касается задач по алгоритмам, не знаю алгоритмов реально ли самому решить такие задачи?
спасибо!
Побольше бы таких сложных, а не с 5% сложности
Здорова , спасибо за контент . Есть ли в планах обучалка по django restframework?
Гений
решил через реверсы и транспонирование,
это та же самая задача, только код будет работать не только для квадратной матрицы
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()
Привет, почему курс ООП на степика закрыли ? (((
а почему нет доступа к курсу по ооп?
Интересное решение. Но было бы еще интереснее посмотреть на более универсальное решение, когда m != n, или (m = 1), или (m x n = 1) и т.д..
Если я правильно понял, этот код не подойдет под прямоугольную матрицу, даже при попытке переписать его.
Привет, очень помог. Вопрос следующий, как можно видоизменить код, чтобы спираль заполнялась и по не квадратной матрице, заранее спасибо. Линукс под видео поставил 😃
Только написал и решил. Для матрицы не квадратной, нужно будет не I**2 а можно m*n, плюс условие поменять по столбцам не до 'n', а до 'm', ну и принять с клавиатуры две новых переменных
Всё очень просто. Нужно использовать m*n а не i**2, к тому же поменять условие по столбцам не до n, а до m.
а код можно где-то увидеть? или надо обязательно глаза на видео ломать и паузами играть?
Почему блок: x+=d_row
y+=d_column
mas[x][y]=i
I+=1
срабатывает в других условиях блоков if и elif, если он там не прописан?
Ну так как все-таки сдать данное решение на степике?
со степиком все сложно, там ответ должен пробел в пробел совпадать
я уже не раз говорил, что данную задачу мне со степика проще удалить
ориентир правильности решения, если acmp принимает
На курсе просто списал эту задачу, теперь сел разбираться как её делать это прям несложно. ппц я тупой когда не знаю готового решения)
Здравствуйте!расскажите пожалуиста про функцию mod очень нужно
Заранее спасибо!!
И как сделать в цикле while чтобы числа плюсовались???
спасибо Гвидо за нулевой индекс
ничего не понятно, но очень интересно😅
А чем плох цикл в цикле (я про фор фор)?
степик примет это решение? сдается, что нет. из-за пробела в конце строк
в степике я сделал, чтобы он значения массива проверял, отступы его безразличны
но не факт, что тест работает корректно
ахаххааххах. Решил сейчас такую же задачу на 100+ строчек кода, решал 4 часа, потом решил посмотреть, как люди решают...
Мда. Мне есть куда стремиться, но ничего, я только начал изучать питон.
Решение исходит из того, что количество разворотов неизвестно. Но, на самом деле, оно известно. Если матрица квадратная, то количество поворотов будет ( 2*n - 2 ) , или, другими словами, количество граней спирали будет ( 2*n - 1 ).
мое решение отличалось.... нда, пере усложнил.. ..
# Как вам такое решение? Оно универсальное, как для квадрата, так и для прямогугольника.
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]))
такое себе, брат он всегда на 4 спускается вниз
9 столбцов у тебя по кд будет 4 столбца
Вопрос такой. С 15 апреля закрывается ютуб в России, где то есть ещё канал где можно и дальше вроходить ваши курсы?
🤔
Канал взломали? Проснулся, а тут такая вакханалия на канале.
Какая?) это просто все разборы задач перешли в бесплатный статус
Попросил 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))
Попросил объяснить код
Данный код создает квадратную матрицу размера 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(). Каждая строка матрицы соединяется пробелами, чтобы получить строку, которая затем выводится на экран.
Chatgpt - гений
Планируете перенос видео на рутубе?
сложно.