Skip to content

Instantly share code, notes, and snippets.

@nagat01
nagat01 / gist:1014320
Created June 8, 2011 12:26
F# : Project Euler 2 solution in 4 different ways
module Program
open System
let problem2 = // 4613732
let mutable n1,n2,sum=1,2,0
while n1<4000000 do
if n1%2=0 then
sum <- sum + n1
n2 <- n1+n2
n1 <- n2-n1
@nagat01
nagat01 / gist:1016625
Created June 9, 2011 12:23
F# : Project Euler 2 yet another solution in 3 different ways
open System
open System.IO
open System.Collections.Generic
open System.Linq
let fib = Seq.unfold(fun(a,b)->Some(a,(b,a+b)))
// defining tail optimized fibonacci sequence
let rec fib2(a,b)=seq{yield a; yield! fib2(b,a+b)}
@nagat01
nagat01 / factorize.fs
Created June 10, 2011 03:45
F#:2 factorization functions using recursion of pure function or sequence with nested while loop
/// recursion of pure function
let factorize (x:int64) =
let rec f (x:int64) m i= seq {
if x%m=0L then yield! f (x/m) m (i+1)
else
if i<>0 then yield (m,i)
if x<>1L then yield! f x (m+1L) 0 }
f x 2L 0 |> Seq.toList
/// nested while loop
let factorize2 (x:int64) =
@nagat01
nagat01 / reverseDigit.fs
Created June 10, 2011 04:09
F#:2 ways of reverse every digits of a number.
(* using unfold and reduce *)
let reverseDigit =
Seq.unfold(fun x->if x=0 then None else Some(x%10,x/10))
>> Seq.toList
>> List.reduce(fun a b ->a*10+b)
(* using while loop *)
let reverseDigit2 x=
let mutable x,acc=x,0
while x<>0 do
@nagat01
nagat01 / primes.fs
Created June 10, 2011 05:24
F#: simple prime number generator
let primes =
let primes = new List<int>()
primes.Add 2
seq {
yield 2
for n in 3.. Int32.MaxValue do
if primes.All(fun p->n%p<>0) then
yield n
primes.Add n }
@nagat01
nagat01 / projectEuler8.fs
Created June 10, 2011 07:21
F#:Project Euler 8 in 3 ways
(* Read Me
I'm solving project Euler problem for various ways.
I'm intensively examining how to write F# code efficiently.
Do you find better way to solve this problem?
Please teach me how to write or another advice.
*)
(* Result
Answer : 40824
Answer : 40824
@nagat01
nagat01 / projectEuler1_11.fs
Created June 10, 2011 08:10
F#: Project Euler 1 to 11
module ProjectEulerSolutions
open System
open System.Collections.Generic
open System.IO
open System.Linq
open ProjectEulerLib
let problem1 = [1..999] |> List.filter(fun x->x%3=0 || x%5=0) |> List.sum
@nagat01
nagat01 / projectEulerLibFor1_10.fs
Created June 10, 2011 08:13
F#: Project Euler Library for Problem 1 to 10
module ProjectEulerLib
open System
open System.IO
open System.Collections.Generic
open System.Linq
//let ( ** )(x:int64) n =
// let mutable r,n = 1L,n
// while n>0 do
@nagat01
nagat01 / emirp.fs
Created June 11, 2011 04:57
F#: generate all emirp number which digits form descent order
(*
F# solution of below URL
http://gushwell.ifdef.jp/etude/RisingEmirp.html
*)
let isPrime n =
seq{yield 2;yield![3..2..int<<sqrt<|float n]}
|> Seq.forall(fun d->n%d<>0)
let rec revds a n= if n=0 then a else revds(a*10+n%10)(n/10)
let upNums = List.fold(fun ns d->List.collect(fun n->[n;n*10+d])ns)[0][1..9]
@nagat01
nagat01 / cartesian.fs
Created June 11, 2011 06:03
F#: Cartesian product of Collections.I want to write pure sequence version of it.
(* Result
[[1; 3]; [1; 4]; [2; 3]; [2; 4]]
[[3; 1]; [4; 1]; [3; 2]; [4; 2]]
seq [[1; 3]; [1; 4]; [2; 3]; [2; 4]]
seq [[1; 3]; [1; 4]; [2; 3]; [2; 4]]
*)
(*
let rec cartesian5 (ls: seq<seq<'a>>) : seq<seq<'a>> = seq{..}
I couldn't make cartesian from sequence of sequence