package{
import flash.display.Sprite;
public class Main extends Sprite{
public function Main(){
var srcInstance:ShapeContainer = new ShapeContainer(200, 200);
var cirA:Circle = new Circle(0, 0, 50);
var cirB:Circle = new Circle(0, 0, 400);
var sqA:Square = new Square(0, 0, 100);
var sqB:Square = new Square(0, 0, 200);
var bAdded:Boolean;
bAdded = srcInstance.addShape(cirA);
trace(bAdded);
bAdded = srcInstance.addShape(cirB);
trace(bAdded);
bAdded = srcInstance.addShape(sqA);
trace(bAdded);
bAdded = srcInstance.addShape(sqB);
trace(bAdded);
}
}
}
interface IShape {
function getDimensions():Object;
}
class Circle implements IShape{
private var _nX:Number;
private var _nY:Number;
private var _nRadius:Number;
public function Circle(nX:Number, nY:Number, nRadius:Number) {
nX = nX;
nY = nY;
nRadius = nRadius;
}
public function getDimensions():Object {
return {width: 2* _nRadius, height: 2 * _nRadius};
}
}
class Square implements IShape {
private var _nX:Number;
private var _nY:Number;
private var _nSide:Number;
public function Square(nX:Number, nY:Number, nSide:Number) {
_nX = nX;
nY = nY;
nSide = nSide;
}
public function getDimensions():Object {
return {width: _nSide, height: _nSide};
}
}
class ShapeContainer {
private var _aShapes:Array;
private var _nWidth:Number;
private var _nHeight:Number;
public function ShapeContainer(nWidth:Number, nHeight:Number) {
_nWidth = nWidth;
_nHeight = nHeight;
_aShapes = new Array();
}
public function addShape(shObject:IShape):Boolean {
if(shObject.getDimensions().height > _nHeight) {
return false;
}
var nSum:Number = 0;
for(var i:Number = 0; i < _aShapes.length; i++) {
nSum += _aShapes[i].getDimensions().width;
}
if(nSum + shObject.getDimensions().width > _nWidth) {
return false;
}
else {
_aShapes.push(shObject);
return true;
}
}
}