Created
August 6, 2022 16:33
-
-
Save awostenberg/efee8bf7d54c0c1d17c26e4fcc523061 to your computer and use it in GitHub Desktop.
even fibs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Tests | |
open System | |
open Xunit | |
open FsUnit.Xunit | |
let fib (a,b) = | |
let sum = a+b | |
Some (sum,(b,sum)) | |
let fibseq = Seq.unfold fib (0,1) | |
let sumEvensNotExceeding notToExceed numbers = | |
numbers |> | |
Seq.takeWhile (fun n -> n <= notToExceed) |> | |
Seq.filter (fun n -> n % 2 = 0) |> | |
Seq.map (fun n -> bigint n) |> | |
Seq.reduce (+) | |
let result = fibseq |> sumEvensNotExceeding 4_000_000 | |
// 4_613_732 | |
let [<Fact>] ``fib 0,1`` () = fib (0,1) |> should equal (Some (1,(1,1))) | |
let [<Fact>] ``fibseq take 1`` () = fibseq |> Seq.take 1 |> Seq.toList |> should equal [1] | |
let [<Fact>]``fibseq take 5`` () = fibseq |> Seq.take 5 |> Seq.toList |> should equal [1;2;3;5;8] | |
let [<Fact>]``sum evens not exceeding 10`` () = fibseq |> sumEvensNotExceeding 10 |> should equal 10I | |
let [<Fact>]``fencepost sum evens not exceeding 8`` () = fibseq |> sumEvensNotExceeding 8 |> should equal 10I | |
let [<Fact>] ``drylab result for 1,000,000`` () = fibseq |> sumEvensNotExceeding 4_000_000 |> should equal 42I |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment