Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let visited = Hashtbl.create 200000
- let rec walk x y =
- let addDigits number =
- let rec sumInner n soFar =
- match n with
- | x when x<10 -> soFar+x
- | x -> sumInner (n/10) (soFar + n mod 10) in
- sumInner number 0 in
- let rec innerWalk x y totalPoints =
- match Hashtbl.mem visited (x,y) with
- | true -> totalPoints
- | _ -> begin
- Printf.printf "%d,%d\n" x y ;
- Hashtbl.add visited (x,y) 1 ;
- let digitSum = (addDigits x) + (addDigits y) in
- match digitSum with
- | n when n>25 ->
- totalPoints
- | n -> List.fold_left
- (fun total (dx,dy) -> total + walk (x+dx) (y+dy))
- (totalPoints+1)
- [(1,0);(-1,0);(0,1);(0,-1)]
- end in
- innerWalk x y 0
- let _ =
- Printf.printf "Points: %d\n" (walk 1000 1000)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement