19 апреля 2020

Пара алгоритмических задач для успешного программиста: нарисовать змейку, выстроить зиккурат

Пишу, перевожу и иллюстрирую IT-статьи. На proglib написал 140 материалов. Увлекаюсь Python, вебом и Data Science. Открыт к диалогу – ссылки на соцсети и мессенджеры: https://matyushkin.github.io/links/ Если понравился стиль изложения, упорядоченный список публикаций — https://github.com/matyushkin/lessons
Внутри поста две алгоритмические головоломки. Предложите в комментариях самое быстрое/лаконичное решение на любимом языке программирования – покажите класс!
Пара алгоритмических задач для успешного программиста: нарисовать змейку, выстроить зиккурат


Если хочешь подтянуть свои знания, загляни на наш курс «Алгоритмы и структуры данных», на котором ты:

  1. углубишься в решение практических задач;
  2. узнаешь все про сложные алгоритмы, сортировки, сжатие данных и многое другое.

Ты также будешь на связи с преподавателем и другими студентами.

В итоге будешь браться за сложные проекты и повысишь чек за свою работу 🙂

***

В конце марта Библиотека программиста опубликовала суперподборку более, чем 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 серий. В каждой серии новая задача и подробный ответ на предыдущую:

  1. Двойные фамилии (комбинаторика)
  2. Спрятанное решение (арифметический ребус)
  3. Остров хамелеонов (алгоритмы)
  4. Номер Тьюринга (комбинаторика)
  5. Время великих учёных (алгоритмы)
  6. Прогуливающиеся джентльмены (логика)
  7. Часы с одинаковыми стрелками (самая популярная)
  8. Вирус в колонии бактерий (алгебраическая задача)
  9. Шесть шахматных коней (задача на алгоритмы по теории графов)
  10. Задача о беглеце (динамическое программирование)
  11. Чеширский Кот и число палиндромов (комбинаторика)
  12. Карточная головоломка Конвея (алгоритм сортировки)
  13. Как ограбить банк? (динамическое программирование и шифры)
  14. Головоломка о лягушках (алгоритмы)
  15. Задача Сфинкса о разрезании лестниц (алгоритмы)
Больше полезной информации вы найдете на наших телеграм-каналах «Библиотека программиста» и «Книги для программистов».

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию
Разработчик C++
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ