anchor.diff:      |> List.map (costDatum a c)
       |> List.sum
   
  +let rec climbHill (f: float -> float) (x:float) (step:float) = seq{   
  +    let y = f x
  +    yield (x, y, step)
  +    let x' = x + step
  +    let y' = f x'
  +    let step' = if y' > y then step else -step/10.0
  +    yield! climbHill f x' step'       
  +}    
  +
   [<EntryPoint>]
   let main argv = 
       let appDir =  DirectoryInfo( __SOURCE_DIRECTORY__).Parent
  
positive.code:         yield Double.Parse(line)
  ]
  
  
  
  type datum = {age:float; height:float}
  
  let rec climbHill (f: float -> float) (x:float) (step:float) = seq{   
      let y = f x
      yield (x, y)
      let x' = x + step
      let y' = f x'
      let step' = if y' > y then step else -step/2.0
      yield! climbHill f x' step'       
  }    
  
  let guess (data: datum list) =
      let first = data.Head
      let last = List.reduce (fun _ i -> i) data
      if first.height = last.height then
  
negative.code:     let ages = readLines ageFile
      let heights = readLines heightFile
  
      let sampleData = List.zip ages heights |> List.map(fun (a, h) -> {age=a; height = h})
      
      //let (aGuess, cGuess) = linearGuess(sampleData) 
      let (aGuess, cGuess) = 1.0, 0.750029999999
      
      let step = 1.0;
      
      let ourF x = -(cost sampleData x cGuess)
      
      let trail = climbHill ourF aGuess step
      
      let (a, cost, step) = 
          trail 
          |> Seq.where (fun (_, _, step) -> abs step < 0.0000001)
          |> Seq.head
  
      printfn "answer:%0.5f cost:%0.5f step:%0.10f" a cost step
      
      printfn "Press any key to close."
      Console.ReadKey() |> ignore
      0
  