六合彩全餐 for loop 問題

整左好似,可能我轉左牛角尖
明明好似好簡單,唔知做咩愈寫愈多野
請教下,我轉錯左咩方向
  1. calc ();
  2. var box = [];
  3. var count = 0;
  4. function calc (){
  5.     for (var t = 0; t <= 49; t ++){
  6.         for (var i = 1; i <= 49; i ++){
  7.             calcitam (i, t);
  8.         }
  9.     }
  10.     console.log (count);
  11. }
  12. function calcitam (num, level){
  13.     for (var tn = 0; tn < 6; tn ++){
  14.         for (var t = 0; t <= 49; t ++){
  15.             var d = (tn == 0) ? num + t : num + level;
  16.             for (var i = d; i <= 44; i ++){
  17.                 var tmps = [];
  18.                 tmps.push (i);
  19.                 var d2 = (tn == 1) ? d + 1 + t : d + 1 + level;
  20.                 if (d2 <= 49){
  21.                     for (var i2 = d2; i2 <= d2; i2 ++){
  22.                         var tmps2 = tmps;
  23.                         tmps2.push (i2);
  24.                         var d3 = (tn == 2) ? d2+ 1 + t : d2 + 1 + level;
  25.                         if (d3 <= 49){
  26.                             for (var i3 = d3; i3 <= d3; i3 ++){
  27.                                 var tmps3= tmps2;
  28.                                 tmps3.push (i3);
  29.                                 var d4 = (tn == 3) ? d3 + 1 + t : d3 + 1 + level;
  30.                                 if (d4 <= 49){
  31.                                     for (var i4 = d4; i4 <= d4; i4 ++){
  32.                                         var tmps4 = tmps3;
  33.                                         tmps4.push (i4);
  34.                                         var d5 = (tn == 4) ? d4 + 1 + t : d4 + 1 + level;
  35.                                         if (d5 <= 49){
  36.                                             for (var i5 = d5; i5 <= d5; i5 ++){
  37.                                                 var tmps5 = tmps4;
  38.                                                 tmps5.push (i5);
  39.                                                 var d6 = (tn == 5) ? d5 + 1 + t : d5 + 1 + level;
  40.                                                 if (d6 <= 49){
  41.                                                     for (var i6 = d6; i6 <= d6; i6 ++){
  42.                                                         var tmps6 = tmps5;
  43.                                                         tmps6.push (i6);
  44.                                                         if (i6 <= 49){
  45.                                                             var result = tmps6.filter(function(element, index, arr){
  46.                                                                 return arr.indexOf(element) === index;
  47.                                                             })
  48.                                                             if (result.length == 6){
  49.                                                                 if (box.indexOf (tmps6.sort((a,b) => a - b).join(",")) == -1){
  50.                                                                     box.push (tmps6.sort((a,b) => a - b).join(","));
  51.                                                                     //console.log (tmps6);
  52.                                                                     count ++;
  53.                                                                 }
  54.                                                             }
  55.                                                         }
  56.                                                         tmps6.pop ();
  57.                                                     }
  58.                                                 }
  59.                                                 tmps5.pop ();
  60.                                             }
  61.                                         }
  62.                                         tmps4.pop ();
  63.                                     }
  64.                                 }
  65.                                 tmps3.pop ();
  66.                             }
  67.                         }
  68.                         tmps2.pop ();
  69.                     }
  70.                 }
  71.                 tmps.pop ();
  72.             }
  73.         }
  74.     }
  75. }
複製代碼

其實拆多個 function 去再CALL
就可以精簡好多 6倍.

calcitam  CALL  calcitam_SUB   6次

TOP

有無防 123, 132 呢啲組合?

TOP

點解唔直接用6個for loop? (10行內寫完)
又或者用recursive function

TOP

一個combination 問題, 你用recursion 做會簡單d
search 下combination 和recursion, stackoverflow 上有好多example

TOP

其實拆多個 function 去再CALL
就可以精簡好多 6倍.

calcitam  CALL  calcitam_SUB   6次 ...
freefdhk 發表於 2019-4-16 02:55


一開始諗住應該好簡單,loop六次姐,點知寫下寫下就咁多

TOP

有無防 123, 132 呢啲組合?
seasky 發表於 2019-4-16 09:04



    係後尾到 sort反左做哂

TOP

點解唔直接用6個for loop? (10行內寫完)
又或者用recursive function
hk8guy 發表於 2019-4-16 09:41


原本諗住 loop 6 次應該好簡單,唔知係未諗錯一步仲係到睇緊邊到錯左

TOP

一個combination 問題, 你用recursion 做會簡單d
search 下combination 和recursion, stackoverflow 上有好 ...
silvester 發表於 2019-4-16 10:38



    呢d方法我識,但係諗住好簡單又用一次冇做到,可能要重寫

TOP

原本諗住 loop 6 次應該好簡單,唔知係未諗錯一步仲係到睇緊邊到錯左
Mr.K 發表於 2019-4-16 11:22


用level呢個方法有D怪, 所以會有太多if, 同埋中間for loop(i2, i3...)都係loop 一次

TOP