第52回
今回は、for文とwhile文を封印して「制限プログラム」をやってみます。
今回は、指定した自然数を2進法に直して表示します(toString()も禁止)。
for文使って適当に書いたコード
function Main(n){
	for(var i=0;i<Math.pow(2,i+1)>=n;i++){}
	for(var k=i,t=n,r='';k>=0;k--){
		if(t>=Math.pow(2,k)){
			t-=Math.pow(2,k);
			r+='1';
		}
		else
			r+='0';
	}
	alert(r);
}
これを制限プログラムすると
function Main(n){
	var F=(
		f=function(i,n){
			return Math.pow(2,i+1)<=n?f(i+1,n):i
		},
		f(0,n)
		);
	var r=(
		g=function(k,t,r){
			if(t>=Math.pow(2,k)){
				t-=Math.pow(2,k);
				r+='1';
			}
			else{
				r+='0'
			}
			k--;
			return k>=0?g(k,t,r):r
		},
		g(F,n,'')
		);
	alert(r);
}
入力値はevalで出しているので、例外は多数存在します。
何のためにやったのか、ということは特に意味を持ちません。
カンマ演算子の中に関数を入れたりするとどうやってタブを入れればいいのかよくわかりません。
以上
top  戻る