Skip to content

Instantly share code, notes, and snippets.

@andrelaszlo
Created March 19, 2012 19:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrelaszlo/2125516 to your computer and use it in GitHub Desktop.
Save andrelaszlo/2125516 to your computer and use it in GitHub Desktop.
<html>
<head><title>Kombinationer</title></head>
<body>
<script>
// shorthand function
function $(id) {
return document.getElementById(id);
}
// sorter for a list containing tuples
function tupleSort(a,b) {
if (a[0] < b[0])
return -1;
else if(a[0] > b[0])
return 1;
else
return 0;
}
// return an array containing tuples of doubled letters and number of occurences
function getDoubles(txt) {
var list = txt.split("");
var ret = new Array();
while (list.length > 0) {
var search = list.pop();
var occ = 1;
var tmp = list.slice();
var tail = new Array();
while (tmp.length > 0) {
var current = tmp.pop();
if (current == search)
occ++;
else
tail.push(current);
}
list = tail.slice();
if (occ > 1)
ret.push(new Array(search,occ));
}
ret.sort(tupleSort);
return ret;
}
// factorial function
function fac(num) {
if (num < 2)
return 1;
else
return num * fac(num-1);
}
// print the new calculation
function reCalc() {
$("outstr").innerHTML = ""; // clear output
var txt = $("instr").value;
$("outstr").innerHTML += "Texten innehåller " + txt.length + " tecken<br><br>";
var doubles = getDoubles(txt.toUpperCase());
for (x in doubles)
$("outstr").innerHTML += doubles[x][0] + " förekommer " + doubles[x][1] + " gånger<br>";
$("outstr").innerHTML += "<br>Man får då följande formel för antal unika ord som bildas när man sorterar om ordet:<br>";
$("outstr").innerHTML += txt.length + "!";
if (doubles.length > 0) {
$("outstr").innerHTML += " / (";
var first = true;
for (x in doubles)
if (first) {
$("outstr").innerHTML += doubles[x][1] + "!";
first = false;
} else {
$("outstr").innerHTML += " * " + doubles[x][1] + "!";
}
$("outstr").innerHTML += ")";
}
$("outstr").innerHTML += "<br><br>Vilket blir:<br>";
var n = fac(txt.length);
for (x in doubles)
n /= fac(doubles[x][1]);
$("outstr").innerHTML += n + " stycken";
}
</script>
Jag fick frågan av <a href="http://senzaroz.tumblr.com/" target="_blank">Pär</a> om hur många sätt man kan ordna om "ronaldreagan". Det blir ju ett par stycken, närmare 20 miljoner faktiskt om man inte räknar med de dubbletter som uppstår när man till exempel byter plats på de två a:na. Ett av anagrammen är "an oral danger", vilket ju är lite komiskt.<br><br>
Skriv in ett ord för att räkna ut hur många unika ord som bildas när man sorterar om bokstäverna, och för att visa uträkninge (javascript krävs):<br><br>
<input type="text" value="ronaldreagan" id="instr" onchange="reCalc()" onkeydown="reCalc()" onkeyup="reCalc()"><br><br>
<div id="outstr"></div>
<script>reCalc();</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment