Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Algorytm] wypisujacy kolejne ciagi
Forum PHP.pl > Forum > Przedszkole
flashdev
Ma ktos jakis algorytm potrafiacy generowac cos w tym stylu:

Kod
0003
0012
0021
0030
0102
0111
0120
0201
0210
0300
1002
1011
1020
1101
1110
1200
2001
2010
2100
3000


inny przykład:
Kod
004
013
022
031
103
112
121
130
202
211
220
301
310
400


*wypisalem to recznie wiec moga byc jakies drobne pomylki

Kod
var createCombinations = function(len, max){
  var cnt = [];
  var res = [];

  for( var i = 0; i < len; ++i ){
    cnt[i] = 0;
  }

  while( 1 ){
    if (cnt.reduce(function(a, b){
        return a + b;
      }, 0) === max-1) {
      res.push( cnt.slice() );
    }

    var brk = false;
    for (var i = len - 1; i >= 0; --i) {
      if (++cnt[i] >= max) {
        cnt[i] = 0;
      }else{
        brk = true;
        break;
      }
    }
    if (!brk) {
      break;
    }
  }

  res = res.map(function(arr){
    return arr.join('');
  });

  return res;
}

console.log( JSON.stringify(createCombinations(3, 9), null, '  ') );


Pewnie da sie to zrobic lepiej niz przefiltrowac wszystkie mozliwosci.
PrinceOfPersia
nareszcie ktoś ogarnięty, kto zna map i reduce w JS, a nie tylko ma problem z podstawami smile.gif
(nie jestem PHPowcem zasadniczo, na to forum przyciągnął mnie dział o JS, ale efekt taki, że głównie tylko siedzę i pomagam początkującym... :/)

haha, udało mi się zrobić prościej:
Kod
    
var base = 5;              
var length = 4;            
var max = 400;
                                                    
for (var i = 0; i < max; i++) {
   var s = i.toString(base);                  
   var res = ~~(s.split('').reduce(function(a, b) {            
      return ~~(a) + ~~(b);
   }));                                            
   if (res === base-1) {
      while (s.length < length) s = '0' + s;
      console.log(s);
   }                            
}
flashdev
Tzn fajnie to napisales widze ze tez znasz JS bardzo dobrze smile.gif
Ale w sumie to ten sam algorytm co ja zaproponowalem. Czyli biore wszyskie mozliwosci i filtruje po nich. Strasznie dlugo to dziala przy wiekszych liczbach smile.gif
A poza tym korzystajac z toString tracisz troszke na base, bo mozesz uzyc max 36 o ile sie nie myle od 0 do z. U mnie mozesz jechac po calym incie praktycznie.

Ale ogolnie dzieki za dobre checi smile.gif

Kod
res = res.map(function(arr){
    return arr.join('');
  });


Te 3 linijki to tylko dla czytelnosci dodalem smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.