Skip to content

Instantly share code, notes, and snippets.

@quezlatch
Last active August 29, 2015 14:10
Show Gist options
  • Save quezlatch/3ddddc301355ff7a94e7 to your computer and use it in GitHub Desktop.
Save quezlatch/3ddddc301355ff7a94e7 to your computer and use it in GitHub Desktop.
module CuriousNumbers
open FsUnit
open Xunit
let rec digits = function
| 0 -> []
| x ->
let remainder = x % 10
let next = digits (x / 10)
remainder :: next
let rec factorial = function
| 1 | 0 -> 1
| x -> x * factorial (x - 1)
let factorialLookup = [for i in 0..9 -> factorial i ]
let sum =
let calc x =
digits x |> List.map (fun x -> factorialLookup.[x]) |> List.sum
let isCurious x =
x = calc x
[ 10..40730 ] |> List.filter isCurious |> List.sum
[<Fact>]
let ``123 breaks into [1;2;3]``() =
digits 123 |> should equal [3;2;1]
[<Fact>]
let ``factorial of 4 is 24``() =
factorial 4 |> should equal 24
[<Fact>]
let ``factorial lookup of 4 is 24``() =
factorialLookup.[4] |> should equal 24
[<Fact>]
let ``sum of curious numbers should be 40730``() =
sum |> should equal 40730
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment