Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Zeka Sorusu 'nun çözümü..


Sypro

Öne çıkan mesajlar



Elimizde böyle bir imaj var, 1'den 8'e kadar rakamları uygun yerlere yazmak istiyoruz. Her rakam 1 kere yazılcak ve ardışık iki rakamın birbiri ile bağlantısı olmayacak. i$in yazılım ve donanım ile ilgili kısmına gelicek olursak, bu bahsedilenlerin hepsi C++ ile yapılacak.

Bi kaç denemeden sonra "Array" ile olabileceğine karar verdik lakin önce 1 3 5 7 'yi sonra 2 4 6 8 'i kendi arasında diziler haline getirip sonra arasından random birini çektirerek ve her sonucu bi yere kaydettirip eğer sonuç ba$arısız ise bir sonraki denemede o sonucu hesaba katamamasını sağlatmayı amaçladık. lakin okurken bile bu kadar uzun gelen bi$ey yazarken çok daha yorucu olabileceği için farklı fikirler arayı$ına çıkmayı uygun gördüm.

Bu konu ile ilgili her türlü mantıklı fikre açık olmak ile beraber te$ekkürü $imdiden borç bilirim.

edik: raham değil rakam tabi.
Link to comment
Sosyal ağlarda paylaş

abi bisi sorcam ama
simdi 8 tane delik war
8 tanede sayi
bu durumda
olabilicek opsiyon sayisi
8 ! olduugndna
40320 adet sayi dizisi olacagindan
dirke random atatp deneseni zolmuyo mu

her delige bi sayi atayip baglanilari yazin
mesela ilk delik

1 den 2 3 4 e -1 +1 olmucak
2 den neyse iste diye
direk randomlayip blsun bilgisayar
Link to comment
Sosyal ağlarda paylaş

bone un dedigini pseudocode a parse eyleyelim:

1 den 8 e tum permutationlari yarat

tablo soyle:
be
acfh
dg

kurallarimizi belirleyelim bol bol switch in ifin olacak

c - abdefg ile gibi...

bi function da bunu kontrol edersin

sonra her permutation i a dan h ye oturtup check ediceksin, bulamadigi anda aticaksin bi sonrakini yapacaksin (permutation yaratmak icin algoritma kitabina bak, recursive function ile kolayca yaratabilirsin, hatta memory efficient olmak icin compute_next_permutation da yazabilirsin hepsini saklamak yerine

deterministic olarak sorunu cozebilirsin yani :), ki check ederken failure aninda break edersen time efficiency de saglamis olursun.

Continuation ile yapmani gene de tavsiye ederim herhangi bir functional dilde, cok yardimi dokunur sana programci olarak
Link to comment
Sosyal ağlarda paylaş

c++ bilmiyorum ama php ile çözdüm.
çok yavşak oldu kod, sayıların sırasını değiştirip değiştirip deniyo, hiç optimize falan değil, ama iş görüyo. shuffle etmek yerine kendi olayınızı koyarsanız çok daha optimize olur.

edit: kod hatalı şu an, çözüme ulaşsa bile olmadi diyor, düzeltecek vaktim yok şu an. ama kodu silmiyorum, işinize yarar belki.

php kodu


<?php

$matrix = array();
$numbers = array(1, 2, 3, 4, 5, 6, 7, 8);
$solved = 0;

echo("Basliyoruz.<br>");

while ($solved == 0)
{
shuffle($numbers);
echo("Denenen siralama: ");
for ($k = 0; $k <= count($numbers); $k++)
{
echo($numbers[$k]." ");
}
$current_number = 0;
for ($j = 0; $j <= 2; $j++)
{
for ($i = 0; $i <= 3; $i++)
{
if (!($i == 0 && $j == 0) && !($i == 3 && $j == 0) && !($i == 0 && $j == 2) && !($i == 3 && $j == 2))
{
$matrix[$i][$j] = $numbers[$current_number];
$current_number++;
}
}
}

$error = 0;
$numbers = array(1, 2, 3, 4, 5, 6, 7, 8);
if ($error == 0)
{
for ($j = 0; $j <= 2; $j++)
{
for ($i = 0; $i <= 3; $i++)
{
if (!($i == 0 && $j == 0) && !($i == 3 && $j == 0) && !($i == 0 && $j == 2) && !($i == 3 && $j == 2))
{
$value = array_search($matrix[$i][$j], $numbers);
if (
($matrix[$i+1][$j] == $numbers[$value+1]) ||
($matrix[$i+1][$j] == $numbers[$value-1]) ||
($matrix[$i-1][$j] == $numbers[$value+1]) ||
($matrix[$i-1][$j] == $numbers[$value-1]) ||
($matrix[$i][$j+1] == $numbers[$value+1]) ||
($matrix[$i][$j+1] == $numbers[$value-1]) ||
($matrix[$i][$j-1] == $numbers[$value+1]) ||
($matrix[$i-1][$j-1] == $numbers[$value-1]) ||
($matrix[$i-1][$j-1] == $numbers[$value+1]) ||
($matrix[$i-1][$j+1] == $numbers[$value-1]) ||
($matrix[$i-1][$j+1] == $numbers[$value+1]) ||
($matrix[$i+1][$j-1] == $numbers[$value-1]) ||
($matrix[$i+1][$j-1] == $numbers[$value+1]) ||
($matrix[$i+1][$j+1] == $numbers[$value-1]) ||
($matrix[$i+1][$j+1] == $numbers[$value+1])
)
{
$error = 1;
}
}
}
}
echo("Olmadi. <br>");
}

if ($error == 0)
{
$solved = 1;
}

}

if ($solved == 1)
{
echo("Cozume ulasildi: <br>");
for ($j = 0; $j <= 2; $j++)
{
for ($i = 0; $i <= 3; $i++)
{
echo($matrix[$i][$j]." ");
}
echo("<br>");
}
}
?>

Link to comment
Sosyal ağlarda paylaş


- 1 2 -
3 4 5 6
- 7 8 -

şeklinde arrayin üyeleri sıralanacak.

function boolean KomsuKontrol() // arrayin geçerlilik kontrolü
{
1. üyenin 2-3-4-5 ile
2. üyenin 4-5-6 ile
3. üyenin 4-7 ile
4. üyenin 5-7-8 ile
5. üyenin 6-7-8 ile
6. üyenin 8 ile
arasındaki fark > 1 ise return true, değilse return false
(burada mutlak değer kullan)
(hepsini kontrol etmene gerek yok bu arada,
sadece kendinden büyük olanlarla kontrol etsen yeter,
çünkü 1-3 arasını kontrol edince 3-1i de etmiş oluyorsun)
}

function Main()
{
iç içe for döngüleriyle sırayla her olası arrayi gez
ve önce arraykontrol'den sonra komsukontrol'den geçir.
ikisinin de true döndürdüğü anda buldun demek.
}

function boolean ArrayKontrol(array)
array'in üyeleri tekilse true, değilse false döndür
yalnız, unutmamak lazım, en az iki doğru çözüm var. (inverted)


yalnız bu çok ilkel bir çözüm yöntemi. herhangi bir teknik yaklaşımı yok. bildiğini deneme yanılma
Link to comment
Sosyal ağlarda paylaş

tekrar php kodu, bu sefer düzelttim, gıcır gıcır oldu. (yine harala gürele dalıyo tabi ama en azından çalışıyo.)


---------Deneme 5257
matrix yapiyom... matrix yaptim.
sayilari karistiriyom... sayilari karistirdim: 4 8 1 2 6 3 7 5
matrix dolduruyom... matrix doldurdum.
matrixi kontrol ediyom... (2~1) matrixi kontrol ettim. olmadi...
---------Deneme 5258
matrix yapiyom... matrix yaptim.
sayilari karistiriyom... sayilari karistirdim: 5 3 2 8 1 7 6 4
matrix dolduruyom... matrix doldurdum.
matrixi kontrol ediyom... matrixi kontrol ettim. oldu gibi lan?
Cozume ulastim!
-7 5 3 -7
2 8 1 7
-7 6 4 -7


php kodu


<?php

set_time_limit(360);

$matrix = array();
$numbers = array(1, 2, 3, 4, 5, 6, 7, 8);
$trials = array();

function set_matrix()
{
global $matrix;
echo("matrix yapiyom... ");
for ($j = 0; $j <= 2; $j++)
{
for ($i = 0; $i <= 3; $i++)
{
if (!($i == 0 && $j == 0) && !($i == 3 && $j == 0) && !($i == 0 && $j == 2) && !($i == 3 && $j == 2))
{
$matrix[$i][$j] = 0;
}
else
{
$matrix[$i][$j] = "-7";
}
}
}
echo("matrix yaptim.");
echo("<br>");
}

function fill_matrix()
{
global $matrix;
global $numbers;
echo("matrix dolduruyom... ");
foreach ($numbers as $number)
{
$used = 0;
for ($j = 0; $j <= 2; $j++)
{
for ($i = 0; $i <= 3; $i++)
{
if ($matrix[$i][$j] == 0 && $used == 0)
{
$matrix[$i][$j] = $number;
$used = 1;
}
}
}
}
echo("matrix doldurdum.");
echo("<br>");
}

function check_matrix()
{
global $matrix;
echo("matrixi kontrol ediyom... ");
$numbers2 = array(1, 2, 3, 4, 5, 6, 7, 8);
$status = 1;
for ($j = 0; $j <= 2; $j++)
{
for ($i = 0; $i <= 3; $i++)
{
$key = array_search($matrix[$i][$j], $numbers2);
if ($matrix[$i][$j] > 0)
{
$neighbors = array($matrix[$i+1][$j], $matrix[$i-1][$j], $matrix[$i][$j+1], $matrix[$i][$j-1], $matrix[$i-1][$j+1], $matrix[$i-1][$j-1], $matrix[$i+1][$j-1], $matrix[$i+1][$j+1]);
foreach ($neighbors as $neighbor)
{
if (in_array($neighbor, $numbers2) && ($neighbor == $numbers2[$key-1] || $neighbor == $numbers2[$key+1]))
{
echo("(".$neighbor."~".$numbers2[$key].") ");
$status = 0;
break(3);
}

}
}
}
}
echo("matrixi kontrol ettim. ");
if ($status == 0)
{
echo("olmadi... ");
}
if ($status == 1)
{
echo("oldu gibi lan? ");
}
echo("<br>");
return ($status);
}

function show_matrix()
{
global $matrix;
for ($j = 0; $j <= 2; $j++)
{
for ($i = 0; $i <= 3; $i++)
{
echo($matrix[$i][$j]." ");
}
echo("<br>");
}
}

function mix()
{
echo("sayilari karistiriyom... ");
global $numbers;
global $trials;
array_push($trials, $numbers);
while (in_array($numbers, $trials))
{
shuffle($numbers);
}
echo("sayilari karistirdim: ");
for ($k = 0; $k < count($numbers); $k++)
{
echo($numbers[$k]." ");
}
echo("<br>");

}

$trial = 1;
$solved = 0;
while ($solved == 0)
{
echo("---------Deneme ".$trial."<br>");
set_matrix();
mix();
fill_matrix();
if (check_matrix() == 1)
{
$solved = 1;
}
$trial++;
}

if ($solved == 1)
{
echo("Cozume ulastim! <br>");
show_matrix();
}

if ($solved == 0)
{
echo("Cozume ulasamadim, ama sorun nerde bilmiyorum ki ben...");
}

?>


Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...