28 lines
902 B
Swift
28 lines
902 B
Swift
import Foundation
|
|
|
|
guard
|
|
let url = NSURL(string: "http://www.puzzlers.org/pub/wordlists/unixdict.txt"),
|
|
let input = try? NSString(contentsOfURL: url,encoding: NSUTF8StringEncoding) as String
|
|
else { exit(EXIT_FAILURE) }
|
|
|
|
let words = input.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())
|
|
let group: ([Int: [String]], String) -> [Int: [String]] = {
|
|
var d = $0; let g = d[$1.characters.count] ?? []
|
|
d[$1.characters.count] = g + [$1]
|
|
return d
|
|
}
|
|
let ordered: ([String], String) -> [String] = {
|
|
guard String($1.characters.sort()) == $1 else { return $0 }
|
|
return $0 + [$1]
|
|
}
|
|
|
|
let groups = words
|
|
.reduce([String](), combine: ordered)
|
|
.reduce([Int: [String]](), combine: group)
|
|
|
|
guard
|
|
let maxLength = groups.keys.maxElement(),
|
|
let maxLengthGroup = groups[maxLength]
|
|
else { exit(EXIT_FAILURE) }
|
|
|
|
maxLengthGroup.forEach { print($0) }
|