Skip to content

Instantly share code, notes, and snippets.

@voronoipotato
Created July 7, 2021 00:40
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save voronoipotato/c8245f19c1bb1d0438ffe1c811d1db1a to your computer and use it in GitHub Desktop.
Save voronoipotato/c8245f19c1bb1d0438ffe1c811d1db1a to your computer and use it in GitHub Desktop.
The weird way to find anagrams
// Learn more about F# at http://fsharp.org
open System
open System.Globalization
open System.Numerics
open System.Diagnostics
open System.Text
[<EntryPoint>]
let main argv =
let primes = [|2;3;5;7;11;13;17;19;23;29;31;37;41;43;47;53;59;61;67;71;73;79;83;89;97;101|]
let ap (c: char) =
BigInteger(primes.[int(c) - int('a')])
let ana = "hydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosterones" //[1..1000] |> List.fold (fun x acc -> x + "hydroxydeoxycorticosterones") ""
let ana' = "hydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosteroneshydroxydeoxycorticosterones" // [1..1000] |> List.fold (fun x acc -> x + "hydroxydesoxycorticosterone") ""
let stopWatch = Stopwatch.StartNew()
let processWord (s:string) =
s.ToCharArray()
|> Array.map ap
|> Array.reduce (*)
let anaPrime =
processWord ana
let anaPrime' =
processWord ana'
let x = anaPrime = anaPrime'
stopWatch.Stop()
printfn "primes are equal: %A" x
printfn "%i Milliseconds elapsed multiplying" stopWatch.ElapsedMilliseconds
printfn "%A" x
let b = anaPrime.ToByteArray().Length
printfn "%i prime number bytes" b
let stopWatches = Stopwatch.StartNew()
let anaSort = (ana.ToCharArray() |> Array.sort)
let anaSort' = (ana'.ToCharArray() |> Array.sort)
let sortComp = anaSort = anaSort'
stopWatches.Stop()
printfn "sorts are equal: %A" sortComp
let stopWatchess = Stopwatch.StartNew()
let anaCount = ana.ToCharArray() |> Array.countBy id |> Map.ofArray
let anaCount' = ana'.ToCharArray() |> Array.countBy id |> Map.ofArray
let x = anaCount = anaCount'
stopWatchess.Stop()
printfn "maps are equal: %A" x
printfn "%A ; %A " anaCount anaCount'
let bSort = Encoding.UTF8.GetBytes(anaSort).Length;
printfn "%i string bytes" bSort
printfn "%i Milliseconds elapsed sorting" stopWatches.ElapsedMilliseconds
printfn "%i Milliseconds elapsed mapping" stopWatchess.ElapsedMilliseconds
printfn "%A" anaPrime
printfn "%A" anaPrime'
0 // return an integer exit code
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment