オフラインリアルタイムどう書くF07の問題をRubyで解く

問題はこちら。
http://nabetani.sakura.ne.jp/hena/ordf07walk/

```rb
def check(y,x,bd,result,val)
  return false if y < 0
  return false if y > 4
  return false if x < 0
  return false if x > 4
  return false if result[y][x] == '*'
  return false if bd[y][x] > val + 1
  return false if bd[y][x] < val - 1
  true
end

def move(y,x,bd,result)
  result[y][x] = '*'
  val = bd[y][x]
  move(y-1,x,bd,result) if check(y-1,x,bd,result,val)
  move(y+1,x,bd,result) if check(y+1,x,bd,result,val)
  move(y,x-1,bd,result) if check(y,x-1,bd,result,val)
  move(y,x+1,bd,result) if check(y,x+1,bd,result,val)
end

def solve(q)
  bd = q.split('/').map{|e| e.split('').map(&:to_i)}
  result = q.split('/').map{|e| e.split('').map(&:to_i)}
  move(0,2,bd,result)
  result.map{|e| e.join}.join('/')
end

DATA.readlines.each do |line|
  no,q,a = line.strip.split(/\s+/)
  ans = solve(q)
  print no + "\t" + ans
  puts ans == a ? ' o' : ' x'
end
__END__
0	12345/29496/19485/09594/82457	*****/*9*9*/*9*8*/*9*9*/82**7	
1	12345/11011/65432/71999/65432	*****/*****/*****/*1999/*****	
2	11111/11111/11111/11111/11111	*****/*****/*****/*****/*****	
3	88011/79992/69992/69993/55443	*****/*****/*****/*****/*****	
4	45000/46871/46971/36771/33222	*****/*****/*****/*****/*****	
5	45020/46871/46971/36771/33222	45*20/46871/46971/36771/33222	
6	21550/70587/91453/20343/96389	21**0/70*87/91***/20***/96*89	
7	74438/33621/27261/91783/17242	7***8/**6**/*726*/91783/17242	
8	33422/69349/24553/04129/52082	***22/69**9/2***3/0*129/52082	
9	24573/71679/48704/19786/91834	2***3/71**9/4**04/1***6/91*34	
10	23373/18323/34943/20613/79772	***7*/*8***/349**/2061*/7977*	
11	78255/11128/48232/09427/78865	78*55/****8/48***/094*7/78865	
12	82972/68827/34779/89986/45211	82*72/6**27/34**9/****6/45211	
13	16702/45602/15203/44906/64628	1**02/***02/1*203/**906/6*628	
14	52832/05787/66710/81714/75749	52*32/0****/***10/81*14/75*49	
15	84555/63383/52164/43916/20026	8****/***83/***64/**916/20026	
16	72261/21028/90154/71654/51861	7**61/***28/9**54/7*654/5*861	
17	98787/56708/35188/42175/68339	*****/***0*/3*1**/421*5/68339	
18	92767/16790/84897/69765/75734	92***/1***0/84**7/69***/75***	
19	40454/92023/68721/31223/92629	40***/920**/687**/3****/9*6*9	
20	55761/98788/56838/92226/57838	55**1/*****/56*3*/92226/57838	
21	43367/35324/40338/35675/17028	***67/*5**4/*0**8/*5675/17028	
22	97490/41513/42468/23325/27098	97*90/4**13/4**68/****5/*7098	
23	65658/53785/10987/14550/03167	****8/*3**5/10***/14550/03167	
24	96825/07774/18726/17112/37496	9**25/0***4/1**26/1*112/3*496	
25	66674/65657/14666/32917/83223	****4/*****/1****/3291*/83223	
26	74344/97459/97302/14439/35689	7****/97**9/97*02/1***9/3**89	
27	63956/98856/98586/88356/59386	63*56/***56/**586/**356/5*386	
28	55204/29155/42023/28114/27173	55*04/29*55/42***/28***/27*7*	
29	96259/76240/06333/98212/70575	96**9/76**0/06***/98***/70575	
30	96778/95391/95497/11300/85047	9****/9**91/9**97/11*00/85047	
31	12618/16611/96673/43535/82667	12*18/1**11/9***3/43*35/82***	
32	84348/77650/49246/62965/07154	****8/****0/492*6/62965/07154	
33	21172/32169/46995/38254/43735	***72/***69/*6995/*8254/**735	
34	98528/96666/78713/82600/76116	98*28/9****/***13/*2*00/**116	
35	56543/64480/21582/03631/46244	*****/***80/21*82/03*31/46244	
36	42865/87706/56970/17609/39789	42*65/***06/**970/1**0*/39***	
37	41774/61265/57974/29143/55908	41***/612**/579**/291**/55908	
38	03797/09776/26074/20987/35589	03*9*/09***/260*4/20***/355**	
39	72261/22155/23330/53106/43155	7**61/***55/****0/**106/**155	
40	56420/39322/05102/76122/03879	56**0/39***/05***/76***/03879	
41	77665/95657/13657/94094/13762	*****/9***7/13**7/94094/13762	
42	66110/25706/49002/77901/36519	66***/257*6/49***/779**/365*9	
43	21244/58340/37447/06079/25691	*****/58**0/37**7/06079/25691	
44	10180/11677/22208/34867/28064	***80/**677/***08/**867/*8064	
45	34503/83687/42707/02558/12933	***03/8**87/4**07/**558/**933	
```