Tugas-tugas Microsoft JavaScript



Selamat siang teman!

Saya mempersembahkan kepada Anda tiga tugas JS yang ditawarkan kepada peserta Penilaian Online Microsoft 2019. Penilaian Online

Microsoft adalah seleksi awal calon pengembang. Mereka yang telah lolos seleksi pendahuluan diundang ke wawancara online. Saya menemukan informasi di jaringan yang tepat satu jam dialokasikan untuk solusi masalah, tetapi ini tidak akurat.

Saya sarankan Anda membiasakan diri dengan pertanyaan dan mencoba menyelesaikannya sendiri. Komentar terperinci dipersilakan.

Terima kasih banyak atas penyelesaian Matt Clark .

Jadi ayo pergi.

Tugas nomor 1


Tulis fungsi solusi yang memenuhi kondisi berikut:

  • fungsi mengambil string S yang terdiri dari N huruf alfabet Inggris
  • fungsi mengembalikan string yang tidak mengandung tiga huruf yang identik dalam satu baris
  • fungsi menghapus jumlah huruf minimum dari string S

Contoh:

  1. S = "eedaaad", fungsi mengembalikan "eedaad". Satu huruf "a" dihapus.
  2. S = "xxxtxxx", fungsi mengembalikan "xxtxx". Huruf yang sama dapat muncul dalam satu baris lebih dari tiga kali, tetapi tidak dalam satu baris.
  3. S = "uuuuxaaaaxuuu", fungsi mengembalikan "uuxaaxuu".

Asumsi:

  • N adalah bilangan bulat dalam kisaran [1..200.000]
  • S hanya terdiri dari huruf kecil [az]

Keputusan:
function solution(input) {
    let result = input.slice(0, 2);
    for (let i = 2; i < input.length; i++) {
        if (input[i] !== input[i - 1] || input[i] !== input[i - 2]) {
            result += input[i];
        }
    }
    console.log(result);
    return result;
}
solution('eedaaad'); // eedaad
solution('xxxtxxx'); // xxtxx
solution('uuuuxaaaaxuuu'); // uuxaaxuu

/*
:
-   result,       
-     :
    -           ,    result
    -      ,   ,   
-  result
*/


Tugas nomor 2


Tulis fungsi solusi yang memenuhi kondisi berikut:

  • fungsi mengambil array A yang terdiri dari N integer
  • fungsi mengembalikan jumlah maksimum dua angka yang digitnya ketika ditambahkan menambahkan jumlah yang sama
  • jika tidak ada angka seperti itu dalam array, fungsi mengembalikan -1

Contoh:

  1. A = [51, 71, 17, 42], fungsi mengembalikan 93. Berikut adalah dua pasang angka, digit yang menambahkan jumlah yang sama: (51, 42) dan (17, 71). Jumlah dari pasangan (terbesar) pertama adalah 93.
  2. A = [42, 33, 60], fungsi mengembalikan 102. Menambahkan digit semua angka dalam array memberikan jumlah yang sama. 42 + 60 = 102.
  3. A = [51, 32, 43], fungsi mengembalikan -1, karena menambahkan digit semua angka memberikan jumlah yang berbeda.

Asumsi:

  • N adalah bilangan bulat dalam kisaran [1..200.000]
  • Setiap elemen array A adalah bilangan bulat dalam kisaran [1..1.000.000.000]

Keputusan:
function sumDigits(num) {
    return String(num).split('').reduce(add);
}

function add(a, b) {
    return Number(a) + Number(b);
}

function descending(a, b) {
    if (a > b) {
        return -1;
    } else if (a < b) {
        return 1;
    } else {
        return 0;
    }
}

function extractHighestTwo(arr) {
    return arr.sort(descending).slice(0, 2);
}

function solution(arr) {
    let sums = {};

    arr.forEach(function(num) {
        sum = sumDigits(num);
        if (sums[sum]) {
            sums[sum].push(num);
        } else {
            sums[sum] = [num];
        }
    });

    result = Object.values(sums)
        .filter(nums => nums.length >= 2)
        .map(extractHighestTwo)
        .map(nums => nums.reduce(add))
        .sort(descending)[0];

    console.log(result || -1);
    return result || -1;
}
solution([51, 71, 17, 42]); // 93
solution([42, 33, 60]); // 102
solution([51, 32, 43]); // -1

/*
:
-   
-    
    -     
    -        :
        -         ,  
    -        :
        -    ,  ,  ,    
-      (   "",      )
-  ,    
-   ,    ,   ,  
-       
-           -1,     
*/

/*
   :
function solution(arr) {
    let sums = {};

    arr.forEach(num => {
        sum = String(num).split('').reduce((a, b) => Number(a) + Number(b));
        
        sums[sum] ? sums[sum].push(num) : sums[sum] = [num];
    });

    result = Object.values(sums)
        .filter(nums => nums.length >= 2)
        .map(nums => nums.sort((a, b) => b - a).slice(0, 2))
        .map(nums => nums.reduce((a, b) => a + b))
        [0]

    console.log(result || -1);
    return result || -1;
}
solution([51, 71, 17, 42]); // 93
solution([42, 33, 60]); // 102
solution([51, 32, 43]); // -1
*/


Tugas nomor 3


Diberikan string S, terdiri dari N huruf "a" dan / atau "b". Dalam satu tindakan, Anda dapat mengubah huruf apa pun yang berlawanan ("a" menjadi "b" atau "b" menjadi "a").

Tulis fungsi solusi yang memenuhi kondisi berikut:

  • fungsi mengambil string S yang ditentukan
  • fungsi mengembalikan jumlah tindakan yang diperlukan untuk mendapatkan string yang tidak mengandung tiga huruf identik berturut-turut

Contoh:

  1. S = "baaaaa", fungsi mengembalikan 1. Sebuah baris yang tidak mengandung tiga huruf yang identik dalam satu baris ("baabaa") dapat diperoleh dalam satu tindakan.
  2. S = "baaabbaabbba", fungsi mengembalikan 2. Dalam dua tindakan, Anda bisa mendapatkan empat baris "valid", misalnya, "bbaabbaabbaa".
  3. S = "baabab", fungsi mengembalikan 0.

Asumsi:

  • N adalah bilangan bulat dalam kisaran [0..200.000]
  • string S hanya berisi huruf "a" dan / atau "b"

Keputusan:
function numberOfMovesForStreak(streak) {
    let length = streak.length - 2;

    while (length % 3 !== 0) {
        length++;
    }

    return length / 3;
}

function solution(input) {
    const streaks = [];
    let temp = '';

    for (let i = 0; i < input.length; i++) {
        if (input[i] === input[i - 1]) {
            temp += input[i];
        } else {
            if (temp.length > 2 && temp.length !== 0) {
                streaks.push(temp);
            }
            temp = input[i];
        }
    }
    if (temp.length > 2) {
        streaks.push(temp);
    }

    console.log(streaks.map(numberOfMovesForStreak).reduce(((a, b) => a + b), 0));
    return streaks.map(numberOfMovesForStreak).reduce(((a, b) => a + b), 0);
}
solution('baaaaa'); // 1
solution('baaabbaabbba'); // 2
solution('baabab'); // 0

/*
 ,      :
   3-5   ,   1 
 6-8   - 2 
 9-11  - 3 
:
-     ,   3     
-  ,   3     ,  
    - ""   :
        -   
        -  2
        -     ,  3
        -   3   
    -   
*/


Terima kasih atas perhatian Anda.

Selamat coding!

All Articles