<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
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |