Advertisement
Guest User

n進アッカーマン

a guest
Aug 22nd, 2015
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function N(n,s){
  2.   var A = function(){
  3.     var arg=Array.prototype.slice.call(arguments), len=arg.length, a, b, c, d;
  4.     if(len==1)return arg[0]+1;
  5.     if(!arg[0])return A.apply(null, arg.slice(1));
  6.     if(arg[len-1]&&arg[len-2])return a=arg.slice(),a[len-1]--,arg[len-2]--,arg[len-1]=n*A.apply(null,a),A.apply(null,arg);
  7.     if(arg[len-1]){for(a=--len;a--;)if(arg[a])break;b=arg.slice();b[len]--;arg[a+1]=A.apply(null,b);arg[a]--;return A.apply(null,arg)}
  8.     for(a=len;a--;)if(arg[a])break;arg[a]-=arg[a+1]=n;return A.apply(null,arg);
  9.   }, x=typeof s=='number'?s:parseInt(s,n), args=s instanceof Array&&s;
  10.   if(!args&&s!=1)for(args=[];x;x=x/n|0)args.unshift(x%n);
  11.   return A.apply(null,args);
  12. }
  13.  
  14. //N(1, [4,2])とかN(2, "1011011")とかN(16, "1fec23")とかN(3, 120)とかN(2, [1,0,2])とか...etc
  15. //N(基数n, [引数リスト...]) or N(基数n, "n進文字列") or N(基数n, 数x)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement