Problema de embalaje revisitado

Estoy desarrollando un juego y encontré un problema que tengo que resolver para manejar el diseño de un componente que me parece un problema de empaque.

Para resumir lo que necesito hacer, supongamos que tengo un espacio similar al siguiente:

+------------+---------+------------+
| 0          | 1       | 2          |
|            |         |            |
|            |         |            |
|            |         |            |
+------------+---------+------------+
| 3          | 4       | 5          |
|            |         |            |
|            |         |            |
+------------+---------+------------+
| 6          | 7       | 8          |
|            |         |            |
|            |         |            |
|            |         |            |
+------------+---------+------------+

en el que cada celda de la esquina es 4x4, mientras que la central es 3x3 (de modo que las restantes son 3x4 y 4x3). Luego tengo un conjunto de elementos para colocar dentro de estos bloques que pueden variar de 1x1 a 3x3 (no creo que se necesite 4x4 todavía, pero no debería cambiar nada). Por supuesto, estos elementos no pueden cruzar las líneas y deben estar completamente dentro de un solo bloque.

¿Cuál podría ser la mejor manera de asignarlos? Asumiendo que prefiero no tenerlos todos unidos si no es necesario (por ejemplo, no coloque dos elementos juntos si hay suficiente espacio para separarlos). Estoy buscando un algoritmo simple, también porque la situación es bastante limitada.

Pregunta adicional: asumiendo otros bloques además de estos 9 (tal vez otros 3-4), ¿cómo podría priorizarlos en comparación con los nuevos? (Quiero decir, simplemente no usa el bloque adicional hasta que se haya alcanzado un umbral de llenado) ...

Por supuesto que estoy buscando la idea general, sin implementación :)

Respuestas a la pregunta(1)

Su respuesta a la pregunta