PHP ile solo testte bir taş bırakmayı hesaplama algoritması. Ben kendim yazdım. Beğendiyseniz lütfen eticaretucuz.com adresini ziyaret etmeyi unutmayın.
<?php
ini_set('memory_limit', '1024M');
global $sayhamle;
global $arrdelikler;
$arrdelikler = array();
$delikler[0][0] = 0;
$delikler[1][0] = 0;
$delikler[2][0] = 1;
$delikler[3][0] = 1;
$delikler[4][0] = 1;
$delikler[5][0] = 0;
$delikler[6][0] = 0;
$delikler[0][1] = 0;
$delikler[1][1] = 0;
$delikler[2][1] = 1;
$delikler[3][1] = 1;
$delikler[4][1] = 1;
$delikler[5][1] = 0;
$delikler[6][1] = 0;
$delikler[0][2] = 1;
$delikler[1][2] = 1;
$delikler[2][2] = 1;
$delikler[3][2] = 1;
$delikler[4][2] = 1;
$delikler[5][2] = 1;
$delikler[6][2] = 1;
$delikler[0][3] = 1;
$delikler[1][3] = 1;
$delikler[2][3] = 1;
$delikler[3][3] = 2;
$delikler[4][3] = 1;
$delikler[5][3] = 1;
$delikler[6][3] = 1;
$delikler[0][4] = 1;
$delikler[1][4] = 1;
$delikler[2][4] = 1;
$delikler[3][4] = 1;
$delikler[4][4] = 1;
$delikler[5][4] = 1;
$delikler[6][4] = 1;
$delikler[0][5] = 0;
$delikler[1][5] = 0;
$delikler[2][5] = 1;
$delikler[3][5] = 1;
$delikler[4][5] = 1;
$delikler[5][5] = 0;
$delikler[6][5] = 0;
$delikler[0][6] = 0;
$delikler[1][6] = 0;
$delikler[2][6] = 1;
$delikler[3][6] = 1;
$delikler[4][6] = 1;
$delikler[5][6] = 0;
$delikler[6][6] = 0;
function hesapla($delikler)
{
global $sayhamle;
global $arrdelikler;
$sayhamle++;
#2 boş 1 dolu 0 yok
$deliklertmp = $delikler;
$tasadet = 0;
for ($sayx = 0; $sayx < 7; $sayx++) {
for ($sayy = 0; $sayy < 7; $sayy++) {
if ($delikler[$sayx][$sayy] == 1) {
$tasadet++;
}
}
}
for ($sayx = 0; $sayx < 7; $sayx++) {
for ($sayy = 0; $sayy < 7; $sayy++) {
if ($delikler[$sayx][$sayy] == 1) {
if ($sayx + 1 <= 6 && $sayx + 2 <= 6 && $delikler[$sayx + 1][$sayy] == 1 && $delikler[$sayx + 2][$sayy] == 2) {
$delikler[$sayx][$sayy] = 2;
$delikler[$sayx + 1][$sayy] = 2;
$delikler[$sayx + 2][$sayy] = 1;
/*echo $sayx."-";
echo $sayy;
print_r($delikler);
exit;*/
$sontasadet = hesapla($delikler, $sayx + 1, $sayy);
if ($sontasadet == 1) {
$arrdelikler[] = $delikler;
return 1;
}
$delikler = $deliklertmp;
}
if ($sayx - 1 >= 0 && $sayx - 2 >= 0 && $delikler[$sayx - 1][$sayy] == 1 && $delikler[$sayx - 2][$sayy] == 2) {
$delikler[$sayx][$sayy] = 2;
$delikler[$sayx - 1][$sayy] = 2;
$delikler[$sayx - 2][$sayy] = 1;
$sontasadet = hesapla($delikler, $sayx - 1, $sayy);
if ($sontasadet == 1) {
$arrdelikler[] = $delikler;
return 1;
}
$delikler = $deliklertmp;
}
if ($sayy + 1 <= 6 && $sayy + 2 <= 6 && $delikler[$sayx][$sayy + 1] == 1 && $delikler[$sayx][$sayy + 2] == 2) {
$delikler[$sayx][$sayy] = 2;
$delikler[$sayx][$sayy + 1] = 2;
$delikler[$sayx][$sayy + 2] = 1;
$sontasadet = hesapla($delikler, $sayx, $sayy + 1);
if ($sontasadet == 1) {
$arrdelikler[] = $delikler;
return 1;
}
$delikler = $deliklertmp;
}
if ($sayy - 1 >= 0 && $sayy - 2 >= 0 && $delikler[$sayx][$sayy - 1] == 1 && $delikler[$sayx][$sayy - 2] == 2) {
$delikler[$sayx][$sayy] = 2;
$delikler[$sayx][$sayy - 1] = 2;
$delikler[$sayx][$sayy - 2] = 1;
$sontasadet = hesapla($delikler, $sayx, $sayy - 1);
if ($sontasadet == 1) {
$arrdelikler[] = $delikler;
return 1;
}
$delikler = $deliklertmp;
}
}
}
}
//echo $tasadet,"-";
if ($tasadet == 1) {
return 1;
}
return false;
}
#BURADA BAŞLIYOR
$sayhamle = 0;
$sure_baslangici = microtime(true);
$sontasadet = hesapla($delikler, 0, 0);
foreach ($arrdelikler as $birdelikler) {
echo "<table style='float: left; margin: 10px;'>";
for ($sayx = 0; $sayx < 7; $sayx++) {
echo "<tr>";
for ($sayy = 0; $sayy < 7; $sayy++) {
echo "<td>";
if ($birdelikler[$sayx][$sayy] == 1) {
echo "۩";
}
if ($birdelikler[$sayx][$sayy] == 2) {
echo "○";
}
if ($birdelikler[$sayx][$sayy] == 0) {
echo "░";
}
echo "</td>";
}
echo "</tr>";
}
echo "</table>";
}
$sure_bitimi = microtime(true);
if ($sontasadet == 1) {
echo "buldum : ", $sayhamle, " taş hamlede";
} else {
echo "bulunmuyor kodları değiştir";
}
$sure = $sure_bitimi - $sure_baslangici;
echo "<br>Çalışma süresi: ", round($sure, 2), " saniye.\n";
//PHP kodlarına ayrılan belleğin miktarını bayt cinsinden döndürür.
echo 'Hafıza kullanımı: ', round(memory_get_peak_usage() / 1048576, 2), 'MB';
?>