Files
project-euler/101.fs
T
2025-08-03 20:16:55 -07:00

55 lines
1.3 KiB
FSharp

module _101
open common
open System
let leGrange points x =
points
|> Seq.mapi (fun j (xj,y) ->
y * (
points
|> Seq.mapi (fun k (xk,_) ->
if (j = k) then 1.0 else
(x - xk) / (xj - xk)
)
|> Seq.fold (*) 1.0
)
)
|> Seq.sum
let rec polynomialGen p x =
if p = 0 then 1L else
let rest = polynomialGen (p-1) x
let this = int64 (Math.Pow(float x, float p))
if p % 2 = 0 then
rest + this
else
rest - this
let poly10 = polynomialGen 10
let cube x =
int64 (Math.Pow(float x,3.0))
let funTup f n = (n, f n)
let sumOfFITsOfBOPs =
let leGrangeTermChecker f seqLimit =
[1..seqLimit]
|> Seq.map (fun n -> (float n, float (f n)))
|> (fun points ->
let nth = points |> Seq.nth (seqLimit - 1) |> snd
let pointsMinusLast = points |> Seq.take (seqLimit - 1)
let nthLegrange = leGrange pointsMinusLast (float seqLimit)
(int64 nth, int64 nthLegrange)
)
allIntegers |> Seq.skip 2
|> Seq.map (leGrangeTermChecker poly10)
|> Seq.take 11
//|> Seq.takeWhile (fun (nth,nthLeGrange) -> .Abs( nth - nthLeGrange) < 2)
|> Seq.toArray
//|> Array.map snd
//|> Array.sum