六合彩全餐 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

提示: 作者被禁止或刪除 內容自動屏蔽

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