From 567a81b0cfcbbaa7669795f4fe0160354392bbb9 Mon Sep 17 00:00:00 2001 From: Rndraha21 Date: Tue, 15 Apr 2025 20:16:59 +0700 Subject: [PATCH 01/12] submit tugas --- quiz/part1/tugas1.js | 18 ++++++++++++++++++ quiz/part1/tugas2.js | 22 ++++++++++++++++++++++ quiz/part1/tugas3.js | 23 +++++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 quiz/part1/tugas1.js create mode 100644 quiz/part1/tugas2.js create mode 100644 quiz/part1/tugas3.js diff --git a/quiz/part1/tugas1.js b/quiz/part1/tugas1.js new file mode 100644 index 0000000..62f9f19 --- /dev/null +++ b/quiz/part1/tugas1.js @@ -0,0 +1,18 @@ +// Soal 1 +//cek apakah angka yang dikirim adalah angka prima atau bukan? +//cek google bagi yang ga tau apa itu angka prima +function angkaPrima(angka) { + for (let i = 2; i < 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/tugas2.js b/quiz/part1/tugas2.js new file mode 100644 index 0000000..10be7ed --- /dev/null +++ b/quiz/part1/tugas2.js @@ -0,0 +1,22 @@ +// Soal 2 +//cari faktor persekutuan terbesar +function fpb(angka1, angka2) { + let terkecil = Math.min(angka1, angka2); + let fpb = 1; + + for (let i = terkecil; i >= 1; i--) { + if (angka1 % i === 0 && angka2 % i === 0) { + fpb = i; + break; + } + } + + return fpb; +} + +// 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/tugas3.js b/quiz/part1/tugas3.js new file mode 100644 index 0000000..41ca49b --- /dev/null +++ b/quiz/part1/tugas3.js @@ -0,0 +1,23 @@ +function cariMedian(arr) { + arr.sort(function(a, b) { + return a - b; + }); + + let panjang = arr.length; + let tengah = Math.floor(panjang / 2); + + + if (panjang % 2 !== 0) { + return arr[tengah]; + } + else { + return (arr[tengah - 1] + arr[tengah]) / 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 \ No newline at end of file From 12c0b1dd8bd48ae7be9988c8dfd2fc14d7afae22 Mon Sep 17 00:00:00 2001 From: Rndraha21 Date: Tue, 15 Apr 2025 20:34:39 +0700 Subject: [PATCH 02/12] update --- quiz/part1/tugas4.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 quiz/part1/tugas4.js diff --git a/quiz/part1/tugas4.js b/quiz/part1/tugas4.js new file mode 100644 index 0000000..cf92d06 --- /dev/null +++ b/quiz/part1/tugas4.js @@ -0,0 +1,26 @@ +/* +Soal 4 +Diberikan sebuah function cariModus(arr) yang menerima sebuah array angka. Function akan me-return modus dari array atau deret angka tersebut. Modus adalah angka dari sebuah deret yang paling banyak atau paling sering muncul. Contoh, modus dari [10, 4, 5, 2, 4] adalah 4. Jika modus tidak ditemukan, function akan me-return -1. Apabila ditemukan lebih dari dua nilai modus, tampilkan nilai modus yang paling pertama muncul (dihitung dari kiri ke kanan). Dan apabila dialam modus hanya ada 1 nilai yang sama maka function akan me-return -1, Contohnya [1, 1, 1] adalah -1. +*/ +function cariModus(arr) { + let arrModus = [], isSame = false; + + for (let i = 0; i < arr.length; i++) { + for (let j = i + 1; j < arr.length; j++) { + if (arr[i] === arr[j]) { + isSame = true; + arrModus.push(arr[i]); + } else { + isSame = false; + } + } + } + return (arrModus[0] === undefined || isSame) ? -1 : arrModus[0]; + } + + // 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 \ No newline at end of file From b53c1ad32863caf915306a95de12e8cca544a540 Mon Sep 17 00:00:00 2001 From: Rndraha21 Date: Fri, 18 Apr 2025 17:57:30 +0700 Subject: [PATCH 03/12] update --- quiz/part2/tugas1.js | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 quiz/part2/tugas1.js diff --git a/quiz/part2/tugas1.js b/quiz/part2/tugas1.js new file mode 100644 index 0000000..1d08ae1 --- /dev/null +++ b/quiz/part2/tugas1.js @@ -0,0 +1,40 @@ +/* +Soal 1 +Diberikan sebuah function digitPerkalianMinimum(angka) yang menerima satu parameter angka. Function akan mengembalikan jumlah digit minimal dari angka yang merupakan faktor angka parameter tersebut, Contoh, jika angka adalah 24, maka faktornya adalah 1 * 24, 2 * 12, 3 * 8, dan 4 * 6. Dari antara faktor tersebut, yang digit nya paling sedikit adalah 3 * 8 atau 4 * 6, sehingga function akan me-return 2. + +1 * 24 = 3 digit (124) +3 * 8 = 2 digit (38) +4 * 6 = 2 digit (46) + +karena dibawah ini 2 digit dan terkecil +3 * 8 = 2 digit (38) +4 * 6 = 2 digit (46) + +ya jadikan dia minimum + +misal faktronya angka 1 hanyalah +1*1 = 2 digit (11) + +Return 2 +*/ +function digitPerkalianMinimum(angka) { + let minDigits = Infinity; + for (let i = 1; i <= Math.sqrt(angka); i++) { + if (angka % i === 0) { + let j = angka / i; + let combined = i.toString() + j.toString(); + let digitLength = combined.length; + if (digitLength < minDigits) { + minDigits = digitLength; + } + } + } + return minDigits === Infinity ? 2 : 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 From 20c58c17211a52e1750ebc0c2fb6cace0791ced3 Mon Sep 17 00:00:00 2001 From: Rndraha21 Date: Fri, 18 Apr 2025 19:17:57 +0700 Subject: [PATCH 04/12] update --- quiz/part2/tugas2.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 quiz/part2/tugas2.js diff --git a/quiz/part2/tugas2.js b/quiz/part2/tugas2.js new file mode 100644 index 0000000..5f45e13 --- /dev/null +++ b/quiz/part2/tugas2.js @@ -0,0 +1,33 @@ +//DILARANG MENGGUNAKAN METHOD SORT, PELAJARI ALGORITMA SORTING YANG ADA DI GOOGLE +//saran sih pake bubblesort walau tidak efisien tapi bagus buat belajar sorting + +/* +function urutkanAbjad(str) { + let arr = str.split(""); + arr.sort(); + return arr.join(""); +} +*/ + +function urutkanAbjad(str) { + let arr = str.split(""); + let n = arr.length; + + for (let i = 0; i < n - 1; i++) { + for (let j = 0; j < n - 1 - i; j++) { + if (arr[j] > arr[j + 1]) { + let urutan = arr[j]; + arr[j] = arr[j + 1]; + arr[j + 1] = urutan; + } + } + } + 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' From 2c296797cfd5acea61983339027690e780869a8d Mon Sep 17 00:00:00 2001 From: Rndraha21 Date: Fri, 18 Apr 2025 20:00:29 +0700 Subject: [PATCH 05/12] update --- quiz/part2/tugas3.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 quiz/part2/tugas3.js diff --git a/quiz/part2/tugas3.js b/quiz/part2/tugas3.js new file mode 100644 index 0000000..350d4cf --- /dev/null +++ b/quiz/part2/tugas3.js @@ -0,0 +1,20 @@ +// Soal 3 +//TIPS: gunakan method toUpperCase() dan toLowerCase() +function tukarBesarKecil(kalimat) { + let kata = kalimat.split(""); + for (let i = 0; i < kata.length; i++) { + if (kata[i] === kata[i].toUpperCase()) { + kata[i] = kata[i].toLowerCase(); + } else { + kata[i] = kata[i].toUpperCase(); + } +} +return kata.join("") +} + +// 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" From f1fef70a89dbf2d567b964b2f60f374423064a84 Mon Sep 17 00:00:00 2001 From: Rndraha21 Date: Tue, 29 Apr 2025 17:22:26 +0700 Subject: [PATCH 06/12] update --- quiz/part2/tugas4.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 quiz/part2/tugas4.js diff --git a/quiz/part2/tugas4.js b/quiz/part2/tugas4.js new file mode 100644 index 0000000..aa8ced8 --- /dev/null +++ b/quiz/part2/tugas4.js @@ -0,0 +1,29 @@ +/* +Soal 4 +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) { + for (let i = 0; i < num.length; i++) { + if (num[i] === "a" && i + 4 < num.length && num[i + 4] === "b") { + return true; + } + if (num[i] == "b" && i + 4 < num.length && 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 From f052afc247492e0a88bb91e1c709240bd4aae3a7 Mon Sep 17 00:00:00 2001 From: Rndraha21 Date: Tue, 29 Apr 2025 18:26:28 +0700 Subject: [PATCH 07/12] submit tugas bang hehe, jeda ngerjainnya lumayan lama soalnya di bantai sama tugas kuliah:) --- quiz/part3/tugas1.js | 49 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 quiz/part3/tugas1.js diff --git a/quiz/part3/tugas1.js b/quiz/part3/tugas1.js new file mode 100644 index 0000000..ffb005b --- /dev/null +++ b/quiz/part3/tugas1.js @@ -0,0 +1,49 @@ +// Soal 1 + +function changeMe(arr) { + for (let i = 0; i < arr.length; i++) { + let person = arr[i]; + let firstName = person[0]; + let lastName = person[1]; + let gender = person[2]; + let birthYear = person[3]; + + if (birthYear !== undefined && birthYear <= 2025) { + age = 2025 - birthYear; + } else { + age = "Invalid Birth Year"; + } + + let result = { + firstName: firstName, + lastName: lastName, + gender: gender, + age: age, + }; + console.log(`${i + 1}. ${firstName} ${lastName}:`); + console.log(result); + + if (arr.length === 0) { + console.log(""); + } + } +} + +// TEST CASES +changeMe([ + ["Christ", "Evans", "Male", 1982], + ["Robert", "Downey", "Male"], +]); +// 1. Christ Evans: +// Christ Evans: { firstName: 'Christ', +// lastName: 'Evans', +// gender: 'Male', +// age: 41 } 2023 - 1982 = 41 kan yak wkwk +// Robert Downey: { firstName: 'Robert', +// lastName: 'Downey', +// gender: 'Male', +// age: 'Invalid Birth Year' } + +//intinya bagaimana cara kalian bisa menampilkan output diatas, sebebas dan sekreatif kalian. + +changeMe([]); From e46e760c7f21715ac7cdb86bb622cb51a770a94e Mon Sep 17 00:00:00 2001 From: Rndraha21 Date: Sun, 11 May 2025 11:53:48 +0700 Subject: [PATCH 08/12] up tugas:) --- quiz/part3/tugas2.js | 74 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 quiz/part3/tugas2.js diff --git a/quiz/part3/tugas2.js b/quiz/part3/tugas2.js new file mode 100644 index 0000000..618af00 --- /dev/null +++ b/quiz/part3/tugas2.js @@ -0,0 +1,74 @@ +/* +Diberikan sebuah function shoppingTime(memberId, money) yang menerima dua parameter berupa string dan number. Parameter pertama merupakan memberId dan parameter ke-2 merupakan value uang yang dibawa oleh member tersebut. + +Toko X sedang melakukan SALE untuk beberapa barang, yaitu: + +Sepatu brand Stacattu seharga 1500000 +Baju brand Zoro seharga 500000 +Baju brand H&N seharga 250000 +Sweater brand Uniklooh seharga 175000 +Casing Handphone seharga 50000 +Buatlah function yang akan mengembalikan sebuah object dimana object tersebut berisikan informasi memberId, money, listPurchased dan changeMoney. + +Jika memberId kosong maka tampilkan "Mohon maaf, toko X hanya berlaku untuk member saja" +Jika uang yang dimiliki kurang dari 50000 maka tampilkan "Mohon maaf, uang tidak cukup" +Member yang berbelanja di toko X akan membeli barang yang paling mahal terlebih dahulu dan akan membeli barang-barang yang sedang SALE masing-masing 1 jika uang yang dimilikinya masih cukup. +Contoh jika inputan memberId: '324193hDew2' dan money: 700000 + +maka output: + +{ memberId: '324193hDew2', money: 700000, listPurchased: [ 'Baju Zoro', 'Sweater Uniklooh' ], changeMoney: 25000 } +*/ + +function shoppingTime(memberId, money) { + if (!memberId) { + return "Mohon maaf, toko X hanya berlaku untuk member saja"; + } + if (money < 50000) { + return "Mohon maaf, uang tidak cukup"; + } + + const items = [ + { nama: "Sepatu Stacattu", harga: 1500000 }, + { nama: "Baju Zoro", harga: 500000 }, + { nama: "Baju H&N", harga: 250000 }, + { nama: "Sweater Uniklooh", harga: 175000 }, + { nama: "Casing Handphone", harga: 50000 }, + ]; + + const result = { + memberId: memberId, + money: money, + listPurchased: [], + changeMoney: money, + }; + + for (let i = 0; i < items.length; i++) { + if (result.changeMoney >= items[i].harga) { + result.listPurchased.push(items[i].nama); + result.changeMoney -= items[i].harga; + } + } + return result; +} + +// TEST CASES +console.log(shoppingTime("1820RzKrnWn08", 2475000)); +//{ memberId: '1820RzKrnWn08', +// money: 2475000, +// listPurchased: +// [ 'Sepatu Stacattu', +// 'Baju Zoro', +// 'Baju H&N', +// 'Sweater Uniklooh', +// 'Casing Handphone' ], +// changeMoney: 0 } +console.log(shoppingTime("82Ku8Ma742", 170000)); +//{ memberId: '82Ku8Ma742', +// money: 170000, +// listPurchased: +// [ 'Casing Handphone' ], +// changeMoney: 120000 } +console.log(shoppingTime("", 2475000)); //Mohon maaf, toko X hanya berlaku untuk member saja +console.log(shoppingTime("234JdhweRxa53", 15000)); //Mohon maaf, uang tidak cukup +console.log(shoppingTime()); ////Mohon maaf, toko X hanya berlaku untuk member saja From 60cf70d896072381c122cdc87751b53b6f0cde73 Mon Sep 17 00:00:00 2001 From: Rndraha21 Date: Mon, 12 May 2025 10:56:14 +0700 Subject: [PATCH 09/12] up tugas --- quiz/part3/tugas3.js | 150 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 quiz/part3/tugas3.js diff --git a/quiz/part3/tugas3.js b/quiz/part3/tugas3.js new file mode 100644 index 0000000..6617dd2 --- /dev/null +++ b/quiz/part3/tugas3.js @@ -0,0 +1,150 @@ +/* +Soal 3 +Toko X yang sedang melakukan SALE ingin menghitung jumlah profit untuk setiap jenis barang yang terjual pada hari itu. + +Barang-barang SALE yang akan dihitung penjualannya: + +Sepatu brand Stacattu seharga 1500000 dan stock barang yang tesedia 10 +Baju brand Zoro seharga 500000 dan stock barang yang tesedia 2 +Sweater brand Uniklooh seharga 175000 dan stock barang yang tersedia 1 +Function akan menerima array yang berisikan object pembeli (nama pembeli, barang yang ingin dibeli dan jumlah barang yang dibelinya). Jika stock barang kurang dari jumlah yang ingin dibeli oleh pembeli maka pembeli batal untuk membeli barang tersebut. + +Function countProfit akan mengembalikan/me-return sebuah array of object dimana array tersebut berisi objek-objek barang dari toko X tersebut yang berisikan info nama barang, siapa saja yang membeli, sisa stock barang dan total pemasukan untuk barang tersebut +*/ + +function countProfit(shoppers) { + let listBarang = [ + ["Sepatu Stacattu", 1500000, 10], + ["Baju Zoro", 500000, 2], + ["Sweater Uniklooh", 175000, 1], + ]; + + if (shoppers.length === 0) { + return []; + } + + let result = []; + + for (let i = 0; i < listBarang.length; i++) { + let produk = listBarang[i][0]; + let harga = listBarang[i][1]; + let stockAwal = listBarang[i][2]; + + let obj = { + product: produk, + shoppers: [], + leftOver: stockAwal, + totalProfit: 0, + }; + + for (let j = 0; j < shoppers.length; j++) { + if ( + shoppers[j].product === produk && + shoppers[j].amount <= obj.leftOver + ) { + obj.shoppers.push(shoppers[j].name); + obj.leftOver -= shoppers[j].amount; + obj.totalProfit += shoppers[j].amount * harga; + } + } + + result.push(obj); + } + + 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([])); //[] + +/* +function countProfit(shoppers) { + let listBarang = [ + ["Sepatu Stacattu", 1500000, 10], + ["Baju Zoro", 500000, 2], + ["Sweater Uniklooh", 175000, 1], + ]; + + if (shoppers.length === 0) { + return []; + } + + return listBarang.map(([nama, harga, stok]) => { + let pembeli = []; + let sisaStok = stok; + let total = 0; + + for (let s of shoppers) { + if (s.product === nama && s.amount <= sisaStok) { + pembeli.push(s.name); + sisaStok -= s.amount; + total += s.amount * harga; + } + } + + return { + product: nama, + shoppers: pembeli, + leftOver: sisaStok, + totalProfit: total, + }; + }); +} +*/ From 7a57621b18befc1ab20f5a7580bad8de3f6a71be Mon Sep 17 00:00:00 2001 From: Rndraha21 Date: Mon, 12 May 2025 18:32:09 +0700 Subject: [PATCH 10/12] up tugas --- quiz/ujian/ujian1.js | 54 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 quiz/ujian/ujian1.js diff --git a/quiz/ujian/ujian1.js b/quiz/ujian/ujian1.js new file mode 100644 index 0000000..e21ca22 --- /dev/null +++ b/quiz/ujian/ujian1.js @@ -0,0 +1,54 @@ +/* +Soal 1 +Implementasikan function deepSum untuk mendapatkan jumlah pertambahan dari angka-angka yang terdapat di dalam array +*/ + +function deepSum(arr) { + if (arr.length === 0) { + return "No number"; + } + let sum = 0; + for (let i = 0; i < arr.length; i++) { + // console.log(`Ini adalah array index i: ${arr[i]}`); + for (let j = 0; j < arr[i].length; j++) { + // console.log(`Ini adalah array index j: ${arr[j]}`); + for (let k = 0; k < arr[i][j].length; k++) { + // console.log(`Ini adalah array index k: ${arr[k]}`); + sum += arr[i][j][k]; + } + } + } + return sum; +} + +//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 From e90c92c1f38807e71d5862e5352c4713e26542ec Mon Sep 17 00:00:00 2001 From: Rndraha21 Date: Mon, 12 May 2025 19:36:05 +0700 Subject: [PATCH 11/12] update --- quiz/ujian/ujian2.js | 46 ++++++++++++++++++++ quiz/ujian/ujian3.js | 99 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 quiz/ujian/ujian2.js create mode 100644 quiz/ujian/ujian3.js diff --git a/quiz/ujian/ujian2.js b/quiz/ujian/ujian2.js new file mode 100644 index 0000000..1054bf4 --- /dev/null +++ b/quiz/ujian/ujian2.js @@ -0,0 +1,46 @@ +/* +Soal 2 +Diberikan function naikAngkot(listPenumpang) yang akan menerima satu parameter berupa array dua dimensi. Function akan me-return array of object. + +Diberikan sebuah rute, dari A - F. Penumpang diwajibkan membayar Rp2000 setiap melewati satu rute. + +Contoh: input: [['Dimitri', 'B', 'F']] output: [{ penumpang: 'Dimitri', naikDari: 'B', tujuan: 'F', bayar: 8000 }] +*/ + +function naikAngkot(arrPenumpang) { + rute = ["A", "B", "C", "D", "E", "F"]; + const hasil = []; + if (arrPenumpang.length === 0) { + return []; + } + + for (let i = 0; i < arrPenumpang.length; i++) { + const penumpang = arrPenumpang[i][0]; + const naikDari = arrPenumpang[i][1]; + const tujuan = arrPenumpang[i][2]; + + const indexNaik = rute.indexOf(naikDari); + const indexTurun = rute.indexOf(tujuan); + const bayar = (indexTurun - indexNaik) * 2000; + + hasil.push({ + penumpang: penumpang, + naikDari: naikDari, + tujuan: tujuan, + bayar: bayar, + }); + } + return hasil; +} + +//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/ujian3.js b/quiz/ujian/ujian3.js new file mode 100644 index 0000000..292f7b9 --- /dev/null +++ b/quiz/ujian/ujian3.js @@ -0,0 +1,99 @@ +// Soal 3 +function highestScore(students) { + if (students.length === 0) { + return {}; + } + + let result = {}; + + for (let i = 0; i < students.length; i++) { + let current = students[i]; + let className = current.class; + + if (!result[className]) { + result[className] = { + name: current.name, + score: current.score, + }; + } else { + if (current.score > result[className].score) { + result[className] = { + name: current.name, + score: current.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([])); //{} From 0dc18813ec5bf5d9e0a14a2ba52f4ed70e84f84b Mon Sep 17 00:00:00 2001 From: Rndraha21 Date: Sat, 17 May 2025 13:35:01 +0700 Subject: [PATCH 12/12] akhirnya kelar week 3, looping bikin struggle:( --- quiz/ujian/ujian3.js | 2 +- quiz/ujian/ujian4.js | 122 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 quiz/ujian/ujian4.js diff --git a/quiz/ujian/ujian3.js b/quiz/ujian/ujian3.js index 292f7b9..98dfe55 100644 --- a/quiz/ujian/ujian3.js +++ b/quiz/ujian/ujian3.js @@ -27,7 +27,7 @@ function highestScore(students) { return result; } - + // TEST CASE console.log( diff --git a/quiz/ujian/ujian4.js b/quiz/ujian/ujian4.js new file mode 100644 index 0000000..fc6c76b --- /dev/null +++ b/quiz/ujian/ujian4.js @@ -0,0 +1,122 @@ +/* +Soal 4 +Implementasikan function graduates untuk mendapatkan daftar student yang lulus dengan aturan: + +Student dapat dinyatakan lulus apabila score lebih besar dari 75. +Masukkan name dan score dari student ke class yang dia ikuti. +Student yang tidak lulus tidak perlu ditampilkan. +Output yang diharapkan berupa Object dengan format sebagai berikut: + +{ + : [ + { name: , score: }, + ... + ], + : [ + { name: , score: }, + ... + ], + : [] //NOTE: Jika tidak ada student yang lulus, class ini akan diisi oleh array kosong +} +*/ + +function graduates(students) { + if (students.length === 0) { + return {}; + } + + let result = {}; + for (let i = 0; i < students.length; i++) { + let current = students[i]; + let className = current.class; + + if (!result[className]) { + result[className] = []; + } + + if (current.score > 75) { + result[className].push({ name: current.name, score: current.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([])); //{}