Резюме
Цель этой проблемы заключается в создании отмененным образом-версии 15-головоломки / скользящей головоломка также называется taquin на французском.
Детали:
Учитывая вход состоит из:
- изображение,
- целое число
n
, - другое целое число
r
,
Ваша программа, или функция, или что-либо еще, что подходит, должны выводить то же изображение ( то есть тот же размер и формат), что и входные данные, но подверглось следующему процессу:
- разделить изображение на
n²
прямоугольники, - удалить один из этих прямоугольников, случайно,
- переместите случайное число смежных прямоугольников из строки / столбца, на который воздействует точка (2.), чтобы созданное отверстие было заполнено, и в этой строке / столбце было сгенерировано еще одно. Это число может быть,
0
если пробел находится в углу или на краю.
Повторите (3.) r
раз.
Разъяснения:
- Если вы переместили прямоугольники со строки на шаге (3.), вы должны переместить прямоугольники со столбца в следующем повторении,
- если вы переместили прямоугольники слева направо на шаге строки, они должны быть перемещены справа налево на следующем шаге строки, то же самое для столбцов сверху вниз и снизу вверх относительно столбцов,
- Вы можете предположить, что
n
будет выбрано таким образом, чтобы он разделял длины сторон изображения.
Последний пункт:
Анимированные .gif
показы всего процесса очень приветствуются.
Я предлагаю использовать следующую картинку (которая есть 1024x768
), n=16
и r=100
в качестве модели вы можете использовать любую другую картинку (если она, конечно, актуальна и соответствует правилам SE).
Обратите внимание, что применяются стандартные правила лазеек .
Это код-гольф , поэтому выигрывает более короткая подача!
Так как пример был запрошен, вот один, сделанный «вручную», с n=4
иr=1
Шаги 1 и 2
Шаг 3 : по линии, 2 прямоугольника слева
move a random number of contiguous rectangles
это может быть 0 прямоугольников? (было быОтветы:
Mathematica, 246 байт
Анонимная функция. Содержит U + F3C7, соответствующий
Transpose
оператору Mathematica . Эта функция беретImage
объект и возвращаетImage
объект.Пример анимации, с
n=16
иr=100
После 5000 итераций:
(Нажмите на изображение для увеличения)
объяснение
инициализация
Сохраните
Nest
функцию (повторяющуюся операцию) вn
.Сохраните
RandomInteger
функцию вk
иReverse
функцию вq
.Разделение изображения
Разделите входное изображение на (второй вход) ^ 2 тайлов.
Генерация двух
RandomInteger
с между 1 и вторым входом. Это выбирает случайную плитку.Сделайте эту плитку белой. Сохраните это в
i
.Движущиеся плитки
Создайте два случайных целых числа от 0 до 1 и сохраните их в
t
иr
, соответственно. Это случайным образом выбирает направление.Определить функцию
o
: составt
.r
раз.Применить
o
к входу.Найдите столбец
i
(белое изображение).Вычтите одно и найдите случайное целое число от 0 до этого числа. Это случайным образом выбирает количество плиток для перемещения.
Когда упомянутое количество плиток встречается перед
i
(белым изображением), поменяйте их местами.Отмените
o
функцию и примените ее к результату вышеуказанной операции. Это не переворачивает и не транспонирует изображение.Циклы и сборка изображений
Повторите вышеуказанный процесс (третий ввод) раз.
Положите изображения вместе.
источник