welcome: please sign in

Revision 1 as of 2011-01-19 13:12:59

Clear message
location: FinalProblemDescriptions / Packing

Packing

Problem Description

* Input predicates: area/2, max_square_num/1, square/2

* Output predicates: pos/3

Given a rectangular area of a known dimension and a set of squares, each of which has a known dimension, the problem is to pack all the squares into the rectangular area such that no two squares overlap each other. There can be wasted spaces in the rectangular area.

The rectangular area forms a coordinate plane where the left upper corner of the area is the origin, the top edge is the x-axis, and the left edge is the y-axis.

The input contains a fact area(W,H) which specifies the dimension of the rectangular area (the top edge is W units and the left edge is H units), a fact max_square_num(N) which gives the number of squares to be packed (the squares are numbered from 1 to N), and a fact square(I,Size) for each I between 1 and N which gives the size of the square numbered I.

The output should contain a fact pos(I,X,Y) for each square which gives the coordinates of the left upper corner of the square in the rectangular area. Let W be the width and H the height of the rectangular area, and Size be the size of the square. Then the coordinates X and Y must satisfy:

Example: For the following input

area(6,4).
max_square_num(3).
square(1,4).
square(2,2).
square(3,2).

one possible solution is:

pos(1,0,0).
pos(2,4,0).
pos(3,4,2).