Skip to content

Instantly share code, notes, and snippets.

View rodrigovidal's full-sized avatar

Rodrigo Vidal rodrigovidal

View GitHub Profile
@rodrigovidal
rodrigovidal / gist:1297629
Created October 19, 2011 06:46
Crivo de Eratostenes beeem melhor em F#
let sieveOfEratosthenes n =
let arr = [| for i in 0..n -> 1 |]
let sqrt = sqrt(float n) |> int
for k = 2 to sqrt + 1 do
if arr.[k] = 1 then
for j in 2*k..k..n-1 do
arr.[j] <- 0
seq { for i in 2..n-1 do if arr.[i] = 1 then yield i }
@rodrigovidal
rodrigovidal / gist:1297382
Created October 19, 2011 02:58
Crivo de Eratostenes ainda lento...
open System
open System.Collections.Generic
let sieve n =
seq {
let hash = new HashSet<int64>()
yield 2L
for k in 3L..2L..System.Int64.MaxValue do
if not (hash.Contains k) then
yield k
@rodrigovidal
rodrigovidal / factorize
Created October 17, 2011 03:09
Fatoração
let factorize n =
let rec find i =
if i >= n then None
elif (n % i = 0) then Some(i, n/i)
else find(i+1)
find 2
@rodrigovidal
rodrigovidal / gist:1026460
Created June 15, 2011 04:05
Tests usando FUnit
module Tests
open NUnit.Framework
open FsxUnit
open ProjectEuler
type ``Project Euler 1 Tests``() =
[<Test>] member test.
``Given a empty list sum all members should be equal 0``() =
[] |> sumAllMultiplesOf3Or5 |> should be (equal 0)
[<Test>] member test.
@rodrigovidal
rodrigovidal / gist:1026449
Created June 15, 2011 04:01
Soma de uma lista usando Pipe-Forward F#
let isMultipleOf3Or5 x = x % 3 = 0 || x % 5 = 0
let sumAllMultiplesOf3Or5Ref list =
list |> List.filter isMultipleOf3Or5
|> List.sum
@rodrigovidal
rodrigovidal / gist:1026448
Created June 15, 2011 04:00
Implementação de soma de uma lista em F#
let isMultipleOf3Or5 x = x % 3 = 0 || x % 5 = 0
let sumAllMultiplesOf3Or5 list = List.sum (List.filter isMultipleOf3Or5 list)
@rodrigovidal
rodrigovidal / gist:1026445
Created June 15, 2011 03:58
Implementação Imperativa de soma de uma lista
let sumAllMultiplesOf3Or5 list =
let mutable total = 0
for i in list do
if i % 3 = 0 || i % 5 = 0 then
total <- total + i
total
let numerosExtenso = ["Um"; "Dois"; "Três"]
let numeros = [1;2;3]
let tupla = List.zip numeros numerosExtenso
for i, j in tupla do
printfn "Numero: %d - Numero por extenso: %s" i j
let nome = "Rodrigo Vidal"
nome <- "Don Syme"
let nome = "Rodrigo Vidal"
nome = "Don Syme"