文字列の八方向検索
Posted feedbacks - Python
11行目のif文をもう少しどうにかしたかったけど、思いつかなかったので投稿。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # -*- coding: utf-8 -*-
def f(data, s):
a = [('-j', '+0'), ('+j', '+0'), ('+0', '-j'), ('+0', '+j'), ('-j', '-j'), ('-j', '+j'), ('+j', '-j'), ('+j', '+j')]
for y in range(len(data)):
for x in range(len(data[0])):
if data[y][x] == s[0]:
for i in range(8):
try:
b, c = a[i]
if ''.join([data[y+eval(c) if y+eval(c) >= 0 else len(data)][x+eval(b) if x+eval(b) >= 0 else len(data[0])] for j in range(len(s))]) == s:
print '(%d, %d) %s' % (x, y, ['左', '右', '上', '下', '左上', '左下', '右上', '右下'][i])
except:
pass
data = [u'リオウウリウ', u'ウオリウオリ', u'オリリオリウ', u'リリオオウオ']
f(data, u'ウオリ')
|
単純に全探索。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # coding: shift_jis
import sys
import codecs
def main():
if not len(sys.argv) == 3:
sys.stderr.write("usage: input_file_name search_string\n")
return
matrix = [list(s.rstrip("\r\n")) for s in codecs.open(sys.argv[1], "r", "shift_jis")]
string = sys.argv[2].decode("shift_jis")
if not string:
raise ValueError("empty search string")
ycount = len(matrix)
if not ycount >= 1:
raise ValueError("empty sample input")
xcount = len(matrix[0])
for a in matrix:
if not len(a) == xcount >= 1:
raise ValueError("invalid length of line")
for y in xrange(ycount):
for x in xrange(xcount):
if matrix[y][x] == string[0]:
for dy in xrange(-1, 2):
for dx in xrange(-1, 2):
if dx == dy == 0:
continue
for i in xrange(1, len(string)):
x2 = x + dx * i
y2 = y + dy * i
if not(0 <= x2 < xcount and 0 <= y2 < ycount and matrix[y2][x2] == string[i]):
break
else:
print "(%d, %d), %s%s" % (x, y, [u"", u"右", u"左"][dx], [u"", u"下", u"上"][dy])
if __name__ == '__main__':
main()
|


kuromin #4400() Rating0/2=0.00
[ reply ]