Increasing sequence python implementation 1111

Article Directory


Answer: 180414

problem

For a letter matrix, we call a three-ascending sequence in the matrix refers to finding three letters in the matrix, they are in the same row, the same column, or on the same 45-degree diagonal line, these three letters are viewed from left to right , Or increasing from top to bottom.

For example,
YQPD
BKEZ
AFYV in the following matrix

There are 6 three-ascending sequences of BKZ, BEZ, AFY, AFV, AKP, DEF, etc. Note that when the three letters are arranged from bottom left to top right, the order from left to right and from top to bottom are different.

For the following matrix with 30 rows and 50 columns, how many three-ascending sequences are there in total?

VLPWJVVNNZSWFGHSFRBCOIJTPYNEURPIGKQGPSXUGNELGRVZAG
SDLLOVGRTWEYZKKXNKIRWGZWXWRHKXFASATDWZAPZRNHTNNGQF
ZGUGXVQDQAEAHOQEADMWWXFBXECKAVIGPTKTTQFWSWPKRPSMGA
BDGMGYHAOPPRRHKYZCMFZEDELCALTBSWNTAODXYVHQNDASUFRL
YVYWQZUTEPFSFXLTZBMBQETXGXFUEBHGMJKBPNIHMYOELYZIKH
ZYZHSLTCGNANNXTUJGBYKUOJMGOGRDPKEUGVHNZJZHDUNRERBU
XFPTZKTPVQPJEMBHNTUBSMIYEGXNWQSBZMHMDRZZMJPZQTCWLR
ZNXOKBITTPSHEXWHZXFLWEMPZTBVNKNYSHCIQRIKQHFRAYWOPG
MHJKFYYBQSDPOVJICWWGGCOZSBGLSOXOFDAADZYEOBKDDTMQPA
VIDPIGELBYMEVQLASLQRUKMXSEWGHRSFVXOMHSJWWXHIBCGVIF
GWRFRFLHAMYWYZOIQODBIHHRIIMWJWJGYPFAHZZWJKRGOISUJC
EKQKKPNEYCBWOQHTYFHHQZRLFNDOVXTWASSQWXKBIVTKTUIASK
PEKNJFIVBKOZUEPPHIWLUBFUDWPIDRJKAZVJKPBRHCRMGNMFWW
CGZAXHXPDELTACGUWBXWNNZNDQYYCIQRJCULIEBQBLLMJEUSZP
RWHHQMBIJWTQPUFNAESPZHAQARNIDUCRYQAZMNVRVZUJOZUDGS
PFGAYBDEECHUXFUZIKAXYDFWJNSAOPJYWUIEJSCORRBVQHCHMR
JNVIPVEMQSHCCAXMWEFSYIGFPIXNIDXOTXTNBCHSHUZGKXFECL
YZBAIIOTWLREPZISBGJLQDALKZUKEQMKLDIPXJEPENEIPWFDLP
HBQKWJFLSEXVILKYPNSWUZLDCRTAYUUPEITQJEITZRQMMAQNLN
DQDJGOWMBFKAIGWEAJOISPFPLULIWVVALLIIHBGEZLGRHRCKGF
LXYPCVPNUKSWCCGXEYTEBAWRLWDWNHHNNNWQNIIBUCGUJYMRYW
CZDKISKUSBPFHVGSAVJBDMNPSDKFRXVVPLVAQUGVUJEXSZFGFQ
IYIJGISUANRAXTGQLAVFMQTICKQAHLEBGHAVOVVPEXIMLFWIYI
ZIIFSOPCMAWCBPKWZBUQPQLGSNIBFADUUJJHPAIUVVNWNWKDZB
HGTEEIISFGIUEUOWXVTPJDVACYQYFQUCXOXOSSMXLZDQESHXKP
FEBZHJAGIFGXSMRDKGONGELOALLSYDVILRWAPXXBPOOSWZNEAS
VJGMAOFLGYIFLJTEKDNIWHJAABCASFMAKIENSYIZZSLRSUIPCJ
BMQGMPDRCPGWKTPLOTAINXZAAJWCPUJHPOUYWNWHZAKCDMZDSR
RRARTVHZYYCEDXJQNQAINQVDJCZCZLCQWQQIKUYMYMOVMNCBVY
ABTCRRUXVGYLZILFLOFYVWFFBZNFWDZOADRDCLIRFKBFBHMAXX

Idea code

a = []
with open(r'C:\Users\76390\Desktop\1.txt', 'r') as fp:
    for line in fp.readlines():
        a.append(line.strip())
    fp.close()
ans = 0
dirs = [(0, 1), (1, 0), (1, 1), (1, -1), (-1, 1)]
for i in range(len(a)):
    for j in range(len(a[0])):
        for dir in dirs:
            x1, y1 = i, j
            while True:
                x1 += dir[0]
                y1 += dir[1]
                x2, y2 = x1, y1
                if x1 >= len(a) or y1 >= len(a[0]) or x1 < 0 or y1 < 0:
                    break

                while True:
                    x2 += dir[0]
                    y2 += dir[1]

                    if x2 >= len(a) or y2 >= len(a[0]) or x2 < 0 or y2 < 0:
                        break
                    if a[i][j] < a[x1][y1] < a[x2][y2]:
                        ans += 1

print(ans)

Guess you like

Origin blog.csdn.net/qq_49821869/article/details/115025165