challenge 文字列の八方向検索

与えられた矩形状の文字列中に存在する文字列"ウオリ"の位置を全て出力するプログラムを
書いてください。
文字列の検索方向は八方全てで、また連続している(左右や上下の境界をまたがない)ものを
対象とします。出力は起点"ウ"の座標と方向のリストにしてください。

サンプル入力:

リオウウリウ
ウオリウオリ
オリリオリウ
リリオオウオ

サンプル出力:

(2, 0), 左
(0, 1), 右
(0, 1), 下
(3, 1), 右
(4, 3), 左上

--
より一般には、任意の検索文字列への対応も考えてみてください。

Posted feedbacks - Scala

ふつうに。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
object esearch {
  val ds = List(("", 0), ("Left", -1),  ("Right", 1)).map{h=>
           List(("", 0), ("Upper", -1), ("Lower", 1)).map{(h, _)}}
           .foldLeft(List[((String,Int),(String,Int))]()){_:::_}.tail
  def apply(s:String, s1:String) = {
    val smap = s.split("\n")
    smap.zipWithIndex.foreach{case (l, y) =>
      l.toArray.zipWithIndex.foreach{case (c, x) =>
        if(c==s1(0)){
          ds.foreach{ d=>
            if((1 until s1.size).forall{ i=> 
              try{
                smap(y+i*d._2._2)(x+i*d._1._2) == s1(i)
              }catch{ case e => false }
            }) println("("+x+","+y+"), "+d._1._1+d._2._1)
          } 
        }
      }
    }
  }
}

Index

Feed

Other

Link

Pathtraq

loading...