問題はこちらのリンクから。
http://qiita.com/items/55641767510c2f9f235f
BOARD = <<-EOD
!!!!!!!!!
!!!!!!!!!
!!!!T!!!!
!!!k!U!!!
!!j!H!V!!
!i!S!I!W!
!!R!B!J!!
!h!G!C!X!
!!Q!A!K!!
!g!F!D!Y!
!!P!E!L!!
!f!O!M!Z!
!!e!N!a!!
!!!d!b!!!
!!!!c!!!!
!!!!!!!!!
!!!!!!!!!
EOD
def make_map
board = BOARD.split("\n").map{|_|_.split('')}
map = {}
board.each_with_index{|line, y|
line.each_with_index{|val, x|
if val =~/[A-Za-z]/
map[val] = []
map[val] << board[y-2][x]
map[val] << board[y-1][x+1]
map[val] << board[y+1][x+1]
map[val] << board[y+2][x]
map[val] << board[y+1][x-1]
map[val] << board[y-1][x-1]
end
}
}
map
end
def solve(q)
map = make_map
moves = q.split('').map(&:to_i)
moves.inject('A'){|ans,move|
last_char = ans.split('').reverse.find{|_|_!='!'}
ans += map[last_char][move]
}
end
DATA.readlines.each do |line|
no,q,a = line.split(/\s+/)
ans = solve(q)
print no + "\t" + ans.to_s
puts ans == a ? ' o' : ' x'
end
__END__
0 135004 ACDABHS
1 1 AC
2 33333120 AENc!!b!M
3 0 AB