LoginSignup
0
0

More than 5 years have passed since last update.

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

Posted at

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

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   
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