Akademisyenler öncülüğünde matematik/fizik/bilgisayar bilimleri soru cevap platformu
2 beğenilme 0 beğenilmeme
657 kez görüntülendi

Soru, $3x3$ satranç tahtası için sorulsaydı, yanıt 8 olarak verilmiştir. Bu soruyu programlarken, önce şahın nasıl hareket ettiği, kodda $rules$ adlı diziyle tanımlanmıştır, ondan sonra, sırasıyla şah yerleştirme işlemine başlanmıştır.

Soruda, $N=6$ ifadesi $3$ ile denenirse, örnek için olan $8$ değeri ile kod sınanmış olur.

Serbest kategorisinde (496 puan) tarafından 
tarafından yeniden gösterildi | 657 kez görüntülendi

Recursive (Öz yinelemeli) tarzda yâni kendi kendi çağıran fonksiyon olarak yazılmıştır, şahın nasıl hareket ettiği programa tanıtılmış, ondan sonra şah herhangi bir yere yerleştirilerek, ikinci şah, daha sonra üçüncü şah ve böyle devam ederek, birbirlerini tehdit etmeyecek şekilde ve o anki durumu MarkCell adlı fonksiyon ile kontrol ederek program yazılmıştır.  

MarkCell adlı fonksiyon, o anki koordinatları alır ve o koordinatlardan nereye hareket edebileceğini kontrol eder.

1 cevap

0 beğenilme 0 beğenilmeme

# it is written on Python3. 6 Kings not attacking each other on a 6*6 chess table.

# you can test this on an online Python3 intrepreter.


rules,count,N=[],0,6

 

for i in range(N):

    for j in range(-N,N):

        if (i,j) not in ((1,1),(1,-1),(-1,1),(0,1),(0,0),(1,0),(0,-1),(-1,0),(-1,-1)):

            rules.append((i,j))

 

 

print(rules)

 

 

def MarkCell(x,y,a,b):

    global N

    tempx,tempy=x+a,y+b

 

    if x==tempx:

        if tempy<=y:

            return False

         

    if tempx<0 or tempy<0:

        return False


    N1=N-1

    if tempx>N1 or tempy>N1:

        return False

 

    for i in range(-1,2):

        tempxi=tempx+i

        for j in range(-1,2):

            tempyj=tempy+j

            if 0<=tempxi<N and 0<=tempyj<N:

                if squares[tempxi][tempyj]==1:

                    return False

 

    squares[tempx][tempy]=1

     

    return True

 

 

def place(x,y,counter):

    global count

    global N


    N2=N-2

    for i in range(len(rules)-1):

        a,b=rules[i]

 

        if MarkCell(x,y,a,b):

            if counter<N2:

                place(x+a,y+b,counter+1)

            else:

                #print(squares)

                count+=1

             

            squares[x+a][y+b]=0

             

for i in range(N):

    for j in range(N):

        squares=[[0]*N  for i in range(N)]

        squares[i][j]=1

        print(i,j)

        place(i,j,0)

 

print("Yanıt=",count)


(496 puan) tarafından 

Kod çalıştırılırsa yanıt olarak 62266 yanıtı bulunur, kod Python3'de çalışıyor...

20,284 soru
21,823 cevap
73,508 yorum
2,570,667 kullanıcı