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> |
||