F# - this is my first brush with F# and .NET in general, so pointers are more'n welcome!
Common code:
let getFrequencies fileName = let lines = IO.File.ReadLines(fileName) lines |> Seq.map Convert.ToInt32 |> Seq.toList
Part 1:
let rec addFreq acc s = match s with | [] -> acc | freq::freqs -> addFreq (acc + freq) freqs let day1Part1 fileName = getFrequencies fileName |> addFreq 0
part 2:
let rec addFreqWithState acc visited whole remaining = match remaining with | [] -> addFreqWithState acc visited whole whole | head::tail -> let newval = acc + head if Array.contains newval visited then newval else addFreqWithState newval (Array.append visited [| newval |]) whole tail let day1Part2 fileName = let freqs = getFrequencies fileName addFreqWithState 0 [| |] freqs freqs
Entry point:
open System open Library [<EntryPoint>] let main argv = day1Part1 argv.[0] |> printfn "Part 1 result: %i" day1Part2 argv.[0] |> printfn "Part 2 result: %i" 0 // return an integer exit code
Part 2 is sloooow. How would you optimize this?
Nice!! For optimizing part 2, I would use a set! O(1) to check if an item is in it!
Aha! Thanks so much, it's blazingly fast now:
let rec addFreqWithState acc visited whole remaining = match remaining with | [] -> addFreqWithState acc visited whole whole | head::tail -> let newval = acc + head if Set.contains newval visited then newval else addFreqWithState newval (Set.add newval visited) whole tail let day1Part2 fileName = let freqs = getFrequencies fileName addFreqWithState 0 (new Set<int> (Seq.empty)) freqs freqs
I guess the Tour of F# page shouldn't be my only learning resource :)
Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink.
Hide child comments as well
Confirm
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
F# - this is my first brush with F# and .NET in general, so pointers are more'n welcome!
Common code:
Part 1:
part 2:
Entry point:
Part 2 is sloooow. How would you optimize this?
Nice!! For optimizing part 2, I would use a set! O(1) to check if an item is in it!
Aha! Thanks so much, it's blazingly fast now:
I guess the Tour of F# page shouldn't be my only learning resource :)