>Как можно создать например такой пазл с гарантией что его можно решить?
Это очередная вариация древнего сокобана, к вопросу как была создана механика. Создать автоматически случайный конкретный инстанс паззла довольно просто. Сначала генерируешь решенное состояние, потом применяешь случайные действия в обратном порядке. Получаешь некоторое состояние, которое гарантированно можно решить, применив те же действия в прямом порядке. По принципу кубика Рубика. Другое дело, что обычно такие паззлы не будут интересными для человека - тут уже можно эвристик навернуть, либо делать вручную, либо разбавить сделанные вручную инстансы автоматическими.