Script Kombinasi Matematika Menggunakan Javascript

Kali ini saya akan membagikan sebuah script yang berfungsi untuk menghasilkan kombinasi matematika dari sekumpulan objek menggunakan javascript. Baik, langsung saja pahami alur kerjanya.

Script Kombinasi Matematika Menggunakan Javascript

Disini saya memiliki 4 buah objek dengan nilai seperti berikut:

merah
kuning
hijau
biru

Lalu saya ingin meng-kombinasikan 4 objek tersebut untuk menghasilkan banyaknya variasi gabungan dari ke 4 objek tersebut. Saya ingin variasi gabungan objek yang dihasilkan memiliki 2 tipe yaitu:

  1. Variasi dengan Pengulangan, dan
  2. Variasi Tanpa Pengulangan.

Mungkin kamu bingung mengenai maksud dari pengulangan dan tanpa pengulangan tersebut. Baik, saya akan beri contoh sedikit.


Kombinasi Pengulangan.

Terlihat dari 4 objek tersebut, saya ingin menghasilkan 3 gabungan objek dengan variasi Pengulangan Objek seperti berikut :

merah merah merah 
merah merah kuning 
merah merah hijau 
merah merah biru 
merah kuning merah 
merah kuning kuning 
merah kuning hijau 
merah kuning biru 
merah hijau merah 
merah hijau kuning 
dan seterusnya.... 

Terlihat bahwa hasil 3 gabungan objek tersebut terdapat 2 atau lebih objek yang nilainya sama. Hal ini disebut dengan kombinasi pengulangan.


Kombinasi Tanpa Pengulangan.

Terlihat dari 4 objek tersebut, saya ingin menghasilkan 3 gabungan objek dengan variasi Tanpa Pengulangan Objek seperti berikut :
merah kuning hijau 
merah kuning biru 
merah hijau kuning 
merah hijau biru 
merah biru kuning 
merah biru hijau 
kuning merah biru 
kuning merah hijau 
kuning hijau biru 
kuning hijau merah 
kuning biru hijau 
dan seterusnya... 

Terlihat bahwa hasil 3 gabungan objek tersebut tidak terdapat objek yang nilainya sama. Hal ini disebut dengan kombinasi tanpa pengulangan.


Nah, setelah kamu paham mengenai perbedaan tersebut, selanjutnya saya akan memperlihatkan script kombinasi yang telah saya desain berikut ini:

1. Script Kombinasi - Versi Non Minify
var pre = "";
var delim = "";
var suf = "";
var kombinasiPengulangan = function (v, n) {
    for (var j, k, i = -1, l = v.length, q = Math.pow(l, n), r = new Array(q), c = (new Array(n + 1)).join(0).split(''); ++i < q;) {
        for (r[i] = new Array(j = n), k = 1; j--; r[i][j] = v[c[j]], k && (++c[j] != l && --k, c[j] %= l));
        r[i] = pre + r[i].join(delim) + suf;
    }
    console.log("Design By www.maskoding.com\n")
    return r;
}

var kombinasiTanpaPengulangan = function (a, n) {
    var o = a;
    if (n >= o.length) return [];
    for (var j, l, k, p, f, r, q = k = 1, i = (l = o.length) + 1, j = l - n; --i; i <= j ? q *= i : k *= i);
    for (x = [new Array(n), new Array(n), new Array(n), new Array(n)], j = q = k * q / q, k = l + 1, i = -1; ++i < n; x[2][i] = i, x[1][i] = x[0][i] = j /= --k);
    for (r = new Array(q), p = -1; ++p < q; r[p] = pre + r[p].join(delim) + suf)
        for (r[p] = new Array(n), i = -1; ++i < n; !--x[1][i] && (x[1][i] = x[0][i], x[2][i] = (x[2][i] + 1) % l), r[p][i] = o[x[3][i]])
            for (x[3][i] = x[2][i], f = 0; !f; f = !f)
                for (j = i; j;)
                    if (x[3][--j] == x[2][i]) {
                        x[3][i] = x[2][i] = (x[2][i] + ++f) % l;
                        break;
                    }
    console.log("Design By www.maskoding.com\n")
    return r;
};

function kombinasi(nilai, jumlahKombinasi, jenisKombinasi) {
    if (jenisKombinasi == true) {
        return kombinasiPengulangan(nilai, jumlahKombinasi);
    } else {
        return kombinasiTanpaPengulangan(nilai, jumlahKombinasi);
    }
}


2. Script Kombinasi - Versi Minify
var pre="",delim="",suf="";kombinasiPengulangan=function(n,r){for(var a,e,o=-1,i=n.length,g=Math.pow(i,r),x=new Array(g),f=new Array(r+1).join(0).split("");++o<g;){for(x[o]=new Array(a=r),e=1;a--;x[o][a]=n[f[a]],e&&(++f[a]!=i&&--e,f[a]%=i));x[o]=pre+x[o].join(delim)+suf}return console.log("Design By www.maskoding.com\n"),x};var kombinasiTanpaPengulangan=function(n,r){var a=n;if(r>=a.length)return[];for(var e,o,i,g,f,w=o=1,l=(e=a.length)+1,s=e-r;--l;l<=s?w*=l:o*=l);for(x=[new Array(r),new Array(r),new Array(r),new Array(r)],s=w=o*w/w,o=e+1,l=-1;++l<r;x[2][l]=l,x[1][l]=x[0][l]=s/=--o);for(f=new Array(w),i=-1;++i<w;f[i]=pre+f[i].join(delim)+suf)for(f[i]=new Array(r),l=-1;++l<r;!--x[1][l]&&(x[1][l]=x[0][l],x[2][l]=(x[2][l]+1)%e),f[i][l]=a[x[3][l]])for(x[3][l]=x[2][l],g=0;!g;g=!g)for(s=l;s;)if(x[3][--s]==x[2][l]){x[3][l]=x[2][l]=(x[2][l]+ ++g)%e;break}return console.log("Design By www.maskoding.com\n"),f};function kombinasi(n,r,a){return 1==a?kombinasiPengulangan(n,r):kombinasiTanpaPengulangan(n,r)}


2 script di atas memiliki fungsi yang sama, silahkan pilih salah satunya.


Untuk menggunakan script tersebut, silahkan eksekusi dengan memanggil fungsi berikut :
kombinasi(dataNilai, jumlahKombinasi, jenisPengulangan)

Keterangan :
  • dataNilai adalah objek yang ingin kita kombinasikan. objek ini harus berbentuk array. Misalkan : ["merah ", "kuning ", "hijau ", "biru "].
  • jumlah Kombinasi adalah banyaknya gabungan objek. Nilai harus bentuk number bukan string. Misalkan : 3.
  • jenisPengulangan adalah adalah pilihan option antara pengulangan atau tanpa pengulangan. Nilai yang kamu isikan untuk type pengulangan adalah true, sedangkan tanpa pengulangan adalah false.
Berikut ini contoh pemakain script tersebut.


Contoh Pemakaian Script Kombinasi Dengan Pengulangan.
var dataNilai = ["merah ", "kuning ", "hijau ", "biru "];
var jumlahKombinasi = 3;
var jenisPengulangan = true;

kombinasi(dataNilai, jumlahKombinasi, jenisPengulangan);

Output :



Contoh Pemakaian Script Kombinasi Tanpa Pengulangan.
var dataNilai = ["merah ", "kuning ", "hijau ", "biru "];
var jumlahKombinasi = 3;
var jenisPengulangan = false;

kombinasi(dataNilai, jumlahKombinasi, jenisPengulangan);

Output :



Mungkin ini saja artikel yang bisa saya bagikan untuk hari ini, jika ada kendala dalam pemakaian, silahkan beri komentar di bawah.