Euler Problem 24

by Andrew Poes

HTML

<!-- A permutation is an ordered arrangement of objects. For example, 3124 is one possible permutation of the digits 1, 2, 3 and 4. If all of the permutations are listed numerically or alphabetically, we call it lexicographic order. The lexicographic permutations of 0, 1 and 2 are:

012   021   102   120   201   210

What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9? -->

CSS

.print {
    position: relative;
    display: inline-block;
    background-color: black;
    color: white;
    font-family: Helvetica, Helvetica-Neue, sans-serif;
    font-weight: bold;
    font-size: 24px;
    letter-spacing: -1.5px;
    padding: 4px 8px;
}

body {
    background-color: #eeeeee;
}
}

input {
    padding: 20px;
}
}

JavaScript

if (typeof Math.factorial === "undefined") {

  Math.factorial = function factorial (n) {
    if (n == 0 || n == 1)
      return 1;
    if (Math.factorial.f[n] > 0)
      return Math.factorial.f[n];
    else
      return Math.factorial.f[n] = factorial(n-1) * n;
  };

  Math.factorial.f = [];

}

$(document).ready(function() {
    var digits = "I'm awesome!".split('').reverse();
	//var digits = "0123456789".split('');
    var nDigits = digits.length-1;
    var target = Math.factorial(digits.length) - 1;
    var s = '';
    while (nDigits >= 0) {
        var f = Math.factorial(nDigits);
        var index = (target / f)<<0;
        index %= digits.length;
        var digit = digits[index];
        digits.splice(index, 1);
        s += digit.toString();
    	nDigits = nDigits - 1;   
    }
    print(s);
})

function print() {
    var args = Array.prototype.slice.apply(arguments)
    var str = ""
    for (arg of args) {
        str += arg + ", "
    }
    str = str.substring(0, str.length - 2)
    var el = newel(str)
    $("body").append(el)
    $("body").append("</br>")
}

function newel(str) {
    var el = document.createElement("div")
    $(el).html(str)
    $(el).addClass("print")
    return el
}