Bu, klasik "15 bulmacayı" (veya daha büyük bir varyantı) açıklar. Sağlayabileceğim tek bir çözüm yok çünkü çözüm tamamen 30 sayının başlangıçtaki düzenine bağlı. Bunu çözmek için, en uygun takas sırasını bulmak amacıyla bir arama algoritması (A*, genişlik öncelikli arama veya derinlik öncelikli arama gibi) kullanmanız gerekir. Bu algoritmalar, bu boyuttaki bulmacalar için hesaplama açısından yoğundur.
Kısayol yok; sayıları sistematik olarak doğru konumlarına taşımanız gerekir. Permütasyonların paritesine bağlı olarak çözülemeyen bazı düzenlemeler de vardır.
Bunu çözen bir programın yapması gerekenler şunlardır:
-
Bulmacayı temsil edin: 30 sayıyı tutacak bir veri yapısı (muhtemelen 2 boyutlu bir dizi veya 1 boyutlu bir dizi) oluşturun.
-
Hedef durumunu tanımlayın: Doğru sıralanmış sayıları (1, 2, 3...30) temsil eden bir veri yapısı.
-
Bir arama algoritması uygulayın: Olası takas dizilerini keşfetmek için uygun bir algoritma seçin (verimliliği nedeniyle genellikle A* tercih edilir). Döngülerden kaçınmak için algoritmanın ziyaret edilen durumları takip etmesi gerekir.
-
*Sezgisel fonksiyon (A için):* A kullanıyorsanız, belirli bir durumdan hedef duruma olan mesafeyi tahmin etmek için buluşsal bir fonksiyona ihtiyacınız vardır. 15 bulmacanın ortak buluşsal yöntemi (ve bu daha büyük versiyona uyarlanabilir), Manhattan uzaklığıdır (her karenin hedef konumuna olan uzaklıklarının toplamı).
-
Değiştirme işlevi: Bulmaca gösteriminde iki sayıyı değiştirmeye yönelik bir işlev.
-
Sonlandırma koşulu: Algoritma hedef durumu bulduğunda durur.
Bu, basit bir yanıtın çok ötesinde, karmaşık bir programlama görevidir. Bunu uygulamak için Python, C veya Java gibi bir programlama dili kullanmanız gerekir. Arama algoritmalarına yardımcı olmak için kütüphaneler vardır ancak temel mantığın yazılması gerekir.