C&D dilinde 3x3 Sihirli Kare Bulmacası Nasıl Çözülür? Python

⚡ Akıllı Özet

Sihirli Kare bulmacaları, ardışık sayıları n x n'lik bir ızgara içinde her satır, sütun ve ana köşegenin aynı toplamı (sihirli sabit olarak adlandırılır) üretecek şekilde düzenler; bu da onları eğlence matematiği ve algoritmik düşünme alanında klasik bir alıştırma haline getirir.

  • 🔢 Sihirli Sabit Formülü: n. dereceden herhangi bir normal sihirli kare için sihirli toplam n(n²+1)/2'ye eşittir; bu da 3. dereceden kareler için 15, 7. dereceden kareler için ise 175 sonucunu verir.
  • 🧩 Siyam Yöntemi: Tek sayılı sihirli kareler, en üst satırın ortasına 1 yerleştirilerek ve ardından sarmalama ve çarpışma kuralları dikkate alınarak yukarı ve sağa doğru hareket ettirilerek oluşturulur.
  • 📐 Kare Varyantlar: Sihirli kareler Normal, Yarı Sihirli, Basit ve En Mükemmel olarak sınıflandırılır ve her bir varyant, hangi toplamların sihirli sabite uyması gerektiğine göre tanımlanır.
  • Çalışma Uygulamaları: Aynı C++ hem de Python Programlar, herhangi bir tek dereceli kareyi O(n²) sürede ve O(n²) yardımcı alan kullanarak oluşturur.
  • 🧪 Adım Adım Tanıtım: Ayrıntılı bir 3x3 çizim, dokuz yerleşimin her birinin satır, sütun ve çapraz kuralını nasıl sağladığını gösterir.

Sihirli kare nedir?

Sihirli kare, sayıların özel bir düzenlemeyle yerleştirildiği kare bir matristir. Değerler, her satırda, her sütunda ve her iki ana köşegende toplamın aynı kalacağı şekilde yerleştirilir. Sihirli kareler, eğlence matematiğinde kullanılan basit mantık bulmacalarıdır.

Sihirli karelere örnek:

Sihirli Kare

Yukarıdaki diyagram 3. dereceden bir sihirli kareyi göstermektedir. Her köşegenin, satırın ve sütunun toplamı 15'e eşittir. Sonraki bölümde bu sabit toplamın nasıl elde edildiği açıklanmaktadır.

Sihirli Kareler Nasıl Çalışır?

n. dereceden bir sihirli kare, n² pozitif tamsayı içeren n x n boyutlu bir matristir. Matrisin satır veya sütun sayısına matrisin derecesi denir.

Tipik sihirli kare bulmacaları tek sıralıdır ve 1'den n²'ye kadar olan tamsayıları kullanır. Her satır, sütun ve köşegenin aynı değere toplanması gerektiğinden, bu değere sihirli toplam veya sihirli sabit denir. Sabit yalnızca n'ye bağlıdır. n. dereceden sihirli toplamın formülü şöyledir:

Sihirli Meydan çalışıyor

Üçüncü dereceden bir sihirli kareyi ele alalım. Bu durumda sihirli toplam şöyledir:

Sihirli Meydan çalışıyor

Sihirli Meydan çalışıyor

Bu formül aritmetiği açıklıyor, ancak bulmacanın akılda kalıcı adını veren uzun bir kültürel geçmişi var.

Onlara Neden Büyü Deniyor?

Antik çağ matematikçileri, sayıların ilginç kombinasyonlarından büyülenmişlerdi ve sihirli kare de bunlardan biriydi. En eski kanıtlar MÖ 190 civarına, Çin'e kadar uzanmaktadır.

Araştırmalar, eski Japonya, Hindistan ve Arabistan'da sihirli kare bulmacalarına dair kanıtlar olduğunu göstermektedir. Efsaneler bu düzenlemeleri sihirli dünyayla ilişkilendirmiş ve bu isim kalıcı olmuştur. Halk hikayelerinin ötesinde, matematikçiler de bir kareyi diğerinden ayıran biçimsel kategoriler tanımlamışlardır.

Sihirli Kare Türleri

Matematikte sihirli karelerin çeşitli varyantları vardır:

  • Normal Sihirli Kare: İlk n² doğal sayıyı içerir.
  • Yarı Sihirli Kare: Sihirli sabite yalnızca satırlar ve sütunların toplamı ulaşır.
  • Basit Sihirli Kare: Satırlar, sütunlar ve her iki ana köşegenin toplamı sihirli sabiti oluşturur.
  • En Mükemmel Sihirli Kare: İki ek özelliğe sahip normal bir sihirli kare. Matrisin her 2x2 alt karesinin toplamı 2(n²+1)'dir ve n/2 hücre uzaklıktaki herhangi bir sayı çiftinin toplamı n²+1'dir.

Ek özelliklere bağlı olarak daha fazla kategori mevcuttur. Bu eğitimde "sihirli kare" terimi niteleme olmaksızın kullanıldığında, tek sayılı, normal, basit bir sihirli kareyi ifade eder.

Sihirli Kare Oluşturma Algoritması

Tek sayılı sihirli kareler oluşturmak için kullanılan klasik algoritma, Siamese yöntemi olarak adlandırılır ve şu şekildedir:

  • İlk sayı (1), ilk koordinatın satır indeksi, ikinci koordinatın ise sütun indeksi olduğu (n/2, n-1) konumunda saklanır. Sonraki adımlar için bu konuma (x, y) diyelim.
  • Sonraki sayı (x-1, y+1) konumuna yerleştirilir. Bu konum geçersiz ise aşağıdaki kurallar uygulanır:
    1. Satır indeksi -1 ise, n-1'e kadar devam edin. Sütun indeksi n ise, 0'a kadar devam edin.
    2. Hesaplanan konumda zaten bir sayı varsa, satırı 1 artırın ve sütunu 2 azaltın.
    3. Eğer satır -1 ve sütun aynı anda n ise, yeni konum (0, n-2) olur.

Not: Bu algoritma yalnızca tek sayılı sayılar için geçerli sihirli kareler üretir. Sonuç, ilk n² doğal sayıyı içeren normal bir sihirli karedir. Aynı n için birden fazla geçerli çözüm olabilir.

1'den 9'a kadar olan sayıları kullanan 3. derece ile ilgili küçük bir örnek sayesinde kurallar daha netleşiyor.

3x3 Kare Üzerinde Nasıl Çalışır?

Uygulayarak algoritma Yukarıda belirtilen adımlar şunlardır:

) 1 Adım İlk sayı (1), (3/2, 3-1) veya (1, 2) konumuna yerleştirilir. Sonraki adımlar için x = 1 ve y = 2 olarak ayarlayın.

Sihirli Kare Oluşturma Algoritması

) 2 Adım Geri kalan sayıların konumları aşağıdaki gibi hesaplanır.

2 numaranın konumu:

Sonraki sayı (x-1, y+1) veya (0, 3) konumuna gitmelidir, ancak bu geçerli bir konum değildir. (a) kuralına göre, sütun 0'a döner ve (0, 0) verir. x = 0, y = 0 olarak ayarlayın.

Sihirli Kare Oluşturma Algoritması

3 numaranın konumu:

3 numaralı eleman (x-1, y+1) veya (-1, 1) konumunda olmalıdır, ancak bu geçerli bir konum değildir. (a) kuralına göre, satır n-1'e (yani 2'ye) döner. Bu nedenle 3 numaralı eleman (2, 1) konumuna gider. x = 2, y = 1 olarak ayarlayın.

Sihirli Kare Oluşturma Algoritması

4 numaranın konumu:

4 numaralı sayı (x-1, y+1) veya (1, 2) konumunda olmalıdır; bu geçerlidir ancak zaten 1'i içermektedir. (b) kuralına göre, yeni konum (1+1, 2-2) veya (2, 0)'dır. x = 2, y = 0 olarak ayarlayın.

Sihirli Kare Oluşturma Algoritması

5 numaranın konumu:

5 numaralı nokta (x-1, y+1) veya (1, 1) konumunda olmalıdır; bu geçerli bir boş konumdur. x = 1, y = 1 olarak ayarlayın.

Sihirli Kare Oluşturma Algoritması

6 numaranın konumu:

6 numaralı nokta (x-1, y+1) veya (0, 2) konumunda olmalıdır; bu geçerli bir boş konumdur. x = 0, y = 2 olarak ayarlayın.

Sihirli Kare Oluşturma Algoritması

7 numaranın konumu:

7 numaralı nokta (x-1, y+1) veya (-1, 3) konumunda olmalıdır, bu geçerli değildir. (c) kuralına göre yeni konum (0, n-2) veya (0, 1)'dir. x = 0, y = 1 olarak ayarlayın.

Sihirli Kare Oluşturma Algoritması

8 numaranın konumu:

8 numaralı nokta (x-1, y+1) veya (-1, 2) konumunda olmalıdır, bu geçerli değildir. (a) kuralına göre, satır 2'ye döner ve (2, 2) verir. x = 2, y = 2 olarak ayarlayın.

Sihirli Kare Oluşturma Algoritması

9 numaranın konumu:

9 numaralı nokta (x-1, y+1) veya (1, 3) konumunda olmalıdır, bu geçerli değildir. (a) kuralına göre, sütun 0'a döner ve (1, 0) verir.

Sihirli Kare Oluşturma Algoritması

Her hücre doldurulduğunda, aynı mantık doğrudan sözde koda çevrilir.

Sihirli Kare için Sözde Kod

Begin
    Declare an array of size n*n
    Initialize the array to 0
    Set row = n/2
    Set column = n-1
    For all number i: from 1 to n*n
        If the row = -1 and column = n
            row = 0
            column = n-2
        Else
            If row = -1
                row = n-1
            If column = n
                column = 0
        If the position already contains a number
            decrement column by 2
            increment row by 1
            continue until the position is not 0
        Else
            put the number i into the calculated position
            increment i
        Increment column value
        Decrement row value
End

Sözde kod, aşağıda gösterildiği gibi derlenmiş ve yorumlanmış dillere doğrudan karşılık gelir. C++ hem de Python.

C++ Code Sihirli Kare için

Giriş:

/*
A C/C++ program for generating odd order magic squares
*/
#include <bits/stdc++.h>
using namespace std;

void GenerateMagicSquare(int n)
{
    int magic[n][n];
    //initializing the array
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
            magic[i][j] = 0;
    //setting row and column value
    int i = n / 2;
    int j = n - 1;
    for (int k = 1; k <= n * n;)
    {
        //checking condition (c)
        if (i == -1 && j == n)
        {
            j = n - 2;
            i = 0;
        }
        else
        {
            //checking condition (a)
            if (j == n)
                j = 0;
            if (i < 0)
                i = n - 1;
        }
        //checking condition (b)
        if (magic[i][j])
        {
            j -= 2;
            i++;
            continue;
        }
        else
        {
            //placing the number into the array
            magic[i][j] = k;
            k++;
        }
        //for the next number setting (i-1, j+1)
        j++;
        i--;
    }
    //printing the matrix
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            cout << magic[i][j] << "  ";
        cout << endl;
    }
}
int main()
{
    //This code works for only odd numbers
    int n = 7;
    cout<<"The magic sum is " << n*(n*n+1)/2 <<endl;
    GenerateMagicSquare(n);
    return 0;
}

Örnek Çıktısı:

The magic sum is 175

20  12  4  45  37  29  28
11  3  44  36  35  27  19
2  43  42  34  26  18  10
49  41  33  25  17  9  1
40  32  24  16  8  7  48
31  23  15  14  6  47  39
22  21  13  5  46  38  30

MKS Python Aşağıdaki sürüm aynı satır ve sütun kurallarını kullanır.

Python Code Sihirli Kare için

def GenerateMagicSquare(n):
    #initializing the array
    magic = [[0 for x in range(n)]
                for y in range(n)]
    #setting row and column value
    i = n // 2
    j = n - 1
    k = 1
    while k <= (n * n):
        #checking condition (c)
        if i == -1 and j == n:
            j = n - 2
            i = 0
        else:
            #checking condition (a)
            if j == n:
                j = 0
            if i < 0:
                i = n - 1
        #checking conditon (b)
        if magic[i][j]:
            j = j - 2
            i = i + 1
            continue
        else:
            #placing the number into the array
            magic[i][j] = k
            k = k + 1
        #for the next number setting (i-1, j+1)
        j = j + 1
        i = i - 1
    #printing the matrix
    for i in range(0, n):
        for j in range(0, n):
            print('%2d ' % (magic[i][j]),end='')
            if j == n - 1:
                print()
#This code works for only odd numbers
n = 7
print("The magic sum is ",n * (n * n + 1) // 2, "\n")
GenerateMagicSquare(n)

Örnek Çıktısı:

The magic sum is  175

20 12  4 45 37 29 28
11  3 44 36 35 27 19
 2 43 42 34 26 18 10
49 41 33 25 17  9  1
40 32 24 16  8  7 48
31 23 15 14  6 47 39
22 21 13  5 46 38 30

Her iki uygulama da aynı şekilde çalışır, bu da maliyetlerini karşılaştırmayı kolaylaştırır.

Karmaşıklık Analizi

  • Uzay Karmaşıklığı: Sihirli kare n x n'lik bir dizide saklandığı için alan karmaşıklığı O(n²)'dir.
  • Zaman Karmaşıklığı: Üretici iki iç içe döngü kullanır. Dış döngü n kez, iç döngü de n kez çalışır, bu nedenle genel zaman karmaşıklığı O(n²)'dir.

SSS

1'den 9'a kadar olan sayıları içeren normal bir 3x3 sihirli kare için sihirli sabit 15'tir. Her satır, sütun ve ana köşegenin toplamı 15 olmalıdır; bu da n'nin 3'e eşit olduğu n(n²+1)/2 formülünden çıkar.

Hayır. Bu eğitimde gösterilen Siyam yöntemi yalnızca tek sayılı sihirli kareler için tanımlanmıştır. Çift sayılı kareler, farklı kurallar kullanan çift çift (n, 4'e bölünebilir) ve tek çift (n, 4k+2'ye eşit) yapılar gibi farklı algoritmalar gerektirir.

Üreteç, n x n'lik bir matrisi doldurur, bu nedenle hem zaman hem de alan karmaşıklığı O(n²)'dir. Her hücre sabit sayıda ziyaret edilir ve depolama alanı tam olarak n² tamsayıdır. Bu, algoritmayı tipik eğlence amaçlı boyutlar için verimli hale getirir.

Genetik algoritmalar, simüle edilmiş tavlama ve kısıtlama-tatmin çözücüleri gibi yapay zeka teknikleri, kapalı form yöntemlerinin uygulanamadığı durumlarda, çift sıralı, kısmi kareler ve yalnızca asal sayılardan oluşan veya geometrik sihirli kareler gibi ek kısıtlamalara sahip varyantlar da dahil olmak üzere geçerli sihirli kareleri arayabilir.

Sihirli kareler, kombinatoryal optimizasyon, pekiştirmeli öğrenme ajanları ve sinirsel arama için kıyaslama problemleridir. Araştırmacılar, çözümlerin doğrulanması kolay olduğundan ancak bunların sayılması açık bir matematiksel problem olmaya devam ettiğinden, yapılandırılmış ayrık uzaylarda sezgisel yöntemleri, meta sezgisel yöntemleri ve yapay zeka planlayıcılarını test etmek için bunları kullanırlar.

Bu yazıyı şu şekilde özetleyin: