(def fields [".....
...O.
.....
...^.
....." "...
>O.
..." ">O.
..." "v....
O...." "...........
...........
O.........<
..........." "......
......
.^..O." "......
.....>
O.....
......
......" ".O.
...
.v." ".....<.
..O...." "<....O
......"])
(defn z[f](let[v(sort(keep-indexed(fn[i v](if(some #{v}[\v\>\<\^\O])[(if(= v\O)\& v)i]))f))l(+(.indexOf f"\n")1)d((nth v 1)0)q((nth v 1)1)p((nth v 0)1)r(=(quot p l)(quot q l))i(> q p)](cond(= d\^)(and i(=(mod(- q p)l)0))(= d\v)(and(not i)(=(mod(- p q)l)0))(= d\>)(and(not i)r):else(and i r))))
(println (map z fields))
KGRlZiBmaWVsZHMgWyIuLi4uLgouLi5PLgouLi4uLgouLi5eLgouLi4uLiIgIi4uLgo+Ty4KLi4uIiAiPk8uCi4uLiIgInYuLi4uCk8uLi4uIiAiLi4uLi4uLi4uLi4KLi4uLi4uLi4uLi4KTy4uLi4uLi4uLjwKLi4uLi4uLi4uLi4iICIuLi4uLi4KLi4uLi4uCi5eLi5PLiIgIi4uLi4uLgouLi4uLj4KTy4uLi4uCi4uLi4uLgouLi4uLi4iICIuTy4KLi4uCi52LiIgIi4uLi4uPC4KLi5PLi4uLiIgIjwuLi4uTwouLi4uLi4iXSkKCihkZWZuIHpbZl0obGV0W3Yoc29ydChrZWVwLWluZGV4ZWQoZm5baSB2XShpZihzb21lICN7dn1bXHZcPlw8XF5cT10pWyhpZig9IHZcTylcJiB2KWldKSlmKSlsKCsoLmluZGV4T2YgZiJcbiIpMSlkKChudGggdiAxKTApcSgobnRoIHYgMSkxKXAoKG50aCB2IDApMSlyKD0ocXVvdCBwIGwpKHF1b3QgcSBsKSlpKD4gcSBwKV0oY29uZCg9IGRcXikoYW5kIGkoPShtb2QoLSBxIHApbCkwKSkoPSBkXHYpKGFuZChub3QgaSkoPShtb2QoLSBwIHEpbCkwKSkoPSBkXD4pKGFuZChub3QgaSlyKTplbHNlKGFuZCBpIHIpKSkpCgoocHJpbnRsbiAobWFwIHogZmllbGRzKSk=