Many thanks to Tristan Morris for creating a beautiful illustrated hardcover print edition of the site

tcc-case-title
умеренно geeky  умеренно geeky

Случай 151

Летний шарф

Наступила первая неделя лета и принесла приятные теплые ветра, поэтому теперь большинство монахов Храма принимали пищу и медитировали на открытом воздухе. Но художницу Йывень, которая любила открытые пространства, нигде не было видно на территории Храма. Её соседка по келье, монахиня Хвайда, решила разобраться.

В конце концов, она нашла Йывень, которая молча вязала в одном из свободных помещений Храма, как будто прилежный паук в центре огромной паутины из тонкой серой пряжи. Сотни нитей тянулись из мотков, разбросанных по всей комнате. Казалось, что Йывень вяжет шарф из всех нитей сразу.

“Зима была шесть месяцев назад”, - сказала Хвайда, - “Объяснись!”

Йывень нежно перебирала нити рукой: “Каждый оттенок серого отображает разные целые числа в порядке их значения. Для нуля я выбрала цвет с именем ‘Темнота до начала времен’. Тридцать один - это ‘Угольная пыль’, шестьдесят три - ‘Собирающаяся грозовая туча’ и так далее, всё светлее и светлее до двухсот пятидесяти пяти: ‘Белое божественное облако’ “.

“Впечатляющая палитра для такого скромного сезонного аксессуара”, - сказала Хвайда.

Йывень подняла шарф со своих колен: “Это не просто предмет одежды. Рисунок на нём показывает меняющееся состояние массива чисел в процессе сортировки. Каждый ряд представляет собой одно такое изменение, а петли в ряду изображают числа. Видишь, в первом ряду цвета в полном беспорядке, но с каждым рядом они становятся всё более упорядоченными, так как алгоритм сортировки говорит мне, какие нити поменять. Цвет нитей последнего ряда будет плавно меняться от чёрного к белому”.

“Также я тут вижу одну тонкую сверкающую золотую нить и ещё одну рубиновую”, - сказала Хвайда.

Йывень указала ногтём на часть шарфа: “Если на текущем шаге алгоритм сравнивает два элемента, то я завязываю золотые узелки вокруг соответствующих нитей. Если он выбирает опорную точку, то я украшаю эту нить рубином. Таким образом, шарф будет иметь столько строк, сколько операций требуется алгоритму сортировки, и эстетика алгоритма будет видна”.

“Ты всё ещё ищешь красоту в коде?” - сказала Хвайда.

“Тысяча извинений, Хвайда, но это не единственная моя цель”, - сказала Йывень. - “Знакома ли ты с монахом-послушником, недавно присоединившимся к моей команде? Его первой задачей было убедиться, что результирующее множество отсортировано перед отображением. Но он не знал о встроенной утилите сортировки, поэтому реализовал свою собственную”.

“Самая неудачная трата времени”, - сказала Хвайда.

“Твои слова весьма кстати”, - сказал Йывень. - “Он выбрал Bubblesort, как выяснилось в дальнейшем, когда приложение получило очень большое множество и потребовалось несколько минут, чтобы отобразить страницу”.

“Похоже, что ты используешь Bubblesort в качестве основы для рисунка”, - сказал Хвайда, рассматривая готовые ряды.

“Верно!”, - сказала Йывень. - “Я уже связала шарф с помощью встроенного алгоритма сортировки Timsort. Он около четверти метра в ширину и два метра в длину, и я буду с удовольствием носить его. Этот же шарф - подарок для монаха. У него будет такая же ширина, но он будет несколько более... нескладный”.

“Он будет шестьдесят четыре метра в длину!” - воскликнула Хвайда.

“Теперь ты понимаешь, почему я должна начать в июне”, - сказала Йывень. - “Как ты заметила, зима была всего шесть месяцев назад”.

“А что будет, если монах откажется носить твой ​​щедрый подарок?” - спросила Хвайда.

“То же самое, что будет, если он не исправит своё невежество”, - сказала Йывень. Она свернула шарф в тонкую трубку и дернула за концы, показав свою силу. - “Шестьдесят четыре метра делают это неуклюжим шарфом, но отличной петлёй”.

Topics...  sorting, efficiency, reuse, art