Skip to main content

Microsoft Azure Notebooks - Live code - F#, R, and Python

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

Project Euler - Problem #5

I was not entirely happy with the solution for this, primarily because of the time it takes to find the answer.  If I had more insight into the mathematical relationships between factor, the calculation would have been streamlined.


Description

  • 2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.
  • What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?

Overview

  1. for every number from 1 to some maximum (or until)
  2. check to see if any divisior from 1 to 20 has remainder

Solution


let remainders div num =
    let divisors = [|1..div|]
    let rem = divisors |> Array.map (fun d -> System.Math.DivRem(num,d))
    rem


let isEvenlyDivisble div num = 
    let resultPartial  = remainders div num
    let resultRemainder = resultPartial |> Array.map (fun x -> snd(x))
    let sum = Array.sum resultRemainder
    if sum = 0 then
        true
    else
        false


let smallestWithNoRemainder div = 
    let mutable state = false
    let mutable i = 1
    while state = false do
        state <- isEvenlyDivisble div (i)
        i <- i+1
    i-1
    
Unit Tests


//verify individual functions
let unitTest2_0 = isEvenlyDivisble 10 2520
let unitTest2_1 = isEvenlyDivisble 10 2521
let unitTest2_2 = isEvenlyDivisble 10 2519
let unitTest2_3 = isEvenlyDivisble 3 6


//step up to calculating 20, by verifyng smaller steps
let unitTest3_1 = smallestWithNoRemainder 1
let unitTest3_2 = smallestWithNoRemainder 2
let unitTest3_3 = smallestWithNoRemainder 3
let unitTest3_4 = smallestWithNoRemainder 4
let unitTest3_5 = smallestWithNoRemainder 10
let unitTest3_6 = smallestWithNoRemainder 11
let unitTest3_7 = smallestWithNoRemainder 12
let unitTest3_8 = smallestWithNoRemainder 13
let unitTest3_9 = smallestWithNoRemainder 14
let unitTest3_10 = smallestWithNoRemainder 20


Comments

Popular posts from this blog

Microsoft Azure Notebooks - Live code - F#, R, and Python

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

Digit cancelling fractions (Project Euler Problem 33)

Problem The fraction 49/98 is a curious fraction, as an inexperienced mathematician in attempting to simplify it may incorrectly believe that 49/98 = 4/8, which is correct, is obtained by cancelling the 9s. We shall consider fractions like, 30/50 = 3/5, to be trivial examples. There are exactly four non-trivial examples of this type of fraction, less than one in value, and containing two digits in the numerator and denominator. If the product of these four fractions is given in its lowest common terms, find the value of the denominator. (link to Problem 33 on the Project Euler site) Note This is a somewhat crude solution, since I am only just getting back into solving these problems, or working with F#, but there are several similar problems for which I can develop properly factored, reusable functions. Solution open System let product xs ys = seq{for x in xs do for y in ys do let a = float x % float 10

Consecutive Prime Sum (Project Euler - Problem 50)

Problem The prime 41, can be written as the sum of six consecutive primes: 41 = 2 + 3 + 5 + 7 + 11 + 13 This is the longest sum of consecutive primes that adds to a prime below one-hundred. The longest sum of consecutive primes below one-thousand that adds to a prime, contains 21 terms, and is equal to 953. Which prime, below one-million, can be written as the sum of the most consecutive primes? Note Some libraries used in this code are F# modules I use, but have also published as a  Nuget library , such as EulerLib.GetPrimes() and  EulerLib. isPrime(). You need to reference the NuGetLibrary to use this code as is. Solution #load "Stat.fs" #load "Print.fs" #load "EulerLib.fs" open Stat open Print open EulerLib open System let rec FindLongestPrimeSequenceSum (primeList:list ) (nextItem:int) lessThanValue (primeArray:list ) bestPrime (correctArray:list )