Skip to content

Instantly share code, notes, and snippets.

@milang
Last active December 15, 2017 06:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save milang/e527df4bafeb2bd1cb90961a2b3af138 to your computer and use it in GitHub Desktop.
Save milang/e527df4bafeb2bd1cb90961a2b3af138 to your computer and use it in GitHub Desktop.
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Problem A
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
let generate factor seed =
seed
|> Seq.unfold (
fun previous ->
let result = (previous * factor) % 2147483647L
Some (result,result))
let generatorA = generate 16807L
let generatorB = generate 48271L
let result comparisonsCount filterA filterB =
Seq.zip (generatorA 116L |> Seq.filter filterA) (generatorB 299L |> Seq.filter filterB)
|> Seq.take comparisonsCount
|> Seq.fold
(fun matches (a,b) ->
let aTrimmed = a &&& 0xFFFFL
let bTrimmed = b &&& 0xFFFFL
matches + (if aTrimmed = bTrimmed then 1 else 0))
0 // seed
let acceptAll _ = true
(result 40000000 acceptAll acceptAll).Dump("Number of matches")
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Problem B
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
let divisibleBy factor value = (value % factor) = 0L
(result 5000000 (divisibleBy 4L) (divisibleBy 8L)).Dump("Number of matches with filtered streams")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment