From 4feee8c6e2300b20dc6514a5bf2e0ebe2a6a7b27 Mon Sep 17 00:00:00 2001 From: Duwixe Date: Mon, 14 Apr 2025 14:25:00 +0700 Subject: [PATCH 1/3] Belajar --- quiz/part1/soal1.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 quiz/part1/soal1.js diff --git a/quiz/part1/soal1.js b/quiz/part1/soal1.js new file mode 100644 index 0000000..5f881eb --- /dev/null +++ b/quiz/part1/soal1.js @@ -0,0 +1,12 @@ +//cek apakah angka yang dikirim adalah angka prima atau bukan? +//cek google bagi yang ga tau apa itu angka prima +function angkaPrima(angka) { + let angka = ""; + } + + // 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 \ No newline at end of file From 6bb176d67e2f5ebd24a14fd4d13398fbaac880b6 Mon Sep 17 00:00:00 2001 From: Duwixe Date: Wed, 16 Apr 2025 16:25:02 +0700 Subject: [PATCH 2/3] Duwixe - Week 3 - Selesai --- quiz/ujian/soal1.js | 64 ++++++++++++++++++++++++ quiz/ujian/soal2.js | 33 +++++++++++++ quiz/ujian/soal3.js | 84 +++++++++++++++++++++++++++++++ quiz/ujian/soal4.js | 117 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 298 insertions(+) create mode 100644 quiz/ujian/soal1.js create mode 100644 quiz/ujian/soal2.js create mode 100644 quiz/ujian/soal3.js create mode 100644 quiz/ujian/soal4.js diff --git a/quiz/ujian/soal1.js b/quiz/ujian/soal1.js new file mode 100644 index 0000000..6329510 --- /dev/null +++ b/quiz/ujian/soal1.js @@ -0,0 +1,64 @@ +/* +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; + function SumNested (array) { + for (let item of array) { + if (Array.isArray(item)) { // Memeriksa apakah suatu variabel bernilai array. + SumNested(item); + } else { + sum += item; + } + } + } + SumNested(arr); // memulai proses rekursi atau memanggil dirinya sendiri. + 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 \ No newline at end of file diff --git a/quiz/ujian/soal2.js b/quiz/ujian/soal2.js new file mode 100644 index 0000000..0bb8012 --- /dev/null +++ b/quiz/ujian/soal2.js @@ -0,0 +1,33 @@ +/* +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) { + let rute = ['A', 'B', 'C', 'D', 'E', 'F']; + let tarifPerRute = 2000; + let result = []; + + for (let penumpang of arrPenumpang) { + let obj = { + penumpang: penumpang[0], + naikDari: penumpang[1], + tujuan: penumpang[2], + bayar: (rute.indexOf(penumpang[2]) - rute.indexOf(penumpang[1])) * tarifPerRute + // biaya dihitung dari selisih antar indeks NaikDari dan tujuan, dan dikalikan dengan Tarif per Rute + }; + + 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([])); //[] \ No newline at end of file diff --git a/quiz/ujian/soal3.js b/quiz/ujian/soal3.js new file mode 100644 index 0000000..fcc55e8 --- /dev/null +++ b/quiz/ujian/soal3.js @@ -0,0 +1,84 @@ +// entah kenapa yang ini lebih mudah dikerjakan ketimbang 2 yang sebelumnya, Min. ini 15-20 menit bisa selesai, yang sebelumnya aduh, saking berantakannya sampe bikin file baru. +// yang lama berantakan banget, tambah pusing liatnya wkwkwk. Maaf, curhat dikit hehe. + +function highestScore (students) { + let result = {}; + for (let student of students) { + 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([])); //{} \ No newline at end of file diff --git a/quiz/ujian/soal4.js b/quiz/ujian/soal4.js new file mode 100644 index 0000000..5dfabf1 --- /dev/null +++ b/quiz/ujian/soal4.js @@ -0,0 +1,117 @@ +/* +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) { + let result = {}; + for (let student of students) { + if (student.score > 75 ) { + let className = student.class; + + if (!result[className]) { + result[className] = []; + } + + 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([])); //{} \ No newline at end of file From c156214e21b4afcda48b89556537d6efd15e4a28 Mon Sep 17 00:00:00 2001 From: Duwixe Date: Wed, 16 Apr 2025 16:25:35 +0700 Subject: [PATCH 3/3] Duwixe - Week 3 - Selesai --- a.js | 36 ++++++++++++++++ quiz/part1/soal1.js | 10 ++++- quiz/part1/soal2.js | 16 +++++++ quiz/part1/soal3.js | 17 ++++++++ quiz/part1/soal4.js | 36 ++++++++++++++++ quiz/part1/soal5.js | 24 +++++++++++ quiz/part2/soal1.js | 42 ++++++++++++++++++ quiz/part2/soal2.js | 23 ++++++++++ quiz/part2/soal3.js | 12 ++++++ quiz/part2/soal4.js | 26 +++++++++++ quiz/part3/soal1.js | 40 +++++++++++++++++ quiz/part3/soal2.js | 77 +++++++++++++++++++++++++++++++++ quiz/part3/soal3.js | 102 ++++++++++++++++++++++++++++++++++++++++++++ 13 files changed, 460 insertions(+), 1 deletion(-) create mode 100644 a.js create mode 100644 quiz/part1/soal2.js create mode 100644 quiz/part1/soal3.js create mode 100644 quiz/part1/soal4.js create mode 100644 quiz/part1/soal5.js create mode 100644 quiz/part2/soal1.js create mode 100644 quiz/part2/soal2.js create mode 100644 quiz/part2/soal3.js create mode 100644 quiz/part2/soal4.js create mode 100644 quiz/part3/soal1.js create mode 100644 quiz/part3/soal2.js create mode 100644 quiz/part3/soal3.js diff --git a/a.js b/a.js new file mode 100644 index 0000000..4c7f4eb --- /dev/null +++ b/a.js @@ -0,0 +1,36 @@ +// // let studentDatas = [['John', 'Doe'], ['Joe', 'Anna']] +// // let newStudentDatas = []; + +// // for (let i = 0; i < studentDatas.length; i++) { +// // let data = { +// // firstName: studentDatas[i][0], +// // lastName: studentDatas[i][1], +// // } + +// // newStudentDatas.push(data) +// // } + +// // console.log(newStudentDatas) + +// const myObj = { +// nama: 'bryan', +// kelas: '12', +// hobbi: ['main', 'makan', 'tidur'], +// detail: { +// tinggi: 185, +// berat: 60, +// } +// }; + +// console.log(myObj.detail.berat); + +//myObj.kelakuan = 'baik'; +//atau bisa seperti ini +myObj['isNolep'] = true; + +//atau dengan loop +// let objAngka = {}; +// for (let i = 1; i <= 3; i++) { +// objAngka[i] = i +// } +// console.log(objAngka); \ No newline at end of file diff --git a/quiz/part1/soal1.js b/quiz/part1/soal1.js index 5f881eb..9ef8e65 100644 --- a/quiz/part1/soal1.js +++ b/quiz/part1/soal1.js @@ -1,7 +1,15 @@ //cek apakah angka yang dikirim adalah angka prima atau bukan? //cek google bagi yang ga tau apa itu angka prima function angkaPrima(angka) { - let angka = ""; + if (angka <= 1) { + return false; + } + for (let i = 2; i < angka; i++) { + if (angka % i === 0) { + return false + } + } + return true; } // TEST CASES diff --git a/quiz/part1/soal2.js b/quiz/part1/soal2.js new file mode 100644 index 0000000..d503396 --- /dev/null +++ b/quiz/part1/soal2.js @@ -0,0 +1,16 @@ +//cari faktor persekutuan terbesar +function fpb(angka1, angka2) { + while (angka2 !== 0) { + let temp = angka2; //menjaga nilai awal dari angka2 + angka2 = angka1 % angka2; + angka1 = temp; + } + return angka1; + } + + // 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 \ No newline at end of file diff --git a/quiz/part1/soal3.js b/quiz/part1/soal3.js new file mode 100644 index 0000000..ba27162 --- /dev/null +++ b/quiz/part1/soal3.js @@ -0,0 +1,17 @@ +function cariMedian(arr) { + arr.sort((a, b) => a - b); // mengurutkan array dari kecil ke besar + const mid = Math.floor(arr.length / 2); //index tengah + + if (arr.length % 2 === 0) { // buat if untuk hitung rata2 dari 2 elemen array di tengah. + return (arr[mid -1] + arr[mid]) / 2; + } else { + return arr[mid]; + } + } + + // 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 diff --git a/quiz/part1/soal4.js b/quiz/part1/soal4.js new file mode 100644 index 0000000..b8ef996 --- /dev/null +++ b/quiz/part1/soal4.js @@ -0,0 +1,36 @@ +/* +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) { + const kemunculan = {}; + let maxKem = 0; + let modus = -1; + + for (let num of arr) { // Menghitung frekuensi kemunculan setiap angka + kemunculan[num] = (kemunculan[num] || 0) + 1; + } + + for (let num in kemunculan) { // Menentukan modus berdasarkan nilai frekuensi maksimum + if (kemunculan[num] > maxKem) { + maxKem = kemunculan[num]; + modus = parseInt(num); // Memastikan nilai diubah ke tipe angka + } + } + + // Memastikan kasus di mana tidak ada modus + const allSameFrequency = Object.keys(kemunculan).length === 1 || maxKem === 1; + if (allSameFrequency) { + return -1; + } + + return modus; +} + +// TEST CASES +console.log(cariModus([10, 4, 5, 2, 4])); // Output: 4 +console.log(cariModus([5, 10, 10, 6, 5])); // Output: 5 +console.log(cariModus([10, 3, 1, 2, 5])); // Output: -1 +console.log(cariModus([1, 2, 3, 3, 4, 5])); // Output: 3 +console.log(cariModus([7, 7, 7, 7, 7])); // Output: -1, untuk case ini saya pake bantuan AI bang, ga nemu contoh kasusnya, dan berakhir minta bantu AI. + + diff --git a/quiz/part1/soal5.js b/quiz/part1/soal5.js new file mode 100644 index 0000000..2a26c29 --- /dev/null +++ b/quiz/part1/soal5.js @@ -0,0 +1,24 @@ +//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) { + let hasil = ''; + for (let char of kata) { + if (char === 'z') { + hasil += 'a'; + } else if (char === 'Z') { + hasil += 'A'; + } else if ((char >= 'a' && char <= 'y') || (char >= 'A' && char <= 'Y')) { + hasil += String.fromCharCode(char.charCodeAt(0) + 1); //untuk memindahkan ke huruf selanjutnya, SC : Facebook. + } else { + hasil += char; + } + } + return hasil; + } + + // 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 \ No newline at end of file diff --git a/quiz/part2/soal1.js b/quiz/part2/soal1.js new file mode 100644 index 0000000..cccfd25 --- /dev/null +++ b/quiz/part2/soal1.js @@ -0,0 +1,42 @@ +/* +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 minDigit = Infinity; + + for (let i = 1; i <= Math.sqrt(angka); i++) { + if (angka % i === 0) { + const faktor1 = i; + const faktor2 = angka / i; + + const JumlahDigit = String(faktor1).length + String(faktor2).length; + + if (JumlahDigit < minDigit) { + minDigit = JumlahDigit; + } + } + } + return minDigit; + } + + // 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 \ No newline at end of file diff --git a/quiz/part2/soal2.js b/quiz/part2/soal2.js new file mode 100644 index 0000000..43bf224 --- /dev/null +++ b/quiz/part2/soal2.js @@ -0,0 +1,23 @@ +//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(''); + + 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]) { //menukar posisi jika urutan salah. + let temp = arr[j]; + arr[j] = arr[j+1]; + arr[j+1] = temp; + } + } + } + return arr.join(''); // menggabungkan semua array menjadi satu string. + } + + // 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' \ No newline at end of file diff --git a/quiz/part2/soal3.js b/quiz/part2/soal3.js new file mode 100644 index 0000000..649a6b3 --- /dev/null +++ b/quiz/part2/soal3.js @@ -0,0 +1,12 @@ +//TIPS: gunakan method toUpperCase() dan toLowerCase() +function tukarBesarKecil(kalimat) { + return kalimat.split('').map(char => // fungsi map untuk menjalankan fungsi pada setiap karakter dalam Array, SC : AI. + char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase() // mengecek jika char huruf besar, jika ya akan diubah menjadi kecil dengan char.toLowerCase. + ).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" \ No newline at end of file diff --git a/quiz/part2/soal4.js b/quiz/part2/soal4.js new file mode 100644 index 0000000..d1a5379 --- /dev/null +++ b/quiz/part2/soal4.js @@ -0,0 +1,26 @@ +/* +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 -4; i++) { + if ((num[i] === 'a' && num[i+4] === 'b') || (num[i] === 'b' && num[i+4] === 'a')) { + // bacanya, jika num ke i sama dengan a dan num ke i+4 sama degan B, atau num ke i sama dengan b dan num i+4 sama dengan a maka hasilnya true; + 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 \ No newline at end of file diff --git a/quiz/part3/soal1.js b/quiz/part3/soal1.js new file mode 100644 index 0000000..5626ce9 --- /dev/null +++ b/quiz/part3/soal1.js @@ -0,0 +1,40 @@ +// JUJUR, KAGAK NGERTI BANG NIH MAU DIAPAIN, GA KEBAYANG OUTPUTNYA. INI ATAS REFERENSI AJA, MAAF KALO SALAH. +function changeMe(arr) { + if (arr.length === 0) { + console.log (""); + return; + } + + let currentyear = new Date().getFullYear(); + + arr.forEach ((person, index) => { + let personObj = { + firstname: person[0], + lastname: person[1], + gender: person[2], + age: person[3] ? currentyear - person [3] : "Invalid Birthday" + }; + + console.log(`${index + 1}. ${personObj.firstname} ${personObj.lastname}: `); + console.log(personObj); + + }); + } + + // 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([]); // "" \ No newline at end of file diff --git a/quiz/part3/soal2.js b/quiz/part3/soal2.js new file mode 100644 index 0000000..fa0ef34 --- /dev/null +++ b/quiz/part3/soal2.js @@ -0,0 +1,77 @@ +/* +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 = [ + { name: "Sepatu stacattu", price: 1500000}, + { name: "Baju Zoro", price: 500000 }, + { name: "Baju H&H", price: 250000}, + { name: "Sweater UnikLooh", price: 175000}, + { name: "Casing Handphone", price: 50000} + ]; + + let listPurchased = []; + let changeMoney = money; + + for (let item of items) { + if (changeMoney >= item.price) { + listPurchased.push(item.name); + changeMoney -= item.price; + } + } + + return { + member: memberId, + money: money, + listPurchased: listPurchased, + changeMoney: changeMoney + }; + } + + // 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 \ No newline at end of file diff --git a/quiz/part3/soal3.js b/quiz/part3/soal3.js new file mode 100644 index 0000000..ee75c81 --- /dev/null +++ b/quiz/part3/soal3.js @@ -0,0 +1,102 @@ +/* +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 +*/ + +// BANG INI SAYA BENERIN DI VAR LISTBARANG NYA GPP YA, AGAK SUSAH DAN BINGUNG. MAAF KALO MENYALAHI ATURAN. BIAR GAMPANG NGATUR LOOP AMA OBJECT NYA GITU. HEHE + +function countProfit(shoppers) { + var listBarang = [ + { product: 'Sepatu Stacattu', price: 1500000, stock: 10 }, + { product: 'Baju Zoro', price: 500000, stock: 2 }, + { product: 'Sweater Uniklooh', price: 175000, stock: 1 } + ]; + + let result = []; + + for (let item of listBarang) { + let obj = { + product: item.product, + shoppers: [], + leftOver: item.stock, + totalProfit: 0 + }; + + for (let shopper of shoppers) { + if (shopper.product === item.product && shopper.amount <= obj.leftOver) { + obj.shoppers.push(shopper.name); + obj.leftOver -= shopper.amount; + obj.totalProfit += shopper.amount * item.price; + } + } + + 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([])); // []