public static String calculateKnotHash(String s) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < s.length(); i++) {
            list.add((int) s.charAt(i));
        }
        list.add(17);
        list.add(31);
        list.add(73);
        list.add(47);
        list.add(23);

        int[] a = new int[256];
        for (int i = 0; i < a.length; i++)
            a[i] = i;

        int skipSize = 0;
        int current = 0;
        for (int p = 0; p < 64; p++) {
            for (int i = 0; i < list.size(); i++) {
                int length = list.get(i);
                int[] reversed = reverse(a, current, length);
                int k = current;
                for (int j = 0; j < reversed.length; j++) {
                    a[k % a.length] = reversed[j];
                    k++;
                }
                current += skipSize + length;
                skipSize++;
            }
        }
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < 256; i++) {
            int xor = a[i];
            for (int j = i + 1; j < i + 16; j++) {
                xor ^= a[j];
            }
            i += 15;
            String ss = Integer.toHexString(xor);
            builder.append(ss.length() == 1 ? "0" + ss : ss);
        }
        return builder.toString();

    }
Why Did you create this class? what does it do?
 http://adventofcode.com/2017/day/14
src/adventofcode/KnotHash_10.java