x = $x;
		$this->y = $y;
		$this->genislik = $genislik;
		$this->yukseklik = $yukseklik;
	}
	
	/**
	 * mevcut dikdortgenle digerinin kesisip kesismedigini tespit
	 * eder
	 * @param diger
	 * @return kesi$iyorlarsa true döner
	 * @author Sami Shaio (from java.awt.Rectangle), Ahmet Alp Balkan
	 * 	(modified) 
	 */
	function kesisiyorMu($d){
		if ($this->x == $d->x && $this->y == $d->y &&
				$this->yukseklik == $d->yukseklik && $this->genislik == $d->genislik){
		} else {
			$tw = $this->genislik;
			$th = $this->yukseklik;
			$dw = $d->genislik;
			$dh = $d->yukseklik;
			
			if ($dw <= 0 || $dh <= 0 || $tw <= 0 || $th <= 0) {
				return false;
			}
			
			$tx = $this->x;
			$ty = $this->y;
			$dx = $d->x;
			$dy = $d->y;
			
			$tw += $tx;
			$th += $ty;
			$dw += $dx;
			$dh += $dy;
			
			return (($dw < $dx || $dw > $tx) &&
					($dh < $dy || $dh > $ty) &&
					($tw < $tx || $tw > $dx) &&
					($th < $ty || $th > $dy));
		}
	}
	
	
	function __toString() {
		return "[X=".$this->x.", Y=".$this->y.", W=".$this->genislik.", Y=".$this->yukseklik."]";
	}
	
	/**
	 * verilen bir noktanin dikdortgenin icinde veya ustunde
	 * kalip kalmadigini dondurur.
	 * @param X
	 * @param Y
	 * @return icindeyse true doner, degilse false
	 * @author Sami Shaio
	 */
	function icindeMi($X, $Y){
		$w = $this->genislik;
		$h = $this->yukseklik;
		
		if($w < 0 || $h < 0) return false; // sifirdan kucuk boyut.
		
		if ($X < $this->x || $Y < $this->y) {
			return false;
		}
		$w += $this->x;
		$h += $this->y;
		return (($w < $this->x || $w > $X) && ($h < $this->y || $h > $Y));
	}
	
	/**
	 * Verilen dikdortgenin baslangic (sol alt, guneybati) 
	 * noktasini verilen koordinata tasir.
	 */
	function tasi($X, $Y){
		if($X<0 || $Y<0) echo("## UYARI: x veya y 0'dan kucuk olamaz! (tasirken)");
		$this->x = $X;
		$this->y = $Y;
	}
		
} // dikdortgen


	
	
/**
 * Verilen Dikdortgen listesinde o noktanin bir dikdortgenin icinde
 * kalip kalmadigini dondurur.
 * 
 * @return bir dikdortgenin icinde kaliyorsa true doner,
 * 		   o nokta bossa false doner.
 */
function buradaDikdortgenVarMi($liste, $X, $Y){
	for($i = 0; $i < count($liste); $i++){
		if($liste[$i]->icindeMi($X, $Y)) {
			echo("(X=".$X.", Y=".$Y.")'deki: "+$liste[$i]);
			return true;
		}
	}
	return false;
}

/**
 * Verilen Dikdortgen listesinde birbirleriyle kesisen dikdortgen
 * olup olmadigini dondurur.
 * @param liste
 * @return kesisen varsa true, yoksa (istenilen durum) false doner
 */
function kesisenDikdortgenVarMi($liste){
	for($i = 0; $i < count($liste); $i++){
		for($j = 0; $j < count($liste); $j++){
			if($liste[$i]->kesisiyorMu($liste[$j])){
				echo("Kesi\$en: ".$liste[$i]." ve ".$liste[$j]."\n");
				return true;
			}
		}
	}
	return false;
}

function maximumX($liste){
	$max = 0; 
	$tmp = 0;
	
	for($i = 0 ; $i < count($liste); $i++){
		$tmp = $liste[$i]->x + $liste[$i]->genislik;
		if ($tmp>$max) $max = $tmp;
	}
	
	return $max;
}

function maximumY($liste){
	$max = 0; 
	$tmp = 0;
	
	for($i = 0 ; $i < count($liste); $i++){
		$tmp = $liste[$i]->y + $liste[$i]->yukseklik;
		if ($tmp>$max) $max = $tmp;
	}
	
	return $max;
}


function dikdortgenleriYazdir($liste){
	foreach($liste as $d)
		echo($d."\n");
}



/**
 * Verilen Dikdortgen array'indeki dikdortgenleri
 * en verimli sekilde yerlestirir ve yeni array'i
 * dondurur.
 * """"BU KISIM KODLANACAKTIR""". EK METODLAR TANIMLANABiLiR.
 * SONRADAN TANIMLI METODLAR DA BURADAN CAGIRILABILIR. 
 * 
 * NOT: main tarafindan cagirilacak olan metod budur.
 * NOT: Dikdortgen.tasi metodu kullanilabilir.
 * 
 */
function yerlestir(&$liste){
	/*
	 * Yarismaci tarafindan kodlanacak.
	 */

	//ORNEK:
	//$liste[1]->tasi(0,5);
	//$liste[2]->tasi(0,15);
	
	return $liste;
}

/**
 * Lutfen algoritmanizi yerlestir metodu icine yaziniz.
 * Bu metodu sadece algoritmanizi farkli dikdortgenlerle
 * test etmek icin kullaniniz.
 */
function main() {
	$liste = array();							// x=0, y=0'da bazi dikdortgenler 
	$liste[0] = new Dikdortgen(0,0, 5, 5);		// uretelim. Test esnasinda 
	$liste[1] = new Dikdortgen(0,0, 20,10);		// bu satirlari degistiriyor
	$liste[2] = new Dikdortgen(0,0, 10,20); 	// olacagiz.
	
	echo("Baslangictaki Dikdortgenler:\n");
	dikdortgenleriYazdir($liste);
	
	echo("\n"); // bosluk
	echo("Kesi\$en Dikdortgen?: ". (kesisenDikdortgenVarMi($liste)?"var":"yok"));
	
	/** BURADA METOD CAGIRILIYOR **/
	$liste = yerlestir($liste);
	/** BURADA METOD CAGIRILIYOR **/
	
	echo("\nBitisteki Dikdortgenler:\n");
	dikdortgenleriYazdir($liste);
	
	echo("\n"); // bosluk
	echo("Ta\$ima Sonrasi Kesi\$en Dikdortgen?: ". (kesisenDikdortgenVarMi($liste)?"var (yerlestir'DEN SONRA OLMAMASI GEREK!!!)":"yok (TAMAMDIR)"));
	
	echo("\n"); // bosluk
	$maxX = maximumX($liste);
	$maxY = maximumY($liste);
	echo("\nMaximum X koordinati: ".$maxX."\nMaximum Y koordinati: ".$maxY."\n");
	echo("*** Maliyet = ".intval($maxX+$maxY) ." TL. ***");
}

/***************/
main();