なんだか初めて書くんじゃないか?!再帰のアルゴリズムを利用したプログラム。

今回の質問は
http://oshiete1.goo.ne.jp/qa5779385.html
質問者は、完全にお礼をするつもりは無いようだが、回答してみた。
でも、文字列のチェックは1行でできても、他の部分のプログラムが気になる。
汚いし、理解できない。
ながめていたが、とても理解しようとおもえないので、最初から書いてみた。
今の自分のレベルには、「再帰」は難しい。
普通なら数時間で済むのに、今回は構想だけで数日を費やした。
う〜〜〜ん。どうだろう。
評価してくれる人ほぼ皆無だからな〜〜。


その回答は、以下。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>TEST</title>

<body>
<form action="#">
<p>
<input type="text" id="abcde">
<input type="button" value="check" onclick="check()">
</p>
</form>

<script type="text/javascript">

var getTotalHitNumber = (function ( puller ) {
  return function ( ary ) {
    var result = [ ];
    var counter = 0;
    
    (function ( ary, buf ) {
      var len = ary.length, i, c, d;
      
      if( 1 == len )
        result[ buf.join('') + ary[0] ] = counter++;

      else {
        for( i = 0; i < len; i++ ) {
          c = puller( ary, i );
          d = buf.slice(0);
          d.push( c.value );
          arguments.callee( c.array, d );
        }
      }
    })( ary, [ ] );
    
    return result;
  };
})(
    function ( a, n ) {
      for( var r = [ ], i = 0, I = a.length; i < I; i++ )
        i == n || r.push( a[ i ] );

      return { value: a[ n ], array: r };
    });
  
var hashList = getTotalHitNumber( ['a','b','c','d','e'] );

var check = function ( ) {
  var v = document.getElementById( 'abcde' ).value, mess;
  if( v.split('').sort().join('') == 'abcde' )
    mess = "その番号は、" + hashList[ v ] + "番です";
  else
    mess = "その番号は、間違いです";
  alert( mess );
};

</script>