Если хочешь подтянуть свои знания, загляни на наш курс «Алгоритмы и структуры данных», на котором ты:
- углубишься в решение практических задач;
- узнаешь все про сложные алгоритмы, сортировки, сжатие данных и многое другое.
Ты также будешь на связи с преподавателем и другими студентами.
В итоге будешь браться за сложные проекты и повысишь чек за свою работу 🙂
В конце марта Библиотека программиста опубликовала суперподборку более, чем 70 бесплатных русскоязычных курсов. Стараясь не отставать от читателей, мы сами штудируем курсы. Мимоходом попадаются занимательные задачки, решение которых доставляет подлинное удовольствие.
Ниже пара таких задач – мы предлагаем вам попробовать их решить и поделиться программным кодом в комментариях! Для решения можно использовать любой язык программирования. Даже в одном и том же языке можно применять абсолютно разные подходы – было бы интересно сравнить, как они различаются по скорости выполнения.
В комментариях действует Markdown-разметка – для вставки форматированного кода ограничьте его с двух сторон тройными апострофами:
Краткое описание идеи.
```
Программный код вашего решения.
```
Рисуем змейку 🐍
Задача: напишите функцию, которая принимает число n
и выводит таблицу размером n * n
, заполненную числами от 1
до n2
по спирали, выходящей из левого верхнего угла и закрученной по часовой стрелке.
Пример. Пусть n = 5
, функция должна вернуть матрицу вида
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
Эту задачу мы повстречали в курсе «Программирование на Python». Если вы зайдёте в тупик – наводки можно найти в обсуждении задания. Попробуйте решить компактно и без дублирования кода.
Строим зиккурат 🏗️🔲📐
Задача: напишите функцию, которая принимает целое число n
и выводит «ступенчатую» матрицу, состоящую из n
«этажей». Этажи нумеруются с первого, ширина ступеньки равна одной строке или столбцу.
Пример. Пусть n = 4
, функция должна вернуть матрицу вида
1 1 1 1 1 1 1
1 2 2 2 2 2 1
1 2 3 3 3 2 1
1 2 3 4 3 2 1
1 2 3 3 3 2 1
1 2 2 2 2 2 1
1 1 1 1 1 1 1
Данную головоломку мы нашли в курсе «Основы программирования на R». Если у вас возникли трудности, посмотрите комментарии обсуждения задания (в них есть специфика применения R). Особый интерес вызывает решение без циклов и рекурсий.
Хочу ещё таких задач! 💻
Если вам по вкусу подобные задачки, обратите внимание на наш сериал головоломок из 15 серий. В каждой серии новая задача и подробный ответ на предыдущую:
- Двойные фамилии (комбинаторика)
- Спрятанное решение (арифметический ребус)
- Остров хамелеонов (алгоритмы)
- Номер Тьюринга (комбинаторика)
- Время великих учёных (алгоритмы)
- Прогуливающиеся джентльмены (логика)
- Часы с одинаковыми стрелками (самая популярная)
- Вирус в колонии бактерий (алгебраическая задача)
- Шесть шахматных коней (задача на алгоритмы по теории графов)
- Задача о беглеце (динамическое программирование)
- Чеширский Кот и число палиндромов (комбинаторика)
- Карточная головоломка Конвея (алгоритм сортировки)
- Как ограбить банк? (динамическое программирование и шифры)
- Головоломка о лягушках (алгоритмы)
- Задача Сфинкса о разрезании лестниц (алгоритмы)
Комментарии
First task, JS
вариант первой задачи на Python (адаптируемый под вторую)
Обе задачи в плюсах
Версия на Intel ASM под intel 8086. Очень маленькая по размеру бинарника. Имеет ограничение по размеру змейки - размер от 1 до 9
Если надо сразу выводить змейку на печать, без массива, то придётся малость посчитать. Старый добрый Pascal/Delphi
life is pain without basic ! Option Base 1 Sub snake() Dim asd As Variant Dim NAR As Variant Range("A1").CurrentRegion.Delete
n = 10 ReDim asd(n ^ 2) ReDim NAR(n, n)
For i = 1 To n ^ 2 asd(i) = i Next i
a = 1 c = 1 x = 1 y = 1 flag = 1
For i = 1 To n ^ 2
Next i
Range("A1").Resize(UBound(NAR, 1), UBound(NAR, 2)).Value = NAR
End Sub
Змейка на python
https://pastebin.com/NeSqxENd C++
https://pastebin.com/GxfH2S5t C++
https://github.com/ArnoldSh/SnakeMatrix
При попытке изменить комментарий эта ссылка не работает
Исправили.
Для задачи о змейке, решение на питон:
1 Задача:
2 Задача:
' Написать программу, которая принимает число n и выводит таблицу размером n * n, заполненную числами от 1 до n^2 по спирали, ' выходящей из левого верхнего угла и закрученной по часовой стрелке.
http://cpp.sh/5zupb
Свои решения пользователи также выкладывают на странице сообщества Библиотеки программиста вконтакте.
http://www.cpp.sh/2ydrz
Осторожно! Решение через геометрическое представление для второй задачи. Язык R, реализовано без применения циклов и рекурсий: