Tarefas do Microsoft JavaScript



Bom dia amigos

Apresento a você três atribuições de JS oferecidas aos participantes da Avaliação Online da Microsoft de 2019.

A Avaliação Online da Microsoft é uma seleção preliminar de candidatos a desenvolvedores. Aqueles que passaram na seleção preliminar são convidados para uma entrevista on-line. Encontrei informações na rede que exatamente uma hora foi alocada para a solução de problemas, mas isso não é exato.

Sugiro que você se familiarize com as perguntas e tente resolvê-las. Comentários detalhados são bem-vindos.

Muito obrigado por resolver Matt Clark .

Então vamos.

Tarefa número 1


Escreva uma função de solução que atenda às seguintes condições:

  • a função usa uma string S que consiste em N letras do alfabeto inglês
  • a função retorna uma string que não contém três letras idênticas em uma linha
  • A função remove o número mínimo de letras da sequência S

Exemplos:

  1. S = "eedaaad", a função retorna "eedaad". Uma letra "a" é excluída.
  2. S = "xxxtxxx", a função retorna "xxtxx". As mesmas letras podem ocorrer em uma linha mais de três vezes, mas não em uma linha.
  3. S = "uuuuxaaaaxuuu", a função retorna "uuxaaxuu".

Premissas:

  • N é um número inteiro no intervalo [1..200.000]
  • S consiste apenas em letras minúsculas [az]

Decisão:
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
*/


Tarefa número 2


Escreva uma função de solução que atenda às seguintes condições:

  • a função pega uma matriz A que consiste em N números inteiros
  • a função retorna a soma máxima de dois números cujos dígitos, quando adicionados, adicionam a mesma quantidade
  • se não houver esses números na matriz, a função retornará -1

Exemplos:

  1. A = [51, 71, 17, 42], a função retorna 93. Aqui estão dois pares de números, cujos dígitos adicionam as mesmas somas: (51, 42) e (17, 71). A soma do primeiro par (maior) é 93.
  2. A = [42, 33, 60], a função retorna 102. A adição dos dígitos de todos os números na matriz fornece a mesma quantidade. 42 + 60 = 102.
  3. A = [51, 32, 43], a função retorna -1, pois a adição dos dígitos de todos os números fornece quantidades diferentes.

Premissas:

  • N é um número inteiro no intervalo [1..200.000]
  • Cada elemento da matriz A é um número inteiro no intervalo [1..1.000.000.000]

Decisão:
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
*/


Tarefa número 3


Dada a sequência S, composta por N letras "a" e / ou "b". Em uma ação, você pode alterar qualquer letra para o oposto ("a" para "b" ou "b" para "a").

Escreva uma função de solução que atenda às seguintes condições:

  • a função usa a sequência especificada S
  • a função retorna o número de ações necessárias para obter uma sequência que não contém três letras idênticas em uma linha

Exemplos:

  1. S = "baaaaa", a função retorna 1. Uma sequência que não contém três letras idênticas em uma linha ("baabaa") pode ser obtida em uma ação.
  2. S = "baaabbaabbba", a função retorna 2. Em duas ações, você pode obter quatro linhas "válidas", por exemplo, "bbaabbaabbaa".
  3. S = "baabab", a função retorna 0.

Premissas:

  • N é um número inteiro no intervalo [0..200.000]
  • a string S contém apenas as letras "a" e / ou "b"

Decisão:
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   
    -   
*/


Obrigado pela atenção.

Feliz codificação!

All Articles