-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSameName.fsx
More file actions
18 lines (15 loc) · 868 Bytes
/
SameName.fsx
File metadata and controls
18 lines (15 loc) · 868 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
let groupSameName sameNames =
let splitNames (sameName : string) = let names = sameName.Split([|'='|]) in names.[0], names.[1]
let joinNames = Seq.map (String.concat "=")
let register dic (name1, name2) =
let getName name =
Map.tryFind name >> function None -> Set.singleton name | Some names -> names
let nameSet = getName name1 dic + getName name2 dic
(dic, nameSet) ||> Set.fold (fun dic name -> Map.add name nameSet dic)
let sameNamePairs = sameNames |> Seq.map splitNames
(Map.empty, sameNamePairs) ||> Seq.fold register
|> Map.toSeq |> Seq.map snd |> Seq.distinct
|> Seq.sort |> joinNames
let test input expected =
let splitLine (x : string) = x.Split([|'\n'|], System.StringSplitOptions.RemoveEmptyEntries)
splitLine input |> groupSameName |> Seq.toArray |> (=) (splitLine expected)