DEV Community

Discussion on: AoC Day 1: Chronal Calibration

Collapse
 
aspittel profile image
Ali Spittel • Edited

Nice!! For optimizing part 2, I would use a set! O(1) to check if an item is in it!

Collapse
 
deciduously profile image
Ben Lovy

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 :)