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; }
2014年2月22日 星期六
Trying to construct all possible strings from 2~8 bases [ATCG]
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言