Tareas de Microsoft JavaScript



¡Buen dia amigos!

Les presento tres tareas JS propuestas a los participantes en la Evaluación en línea de

Microsoft 2019. La Evaluación en línea de Microsoft es una selección preliminar de candidatos para desarrolladores. Los que hayan pasado la selección preliminar están invitados a una entrevista en línea. Encontré información en la red que asignaba exactamente una hora a la solución de problemas, pero esto no es exacto.

Le sugiero que se familiarice con las preguntas e intente resolverlas usted mismo. Comentarios detallados son bienvenidos.

Muchas gracias por resolver Matt Clark .

Entonces vamos.

Tarea número 1


Escriba una función de solución que satisfaga las siguientes condiciones:

  • la función toma una cadena S que consta de N letras del alfabeto inglés
  • la función devuelve una cadena que no contiene tres letras idénticas en una fila
  • La función elimina el número mínimo de letras de la cadena S

Ejemplos:

  1. S = "eedaaad", la función devuelve "eedaad". Se elimina una letra "a".
  2. S = "xxxtxxx", la función devuelve "xxtxx". Las mismas letras pueden aparecer en una línea más de tres veces, pero no en una fila.
  3. S = "uuuuxaaaaxuuu", la función devuelve "uuxaaxuu".

Suposiciones

  • N es un número entero en el rango [1..200,000]
  • S consiste solo en letras minúsculas [az]

Decisión:
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
*/


Tarea número 2


Escriba una función de solución que satisfaga las siguientes condiciones:

  • la función toma una matriz A que consta de N enteros
  • la función devuelve la suma máxima de dos números cuyos dígitos cuando se agregan agregan la misma cantidad
  • Si no hay tales números en la matriz, la función devuelve -1

Ejemplos:

  1. A = [51, 71, 17, 42], la función devuelve 93. Aquí hay dos pares de números, cuyos dígitos suman las mismas sumas: (51, 42) y (17, 71). La suma del primer par (el más grande) es 93.
  2. A = [42, 33, 60], la función devuelve 102. Agregar los dígitos de todos los números en la matriz da la misma cantidad. 42 + 60 = 102.
  3. A = [51, 32, 43], la función devuelve -1, ya que al sumar los dígitos de todos los números se obtienen diferentes cantidades.

Suposiciones

  • N es un número entero en el rango [1..200,000]
  • Cada elemento de la matriz A es un número entero en el rango [1..1,000,000,000]

Decisión:
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
*/


Tarea número 3


Dada la cadena S, que consiste en N letras "a" y / o "b". En una acción, puede cambiar cualquier letra al opuesto ("a" a "b" o "b" a "a").

Escriba una función de solución que satisfaga las siguientes condiciones:

  • la función toma la cadena especificada S
  • la función devuelve el número de acciones necesarias para obtener una cadena que no contiene tres letras idénticas seguidas

Ejemplos:

  1. S = "baaaaa", la función devuelve 1. Una línea que no contiene tres letras idénticas en una fila ("baabaa") se puede obtener en una sola acción.
  2. S = "baaabbaabbba", la función devuelve 2. En dos acciones, puede obtener cuatro líneas "válidas", por ejemplo, "bbaabbaabbaa".
  3. S = "baabab", la función devuelve 0.

Suposiciones

  • N es un número entero en el rango [0..200,000]
  • la cadena S contiene solo las letras "a" y / o "b"

Decisión:
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   
    -   
*/


Gracias por su atención.

¡Feliz codificación!

All Articles