Kopiuj
const tokens = [0, 1, 2, 3, 4];
function generateLevel(n) {
if (n === 1) {
return tokens;
}
let soFar = generateLevel(n - 1);
const result = [];
for (let i = 0; i < tokens.length; i++) {
for (let j = 0; j < soFar.length; j++) {
let e = '' + tokens[i] + soFar[j];
result.push(e);
}
}
return result;
}
Na szybko test
Kopiuj
for (let i = 1; i <= 2; i++) {
generateLevel(i)
.forEach(e => console.log(e));
}
co zobrazuje twój prosty zestaw obrazujący zadanie
Kopiuj
0
1
2
3
4
00
01
02
03
04
10
11
12
13
14
20
21
22
23
24
30
31
32
33
34
40
41
42
43
44
I dla pełnego zakresu 1 do 10 możliwych elementów w zbiorze.
Kopiuj
for (let i = 1; i <= 10; i++) {
generateLevel(i)
.forEach(e => console.log(e));
}
Razem 5+ 55 + 55*5 + ... + 5^10 (suma szeregu geometrycznego) pozycji do wyświetlenia
(1-5^11)/(1-5) = 12 207 031 (minus 1 bo ty nie masz zbioru pustego)
5(1-5^10)/(1-5) = 12 207 030 (prościej)
https://pl.wikipedia.org/wiki/Szereg_geometryczny
Nie uruchamiaj dla wartości zbliżonych do level = 10 bo się naczekasz na wyświetlenie wszystkich linijek ;)
Nie ma większych ograniczeń, w przykładzie liczby i tak traktowane jak string i sklejane rekurencyjnie w inny dłuższy string.