Мне нравится кривая Гильберта .
Ваша задача для этой задачи состоит в том, чтобы взять изображение (строго квадратное изображение, где все стороны имеют степень ширины в два пикселя), расправить его построчно зигзагообразно и растянуть его обратно по псевдогильбертовой кривой. ,
Unraveling
Чтобы распутать, вы начнете с пикселя в верхнем левом углу и двигаетесь вправо, пока не дойдете до края изображения. Как только вы дойдете до края изображения, вы переместитесь вниз к следующему ряду и начнете движение влево, пока не дойдете до края снова. Вы будете продолжать распутывать строки за строкой, переключая направление каждый раз, чтобы получить одну непрерывную кривую. Это должно выглядеть как хорошо играемая игра змеи
Результат распутывания должен быть порядка пикселей, который включает каждый пиксель ровно один раз
Reraveling
Как только у вас будет порядок для пикселей, вы переставите их на новом холсте одинакового размера, следуя пути псевдогильбертовой кривой. Для изображения 2**n
квадратного размера вы должны использовать n-ю итерацию псевдогильбертовой кривой. Каждый пиксель будет размещен ровно в одном месте на новом холсте. Вы должны перерисовать изображение так, чтобы точка, изначально находящаяся в верхнем левом углу (начало нашей кривой змей), оставалась там, а точка в правом нижнем углу (конец нашей кривой змей) была помещена в верхнем правом углу.
I / O
Ваша программа или функция должны получать изображение с указанными ограничениями стандартными методами и выводить другое изображение стандартными методами.
счет
Это программа для игры в гольф с минимальным количеством байтов.
Примеры
вход
Выход
вход
Выход
вход
Выход
Я также рекомендую провести тестирование на чистом белом или сплошном цветном изображении, чтобы убедиться, что вы не пропустили ни одного пикселя.
Не стесняйтесь включать свои собственные результаты в свои ответы!