Satranç Tahtasında Bir At


Soruyu elle çözdükten sonra birde kodu yazayım istedim hoşuma gitti birde sizden farklı yollar görmek istedim ne kadar farklı çözüm o kadar iyi :slight_smile:

1 Beğeni
import functools
import itertools

tmul = lambda x, y: (x[0] * y[0], x[1] * y[1])
tadd = lambda x, y: (x[0] + y[0], x[1] + y[1])

moves = [
	tmul(movelen, movesign)
	for movelen  in [(1, 2), (2, 1)]
	for movesign in [(-1, -1), (-1, +1), (+1, -1), (+1, +1)]
]

n_moves = lambda n: set(map(lambda ms: functools.reduce(tadd, ms, (0, 0)), itertools.product(moves, repeat=n)))

print(len(n_moves(2))) # 33

Edit: recursive istiyorsak:

n_moves = lambda n: set([(0, 0)]) if n == 0 else set([tadd(move, base) for move in moves for base in n_moves(n - 1)])

OEIS: https://oeis.org/A118312

3 Beğeni

Verdiğiniz kaynak güzelmiş teşekkürler.Birde benim çözümümü paylaşayım

from itertools import product
atların_tekrarlı_konumları=[]
at=[9,9]
liste=[[1,2],[1,-2],[2,1],[2,-1],[-1,2],[-1,-2],[-2,1],[-2,-1]]
for i  in product(liste,repeat=4):
    at=[9,9]
    for j in i :
        at[0]=at[0]+j[0]
        at[1]=at[1]+j[1]
    atların_tekrarlı_konumları.append(at)

atların_konumları=[]
for i in atların_tekrarlı_konumları:
    if i not in atların_konumları:
        atların_konumları.append(i)
print(len(atların_konumları))