HarfUzayında kelime aramak

Merhaba bir projede bizden bir listede ki kelimeleri, Türkçe de olan 29 harften rastgele oluşmuş bir harf uzayında 4 yönede(kuzey,güney,doğu,batı) bir arama yapmamızı istiyor ve bulduğumuz kelimelerin konumlarını ve yönlerini bastırmamız isteniyor.
Soru şu şekilde;

Son olarak, kullanıcının şimdiye kadar girdiği tüm paragraflarda yer alan kelimeler,
Türkçe’de kullanılan 29 büyük harf ile rasgele olarak oluşturulmuş olan bir harf uzayında
(“harf_uzayi.txt” isimli örnek bir dosya ekte verilmiştir.) doğu, batı, güney, kuzey,
güneydoğu, kuzeydoğu, güneybatı ve kuzeybatı yönlerinde aranarak, her bulunduğunda
kelimenin harf uzayındaki başlangıç konumu (1’den başlayan satır ve sütun numaraları
şeklinde) ve yönü ya da hiç bulunamadığı aşağıdakine benzer şekilde ekranda listelenmelidir:

Adsız

örnek bu şekilde

örnek harf uzayını uzantısı nedeni ile atamıyorum ancak örnek harf uzayı da şu şekilde

Yazıyı kod görünümünde atarsanız daha iyi olur, şuan kopyalayamıyoruz.

Ayrıca güneybatı gibi ara yönlerin sınırı olarak neyi alacağız?

MHMNBAYAPVZUNŞĞSKOSÇBİFEHÇZODGGOIIMMTĞZİCÜLVBÖRRİB
OTŞMSDYLJHSVOBZYĞZAADGJDJMIEÜGĞNJOYAORFOIÇİÇŞJJYİİ
UACZŞENCFDÜÖDAÇTAĞOEGFHÜHÖFBSZHUĞÖOMZCGHHLOİKKARĞR
UYODZBZEUDDALYÖMBRLÇLYAHYSAEUUNLSÇEBNÖPHPNVRDNYCÜK
SĞCSDHIAİEGEGBYĞUUÖLFRKMGŞKGEJRFEAUÖÜLNVŞTÜÇKBBYGĞ
ZRRĞSGEUĞYFGĞĞVUNĞNŞZRTĞGIASAYĞAJOUHVÇDABDOGIACÇTM
ĞĞŞNKKÇNGNÖKĞGLFGGOULOĞZJAIĞARVZYROMPTÜONKĞÖJAFBJÜ
JGUVHDAĞCİŞFÜTCYYRRRÜNİAHGFİLZJFZSMPLYFUUPSÖĞTTSÜA
TMŞGJLBOĞFNLÜİŞCIJÖBDJAVVNSÇBBŞFLDHĞŞBCSUŞAÜBNBVÜB
OADANIOİCHĞÖUŞÜELMÖNBUHİZJBSGOJYBMĞOYFDGNACHDKZUÇÇ
ĞABVTMUÜUĞDRIOBJMMİLBDFAZŞĞBCÇSEHRTŞMAÜŞSEHKĞYJŞÜF
LİŞIÇRRÜLKEYVOÜJMAYEADŞUİTÇŞĞOKUVKIGŞDHVBGJZUUŞFÖI
YCĞPHUSPKZNPKÖAYAŞYÜKPMFHNZİUJCKNOIJVLCRUMÇNOAİHSY
GBCDOÖPCAİPVUDİLOJFMBMÇOBIMFOÇCJÖPÇAPÖŞJİYPŞOEŞAOG
ÖZNEJAOCÜFDĞÜUPVLCSYUBGGTÜSFZBOASTLAPDCÖPÖÖHHRŞZOD
EIDPÇZFNHIDRRÖPVÖĞAUÇYPŞEOSMEÖBRIJRJESİKHDĞFZIKVNR
ÇJTPÖJTSÜNTPDYHJZHGVVĞVEIYENYKPBAHĞPOOAMSVCNJHRKRH
UITDTRYÇÇZYSJAPĞIŞFJŞRKMMICJRTYĞPARLNÜUBLĞPMLLDDOZ
GASJÜPBCLUYUHJKTUDUŞĞÜOBFĞONVUSÖVJÇTÖÖLCAÇTNPJRBCR
NIPYSRÖOBMAÖPBNÖRRBZDSCZNİVOÜUCEDĞSBFÖOKNSIFJOPGPV
JFBİJJSSUMOZOAOĞÖLYVIHİÇTPLTĞNÜUVPÜOGHKBŞYŞKJTÇPPC
ÖUŞŞMNLKELVVVĞZÜŞEAHPCAIÜAABZSBZVNAGSÇFADJVÇHÇĞDMI
İRUZHZKYGÜHGCPPJGŞTTNUBÜYSFÜBKKURMĞRGPOGVÇVPNFİÇÖŞ
GKRHUYFĞNZPGDTFBĞSMCUÜAJŞELÜLLIUGRATBYYAÖEIMJNSMGU
FHDLCFUKOKÜNÇYDVNLĞİİFÜMĞVMRDINKÖYTFDEÖĞPPVOEDÜAĞY
İFKZGBDÇVTNÇUCCETOAISUYÜŞYUĞHLBJOHPÖOBOLEPŞPMTGBÇB
TAEPRĞNUOIUBŞKBĞFÇŞEZDÜVLÇIBMFGYKLVMYSZDSMPPAĞIDVÖ
DKZKÖMRÜİÇİĞFYTCTPRÖŞPLJILYSGĞYYGSBFNPÜJCFUCMĞMYÇF
LAERLKPEİDAPİYFKGCILERRGZPBÇKCNBGMCGCVVDĞBAFBÜVŞÜĞ
İÖJVKBŞCGVNOHCEOGVÖPORVEHİLOVOIMŞBÖDSİŞŞLAŞONREÜSF
GNEITNÇTAJSBMGMNĞJTEBUCĞAĞAĞÜLTBKÖJNOZIODLMOİBRTMÇ
HBETZJUCGRKSZPHVÖNÖSCIOPOOYAÜMJÖİÇSYYPYDÜOUÇRİEKŞÖ
TABUŞHŞPMAHKBBRÖGUDRZLHMUPUĞĞÜKKİOCTİZNSGZCEÇİÖGEÇ
DÜÜSINNNÇKFUCNÖJGNEOCCSGAIMIUEÖİEFBÜBETOCOODÖLÜETT
JEULKZYBNOĞRCŞRZHĞVTAGŞÇTVÜJTLYAGTÖMFĞFEGFĞPSOİGAB
NEMJĞIYTTRİUÇJŞOOTYPÇMÜGOTJÖANYFDVYZAGVRZEİKŞTÇÇÇT
ÖÜFKBFUJBÜVVLDOKZİÇÖZIGŞİBFPYGGFIIŞĞKFBİBIÖGIBIUİU
NZCFUKAOAUDYJJİÇĞRBÜÖŞNEİÖOGVOIDLECHRÇYJDCACİGMGJL
NNAMTIDRÜÜFNÜINNÜNNNOYUEIÇVOSFSİPFHĞHLÇMTARKLFÖUIS
ZTFUÜZUFÜKSİIÜVKMAKİÖDUBONPDSDUDTPVSANİİŞĞÇĞCCIJFB
BOİMGOŞVVJSKFKSCHSKFRPGYMŞSNÜZHİVÜDÇSSNBGNÇZŞONVLP
YÜTMLRVMISRPIPMÖGSŞEYSKEFFBHĞBGGFMİNHÜMÇFMPDÜİCJFM
JNAYPKNKSÖZÖÜÜZĞEFKAJTÖÜCRŞEJOBKÜCÇOCDDCPVĞÖDEVHŞR
ŞŞOHCVJKBUSUĞÜKUBZÇKZÖÜİÖBVMIEIHÇRNNEBMOŞÖIÖAZFZUN
ÇÜCTIBPOĞLLJBÜEOIZÖÖBKJLHAHARĞKHGLPÜÖÜUIUCÜGNFDBZF
ÇÇTFACHKRAMIÇJGBJGĞBGPTRŞHSOIRSŞVEMDİHYSBGÇICĞŞCÖZ
PKÜÇODİZAAFIYLEBUDARHTIŞEABOŞŞZVUZVMÇMĞBÇPCGFĞLOOP
AMBMOCKGVZERTPĞNUĞPYİVLŞFBJDNRVKZLMNFGOŞUSHĞKEÖIEA
KTLDTSFUDZEDŞDOUTÖIELFIÜÇÜJVGYROCKÖIVDÖİTTTHMZZLMO
SLOZVBŞRÜCCİŞÇÖSCRTGCUARHGMCCRVKBEĞVJBDDPJOBUVUAKI

Güneydoğu güneybatı olarak nasıl tam olarak bilmiyorum ama öğrenmeye çalışiyim

Bir de verdiğiniz örnek yazı ile kelimelerin bulunduğu yerleri gösteren fotoğraf uyuşmuyor sanırım.

Örneğin AMA kelimesi verdiğiniz yazıda geçmiyor bile.

Bizden ne yapmamizi istiyorsun?

import functools
import itertools

concatmap = lambda f, xs: itertools.chain.from_iterable(map(f, xs))

bul = lambda uzay, word: list(map(lambda r: print("%-20s %2d %2d %s" % (r[0], r[1][1]+1, r[1][0]+1, r[2])), filter(lambda r: r is not None, concatmap(lambda yon: map(lambda xy: functools.reduce(lambda w0yn, l: None if w0yn is None or w0yn[3][0] < 0 or w0yn[3][0] >= len(uzay[0]) or w0yn[3][1] < 0 or w0yn[3][1] >= len(uzay) or uzay[w0yn[3][1]][w0yn[3][0]] != l else (w0yn[0], w0yn[1], w0yn[2], yon[1](w0yn[3])), word, (word, xy, yon[0], xy)), itertools.product(range(len(uzay[0])), range(len(uzay)))), [('Kuzey', lambda xy: (xy[0], xy[1]-1)), ('Guney', lambda xy: (xy[0], xy[1]+1)), ('Dogu', lambda xy: (xy[0]+1, xy[1])), ('Bati', lambda xy: (xy[0]-1, xy[1]))]))))

uzay = """\
BIRT
IKIR
XUXO
XCXD
""".split()

for word in ["BIR", "IKI", "UC", "DORT"]:
    bul(uzay, word)
2 Beğeni

Çok teşekkürler hocam aynen bunu istiyordum birtek uzayı bizim rastgele bir şekilde oluşturmamız istenmiş ama o kısmı ben zorlasam yaparım.