Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
169 changes: 169 additions & 0 deletions week3/part1.js
Original file line number Diff line number Diff line change
@@ -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
// ```
155 changes: 155 additions & 0 deletions week3/part2.js
Original file line number Diff line number Diff line change
@@ -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
// ```
Loading