initial commit
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
module _79
|
||||
|
||||
open System.IO
|
||||
|
||||
let findPasscode =
|
||||
let logins =
|
||||
File.ReadAllLines(@"79_keylog.txt")
|
||||
let preceeds =
|
||||
logins
|
||||
|> Seq.collect (fun login -> seq { yield (login.[0], login.[1]); yield (login.[1], login.[2]) })
|
||||
|> Seq.distinct
|
||||
|
||||
let collectTuple (a,b) =
|
||||
seq { yield a; yield b }
|
||||
|
||||
// topographical sort kinda
|
||||
let rec orderGraph g =
|
||||
seq {
|
||||
if Seq.length g = 1 then
|
||||
yield (collectTuple (Seq.nth 0 g)) |> Seq.toList
|
||||
else
|
||||
let allNodes = g |> Seq.collect collectTuple |> Seq.distinct |> Set.ofSeq
|
||||
let sndNodes = g |> Seq.map snd |> Seq.distinct |> Set.ofSeq
|
||||
let noPreceedingNodes = allNodes - sndNodes
|
||||
for n in noPreceedingNodes do
|
||||
let gMinusN = g |> Seq.filter (fun gi -> not(fst gi = n))
|
||||
for s in orderGraph gMinusN do
|
||||
yield n :: s
|
||||
}
|
||||
|
||||
preceeds
|
||||
|> orderGraph
|
||||
|> Seq.toArray
|
||||
Reference in New Issue
Block a user