Last active
December 15, 2017 06:57
-
-
Save milang/e527df4bafeb2bd1cb90961a2b3af138 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
// 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