Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
<!--[if IE]>
  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style>
  article, aside, figure, footer, header, hgroup, 
  menu, nav, section { display: block; }
</style>
</head>
<body>
  <p id="hello">Hello World</p>
</body>
</html>
 
alert(isTwinShuffle("ABACBDECDE"));
function isTwinShuffle(str) {
    var formsShuffle = function(a, str) {
        var len = str.length,
            b = a;
        for (var i = 0; i < a.length; i++) {
            for (var j = j || 0; j < str.length; j++) {
                if (a[i] === str[j]) {
                    str = str.split("");
                    str.splice(j, 1);
                    str = str.join("");
                    break;
                }
            }
        }
        if (str.length !== (len - a.length)) return false;
        if (b !== str) return false;
        return true;
    };
    var permutations = function(str, head) {
        if (str.length <= 1) return [head + str];
        head = head || "";
        var list = [];
        for (var i = 0; i < str.length; i++) {
            list = list.concat(permutations(str.slice(0, i) + str.slice(i + 1), head + str[i]));
        }
        return list;
    };
    var letters = {};
    for (var i = 0; i < str.length; i++) {
        var chr = str[i];
        if (!letters[chr]) letters[chr] = 0;
        letters[chr]++;
    }
    var halfStr = "";
    for (i in letters) {
        if (letters[i] % 2 !== 0) return 0;
        letters[i] /= 2;
        while (letters[i]--) halfStr += i;
    }
    var perms = permutations(halfStr);
    for (i = 0; i < perms.length; i++) {
        if (formsShuffle(perms[i], str)) return perms[i];
    }
    return 0;
}
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers