Skip to content

Instantly share code, notes, and snippets.

View rodrigovidal's full-sized avatar

Rodrigo Vidal rodrigovidal

View GitHub Profile
@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
@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: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 / 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: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 / 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 }
let fibonacci =
(0, 1)
|> Seq.unfold(fun (current, next) -> Some(current, (next, current + next)))
|> Seq.takeWhile(fun x -> x <= 4000000)
|> Seq.filter(fun x -> x % 2 = 0)
|> Seq.sum
@rodrigovidal
rodrigovidal / gist:1363269
Created November 14, 2011 04:57
Somar imperativo
private int SumNumbers(int from, int to)
{
int res = 0;
for (int i = from; i <= to; i++)
res = res + 1;
return res;
}
@rodrigovidal
rodrigovidal / gist:1363274
Created November 14, 2011 04:59
Somar recursivo
private int SumNumbers(int from, int to)
{
if (from > to) return 0;
int sumRest = SumNumbers(from + 1, to);
return from + sumRest;
}
@rodrigovidal
rodrigovidal / gist:1363351
Created November 14, 2011 05:55
Somar funcional
public int SumNumbers(int from, int to)
{
return from > to ? 0 : (SumNumbers(from + 1, to) + from) ;
}