himorogiの日記

主にプログラミングに関することなど。少々ハード(電子工作)についても。

bit 演算版 lotos() 一部関数リテラル使ってみた ver.

Java6 上の jrunscript 用

function lotos(depth){
  var lt={
    "Ceil":0,
    "Mask":[0,0],
    "Num":0,
    "Coll":[],
    "Colm":0,

    "getNum" :function(){ return(Math.ceil(Math.random()*lt.Ceil)); },
    "isAlreadyExist":function() { return 0!=(lt.Mask[Math.floor(lt.Num/32)] &  1<<(lt.Num%32)); },
    "markMaskBit":function() {
      lt.Mask[Math.floor(lt.Num/32)] |= 1<<(lt.Num%32);
      lt.Coll[lt.Colm]=(function(){ s="00"+ lt.Num; return s.substr(s.length-2,2)})();
    }
  }

  lt.Ceil=(function(x){for(i=c=0;i<x; c+= ++i);return c})(depth)*2+1;
//lt.Ceil=(function(x){i=c=0;while(i<x) c+=++i;return c})(depth)*2+1;
  for(lt.Colm=0,lt.Num=lt.getNum(),lt.markMaskBit();lt.Colm<depth;++lt.Colm){
    do{lt.Num=lt.getNum();} while(lt.isAlreadyExist());
    lt.markMaskBit();
    }
  return(lt.Coll.sort().toString());
}

sx=read("5:minilot\n6:loto6\n");
if(sx<5 || sx>6){ print("bad arguments\n"); } else{ println(lotos(sx)); }