مهام Microsoft JavaScript



يوم جيد يا اصدقاء!

أقدم لك ثلاث مهام JS مقترحة للمشاركين في تقييم

Microsoft عبر الإنترنت لعام 2019. تقييم Microsoft عبر الإنترنت هو مجموعة أولية من المرشحين للمطورين. أولئك الذين اجتازوا الاختيار الأولي مدعوون لمقابلة عبر الإنترنت. لقد وجدت معلومات على الشبكة تم تخصيص ساعة واحدة لحل المشكلات ، ولكن هذا ليس دقيقًا.

أقترح عليك التعرف على الأسئلة ومحاولة حلها بنفسك. التعليقات التفصيلية هي موضع ترحيب.

شكرا جزيلا على حل مات كلارك .

إذن هيا بنا نذهب.

المهمة رقم 1


اكتب دالة حل تفي بالشروط التالية:

  • تأخذ الدالة سلسلة S تتكون من N حروف الأبجدية الإنجليزية
  • تقوم الدالة بإرجاع سلسلة لا تحتوي على ثلاثة أحرف متطابقة في صف
  • تقوم الدالة بإزالة الحد الأدنى من الحروف من السلسلة S

أمثلة:

  1. S = "eedaaad" ، تُرجع الدالة "eedaad". يتم حذف حرف واحد "أ".
  2. S = "xxxtxxx" ، تقوم الدالة بإرجاع "xxtxx". يمكن أن تظهر نفس الحروف في سطر أكثر من ثلاث مرات ، ولكن ليس على التوالي.
  3. S = "uuuuxaaaaxuuu" ، تُرجع الدالة "uuxaaxuu".

الافتراضات:

  • N عدد صحيح في النطاق [1.200،000]
  • يتكون S فقط من الأحرف الصغيرة [az]

القرار:
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
*/


المهمة رقم 2


اكتب دالة حل تفي بالشروط التالية:

  • تأخذ الدالة صفيف A يتكون من N أعداد صحيحة
  • تقوم الدالة بإرجاع الحد الأقصى من رقمين عند إضافة رقمين نفس الكمية
  • إذا لم يكن هناك مثل هذه الأرقام في الصفيف ، ترجع الدالة -1

أمثلة:

  1. أ = [51 ، 71 ، 17 ، 42] ، ترجع الدالة 93. إليك زوجان من الأرقام ، تضيف أرقامهما نفس المبالغ: (51 ، 42) و (17 ، 71). مجموع الزوج (الأكبر) الأول هو 93.
  2. A = [42 ، 33 ، 60] ، ترجع الدالة 102. إضافة أرقام جميع الأرقام في المصفوفة تعطي نفس المبلغ. 42 + 60 = 102.
  3. أ = [51 ، 32 ، 43] ، ترجع الدالة -1 ، حيث إن إضافة أرقام جميع الأرقام تعطي كميات مختلفة.

الافتراضات:

  • N عدد صحيح في النطاق [1.200،000]
  • كل عنصر من عناصر المصفوفة A هو عدد صحيح في النطاق [1..1،000،000،000]

القرار:
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
*/


المهمة رقم 3


بالنظر إلى السلسلة S ، التي تتكون من N الحروف "a" و / أو "b". في إجراء واحد ، يمكنك تغيير أي حرف إلى العكس ("أ" إلى "ب" أو "ب" إلى "أ").

اكتب دالة حل تفي بالشروط التالية:

  • تأخذ الدالة السلسلة المحددة S
  • تقوم الدالة بإرجاع عدد الإجراءات المطلوبة للحصول على سلسلة لا تحتوي على ثلاثة أحرف متطابقة في صف

أمثلة:

  1. S = "baaaaa" ، تقوم الدالة بإرجاع 1. يمكن الحصول على سلسلة لا تحتوي على ثلاثة أحرف متطابقة في صف ("baabaa") في إجراء واحد.
  2. S = "baaabbaabbba" ، ترجع الدالة 2. في إجراءين ، يمكنك الحصول على أربعة أسطر "صالحة" ، على سبيل المثال ، "bbaabbaabbaa".
  3. S = "baabab" ، تُرجع الدالة 0.

الافتراضات:

  • N هو عدد صحيح في النطاق [0..2000.000]
  • تحتوي السلسلة S على الأحرف "a" و / أو "b" فقط

القرار:
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   
    -   
*/


شكرآ لك على أهتمامك.

الترميز سعيدة!

All Articles