TIL That if you take all the letters from the word "wizard" and swap them with opposite letters (a->z, b->y), it spells wizard backwards.

package wordScratch;

import java.io.IOException; import java.nio.file.FileSystems; import java.nio.file.Files; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream;

public class WordFu {

public static void main(String[] args) throws IOException {
    System.out.println("Loading words");
    final Set<String> words = getWords().collect(Collectors.toSet());
    System.out.println("Scanning words for forwards rot13s");
    {
        List<String> list = Files.lines(FileSystems.getDefault().getPath("/usr/share/dict/words")).filter(s -> words.contains(rot13(s))).collect(Collectors.toList());
        List<CharSequence> rot13 = list.stream().map(s -> rot13(s)).collect(Collectors.toList());
        System.out.println(list);
        System.out.println(rot13);
    }
    System.out.println("Scanning words for backwards rot13s");
    {
        List<String> list = getWords().filter(s -> words.contains(new StringBuffer(rot13(s)).reverse().toString())).collect(Collectors.toList());
        List<CharSequence> rot13 = list.stream().map(s -> rot13(s)).collect(Collectors.toList());
        System.out.println(list);
        System.out.println(rot13);
    }
    System.out.println("Scanning words for forwards opposites");
    {
        List<String> list = getWords().filter(s -> words.contains(opposite(s))).collect(Collectors.toList());
        List<CharSequence> rot13 = list.stream().map(s -> rot13(s)).collect(Collectors.toList());
        System.out.println(list);
        System.out.println(rot13);
    }
    System.out.println("Scanning words for backwards opposites");
    {
        List<String> list = getWords().filter(s -> words.contains(new StringBuffer(opposite(s)).reverse().toString())).collect(Collectors.toList());
        List<CharSequence> rot13 = list.stream().map(s -> rot13(s)).collect(Collectors.toList());
        System.out.println(list);
        System.out.println(rot13);
    }
}

public static final Stream<String> getWords() throws IOException {
    return Files.lines(FileSystems.getDefault().getPath("/usr/share/dict/words"));
}

public static final CharSequence rot13(CharSequence in) {
    return in.codePoints().map(c -> rot13(c)).collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString();
}

public static final char rot13(int c) {
    return rot13((char) c);
}

public static final char rot13(char c) {
    if(c >= 'a' && c <= 'm') {
        c += 13;
    } else if(c >= 'A' && c <= 'M') {
        c += 13;
    } else if(c >= 'n' && c <= 'z') {
        c -= 13;
    } else if(c >= 'N' && c <= 'Z') {
        c -= 13;
    }
    return c;
}

public static final CharSequence opposite(CharSequence in) {
    return in.codePoints().map(c -> opposite(c)).collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString();
}

public static final char opposite(int c) {
    return opposite((char) c);
}

public static final char opposite(char c) {
    if(c >= 'a' && c <= 'm') {
        int pos = c - 'a';
        c = (char) ('z' - pos);
    } else if(c >= 'A' && c <= 'M') {
        int pos = c - 'A';
        c = (char) ('Z' - pos);
    } else if(c >= 'n' && c <= 'z') {
        int pos = 'z' - c;
        c = (char) ('a' + pos);
    } else if(c >= 'N' && c <= 'Z') {
        int pos = 'Z' - c;
        c = (char) ('A' + pos);
    }
    return c;
}

}

/r/todayilearned Thread Link - en.wikipedia.org