汽車の切符の販売


if(jQuery){}else{
	//document.write
}

/*
        12306     。。                 。
               。  ,           ,        ,    -  ,
  -  ...  。                   。        +-1.

          :               ,  ,      10 ,
              :'1111111111';
       ,     '0000000000';
       ,    -    (   -   ),    '0011111111';
        ,    -  ( 6 - 9 ),       :'0011100011';

           ,     (  -  )  ,             
(  -  )  ,    OK(     ).  ,         '0011100011',
   ,    (0011111111);

      ,12306      ,         ,             ,
  ,     ,        20   。             。     。
             。

*/
function Server(){
	var self = this;

	self.ticketsPool = [];

	self._init= function(number){
		if(typeof(number) != 'number')
			throw ('type error');
		for(i=0;i<number;i++){
			self.ticketsPool.push(new Ticket());
		}
	};

	//          ,         。
	//  :  o   -  (001111111),    (0000000011)(     -  ),    false
	//  :  o   -  (001111111),    (1111100011)(     -  ),    true
	self.canBuy = function(o,t){
		var _o = ''
		for(j=0; j<o.length; j++){
			_o += o[j]=='0'?1:0;
		}
		var r1 = (parseInt(t.tic,2) | parseInt(o,2)) & parseInt(_o,2);
		var r2 = parseInt(_o,2);
		return r1 == r2;
	};

	//     
	self.pop1Ticket = function(o){
			for(i=0;i < self.ticketsPool.length;i++){
				if(self.canBuy(o,self.ticketsPool[i])){
					self.buy(self.ticketsPool[i],o);
					return i;
			}
		};
		return -1;
	};

	//      ,        ,  '111111111'->'001111111';
	self.buy = function(t,o){
		t.tic = (parseInt(t.tic,2) & parseInt(o,2)).toString(2);
		//alert(t.tic);

	};

	//    
	self.remainTics = function(o){
			var count=0;
			for(i=0;i < self.ticketsPool.length;i++){
				count += self.canBuy(o,self.ticketsPool[i])?1:0;
		};
		return count;
	}

	//  ,    
	self.refund = function(o){
			for(i=0;i < self.ticketsPool.length;i++){
				if(!self.canBuy(o,self.ticketsPool[i])){
					var _o = ''
					for(j=0; j<o.length; j++){
						_o += o[j]=='0'?1:0;
					}
					self.ticketsPool[i].tic = (parseInt(self.ticketsPool[i].tic,2) | parseInt(_o,2)).toString(2);
					return i;
			}	
		};

		return -1;
	}
}

//    : 
function Ticket(){
	var self = this;
	//        
	self.tic = '1111111111';
}

//    :  
function Order(from, to){
	var self = this;
	var s = '';
	for(i=0;i<10;i++){
		s += (i>=from && i<to)?0:1;
	}
	return s;
}

//12306  
Server = new Server();
//    ,   400    
Server._init(400);