آزمون

آسانسوری در یک ساختمان با تعداد طبقات M وجود دارد، ظرفیت قابل حمل توسط این آسانسور حداکثر X نفر و حداکثر Y کیلوگرم وزن است.
نیاز به برنامه ای داریم تا با دریافت مقادیر M و X و Y و اطلاعات افرادی که قصد استفاده از این آسانسور را دارند شامل وزن و طبقه مورد نظر هر فرد ، محاسبه کند که آسانسور چند بار باید در طبقات مختلف توقف کرده و سپس به طبقه همکف بازگردد.
دقت کنید آسانسور باید افراد را به ترتیب اولویت در طبقه مورد نظر پیاده کند.
مثال

M = 5 تعداد طبقات
X = 2 حداکثر ظرفیت افراد
Y = 200 حداکثر مجموع وزن افراد
A = [60,80,40] آرایه ای شامل وزن افراد
B = [2,3,5] آرایه ای شامل طبقه مورد نظر هر فرد

 با توجه به ورودی های بالا آسانسور در ابتدا میتواند تنها 2 نفر از 3 نفر را از طبقه همکف منتقل کرده و ابتدا به طبقه 2 و سپس به طبقه 3 برود ، سپس به طبقه همکف بازگردد و نفر سوم وارد آسانسور شده و او را به طبقه 5 ببرد و سپس مجددا به طبقه همکف باگردد بنابراین تعدا توقف های لازم آسانسور 5 بار می باشد و خروجی برنامه شما باید 5 باشد

زمان پاسخگویی : 90 دقیقه | زبان کدنویسی : javascript

منبع

پاسخ
/**
 * Remove duplicate items from an array
 * @param {Array} arr
 * @returns {Array}
 */
function uniq(arr) {
    return arr.reduce((prev, curr) => {
        if (prev.indexOf(curr) === -1) {
            prev = prev.concat(curr);
        }
        return prev;
    }, []);
}

/**
 * Solution to our problem
 * 
 * @param {Array.}  A Array of passengers weights
 * @param {Array.}  B Array of passenger destination floors
 * @param {Number}          M Number of floors in the building 
 * @param {Number}          X Elevator max passenger capacity
 * @param {Number}          Y Elevator max weight capacity
 * @returns {Number}        Number of total stops
 */
function solution(A, B, M, X, Y) {
    let trip = 0,
        tripWeight = 0,
        rounds = [];

    for (let i = 0, len = A.length; i < len; i += 1) {
        // If there's an unclosed trip, let’s see if we can get more people in
        if (typeof rounds[trip] !== 'undefined') {
            // Check if we have filled the capacity for the current trip,
            // if so, then close the existing trip and create a new one
            if (rounds[trip].length === X || tripWeight + A[i] > Y) {
                // Increase trip count
                trip++;
                // Reset current weight
                tripWeight = 0;
            }
        }

        // Create an empty array for the current trip
        rounds[trip] = rounds[trip] || [];
        // Push passengers destination to current trip
        rounds[trip].push(B[i]);  
        // Increase current load
        tripWeight += A[i];
    }

    // Remove duplicate floors from each trip, since
    // the elevator will make 1 stop for pessengers that
    // go to the same floor. Then add 1 (return to ground floor)
    rounds = rounds.map(round => uniq(round).length + 1);

    // To get number of total stops, we sum up
    // destination count in each trip.
    return rounds.reduce((prev, curr) => prev + curr, 0);
}

console.log(
    solution(
        [60, 80, 40],   // Weights
        [2, 3, 5],      // Destinations
        5,              // Floors
        2,              // Max passengers
        200             // Max weight
    )
); // -> 5
برخی از شرکت‌هایی که از کارلیب برای جذب نیروی متخصص استفاده می‌کنند
digikala jobs alibaba jobs snapp jobs phonepay jobs bamilo jobs irc-group jobs takhfifan jobs arvancloud jobs day insurance jobs bimebazar jobs 780.ir jobs fanap payment jobs reyhoon jobs toolgram jobs quiz of kings jobs ihome.ir jobs cobal jobs kikojas jobs karina jobs hostiran jobs daal jobs faragostar jobs hamyarwp jobs Mahannet jobs ponisha jobs clickyab jobs kheili sabz jobs espard jobs the one jobs pichak jobs bartarinha jobs lahzenegar jobs golrang system jobs farabi jobs Miare jobs jainjas jobs parspack jobs mamanpaz jobs dunro jobs pegahtech jobs virgool jobs ariagostar jobs irtrip jobs mft-niavaran jobs gsm jobs first eurasia ecommerce jobs tod jobs rajman jobs chegovara jobs peeyade jobs noavaran douran jobs congoro jobs lifeweb jobs sana gostar sabz jobs 2exim jobs cashineh jobs