I was exploring Jupyter notebooks , that combines live code, markdown and data, through Microsoft's implementation, known as MS Azure Notebooks , putting together a small library of R and F# notebooks . As Microsoft's FAQ for the service describes it as : ...a multi-lingual REPL on steroids. This is a free service that provides Jupyter notebooks along with supporting packages for R, Python and F# as a service. This means you can just login and get going since no installation/setup is necessary. Typical usage includes schools/instruction, giving webinars, learning languages, sharing ideas, etc. Feel free to clone and comment... In R Azure Workbook for R - Memoisation and Vectorization Charting Correlation Matrices in R In F# Charnownes Constant in FSharp.ipynb Project Euler - Problems 18 and 67 - FSharp using Dynamic Programming
The original post Project Euler - Problem 30 was done some time ago, and I recently read about using parallel methods to improve performance, and in this case, Parallel reduces execution time by 33%.
Description
Surprisingly there are only three numbers that can be written as the sum of fourth powers of their digits. Find the sum of all the numbers that can be written as the sum of fifth powers of their digits.
Solution (using Parallel)
open System
open System.Threading
open System.Threading.Tasks
let isNarcissistic num power =
let numAsString = num.ToString()
let arr = [for i=0 to (numAsString.Length - 1) do
yield (float(numAsString.Chars(i).ToString()))**power]
if num = int(List.sum arr) then
num
else
0
let GetAllNarcissistic2_Start = System.DateTime.UtcNow
let GetAllNarcissistic2 =
[|2..999999|]
|> Array.Parallel.map (fun x -> isNarcissistic x 5.0)
|> Array.sum
printfn "%f" ((System.DateTime.UtcNow).Subtract(GetAllNarcissistic2_Start).TotalSeconds)
Description
Surprisingly there are only three numbers that can be written as the sum of fourth powers of their digits. Find the sum of all the numbers that can be written as the sum of fifth powers of their digits.
Solution (using Parallel)
open System
open System.Threading
open System.Threading.Tasks
let isNarcissistic num power =
let numAsString = num.ToString()
let arr = [for i=0 to (numAsString.Length - 1) do
yield (float(numAsString.Chars(i).ToString()))**power]
if num = int(List.sum arr) then
num
else
0
let GetAllNarcissistic2_Start = System.DateTime.UtcNow
let GetAllNarcissistic2 =
[|2..999999|]
|> Array.Parallel.map (fun x -> isNarcissistic x 5.0)
|> Array.sum
printfn "%f" ((System.DateTime.UtcNow).Subtract(GetAllNarcissistic2_Start).TotalSeconds)
Comments
Post a Comment