diff --git a/quiz/part1/soal1.js b/quiz/part1/soal1.js new file mode 100644 index 0000000..da826b2 --- /dev/null +++ b/quiz/part1/soal1.js @@ -0,0 +1,17 @@ +function angkaPrima(angka) { + // you can only write your code here! + if (angka < 2) return false; + for (let i = 2; i <= Math.sqrt(angka); i++) { + if (angka % i === 0) { + return false; + } + } + return true; +} + +// TEST CASES +console.log(angkaPrima(3)); // true +console.log(angkaPrima(7)); // true +console.log(angkaPrima(6)); // false +console.log(angkaPrima(23)); // true +console.log(angkaPrima(33)); // false diff --git a/quiz/part1/soal2.js b/quiz/part1/soal2.js new file mode 100644 index 0000000..bd7cdeb --- /dev/null +++ b/quiz/part1/soal2.js @@ -0,0 +1,18 @@ +//cari faktor persekutuan terbesar +function fpb(angka1, angka2) { + // you can only write your code here! + let min = Math.min(angka1, angka2); + for (let i = min; i > 0; i--) { + if (angka1 % i === 0 && angka2 % i === 0) { + return i; + } + } + return 1; +} + +// TEST CASES +console.log(fpb(12, 16)); // 4 +console.log(fpb(50, 40)); // 10 +console.log(fpb(22, 99)); // 11 +console.log(fpb(24, 36)); // 12 +console.log(fpb(17, 23)); // 1 diff --git a/quiz/part1/soal3.js b/quiz/part1/soal3.js new file mode 100644 index 0000000..2205031 --- /dev/null +++ b/quiz/part1/soal3.js @@ -0,0 +1,17 @@ +function cariMedian(arr) { + // you can only write your code here! + const n = arr.length; + arr.sort((a, b) => a - b); + if (n % 2 === 0) { + return (arr[n / 2 - 1] + arr[n / 2]) / 2; + } else { + return arr[Math.floor(n / 2)]; + } +} + +// TEST CASES +console.log(cariMedian([1, 2, 3, 4, 5])); // 3 +console.log(cariMedian([1, 3, 4, 10, 12, 13])); // 7 +console.log(cariMedian([3, 4, 7, 6, 10])); // 6 +console.log(cariMedian([1, 3, 3])); // 3 +console.log(cariMedian([7, 7, 8, 8])); // 7.5 diff --git a/quiz/part1/soal4.js b/quiz/part1/soal4.js new file mode 100644 index 0000000..4ac18e4 --- /dev/null +++ b/quiz/part1/soal4.js @@ -0,0 +1,36 @@ +function cariModus(arr) { + // you can only write your code here! + var freq = {}; + var maxCount = 0; + var modus = -1; + + // Hitung frekuensi setiap angka + for (var i = 0; i < arr.length; i++) { + freq[arr[i]] = (freq[arr[i]] || 0) + 1; + if (freq[arr[i]] > maxCount) { + maxCount = freq[arr[i]]; + } + } + + // Jika semua angka sama atau semua angka unik + if (maxCount === arr.length || maxCount === 1) { + return -1; + } + + // Cari modus pertama yang muncul + for (var j = 0; j < arr.length; j++) { + if (freq[arr[j]] === maxCount) { + modus = arr[j]; + break; + } + } + + return modus; +} + +// TEST CASES +console.log(cariModus([10, 4, 5, 2, 4])); // 4 +console.log(cariModus([5, 10, 10, 6, 5])); // 5 +console.log(cariModus([10, 3, 1, 2, 5])); // -1 +console.log(cariModus([1, 2, 3, 3, 4, 5])); // 3 +console.log(cariModus([7, 7, 7, 7, 7])); // -1 diff --git a/quiz/part1/soal5.js b/quiz/part1/soal5.js new file mode 100644 index 0000000..a171dc1 --- /dev/null +++ b/quiz/part1/soal5.js @@ -0,0 +1,23 @@ +//sistem ubah hurufnya misal huruf a diubah menjadi b, c menjadi d, b menjadi c, z menjadi a +//intinya ubah huruf menjadi huruf setelahnya +function ubahHuruf(kata) { + // you can only write your code here! + let result = ""; + for (let i = 0; i < kata.length; i++) { + let charCode = kata.charCodeAt(i); + if (charCode === 122) { + // 'z' + result += String.fromCharCode(97); // 'a' + } else { + result += String.fromCharCode(charCode + 1); + } + } + return result; +} + +// TEST CASES +console.log(ubahHuruf("wow")); // xpx +console.log(ubahHuruf("developer")); // efwfmpqfs +console.log(ubahHuruf("javascript")); // kbwbtdsjqu +console.log(ubahHuruf("keren")); // lfsfo +console.log(ubahHuruf("semangat")); // tfnbohbu diff --git a/quiz/part2/soal1.js b/quiz/part2/soal1.js new file mode 100644 index 0000000..d29a49f --- /dev/null +++ b/quiz/part2/soal1.js @@ -0,0 +1,21 @@ +function digitPerkalianMinimum(angka) { + // you can only write your code here! + let minDigits = Infinity; + for (let i = 1; i <= Math.sqrt(angka); i++) { + if (angka % i === 0) { + let j = angka / i; + let digits = (i.toString() + j.toString()).length; + if (digits < minDigits) { + minDigits = digits; + } + } + } + return minDigits; +} + +// TEST CASES +console.log(digitPerkalianMinimum(24)); // 2 +console.log(digitPerkalianMinimum(90)); // 3 +console.log(digitPerkalianMinimum(20)); // 2 +console.log(digitPerkalianMinimum(179)); // 4 +console.log(digitPerkalianMinimum(1)); // 2 diff --git a/quiz/part2/soal2.js b/quiz/part2/soal2.js new file mode 100644 index 0000000..bc13d12 --- /dev/null +++ b/quiz/part2/soal2.js @@ -0,0 +1,22 @@ +//saran sih pake bubblesort walau tidak efisien tapi bagus buat belajar sorting +function urutkanAbjad(str) { + // you can only write your code here! + let arr = str.split(""); + for (let i = 0; i < arr.length - 1; i++) { + for (let j = 0; j < arr.length - i - 1; j++) { + if (arr[j] > arr[j + 1]) { + // Swap arr[j] and arr[j + 1] + let temp = arr[j]; + arr[j] = arr[j + 1]; + arr[j + 1] = temp; + } + } + } + return arr.join(""); +} +// TEST CASES +console.log(urutkanAbjad("hello")); // 'ehllo' +console.log(urutkanAbjad("truncate")); // 'acenrttu' +console.log(urutkanAbjad("developer")); // 'deeeloprv' +console.log(urutkanAbjad("software")); // 'aeforstw' +console.log(urutkanAbjad("aegis")); // 'aegis' diff --git a/quiz/part2/soal3.js b/quiz/part2/soal3.js new file mode 100644 index 0000000..f1afed0 --- /dev/null +++ b/quiz/part2/soal3.js @@ -0,0 +1,21 @@ +//TIPS: gunakan method toUpperCase() dan toLowerCase() +function tukarBesarKecil(kalimat) { + // you can only write your code here! + let result = ""; + for (let i = 0; i < kalimat.length; i++) { + let char = kalimat[i]; + if (char === char.toUpperCase()) { + result += char.toLowerCase(); + } else { + result += char.toUpperCase(); + } + } + return result; +} + +// TEST CASES +console.log(tukarBesarKecil("Hello World")); // "hELLO wORLD" +console.log(tukarBesarKecil("I aM aLAY")); // "i Am Alay" +console.log(tukarBesarKecil("My Name is Bond!!")); // "mY nAME IS bOND!!" +console.log(tukarBesarKecil("IT sHOULD bE me")); // "it Should Be ME" +console.log(tukarBesarKecil("001-A-3-5TrdYW")); // "001-a-3-5tRDyw" diff --git a/quiz/part2/soal4.js b/quiz/part2/soal4.js new file mode 100644 index 0000000..177451a --- /dev/null +++ b/quiz/part2/soal4.js @@ -0,0 +1,29 @@ +/* +Diberikan sebuah function checkAB(str) yang menerima satu parameter berupa string. function tersebut mengembalikan nilai true jika di dalam string tersebut terdapat karakter a dan b yang memiliki jarak 3 karakter lain minimal satu kali. Jika tidak ditemukan sama sekali, kembalikan nilai false. Jarak bisa dari a ke b, atau b ke a. + +contoh: +barbarian kenapa bisa true? +karena di bagian 'barian' terdapat b dipisah 3 karakter ari(totalnya 3) dan ketemu a + +Spasi juga dianggap sebagai karakter +*/ + +function checkAB(num) { + // you can only write your code here! + for (let i = 0; i < num.length; i++) { + if ( + (num[i] === "a" && num[i + 4] === "b") || + (num[i] === "b" && num[i + 4] === "a") + ) { + return true; + } + } + return false; +} + +// TEST CASES +console.log(checkAB("lane borrowed")); // true +console.log(checkAB("i am sick")); // false +console.log(checkAB("you are boring")); // true +console.log(checkAB("barbarian")); // true +console.log(checkAB("bacon and meat")); // false diff --git a/quiz/part3/soal1.js b/quiz/part3/soal1.js new file mode 100644 index 0000000..f78c7c8 --- /dev/null +++ b/quiz/part3/soal1.js @@ -0,0 +1,28 @@ +function changeMe(arr) { + if (arr.length === 0) { + console.log(""); + return; + } + for (let i = 0; i < arr.length; i++) { + let person = arr[i]; + let obj = { + firstName: person[0] || "", + lastName: person[1] || "", + gender: person[2] || "", + }; + if (person[3] && typeof person[3] === "number" && person[3] <= 2023) { + obj.age = 2023 - person[3]; + } else { + obj.age = "Invalid Birth Year"; + } + console.log(`${i + 1}. ${obj.firstName} ${obj.lastName}:`); + console.log(obj); + } +} + +// TEST CASES +changeMe([ + ["Christ", "Evans", "Male", 1982], + ["Robert", "Downey", "Male"], +]); +changeMe([]); diff --git a/quiz/part3/soal2.js b/quiz/part3/soal2.js new file mode 100644 index 0000000..14cda42 --- /dev/null +++ b/quiz/part3/soal2.js @@ -0,0 +1,40 @@ +function shoppingTime(memberId, money) { + if (!memberId || memberId === "") { + return "Mohon maaf, toko X hanya berlaku untuk member saja"; + } + if (money === undefined || money < 50000) { + return "Mohon maaf, uang tidak cukup"; + } + + const items = [ + { name: "Sepatu Stacattu", price: 1500000 }, + { name: "Baju Zoro", price: 500000 }, + { name: "Baju H&N", price: 250000 }, + { name: "Sweater Uniklooh", price: 175000 }, + { name: "Casing Handphone", price: 50000 }, + ]; + + let listPurchased = []; + let changeMoney = money; + + for (let i = 0; i < items.length; i++) { + if (changeMoney >= items[i].price) { + listPurchased.push(items[i].name); + changeMoney -= items[i].price; + } + } + + return { + memberId: memberId, + money: money, + listPurchased: listPurchased, + changeMoney: changeMoney, + }; +} + +// TEST CASES +console.log(shoppingTime("1820RzKrnWn08", 2475000)); +console.log(shoppingTime("82Ku8Ma742", 170000)); +console.log(shoppingTime("", 2475000)); +console.log(shoppingTime("234JdhweRxa53", 15000)); +console.log(shoppingTime()); diff --git a/quiz/part3/soal3.js b/quiz/part3/soal3.js new file mode 100644 index 0000000..7c2742f --- /dev/null +++ b/quiz/part3/soal3.js @@ -0,0 +1,93 @@ +function countProfit(shoppers) { + var listBarang = [ + ["Sepatu Stacattu", 1500000, 10], + ["Baju Zoro", 500000, 2], + ["Sweater Uniklooh", 175000, 1], + ]; + + // you can only write your code here! + var result = []; + for (var i = 0; i < listBarang.length; i++) { + var product = listBarang[i][0]; + var price = listBarang[i][1]; + var stock = listBarang[i][2]; + var shoppersList = []; + var totalProfit = 0; + var leftOver = stock; + + for (var j = 0; j < shoppers.length; j++) { + if (shoppers[j].product === product && shoppers[j].amount <= leftOver) { + shoppersList.push(shoppers[j].name); + totalProfit += shoppers[j].amount * price; + leftOver -= shoppers[j].amount; + } + } + + result.push({ + product: product, + shoppers: shoppersList, + leftOver: leftOver, + totalProfit: totalProfit, + }); + } + return result; +} + +// TEST CASES +console.log( + countProfit([ + { name: "Windi", product: "Sepatu Stacattu", amount: 2 }, + { name: "Vanessa", product: "Sepatu Stacattu", amount: 3 }, + { name: "Rani", product: "Sweater Uniklooh", amount: 2 }, + ]) +); +//[ { product: 'Sepatu Stacattu', +// shoppers: [ 'Windi', 'Vanessa' ], +// leftOver: 5, +// totalProfit: 7500000 }, +// { product: 'Baju Zoro', +// shoppers: [], +// leftOver: 2, +// totalProfit: 0 }, +// { product: 'Sweater Uniklooh', +// shoppers: [], +// leftOver: 1, +// totalProfit: 0 } ] + +console.log( + countProfit([ + { name: "Windi", product: "Sepatu Stacattu", amount: 8 }, + { name: "Vanessa", product: "Sepatu Stacattu", amount: 10 }, + { name: "Rani", product: "Sweater Uniklooh", amount: 1 }, + { name: "Devi", product: "Baju Zoro", amount: 1 }, + { name: "Lisa", product: "Baju Zoro", amount: 1 }, + ]) +); +// [ { product: 'Sepatu Stacattu', +// shoppers: [ 'Windi' ], +// leftOver: 2, +// totalProfit: 12000000 }, +// { product: 'Baju Zoro', +// shoppers: [ 'Devi', 'Lisa' ], +// leftOver: 0, +// totalProfit: 1000000 }, +// { product: 'Sweater Uniklooh', +// shoppers: [ 'Rani' ], +// leftOver: 0, +// totalProfit: 175000 } ] +console.log( + countProfit([{ name: "Windi", product: "Sepatu Naiki", amount: 5 }]) +); +// [ { product: 'Sepatu Stacattu', +// shoppers: [], +// leftOver: 10, +// totalProfit: 0 }, +// { product: 'Baju Zoro', +// shoppers: [], +// leftOver: 2, +// totalProfit: 0 }, +// { product: 'Sweater Uniklooh', +// shoppers: [], +// leftOver: 1, +// totalProfit: 0 } ] +console.log(countProfit([])); //[] diff --git a/quiz/ujian/soal1.js b/quiz/ujian/soal1.js new file mode 100644 index 0000000..dff4c56 --- /dev/null +++ b/quiz/ujian/soal1.js @@ -0,0 +1,47 @@ +function deepSum(arr) { + // Code disini + if (arr.length === 0) { + return "No number"; + } + let total = 0; + for (let i = 0; i < arr.length; i++) { + for (let j = 0; j < arr[i].length; j++) { + for (let k = 0; k < arr[i][j].length; k++) { + total += arr[i][j][k]; + } + } + } + return total; +} + +//TEST CASE +console.log( + deepSum([ + [ + [4, 5, 6], + [9, 1, 2, 10], + [9, 4, 3], + ], + [ + [4, 14, 31], + [9, 10, 18, 12, 20], + [1, 4, 90], + ], + [ + [2, 5, 10], + [3, 4, 5], + [2, 4, 5, 10], + ], + ]) +); // 316 + +console.log( + deepSum([ + [[20, 10], [15], [1, 1]], + [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [2], [9, 11]], + [[3, 5, 1], [1, 5, 3], [1]], + [[2]], + ]) +); // 156 + +console.log(deepSum([])); // No number diff --git a/quiz/ujian/soal2.js b/quiz/ujian/soal2.js new file mode 100644 index 0000000..b997dff --- /dev/null +++ b/quiz/ujian/soal2.js @@ -0,0 +1,28 @@ +function naikAngkot(arrPenumpang) { + rute = ["A", "B", "C", "D", "E", "F"]; + //your code here + var result = []; + for (var i = 0; i < arrPenumpang.length; i++) { + var penumpang = arrPenumpang[i]; + var obj = { + penumpang: penumpang[0], + naikDari: penumpang[1], + tujuan: penumpang[2], + bayar: (rute.indexOf(penumpang[2]) - rute.indexOf(penumpang[1])) * 2000, + }; + result.push(obj); + } + return result; +} + +//TEST CASE +console.log( + naikAngkot([ + ["Dimitri", "B", "F"], + ["Icha", "A", "B"], + ]) +); +// [ { penumpang: 'Dimitri', naikDari: 'B', tujuan: 'F', bayar: 8000 }, +// { penumpang: 'Icha', naikDari: 'A', tujuan: 'B', bayar: 2000 } ] + +console.log(naikAngkot([])); //[] diff --git a/quiz/ujian/soal3.js b/quiz/ujian/soal3.js new file mode 100644 index 0000000..85dac40 --- /dev/null +++ b/quiz/ujian/soal3.js @@ -0,0 +1,88 @@ +function highestScore(students) { + // Code disini + if (students.length === 0) { + return {}; + } + let result = {}; + for (let i = 0; i < students.length; i++) { + let student = students[i]; + let className = student.class; + + if (!result[className] || student.score > result[className].score) { + result[className] = { + name: student.name, + score: student.score, + }; + } + } + return result; +} + +// TEST CASE +console.log( + highestScore([ + { + name: "Dimitri", + score: 90, + class: "foxes", + }, + { + name: "Alexei", + score: 85, + class: "wolves", + }, + { + name: "Sergei", + score: 74, + class: "foxes", + }, + { + name: "Anastasia", + score: 78, + class: "wolves", + }, + ]) +); + +// { +// foxes: { name: 'Dimitri', score: 90 }, +// wolves: { name: 'Alexei', score: 85 } +// } + +console.log( + highestScore([ + { + name: "Alexander", + score: 100, + class: "foxes", + }, + { + name: "Alisa", + score: 76, + class: "wolves", + }, + { + name: "Vladimir", + score: 92, + class: "foxes", + }, + { + name: "Albert", + score: 71, + class: "wolves", + }, + { + name: "Viktor", + score: 80, + class: "tigers", + }, + ]) +); + +// { +// foxes: { name: 'Alexander', score: 100 }, +// wolves: { name: 'Alisa', score: 76 }, +// tigers: { name: 'Viktor', score: 80 } +// } + +console.log(highestScore([])); //{} diff --git a/quiz/ujian/soal4.js b/quiz/ujian/soal4.js new file mode 100644 index 0000000..016f5fa --- /dev/null +++ b/quiz/ujian/soal4.js @@ -0,0 +1,101 @@ +function graduates(students) { + // Code disini + if (students.length === 0) { + return {}; + } + let result = {}; + for (let i = 0; i < students.length; i++) { + let student = students[i]; + let className = student.class; + if (!result[className]) { + result[className] = []; + } + if (student.score >= 75) { + result[className].push({ + name: student.name, + score: student.score, + }); + } + } + return result; +} + +console.log( + graduates([ + { + name: "Dimitri", + score: 90, + class: "foxes", + }, + { + name: "Alexei", + score: 85, + class: "wolves", + }, + { + name: "Sergei", + score: 74, + class: "foxes", + }, + { + name: "Anastasia", + score: 78, + class: "wolves", + }, + ]) +); + +// { +// foxes: [ +// { name: 'Dimitri', score: 90 } +// ], +// wolves: [ +// { name: 'Alexei' , score: 85 }, +// { name: 'Anastasia', score: 78 } +// ] +// } + +console.log( + graduates([ + { + name: "Alexander", + score: 100, + class: "foxes", + }, + { + name: "Alisa", + score: 76, + class: "wolves", + }, + { + name: "Vladimir", + score: 92, + class: "foxes", + }, + { + name: "Albert", + score: 71, + class: "wolves", + }, + { + name: "Viktor", + score: 80, + class: "tigers", + }, + ]) +); + +// { +// foxes: [ +// { name: 'Alexander', score: 100 }, +// { name: 'Vladimir', score: 92 } +// ], +// wolves: [ +// { name: 'Alisa', score: 76 }, +// ], +// tigers: [ +// { name: 'Viktor', score: 80 } +// ] +// } + +console.log(graduates([])); //{}