Odd words: Difference between revisions
Content added Content deleted
(Added Swift solution) |
|||
Line 838: | Line 838: | ||
Err(error) => eprintln!("{}", error), |
Err(error) => eprintln!("{}", error), |
||
} |
} |
||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
Odd words: |
|||
1: barbarian brain |
|||
2: childbear cider |
|||
3: corrigenda cried |
|||
4: gargantuan grata |
|||
5: headdress hades |
|||
6: palladian plain |
|||
7: propionate point |
|||
8: salvation slain |
|||
9: siltation slain |
|||
10: slingshot sight |
|||
11: statuette saute |
|||
12: supersede spree |
|||
13: supervene spree |
|||
14: terminable trial |
|||
Even words: |
|||
1: cannonball annal |
|||
2: importation motto |
|||
3: psychopomp scoop |
|||
4: starvation train |
|||
5: upholstery posey |
|||
</pre> |
|||
=={{header|Swift}}== |
|||
<lang swift>import Foundation |
|||
let minLength = 5 |
|||
func loadDictionary(_ path: String) throws -> Set<String> { |
|||
let contents = try String(contentsOfFile: path, encoding: String.Encoding.ascii) |
|||
return Set<String>(contents.components(separatedBy: "\n").filter{$0.count >= minLength}) |
|||
} |
|||
func pad(string: String, width: Int) -> String { |
|||
return string.count >= width ? string |
|||
: string + String(repeating: " ", count: width - string.count) |
|||
} |
|||
func printWords(words: [(String,String)]) { |
|||
for (n, (word1, word2)) in words.enumerated() { |
|||
print("\(String(format: "%2d", n + 1)): \(pad(string: word1, width: 14))\(word2)") |
|||
} |
|||
} |
|||
do { |
|||
let dictionary = try loadDictionary("unixdict.txt") |
|||
var oddWords: [(String, String)] = [] |
|||
var evenWords: [(String, String)] = [] |
|||
for word in dictionary { |
|||
if word.count < minLength + 2*(minLength/2) { |
|||
continue |
|||
} |
|||
var oddWord = "" |
|||
var evenWord = "" |
|||
for (i, c) in word.enumerated() { |
|||
if (i & 1) == 0 { |
|||
oddWord.append(c) |
|||
} else { |
|||
evenWord.append(c) |
|||
} |
|||
} |
|||
if dictionary.contains(oddWord) { |
|||
oddWords.append((word, oddWord)) |
|||
} |
|||
if dictionary.contains(evenWord) { |
|||
evenWords.append((word, evenWord)) |
|||
} |
|||
} |
|||
oddWords.sort(by: {$0.0 < $1.0}) |
|||
evenWords.sort(by: {$0.0 < $1.0}) |
|||
print("Odd words:") |
|||
printWords(words: oddWords) |
|||
print("\nEven words:") |
|||
printWords(words: evenWords) |
|||
} catch { |
|||
print(error.localizedDescription) |
|||
}</lang> |
}</lang> |
||