Matris üzerinde işlem

Kullanıcıdan istiyceğim matrisi(bu her türlü bir matris olabilir ve sayıları kendi giricek)! matris|690x301 görseldeki gibi yolun üzerindeki sayıları sırayla sıralamam lazım fakat nasıl yapılabilir bir fikrim yok. Yardımcı olabilceklere şimdiden teşekkürler

Resimden gördüğüm kadarı ile toplamda 4 tip hareket var. Sağ, aşağı, sol, yukarı. Tüm bu hareketlerle matris üzerinde gezinebilmek için her bir hareket için fonksiyon tanımlayabilirsin. Fonksiyonlar rekürsif olabilir. Hareket matrisin sınırına ya da daha önce üzerinden geçilmiş olan bir elemana kadar yapıldıktan sonra durdurulmalı ve sonraki harekete geçilmeli. En sonda duracaktır zaten.

Denenebilir, farklı algoritmalar tasarlanabilir :slightly_smiling_face:

Bunu bir örnekle gösterebilme şansınız var mı acaba

1 Beğeni

Olabilir, bilgisayarımın başına geçince basit bir uygulama yapıp paylaşmaya çalışırım kardeş.

Teşekkür ederim örneğinizi bekliyorum

Aşağıdaki gibi bir örnek yaptım, siz geliştirirsiniz.

class Matris(object):
    def __init__(self, strSys, stnSys):
        self.strSys = strSys
        self.stnSys = stnSys
        self.mtrs = []
        self.matrisOlustur()
        self.a = 0
        self.b = 0
        
    def matrisOlustur(self):
        self.satir = []
        print("Matrisin her satırı için değerlerinizi arasında tire (-) bırakarak girin")
        
        for i in range(self.strSys):
            deger = input("Satır: ")
            self.satir = deger.split("-")
            self.mtrs.append(self.satir)
        
        print("Matris oluşturuldu")
        self.matrisYazdir()
        
    def matrisYazdir(self):
        print (*self.mtrs, sep="\n")
        
    def sag(self):
        while(True):
            if (self.b < self.stnSys and self.mtrs[self.a][self.b] != "visited"):
                print (self.mtrs[self.a][self.b], end=" ")
                self.mtrs[self.a][self.b] = "visited"
                self.b = self.b + 1
            else: 
                self.b = self.b - 1
                self.a = self.a + 1
                break
    
    def asagi(self):
        while(True):
            if (self.a < self.strSys and self.mtrs[self.a][self.b] != "visited"):
                print (self.mtrs[self.a][self.b], end=" ")
                self.mtrs[self.a][self.b] = "visited"
                self.a = self.a + 1
            else: 
                self.a = self.a - 1
                self.b = self.b - 1
                break
            
    def sol(self):
        while(True):
            if (self.b >= 0 and self.mtrs[self.a][self.b] != "visited"):
                print (self.mtrs[self.a][self.b], end=" ")
                self.mtrs[self.a][self.b] = "visited"
                self.b = self.b - 1
            else: 
                self.b = self.b + 1
                self.a = self.a - 1
                break
    
    def yukari(self):
        while(True):
            if (self.a >= 0 and self.mtrs[self.a][self.b] != "visited"):
                print (self.mtrs[self.a][self.b], end=" ")
                self.mtrs[self.a][self.b] = "visited"
                self.a = self.a - 1
            else: 
                self.a = self.a + 1
                self.b = self.b + 1
                break
            
    def dolas(self):
        sayac = 0
        while(True):
            self.sag()
            self.asagi()
            self.sol()
            self.yukari()
            sayac += 1
            if (sayac == self.strSys * self.stnSys): break

Kodları yazıp çalıştırdıktan sonra kod satırından aşağıdaki gibi matris nesnesini örnekleyerek çıktıyı gözlemleyebilirsiniz.

Komut:

m1 = Matris(3,3)   # 3 satır x 3 sütunluk matris nesnesi oluşur

Çıktı:

Matrisin her satırı için değerlerinizi arasında tire (-) bırakarak girin
Satır: 1-2-3
Satır: 4-5-6
Satır: 7-8-9
Matris oluşturuldu
['1', '2', '3']
['4', '5', '6']
['7', '8', '9']

Satırlardaki değerleri tire (-) ile girdirdim, dilersen değiştirebilirsin

Komut:

m1.dolas()

Çıktı:
1 2 3 6 9 8 7 4 5

NOT: Hata ayıklama kısmını size bırakıyorum, kullanıcı 3 x 3’lük matris oluşturmak ister de satıra yanlışlıkla 4 tane veri girerse program kullanıcıya hatalı giriş yaptığını söylemeli. Ayrıca burada kurduğum algoritmada matris üzerinde gezindiğim her elemanı “visited” olarak değiştirdim. Dolayısıyla gezinme bittiğinde kullanıcının oluşturduğu matris “visited” değerlerinden oluşan bir matris oluyor. Dilerseniz bu kısmı da değiştirebilirsiniz. İyi çalışmalar…

1 Beğeni

Teşekkürler çok faydalı bir cevap oldu benim için

numpy.array kullanarak:

from numpy import array

matrix = [[1, 2, 3, 4, 5],
          [6, 7, 8, 9, 10],
          [11, 12, 13, 14, 15],
          [16, 17, 18, 19, 20]]

matrix = array(matrix)

f = lambda m, i=0: (lambda k, l: list(k) + f(l, (i+1)%4))(*[(m[0], m[1:]), (m[..., -1], m[..., :-1]), (m[-1][::-1], m[:-1]), (m[..., 0][::-1], m[..., 1:])][i]) if len(m) else []

assert f(matrix) == [1, 2, 3, 4, 5, 10, 15, 20, 19, 18, 17, 16, 11, 6, 7, 8, 9, 14, 13, 12]

print(f(matrix))
2 Beğeni