2014年2月22日 星期六

Trying to construct all possible strings from 2~8 bases [ATCG]

function show(response, div){
  var div = div || 1;
  $('.show'+div).html(response);
}

/**
 *  函數名稱 ATCG_Factory
 *  輸入預定要產生的ATCG隨機排列組合數目產生ATCG所有的組合ARRAY
 *
 * @hope_times ATCG的組合指定的次數 2~8的number
 */
result = ATCG_Factory(3);
show(result.join('\n|'));

/**
 *  函數名稱 ATCG_Storge
 *  轉換成ARRAY儲存空間
 *
 * @dealwith ATCG的組合指定的次數
 */
show_stroge = ATCG_Storge(result);

var html='';
for(var key in show_stroge){
    html += key+"=>"+show_stroge[key]+"<br />";
}
show(html, 2);
//alert(result4.length);
function ATCG_Factory(hope_times, callback_base, callback_times){
        
        var base = ['A','T','C','G'];
        //若傳入1則回傳ATCG標準的一組組合
        if(hope_times==1){
            return base;
        }
        //限制一下要求排列組數
        if(hope_times>=9){
            alert("超出系統負荷範圍,請輸入介於2~8的number");
            return;
        }
        //Recursion 用
        var callback_base = callback_base || base;
        var callback_times = callback_times || 2;
        
        //新排列array的count數
        var new_count = Math.pow(4,callback_times);
        //被增加佇列的總長度
        var part_spread = callback_base.length;

        //show(callback_base.join('\n|'));        
        var new_array_input =[];
         //新array四等份
        var part = new_count/4;
         //算出4等份區間
        var part1 = part*1;
        var part2 = part*2;
        var part3 = part*3;
        var part4 = part*4;
        for (i=0; i<new_count; i++){
             
             if(i<part1){
                 //根據餘數來決定置入新array位置 請自行意會
                 new_array_input[i] = 'A'+callback_base[i%part_spread];
                 continue;
             }
             if(i>=part1 && i<part2){
                 new_array_input[i] = 'T'+callback_base[i%part_spread];
                 continue;
             }             
             if(i>=part2 && i<part3){
                 new_array_input[i] = 'C'+callback_base[i%part_spread];
                 continue;
             }
             if(i>=part3 && i<part4){
                 new_array_input[i] = 'G'+callback_base[i%part_spread];
                 continue;
             }
        }
        //判斷是否Recursion
        if(hope_times > callback_times){
            var continue_run = ATCG_Factory(hope_times, new_array_input, callback_times+1);
            if(continue_run) return continue_run;
        } else {
            return new_array_input;
        }
    
}
function ATCG_Storge(dealwith){

    var stroge_array = [];
    for(var key in dealwith){
        stroge_array[dealwith[key]] = "儲存空間";
    }
    return stroge_array; 
}

沒有留言:

張貼留言