Как стать автором
Обновить

Змейка здорового человека

Время на прочтение1 мин
Количество просмотров3.8K

Если вы, как и я, устрашились фундаментального двухчастного трактата коллеги@Orazbek_B, возможно вас заинтересует это крохотное эссе. Сперва – код на питоне:

n, m = 5, 8  # высота и ширина матрицы

def draw(title, f):
    print(f"\n{title:-^{m * 3 - 1}}")
    res = [""] * (n * m)
    for i, j in enumerate(sorted(range(n * m), key=lambda i: f(i // m, i % m))):
        res[j] = f"{i:>02}"
    for i in range(0, n * m, m):
        print(*res[i:i + m])

draw("horizontal", lambda y, x: (y, -x if y % 2 else x))
draw("diagonal"  , lambda y, x: (y + x, x if (y + x) % 2 else -x))

Результатом выполнения этого кода будут две аккуратные змейки:

------horizontal-------

00 01 02 03 04 05 06 07

15 14 13 12 11 10 09 08

16 17 18 19 20 21 22 23

31 30 29 28 27 26 25 24

32 33 34 35 36 37 38 39

-------diagonal--------

00 02 03 09 10 19 20 29

01 04 08 11 18 21 28 30

05 07 12 17 22 27 31 36

06 13 16 23 26 32 35 37

14 15 24 25 33 34 38 39


В алгоритме ничего сложного: каждой его ячейке ставим в соответствие такой ключ, чтобы, будучи отсортированы по ключам, ячейки заполнялись бы в нужном порядке.

Наши матрицы не злобные, они мягкие и пушистые. Бонус: они не обязательно квадратные. Можно отрисовать и спиральку, хоть прямоугольную, хоть ромбическую, хоть округлую, можно залить не прямоугольник, а фигуру произвольной формы – было бы желание.

Извинити, что так коротенько: о чём говорить, когда говорить не о чем ?

Теги:
Хабы:
Всего голосов 17: ↑6 и ↓11-4
Комментарии7

Публикации

Истории

Работа

Data Scientist
93 вакансии
Python разработчик
195 вакансий

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн