Odd words: Difference between revisions

Content added Content deleted
m (C++ - bug fix)
(Added Java solution)
Line 421: Line 421:
13: supervene -> spree
13: supervene -> spree
14: terminable -> trial
14: terminable -> trial
</pre>

=={{header|Java}}==
<lang java>import java.io.*;
import java.util.*;

public class OddWords {
public static void main(String[] args) {
try {
Set<String> dictionary = new TreeSet<>();
final int minLength = 5;
String fileName = "unixdict.txt";
if (args.length != 0)
fileName = args[0];
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
String line;
while ((line = reader.readLine()) != null) {
if (line.length() >= minLength)
dictionary.add(line);
}
}
StringBuilder word1 = new StringBuilder();
StringBuilder word2 = new StringBuilder();
List<StringPair> evenWords = new ArrayList<>();
List<StringPair> oddWords = new ArrayList<>();
for (String word : dictionary) {
int length = word.length();
if (length < minLength + 2 * (minLength/2))
continue;
word1.setLength(0);
word2.setLength(0);
for (int i = 0; i < length; ++i) {
if ((i & 1) == 0)
word1.append(word.charAt(i));
else
word2.append(word.charAt(i));
}
String oddWord = word1.toString();
String evenWord = word2.toString();
if (dictionary.contains(oddWord))
oddWords.add(new StringPair(word, oddWord));
if (dictionary.contains(evenWord))
evenWords.add(new StringPair(word, evenWord));
}
System.out.println("Odd words:");
printWords(oddWords);
System.out.println("\nEven words:");
printWords(evenWords);
} catch (Exception e) {
e.printStackTrace();
}
}

private static void printWords(List<StringPair> strings) {
int n = 1;
for (StringPair pair : strings) {
System.out.println(String.format("%2d: %-14s%s", n++,
pair.string1, pair.string2));
}
}

private static class StringPair {
private String string1;
private String string2;
private StringPair(String s1, String s2) {
string1 = s1;
string2 = s2;
}
}
}</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>
</pre>