オフラインリアルタイムどう書くF07の回答

1時間以内。
最初からある/をガードにして次の値を計算しています。

```ruby:f07.rb

def walk( pos, board )
  num = board[pos].to_i
  board[pos] = '*'
  [ -6, -1, 1, 6, ].each { |dpos|
    npos = pos + dpos
    next unless board[npos] =~ /\d/
    walk( npos, board ) if (num-1..num+1).include?(board[npos].to_i)
  }
  board
end

SIZE = 5+1
GUARD = '/' * SIZE

def solve( input )
  board = GUARD + input + GUARD
  walk( 2 + SIZE, board )[SIZE...-SIZE]
end

def test( id, input, expected )
  actual = solve( input )
  if expected != actual
    puts '[%s] NG: input = %s, expected = %s, actual = %s' % [ id, input, expected, actual, ]
    exit 1
  else
    puts '[%s] OK' % [ id, ]
  end
end

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