LoginSignup
0
0

More than 5 years have passed since last update.

第10回オフラインリアルタイムどう書く。groovy による実装例。

Posted at

先日行われたオフラインリアルタイムどう書く

で、家に帰ってから思いついた実装。

この問題はまず地図を手に入れる必要がある。
作戦としては、

なんかがあるんだけれども、これはどれでもない。

def map( dir ){
  [
  "!fghi!ePQRj!dOFGSk!cNEABHT!bMDCIU!aLKJV!ZYXW!",
  "!ijkT!hRSHU!gQGBIV!fPFACJW!eOEDKX!dNMLY!cbaZ!",
  "!TUVW!kHIJX!jSBCKY!iRGADLZ!hQFEMa!gPONb!fedc!",
  ][dir];
}

def solve( src ){
  ( src as List ).inject( ["A"]*2 ){ r, c ->
    dir = c.toInteger()
    path=map( dir % 3 )
    n=path[ path.indexOf(r[1])+(dir<3 ? 1 : -1) ];
    [ r[0]+n, n=="!" ? r[1] : n ]
  }[0]
}

def test( src, expected ){
  actual = solve( src )
  ok = actual==expected ? "ok" : "***NG***"
  println( "${ok} ${src}->${actual} ( ${expected})" )
}

/*0*/ test( "135004", "ACDABHS" );
/*略*/
/*45*/ test( "42434302545", "AFEOd!!ONOef" );

map(0) は、方向 0 に進んだらどうなるかを示している。
map(1)map(2) も同様。
方向3〜5は、方向0〜2の逆なので、逆にたどればよい。

辿るにあたっては、回答となる文字列と今いる位置のペアを inject で回すことにした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0