Підсумок
Мета цього завдання - створити скасоване зображення-версію 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 прямокутників? (болісно буде змусити програму змінити поведінку, коли бланк знаходиться на краю / куті)