Microsoft JavaScript-Aufgaben



Guten Tag, Freunde!

Ich prÀsentiere Ihnen drei JS-Aufgaben, die den Teilnehmern des Microsoft Online Assessment 2019 angeboten werden. Das

Microsoft Online Assessment ist eine vorlĂ€ufige Auswahl von Kandidaten fĂŒr Entwickler. Diejenigen, die die Vorauswahl bestanden haben, werden zu einem Online-Interview eingeladen. Ich habe im Netzwerk Informationen gefunden, dass genau eine Stunde fĂŒr die Lösung von Problemen vorgesehen war, aber dies ist nicht korrekt.

Ich schlage vor, Sie machen sich mit den Fragen vertraut und versuchen, sie selbst zu lösen. Detaillierte Kommentare sind willkommen.

Vielen Dank, dass Sie Matt Clark gelöst haben .

So lass uns gehen.

Aufgabe Nummer 1


Schreiben Sie eine Lösungsfunktion, die die folgenden Bedingungen erfĂŒllt:

  • Die Funktion verwendet eine Zeichenfolge S, die aus N Buchstaben des englischen Alphabets besteht
  • Die Funktion gibt eine Zeichenfolge zurĂŒck, die nicht drei identische Buchstaben in einer Zeile enthĂ€lt
  • Funktion entfernt die minimale Anzahl von Buchstaben aus Zeichenfolge S.

Beispiele:

  1. S = "eedaaad", die Funktion gibt "eedaad" zurĂŒck. Ein Buchstabe "a" wird gelöscht.
  2. S = "xxxtxxx", die Funktion gibt "xxtxx" zurĂŒck. Dieselben Buchstaben können mehr als dreimal in einer Zeile vorkommen, jedoch nicht in einer Reihe.
  3. S = "uuuuxaaaaxuuu", die Funktion gibt "uuxaaxuu" zurĂŒck.

Annahmen:

  • N ist eine ganze Zahl im Bereich [1..200.000]
  • S besteht nur aus Kleinbuchstaben [az]

Entscheidung:
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
*/


Aufgabe Nummer 2


Schreiben Sie eine Lösungsfunktion, die die folgenden Bedingungen erfĂŒllt:

  • Die Funktion verwendet ein Array A, das aus N ganzen Zahlen besteht
  • Die Funktion gibt die maximale Summe von zwei Zahlen zurĂŒck, deren Ziffern beim HinzufĂŒgen den gleichen Betrag hinzufĂŒgen
  • Wenn das Array keine solchen Zahlen enthĂ€lt, gibt die Funktion -1 zurĂŒck

Beispiele:

  1. A = [51, 71, 17, 42], die Funktion gibt 93 zurĂŒck. Hier sind zwei Zahlenpaare, deren Ziffern die gleichen Summen addieren: (51, 42) und (17, 71). Die Summe des ersten (grĂ¶ĂŸten) Paares betrĂ€gt 93.
  2. A = [42, 33, 60], die Funktion gibt 102 zurĂŒck. Das HinzufĂŒgen der Ziffern aller Zahlen im Array ergibt den gleichen Betrag. 42 + 60 = 102.
  3. A = [51, 32, 43], die Funktion gibt -1 zurĂŒck, da das Addieren der Ziffern aller Zahlen unterschiedliche BetrĂ€ge ergibt.

Annahmen:

  • N ist eine ganze Zahl im Bereich [1..200.000]
  • Jedes Element von Array A ist eine Ganzzahl im Bereich [1..1.000.000.000].

Entscheidung:
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
*/


Aufgabe Nummer 3


Gegeben ist die Zeichenfolge S, bestehend aus N Buchstaben "a" und / oder "b". In einer Aktion können Sie einen beliebigen Buchstaben in das Gegenteil Àndern ("a" in "b" oder "b" in "a").

Schreiben Sie eine Lösungsfunktion, die die folgenden Bedingungen erfĂŒllt:

  • Die Funktion ĂŒbernimmt die angegebene Zeichenfolge S.
  • Die Funktion gibt die Anzahl der Aktionen zurĂŒck, die erforderlich sind, um eine Zeichenfolge abzurufen, die nicht drei identische Buchstaben in einer Zeile enthĂ€lt

Beispiele:

  1. S = "baaaaa", die Funktion gibt 1 zurĂŒck. Eine Zeichenfolge, die nicht drei identische Buchstaben in einer Reihe enthĂ€lt ("baabaa"), kann in einer Aktion erhalten werden.
  2. S = "baaabbaabbba", die Funktion gibt 2 zurĂŒck. In zwei Aktionen können Sie vier "gĂŒltige" Zeilen erhalten, z. B. "bbaabbaabbaa".
  3. S = "baabab", die Funktion gibt 0 zurĂŒck.

Annahmen:

  • N ist eine ganze Zahl im Bereich [0..200.000]
  • Zeichenfolge S enthĂ€lt nur die Buchstaben "a" und / oder "b"

Entscheidung:
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   
    -   
*/


Vielen Dank fĂŒr Ihre Aufmerksamkeit.

Viel Spaß beim Codieren!

All Articles