Skip to content

Instantly share code, notes, and snippets.

View davidgrenier's full-sized avatar

David Grenier davidgrenier

View GitHub Profile
#I @"C:\Projects\Lib"
#r "Hopac.dll"
#r "Hopac.Core.dll"
open System
open Hopac
open Hopac.Job.Infixes
open Hopac.Alt.Infixes
open Hopac.Extensions
let await (timeout: int) task =
async {
let evt = Event<_>()
let! _ =
async {
do! Async.Sleep timeout
evt.Trigger None
} |> Async.StartChild
let! _ =
open System.Net
open System.Diagnostics
let netsh arguments =
ProcessStartInfo("netsh", arguments, WindowStyle = ProcessWindowStyle.Hidden)
|> Process.Start
let rec loop source dest =
async {
use _ = netsh "interface portproxy reset"
type Meta = interface end
type U<'ty>() =
class
interface Meta
end
type K<'ty, 'x>(elem: 'x) =
interface Meta
member x.Elem = elem
@davidgrenier
davidgrenier / toVarint.fs
Created July 19, 2011 02:09
toVarint for a would-be implementation of proto-buf in F#
let toVarint v =
let rec loop n s =
match n >>> 7, n &&& 127 with
| (0, c) -> byte c :: s
| (r, c) -> loop r (byte (128 ||| c) :: s)
loop v []
@davidgrenier
davidgrenier / Euler01.fsx
Created August 19, 2011 14:03
Project Euler 1
let n = 1000;;
[1..n-1]
|> Seq.filter (fun v -> v % 3 = 0 || v % 5 = 0)
|> Seq.sum
@davidgrenier
davidgrenier / Ring-Rx.fsx
Created August 19, 2011 13:47
Erlang Ring Problem in F# + Rx
#r @"System.Reactive.dll"
open System
open System.Reactive.Subjects
open System.Reactive.Linq
let run n m =
let now = DateTime.Now
let nodes = List.init n (fun _ -> new Subject<_>())
@davidgrenier
davidgrenier / Ring.fsx
Created August 19, 2011 13:57
Erlang Ring problem in F#
open System
type Agent<'a> = MailboxProcessor<'a>
type Msg = Step of int | End
let getRingHead n =
let lastNode =
Agent.Start(fun inbox ->
let rec loop (time : DateTime) = async {
let! m = inbox.Receive()
@davidgrenier
davidgrenier / Euler02.fsx
Created August 19, 2011 14:07
Project Euler 2
Seq.unfold (fun (c, n) -> Some(c, (n, c + n))) (1, 2)
|> Seq.takeWhile (fun v -> v <= 4000000)
|> Seq.filter (fun v -> v % 2 = 0)
|> Seq.sum
@davidgrenier
davidgrenier / Euler03.fsx
Created August 19, 2011 15:09
Project Euler 3
let getLPF num =
let rec getLPF l rest =
seq { yield 2L; yield! seq {3L..2L..(rest |> float |> sqrt |> int64)}}
|> Seq.tryFind (fun d -> rest % d = 0L)
|> function
| None -> max l rest
| Some d -> getLPF (max l d) (rest / d)
getLPF 1L num;;
getLPF 600851475143L