matyushkin 19 апреля 2020

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

Внутри поста две алгоритмические головоломки. Предложите в комментариях самое быстрое/лаконичное решение на любимом языке программирования – покажите класс!
20
16404

В конце марта Библиотека программиста опубликовала суперподборку более, чем 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. Задача Сфинкса о разрезании лестниц (алгоритмы)

РУБРИКИ В СТАТЬЕ

МЕРОПРИЯТИЯ

Комментарии 20

ВАКАНСИИ

Senior JS разработчик
по итогам собеседования
Техлид Java
до 250000 RUB

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

BUG