Я увидел крутой гиф из кривой двойного дракона, сделанный из квадрата, и подумал, что произойдет, если мы начнем с другого базового изображения. Поэтому я написал программу для этого.
Это так круто, что я подумал, что было бы весело сделать это как вызов.
задача
Вы получите квадратное изображение с длиной края, равной 2 (больше 4).
Чтобы сделать это изображение, вы должны начать с разделения вашего изображения на 4 вертикальные полосы одинакового размера и смещения смежных полос на одну восьмую от размера изображения в противоположных направлениях (смещенные полосы должны быть намотаны на другую сторону). Затем вы должны повторять этот процесс каждый раз, разбивая изображение на вдвое большее количество делений и сдвигаясь вдвое по сравнению с предыдущим временем. На каждой итерации вы должны чередовать вертикальные и горизонтальные сдвиги. Вы должны выполнять итерацию до тех пор, пока сдвиг не потребует от вас смещения на дробное число пикселей (это всегда будет 1/2), после чего вы закончите.
При смещении по вертикали нечетных полос слева (с нулевым индексом) должно смещаться вниз, а при смещении вверх. При горизонтальном смещении нечетные полосы сверху должны смещаться влево, а четные полосы - вправо.
Вам нужно только вывести / отобразить конечный результат преобразования, а не все промежуточные шаги, как в GIF.
Это код-гольф, поэтому цель состоит в том, чтобы минимизировать длину исходного кода, измеряемую в байтах.
Работал через пример
Я буду работать с изображением кошки, показанным в верхней части страницы, кадр за кадром.
Вот начальное изображение:
Это изображение 512 на 512 пикселей. Мы разделим его на 4 полосы, чтобы начать и сместить каждую полосу на 1/8 размера изображения (64 пикселя) по вертикали.
Теперь мы разделим его на вдвое больше полос (8 полос) и сместим его вдвое меньше, чем в прошлый раз (32 пикселя). На этот раз мы сместимся по горизонтали.
Теперь мы снова сместимся по вертикали, на этот раз разделив на 16 полос и сдвинув каждую полосу на 16 пикселей.
32 полосы, 8 пикселей, горизонтальный сдвиг
64 полосы, 4 пикселя, вертикальный сдвиг.
128 полос, 2 пикселя, горизонтальный сдвиг.
256 полос, 1 пиксель, вертикальный сдвиг.
Поскольку следующий сдвиг потребует от нас перемещения каждой полосы на полпикселя, мы остановимся на этом и выведем результат.
Контрольные примеры
У меня есть рабочий скрипт, который может создавать эти изображения, поэтому я подумал, что позволю вам, ребята, выбрать изображения для тестовых случаев. Так что если у вас есть квадратное изображение, которое имеет степень 2, которое вы хотели бы видеть драконифицированным. Не стесняйтесь, присылайте его мне, и я сделаю тестовый пример.
Вам также следует проверить одноцветное или сплошное черное изображение, чтобы определить, исчезают ли пиксели или нет.
источник
**Start** by shifting one 8th of the size of the image
тогдаrepeat ... each time splitting the image into twice as many divisions and shifting half as far as the previous time
первый раз будет 1/8, второй 1/16. третья 1/32, пока количество пикселей не будет дробным. Я не вижу, что неясно по этому поводу.Ответы:
MATLAB, 237 байт
Взял немного работы с угадыванием, так как я не понял процедуру из спецификаций, но с помощью изображения это сработало.
источник
Python 2,
317313304298источник
input()
и ожидать, что он будет передан в виде строки для получения ввода вместоraw_input()
.Mathematica, 177 байтов
Это медленно и не полностью игра в гольф.
Это Лена
Это Лена Дракон
источник