Tantangan algoritma tingkat menengah dengan javascript ini, saya dapat dan saya terjemahkan kedalam bahasa indonesia dari website freecodecamp.org. Pada tantangan kali ini, kita akan melatih logika kita untuk menyelesaikan suatu masalah dengan bahasa pemograman javascript. Tanpa basa-basi mari kita mulai!
1. Sum All Numbers in a Range (Menjumlahkan semua angka dalam rentang array)
Tantangan pertama adalah menjumlahkan semua angka diantara dua angka yang ada di dalam sebuah array. contoh function sumAll ([4, 1]), terdapat sebuah argument yang berisi array yaitu 4 dan 1. Tugas kita adalah menjumlahkan angka pada rentang dua angka tersebut, yaitu 1+2+3+4 = 10. Bagaimana penerapannya dalam pemograman? mari kita mulai!
function sumAll(arr) {let sumBetween = 0;for (let i = Math.min(...arr); i <= Math.max(...arr); i++) {sumBetween += i;}return sumBetween;}console.log(sumAll([1, 4]));
Output Program :
10
Penjelasan Kode:
- Variable sumBetween untuk menyimpan jumlah elemen.
- Melakukan pengulangan elemen dari minimal array yang diberikan, dan berhenti ketika mencapai elemen maksimal.
- Penggunaan spread operator (...arr)
Relevant Links:
2. Diff Two Array (Membandingkan dua buah array dan return array baru)
Tantangan kedua adalah membandingkan dua buah array, kemudian mengembalikan array baru yang berisi nilai dari hasil perbandingan tersebut.
function diffArray(arr1, arr2) {const newArr = arr1.concat(arr2).filter(item => !arr1.includes(item) || !arr2.includes(item));//console.log(newArr);return newArr;}diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);
Output Program :
[4]
Penjelasan Kode:
- Gabungkan dua buah array tersebut (arr1 dan arr2) dengan method concat()
- Kemudian filter item yang telah digabungkan dengan kondisi jika arr1 dan arr2 tidak include di item tersebut. method yang digunakan filter() dan includes()
Relevant Links:
3. Seek and Destroy (Temukan dan hapus elemen dalam array)
Tantangan yang ketiga adalah mecari elemen dalam array kemudian hapus elemen yang sama. Contoh disini ada sebuah function destroyer([1,2,3,1,2,3], 2,3), function ini membawa argument yang berisi array. elemen [1,2,3,1,2,3] adalah array yang akan kita hapus elemennya, dan elemen 2,3 adalah parameter untuk menghapus elemen di dalam array tersebut.
function destroyer(arr, ...valsToRemove) {const newArray = arr.filter(elem => !valsToRemove.includes(elem));// console.log(newArray);return newArray;}destroyer([1, 2, 3, 1, 2, 3], 2, 3);
Output Program:
[1,1]
Penjelasan kode:
- Menggunakan spread operator (...valsToRemove) untuk mengambil argumen.
- Kembalikan array yang difilter dengan include().
4. Wherefore art thou
Tantangan keempat, pada kali ini kita akan cek apakah dalam suatu objek itu mempunyai nilai yang sama? jika sama kembalikan nilai objek tersebut. contoh implementasi dalam pemograman:
function whatIsInAName(collection, source) {// parameter adalah : variable yg nilai nya dari argument yg di passing.// ada 2 parameter// parameter pertama collection : berisi array objek// parameter kedua source : berisi objek// ambil key dari parameter keduavar srcKeys = Object.keys(source);// console.log(srcKeys)// return isi dari parameter pertama, kemudian filterreturn collection.filter(function(obj) {// console.log(obj)return srcKeys.every(function(key) {// console.log(key)// jika objek mempunyai property key, dan value dari key itu sama dengan value yang ada di source, return objekreturn obj.hasOwnProperty(key) && obj[key] === source[key];});});}// function ini mengirimkan 2 argumen yang berisi array dan objekwhatIsInAName([{ first: "Romeo", last: "Montague" },{ first: "Mercutio", last: null },{ first: "Tybalt", last: "Capulet" }],{ last: "Capulet" });
Output Program :
[ {first: 'Tybalt', last: 'Capulet'} ]
Penjelasan Kode :
- Pertama kita memfilter collection dengan method filter()
- Kita return nilai Bollean (True atau False) untuk method filter()
- Terkhir kita akan mengurangi nilai Bollean untuk return mehod every()
5. Spinal Case (Menkonversikan huruf besar ke huruf kecil dan gabungin dengan - (dibaca dash))
Tantangan kelima, menggabungkan string dengan dash (-), kemudian ubah jadi huruf kecil. Implementasi dalam pemograman perhatikan contoh program dibawah ini:
function spinalCase(str) {// cara pertama// let newString = str.split(/\s|_|(?=[A-Z])/);// let newString2 = newString.join("-");// let newString3 = newString2.toLowerCase();// return newString3;// cara keduareturn str.split(/\s|_|(?=[A-Z])/).join("-").toLowerCase();}spinalCase('This Is Spinal Tap');
Output Program :
this-is-spinal-tap
Penjelasan Kode:
- Pisahkan (split) string pada salah satu kondisi berikut (dikonversi ke array)
- Jika ada whitespace [\s] ditemukan.
- Jika ada underscore [_] ditemukan.
- Atau diikuti dengan huruf besar [(?=[A-Z])]
- Join array dengan dash (-)
- Ubah hasilnya kedalam lowercase.
6. Pig Latin
Tantangan keenam, Pig Latin adalah cara mengubah kata yang aturannya sebagai berikut:
- Jika sebuah kata dimulai dengan konsonan, ambil huruf pertama pindahkan di akhir kata dan tambahkan 'ay'. Contoh : consonant jadi onsonantcay
- Jika sebuah kata dimulai dengan vokal, tambah 'way' di akhir kata. Contoh : eat menjadi eatway
Implementasi dalam pemograman sbb:
function translatePigLatin(str) {return str.replace(/^[aeiou]\w*/, "$&way").replace(/(^[^aeiou]+)(\w*)/, "$2$1ay");}// test hereconsole.log(translatePigLatin("eat"));console.log(translatePigLatin("consonant"));console.log(translatePigLatin("pasirganting"));
Output Program :
eatwayonsonantcayasirgantingpay
Penjelasan Kode:
- Gunakan replace() pada string, kemudian cek string dengan reguler expression, apakah huruf pertama adalah konsonan? jika tidak tambahkan 'way' di akhir kata.
- Gunakan replace() lagi pada string, kemudian cek string dengan regular expression, apakah huruf pertama adalah konsonan? jika iya, ambil huruf pertama pindahkan di akhir kata dan tambahkan 'ay' di akhir kata.
7. Search and Replace
Tantangan ketujuh, Mencari kata dalam sebuah kalimat, kemudian ganti kata tersebut dengan kata yang telah disediakan dan return kalimat baru. Contoh kasus:
myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");
argument 1 : adalah kalimat untuk melakukan pencarian dan penggantian
argument 2 : adalah kata yang akan kita ganti (kata sebelumnya)
argument 3: adalah kata yang akan menggantikan kata di argument kedua (kata setelahnya)
function myReplace(str, katayangDiganti, kataPengganti) {// pertama kita akan mencari kata 'jumped' ada di index ke berapalet index = str.indexOf(katayangDiganti);// cek, apakah kata itu huruf pertamanya huruf kapital atau bukan?if(str[index] === str[index].toUpperCase()){// jika iya, ganti huruf menjadi huruf kapital, gunakan charAt() untuk mengambil huruf pertamakataPengganti = kataPengganti.charAt(0).toUpperCase() + kataPengganti.slice(1);}else{// jika tidak, ganti huruf pertama menjadi huruf kecilkataPengganti = kataPengganti.charAt(0).toLowerCase() + kataPengganti.slice(1);}// sekarang replace kataPengganti dengan katayangDiganti, return string barustr = str.replace(katayangDiganti, kataPengganti);// console.log(str);return str;}myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");
Output Program :
A quick brown fox leaped over the lazy dog
Penjelasan Kode:
- Gunakan indexOf() untuk menemukan lokasi katayangDiganti dalam string
- Cek jika huruf pertama adalah huruf besar maka ubah huruf pertama itu jadi huruf besar
- replace katayangDiganti dengan kataPengganti
- return string baru
8. DNA Pairing (Pasangan DNA)
Tantangan kedelapan, mencari pasangan DNA dan return dalam bentuk array. Ada 4 karakter yang ada dalam DNA yaitu: "A", "T", "G" dan "C".
A dan T selalu berpasangan, dan G dan C selalu berpasangan. Bagaimana cara implementasi DNA Pairing dari argumen yang di passing ke function?
Output Program :function pairElement(str) {//buat objek untuk pencarian pasanganvar pasangan = {A : "T",T : "A",G : "C",C : "G"}//pisahkan (split) karakter menjadi arraylet dataArr = str.split("");//memetakan (map) karakter ke array dan cari key di variable pasangan.let newArray = dataArr.map(item => [item,pasangan[item]]);return newArray;}console.log(pairElement("ATGCAG"));
[ [ 'A', 'T' ],[ 'T', 'A' ],[ 'G', 'C' ],[ 'C', 'G' ],[ 'A', 'T' ],[ 'G', 'C' ] ]
Penjelasan Kode:
- Pertama kita akan menentukan sebuah objek dengan semua kemungkinan pasangan, ini memungkinkan kita untuk dengan mudah menemukan berdasarkan key atau value.
- Pisahkan str menjadi array karakter, sehingga kita dapat menggunakan setiap huruf untuk menemukan pasangannya.
- Gunakan fungsi map(), untuk memetakan setiap karakter dalam array dan pasangannya yang cocok, dan buat array 2D.
9. Missing Letter (Menemukan huruf yang hilang)
Tantangan kesembilan, menemukan huruf yang hilang dalam rentang huruf yang ada, dan kembalikan nilainya (return). Jika semua hurufnya ada dalam rentang maka return undefined.
Output Program:function fearNotLetter(str) {for (var i = 0; i < str.length; i++) {var code = str.charCodeAt(i);if (code !== str.charCodeAt(0) + i) {return String.fromCharCode(code - 1);}}return undefined;}fearNotLetter("abce");
d
Penjelasan Kode:
- Solusi ini menggunakan for loop
- Kode karakter yang ditemukan disimpan di variable code
- Jika kode karakter saat ini tidak sama dengan kode karakter pertama dari pengulangan, maka
- return nilai karakter/huruf yang hilang
- Jika tidak return undefined
10. Sorted Union
Tantangan kesepuluh, Buatlah sebuah function yang berisi 2 array atau lebih. kemudian return array baru tanpa ada element yang duplikat didalam array. Dengan kata lain semua element yang ada dalam array tetap dalam urutan asli tanpa ada element yang duplikat.
Output Program:function uniteUnique(arr) {// set variable argsvar args = [...arguments];// variable result untuk store array baruvar result = [];// looping argumentfor (var i = 0; i < args.length; i++){// looping array dalam argumentfor (var j = 0; j < args[i].length; j++ ){if(!result.includes(args[i][j])){result.push(args[i][j])}}}return result;}console.log(uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]));
[ 1, 3, 2, 5, 4 ]
Penjelasan Kode:
- Lihat komentar di script
11. Convert HTML Entities
Tantangan kesebelas, mengkonversi karakter &, <, >, " (tanda kutip ganda), ' (tanda kutip satu) yang ada dalam string, kemudian ubah ke entitas HTML yang sesuai.
Output Program:function convertHTML(str) {// buat objek untuk mempermudah pencarian karakterconst htmlEntities = {"&": "&","<": "<",">": ">",'"': ""","'": "'"};//gunakan replace() untuk mengganti karakter dengan regexstr = str.replace(/([&<>\"'])/g, match => htmlEntities[match]);// return strreturn str;}console.log(convertHTML("Dolce & Gabbana"));
Dolce & Gabbana
Penjelasan Kode: Lihat komentar di script!
12. Sum All Odd Fibonacci Numbers (Jumlahkan angka fibonacci yang ganjil)
Tantangan keduabelas, menjumlahkan bilangan yang ganjil dalam deretan fibonacci. Bilangan fibonacci adalah penjumlahan angka sebelumnya dengan angka yang sekarang sama dengan angka berikutnya. Contoh:
angka pertama = 0
angka kedua = 1
angka ketiga = 1
angka keempat = 2
angkat kelima = 3
angka keenam = 5
angka ketujuh = 8
angka kedelapan = 13
dan seterusnya ....
Dari deretan angka fibonacci tersebut, bagaimana caranya kita menjumlahkan angka yang ganjil saja?
Output Progam:function sumFibs(num) {let prevNumber = 0; // angka sebelumnyalet currNumber = 1; // angka sekaranglet result = 0; // hasilwhile(currNumber <= num){// cek jika angka sekarang, modulus 2 !== 0, maka jumlahkan angkaif(currNumber % 2 !== 0){result += currNumber;}currNumber = currNumber + prevNumber; // set angka sekarangprevNumber = currNumber - prevNumber; // set angka sebelumnya}return result;}console.log(sumFibs(13));
23
0 Komentar