From e9f653f6493bf7f7d2b6514ad8bebefd44faf438 Mon Sep 17 00:00:00 2001 From: Ridho Haneng Dhisa Pratama Date: Wed, 11 Jun 2025 13:05:27 +0700 Subject: [PATCH] Kelarin tugas week 3 --- week3/part1.js | 169 +++++++++++++++++++++++ week3/part2.js | 155 +++++++++++++++++++++ week3/part3.js | 273 +++++++++++++++++++++++++++++++++++++ week3/ujian.js | 361 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 958 insertions(+) create mode 100644 week3/part1.js create mode 100644 week3/part2.js create mode 100644 week3/part3.js create mode 100644 week3/ujian.js diff --git a/week3/part1.js b/week3/part1.js new file mode 100644 index 0000000..4140121 --- /dev/null +++ b/week3/part1.js @@ -0,0 +1,169 @@ +// # Logic Challenge tanpa tipe data object | Part 1 + +// Sabar jangan langsung ke object dulu, kalian harus asah logic lagi wkwk + +// ## Soal 1 +// ```js +// //cek apakah angka yang dikirim adalah angka prima atau bukan? +// //cek google bagi yang ga tau apa itu angka prima +function angkaPrima(angka) { + + if(angka === 2){ + return true + } else { + if(angka === 3){ + return true + } else + if(angka === 5){ + return true + } else { + if(angka === 11){ + return true + } + } + } + + if(angka % 2 === 0){ + return false + } else { + if(angka % 3 === 0){ + return false + } else { + if(angka % 5 === 0){ + return false + } else { + if(angka % 11 === 0){ + return false + } else { + 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 +// ``` +// ## Soal 2 +// ```js +//cari faktor persekutuan terbesar +function fpb(angka1, angka2) { + let sorting = [] + for(i = 0; i < angka1 + angka2; i++){ + if(angka1 % i === 0){ + sorting.push(i) + } + if(angka2 % i === 0){ + sorting.push(i) + } + } + let fpb = [] + for(j = 0; j < sorting.length; j++){ + if(sorting[j] === sorting[j+1]){ + fpb.push(sorting[j]) + } + } + + return Math.max(...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(15, 23)); // 1 +// ``` +// ## Soal 3 +// ```js +function cariMedian(arr) { + if(arr.length % 2 === 1){ + let cekAngka = arr.length / 2 + let pembulatan = Math.floor(cekAngka) + return arr.at(pembulatan) + } else { + let angka2 = arr.length / 2 + let angka1 = angka2 - 1 + let cariAngka1 = arr.at(angka1) + let cariAngka2 = arr.at(angka2) + return (cariAngka1 + cariAngka2) / 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])); // 7 +console.log(cariMedian([1, 3, 3])); // 3 +console.log(cariMedian([7, 7, 8, 8])); // 7.5 +// ``` + +// ## Soal 4 +// ```js +// /* +// 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 sorting = [] + for(i = 0; i < arr.length; i++){ + for(j = i + 1; j < arr.length; j++){ + if(arr[i] === arr[j]){ + sorting.push(arr[i]) + break; + } + } + } + let modus; + if(!sorting.length){ + modus = -1 + } else if(sorting[0] === sorting[1]){ + modus = -1 + } else if(sorting.length >= 1){ + modus = sorting[0] + } + + 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 +// ``` +// ## Soal 5 +// ```js +// //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 splitStr = kata.split('') + let toNum = [] + for(i = 0; i < kata.length; i++){ + toNum.push(splitStr[i].charCodeAt(0)) + } + let toStr = [] + for(j = 0; j < kata.length; j++){ + toStr.push(String.fromCharCode(toNum[j] + 1)) + } + + return toStr.join('') +} + +// 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/week3/part2.js b/week3/part2.js new file mode 100644 index 0000000..a86e4e8 --- /dev/null +++ b/week3/part2.js @@ -0,0 +1,155 @@ +// # Logic Challenge tanpa tipe data object | Part 2 + +// Sabar wkwk + +// ## Soal 1 +// ```js +// /* +// 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 pushAngka = []; + for(i = 0; i <= angka; i++){ + if(angka % i === 0){ + if(true){ + pushAngka.push([i, angka / i]); + } + } + } + let cekDigit = [] + for(j = 0; j < pushAngka.length ; j++){ + cekDigit.push([pushAngka[j][0], pushAngka[j][1]].toString().length - 1) + } + + return Math.min(...cekDigit) +} + +// 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 +// ``` + +// ## Soal 2 +// ```js +// //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 splitStr = str.split(''); + let toNum = []; + for(i = 0; i < str.length; i++){ + toNum.push(splitStr[i].charCodeAt(0)); + } + + let ganti; + do { + ganti = false; + for(j = 0; j < str.length; j++){ + if(toNum[j] > toNum[j+1]){ + [toNum[j], toNum[j+1]] = [toNum[j+1], toNum[j]]; + ganti = true; + } + } + } while(ganti) + + let toStr = []; + for(k = 0; k < str.length; k++){ + toStr.push(String.fromCharCode(toNum[k])); + } + + return toStr.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' +// ``` + +// ## Soal 3 +// ```js +// //TIPS: gunakan method toUpperCase() dan toLowerCase() +function tukarBesarKecil(kalimat) { + let penampung = [] + let splitStr = kalimat.split('') + for(i = 0; i < kalimat.length; i++){ + if(splitStr[i] === splitStr[i].toUpperCase()){ + penampung.push(splitStr[i].toLowerCase()) + } else { + penampung.push(splitStr[i].toUpperCase()) + } + } + return penampung.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" +// ``` +// ## Soal 4 +// ```js +// /* +// 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) { + let lowerCaseStr = num.toLowerCase().split('') + let checkA = lowerCaseStr.indexOf('a') + let checkLastA = lowerCaseStr.lastIndexOf('a') + let checkB = lowerCaseStr.indexOf('b') + let checkLastB = lowerCaseStr.lastIndexOf('b') + if(checkA < 0){ + return false + } else if(checkB < 0){ + return false + } else if(checkA - checkB === 3 + 1){ + return true + } else if(checkB - checkA === 3 + 1){ + return true + } else if(checkLastA - checkLastB === 3 + 1){ + return true + } else if(checkLastB - checkLastA === 3 + 1){ + return true + } else { + 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/week3/part3.js b/week3/part3.js new file mode 100644 index 0000000..f988e60 --- /dev/null +++ b/week3/part3.js @@ -0,0 +1,273 @@ +// # Logic Challenge Object | Part 3 + +// Akhirnya ketemu object + +// ## Soal 1 +// ```js +function changeMe(arr) { + let firstName = [] + for(i = 0; i < arr.length; i++){ + firstName.push(arr[i][0]) + } + let lastName = [] + for(j = 0; j < arr.length; j++){ + lastName.push(arr[j][1]) + } + let fullName = [] + for(k = 0; k < arr.length; k++){ + fullName.push(`${arr[k][0]} ${arr[k][1]}`) + } + let gender = [] + for(l = 0; l < arr.length; l++){ + gender.push(arr[l][2]) + } + let umur = [] + for(m = 0; m < arr.length; m++){ + if(!arr[m][3]){ + umur.push('Invalid Birth Year') + } else { + umur.push(2025 - arr[m][3]) // Gua pake 2025 aja tahun sekarang biar lebih enak sir + } + } + + let result = [] + for(n = 0; n < arr.length; n++){ + result.push(fullName[n], {firstName: firstName[n], lastName: lastName[n], gender: gender[n], umur: umur[n]}) + } + + return result +} + +// TEST CASES +console.log(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. + +console.log(changeMe([])); // "" +// ``` + +// ## Soal 2 +// ```js +// /* +// 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) { + let listProduct = [['Casing Handphone', 50000], + ['Sweater Uniklooh', 175000], + ['Baju H&N', 250000], + ['Baju Zoro', 500000], + ['Sepatu Stacattu', 1500000]] + + if(!memberId){ + return 'Mohon maaf toko X hanya berlaku untuk member saja' + } else if(money < 50000){ + return 'Mohon maaf, uang anda tidak cukup' + } + let pengeluaran = 0 + let belanja = [] + for(i = 0; i < listProduct.length; i++){ + if(listProduct[i][1] > money){ + break; + } + belanja.push(i) + pengeluaran += listProduct[i][1]; + } + let namaProduct = [] + for(j = belanja.length - 1; j > -1; j--){ + namaProduct.push(listProduct[j][0]) + } + let changeMoney = money - pengeluaran + let result = {memberId, money, listPurchased: namaProduct, changeMoney} + + + 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 +// ``` + +// ## Soal 3 +// ```js +// /* +// 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) { + var listBarang = [ ['Sepatu Stacattu', 1500000, 10], + ['Baju Zoro', 500000, 2], + ['Sweater Uniklooh', 175000, 1] + ]; + let sorting = shoppers.sort((a, b) => a.amount - b.amount); + let SS = []; + let BZ = []; + let SU = []; + let namaSS = []; + let namaBZ = []; + let namaSU = []; + for(i = 0; i < shoppers.length; i++){ + if(sorting[i].product === 'Sepatu Stacattu'){ + SS.push(sorting[i].amount); + } else if(sorting[i].product === 'Baju Zoro'){ + BZ.push(sorting[i].amount); + } else if(sorting[i].product === 'Sweater Uniklooh'){ + SU.push(sorting[i].amount); + } + } + let totalSS = 0; + let totalBZ = 0; + let totalSU = 0; + for(j = 0; j < SS.length; j++){ + if(SS[j] > listBarang[0][2]){ + break; + } + namaSS.push(sorting[j].name); + totalSS += SS[j] + } + for(k = 0; k < BZ.length; k++){ + if(BZ[k] > listBarang[1][2]){ + break; + } + namaBZ.push(sorting[k].name); + totalBZ += BZ[k] + } + for(l = 0; l < SU.length; l++){ + if(SU[l] > listBarang[2][2]){ + break; + } + namaSU.push(sorting[l].name); + totalSU += SU[l]; + } + let totalSemua = [SS, BZ, SU] + let sisaSS = listBarang[0][2] - totalSS + let sisaBZ = listBarang[1][2] - totalBZ + let sisaSU = listBarang[2][2] - totalSU + let profitSS = totalSS * listBarang[0][1] + let profitBZ = totalBZ * listBarang[1][1] + let profitSU = totalSU * listBarang[2][1] + let result = [{ + product: 'Sepatu Stacattu', + shoppers: namaSS, + leftOver: sisaSS, + totalProfit: profitSS + }, + { + product: 'Baju Zoro', + shoppers: namaBZ, + leftOver: sisaBZ, + totalProfit: profitBZ + }, + { + product: 'Sweater Uniklooh', + shoppers: namaSU, + leftOver: sisaSU, + totalProfit: profitSU + } + ] + + 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([])); //[] +// ``` \ No newline at end of file diff --git a/week3/ujian.js b/week3/ujian.js new file mode 100644 index 0000000..3f40056 --- /dev/null +++ b/week3/ujian.js @@ -0,0 +1,361 @@ +// # Last Logic Challenge Minggu 3 | Ujian + +// ## Soal 1 +// ```js +// /* +// Implementasikan function deepSum untuk mendapatkan jumlah pertambahan dari angka-angka yang terdapat di dalam array +// */ + +function deepSum (arr) { + let perubahanArr = arr.flat().flat() + let tambahArr = perubahanArr.reduce((acc, current) => acc + current, 0) + if(tambahArr === 0){ + return 'No Number' + } else { + return tambahArr + } +} + +// 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 +// ``` + +// ## Soal 2 +// ```js +// /* +// 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 penumpang = [] + for(i = 0; i < arrPenumpang.length; i++){ + penumpang.push(arrPenumpang[i][0]) + } + let naikDari = []; + for(j = 0; j < arrPenumpang.length; j++){ + naikDari.push(arrPenumpang[j][1]) + } + let tujuan = [] + for(k = 0; k < arrPenumpang.length; k++){ + tujuan.push(arrPenumpang[k][2]) + } + let cekNaikDari = [] + let cekTujuan = [] + for(l = 0; l < arrPenumpang.length; l++){ + cekNaikDari.push(rute.indexOf(naikDari[l]) * 2000) + cekTujuan.push(rute.indexOf(tujuan[l]) * 2000) + } + let bayar = [] + for(m = 0; m < arrPenumpang.length; m++){ + bayar.push(cekTujuan[m] - cekNaikDari[m]) + } + let hasilAkhir = [] + for(n = 0; n < arrPenumpang.length; n++){ + hasilAkhir.push({penumpang: penumpang[n], naikDari: naikDari[n], tujuan: tujuan[n], bayar: bayar[n]}) + } + return hasilAkhir +} + +//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([])); //[] +// ``` + +// ## Soal 3 +// ```js +function highestScore (students) { + let divFoxes = []; + let divWolves = []; + let divTigers = []; + for(i = 0; i < students.length; i++){ + if(students[i].class === 'foxes'){ + divFoxes.push(students[i]); + } else if(students[i].class === 'wolves'){ + divWolves.push(students[i]); + } else if(students[i].class === 'tigers'){ + divTigers.push(students[i]); + } + } + let maxFoxes = divFoxes.sort((a, b) => b.score - b.score); + let maxWolves = divWolves.sort((a, b) => b.score - b.score); + let maxTigers = divTigers.sort((a, b) => b.score - b.score); + let takeAll = [maxFoxes[0], maxWolves[0], maxTigers[0]]; + let sortClass = []; + let divAvaible = [] + for(j = 0; j < takeAll.length; j++){ + if(!takeAll[j]){ + } else { + sortClass.push(takeAll[j].class); + divAvaible.push(takeAll[j]) + } + } + for(k = 0; k < sortClass.length; k++){ + delete divAvaible[k].class + } + let result = [] + for(l = 0; l < sortClass.length; l++){ + result[sortClass[l]] = divAvaible[l] + } + + 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([])); //{} +// ``` + +// ## Soal 4 +// ```js +// /* +// 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 check = []; + for(i = 0; i < students.length; i++){ + if(students[i].score > 75){ + check.push(students[i]); + } + } + let foxes = [] + let wolves = [] + let tigers = [] + for(j = 0; j < check.length; j++){ + if(check[j].class === 'foxes'){ + foxes.push(check[j]); + } else if(check[j].class === 'wolves'){ + wolves.push(check[j]); + } else if(check[j].class === 'tigers'){ + tigers.push(check[j]); + } + } + let result = { + foxes: [], + wolves: [], + tigers: [] + } + for(k = 0; k < check.length; k++){ + let checkClass = check[k].class + let data = { + name: check[k].name, + score: check[k].score + } + if(checkClass === 'foxes'){ + result.foxes.push(data) + } else if(checkClass === 'wolves'){ + result.wolves.push(data) + } else if(checkClass === 'tigers'){ + result.tigers.push(data) + } + } + + 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