Script Kombinasi Matematika Menggunakan Javascript
Oktober 14, 2020
Kali ini saya akan membagikan sebuah script yang berfungsi untuk menghasilkan kombinasi matematika dari sekumpulan objek menggunakan javascript. Baik, langsung saja pahami alur kerjanya.
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:
- Variasi dengan Pengulangan, dan
- 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.