スポンサーリンク

素数判定の処理を,再帰アルゴリズムで1文で書いたJavaScriptプログラムは

こうなる:

<body>

<script>

// 1から100までの素数を表示するプログラム


// 全体を一つの文として宣言
var

// 再帰ロジックによる
// 素数判定関数
isPrime = function( n ){
  return makeDivRecursive( 
    n, 
    Math.floor( Math.sqrt( n ) ) 
  );
}
,
// ある数が割り切れるかどうか
makeDivRecursive = function( n, d ){
  // judge
  if( n     <  2 ) return false; 
  if( d     == 1 ) return true;
  if( n % d == 0 ) return false;
  
  // make recursion if unjudged
  return makeDivRecursive( n, d - 1 );
}
,
// オブジェクト拡張系の処理
_extend = (function(){
  // each関数
  Array.prototype.each = function( func ){
    for( var i = 0; i < this.length; i ++ ){
      func( this[ i ], i );
    }
  }
  ,
  // map関数
  Array.prototype.map = function( func ){
    var arr = this;
    arr.each( function( x, index ){
      // 指定された関数を適用して要素を置き換え
      arr[ index ] = func( x, index );
    });
    return arr;
  }
  ,
  // filter関数
  Array.prototype.where = function( func ){
    var arr = new Array();
    this.each( function(x, index){
      // 条件に合うものだけを詰め替え
      if( func( x ) ) arr.push( x );
    });
    return arr;
  }
  ,
  // 下限から上限までの数列を生成
  Number.prototype.to = function( max ){
    var orig = this;
    return ( new Array( max - orig + 1 ) ).map(
      function( x, ind ){ return orig + ind; }
    );
  }
  ,
  // 表示関数
  String.prototype.display = function(){
    window.alert( this );
  }
  ;
})()
,
// ◆◆◆ メイン処理 ◆◆◆
main = (1).to(100)
  .where(isPrime)
  .join(", ").display()
;

</script>


</body>

おことわり

複数行にまたがっているが,一応,1文だ・・・。(怪)

最後の部分で,「素数であるものだけを抽出」というのを .where メソッドで格好つけてコーディングしている。


なお,_extend という変数にはなんの意味もない。

そのクロージャの中でいろんな事前処理をしているだけなのだ。

ちょっとずるいね。

類似コード

c++ - recursively check if number is a prime - Stack Overflow
http://stackoverflow.com/questions/54...