В данном случае основной является задача Эйнштейна.
Она является примером широкого класса задач программирования в ограничениях, в которых объекты должны удовлетворять некоторому набору ограничений.
Стек приложения: C++, BuDDy
CMake и библиотеку предоставил shihanov.ri