Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- open System.Collections.Generic
- let visited = new Dictionary<_,_>(HashIdentity.Structural)
- let rec walk x y =
- let addDigits num =
- let rec sumInner n soFar =
- match n with
- | x when x<10 -> soFar+x
- | x -> sumInner (n/10) (soFar + n % 10)
- sumInner num 0
- let rec innerWalk x y totalPoints =
- let mycell = (x,y)
- match visited.TryGetValue(mycell) with
- | true,_ -> totalPoints
- | _ ->
- (* printfn "%d,%d" x y *)
- visited.[mycell] <- true
- let digitSum = (addDigits x) + (addDigits y)
- match digitSum with
- | n when n>25 ->
- totalPoints
- | n -> List.fold
- (fun total (dx,dy) -> total + walk (x+dx) (y+dy))
- (totalPoints+1)
- [(1,0);(-1,0);(0,1);(0,-1)]
- innerWalk x y 0
- let _ =
- printfn "Points: %d\n" (walk 1000 1000)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement