Unique25

 avatar
unknown
java
a year ago
1.7 kB
8
Indexable
package random;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class Unique25 {

    private static Map<String, Boolean> provided;

    private static boolean findUnique25(int i, int mask, String curWord, boolean[][] memo){


        if(i > 0 && i%5 == 0){
            if(provided.containsKey(curWord)){
                System.out.println(curWord + " " + i);
                provided.put(curWord, true);
                if(i == 25)
                    return true;
            }else
                return false;
        }


        if(memo[i][mask])
            return false;


        for(int k=0; k<26; k++){
            if((mask & (1 << k)) == 0){
                if(findUnique25(i+1, mask|(1<<k), i%5 == 0 ? ""+(char)('a' + k): curWord+(char)('a' + k), memo)){
                    return true;
                }
            }
        }

        if(i%5 == 0){
            provided.put(curWord, false);
        }

        memo[i][mask] = true;


        return false;

    }
    public static void main(String[] args) {

        //String[] words=  {"abcde", "fghij", "klmno", "pqrst", "uvwxy", "zabcd", "apple", "zebra", "ocean", "quick", "world", "jumps", "foxes", "liver"};
        //String[] words=  {"abcde", "fghij", "fghij", "fghij", "fghij", "fghij", "fghij"};
        String[] words=  {"abcde", "fghij", "fklmn", "gopqr", "hstuv", "iwxyz"};

        provided = new HashMap();
        for(String word: words)
            provided.put(word, false);

        boolean[][] memo = new boolean[25][(1 << 26)-1];

        findUnique25(0, 0, "", memo);


        for(Map.Entry<String, Boolean> e: provided.entrySet())
            if(e.getValue())
                System.out.println(e.getKey());

    }



}
Editor is loading...
Leave a Comment