MMSA - Loop - Homework


0

Привет!

Някой ще може ли да ми подскаже къде бъркам в решаването на 2-ра задача на Loops - MMSA (Min, Max, Sum, Average) of N Numbers. В конзолата, тестовете ми излизат вярно, а BgCoder ми дава 0 точки.  Моето решение е:

function solve(args) {
function sortNumber(a, b) {
return a - b;
}
var a = Number(args[0]);
var b = Number(args[1]);
var c = Number(args[2]);
var arrSequence = [a, b, c];
arrSequence.sort(sortNumber);
var min = (arrSequence[0]).toFixed(2);
var max = (arrSequence [arrSequence.length - 1]).toFixed(2);
var sum = (a + b + c).toFixed(2);
var avg = ((a + b + c) / args.length).toFixed(2);

console.log('min=' + min);
console.log('max=' + max);
console.log('sum=' + sum);
console.log('avg=' + avg);
}




Отговори



0

Да се включа и аз със въпрос.

БГкодер отказва да ми приеме кода, при положение, че изглежда трябва абсолютно да си работи.

 бгкодер отказва да приеме "toFixed"поради някаква причина:

БГкодер казва:

evalmachine.<anonymous>:20
    console.log("min=" + min.toFix...
// Copy Code Snippet Herefunction solve(args) { let min = args[0], max = args[0], sum = args[0], avg, i; for ( i = 1; i < args.length; i += 1 ) { if (args[i]<min) { min = args[i]; } if (args[i]>max) { max = args[i]; } sum = sum + args[i]; } avg = sum / args.length; console.log("min=" + min.toFixed(2)); console.log("max=" + max.toFixed(2)); console.log("sum=" + sum.toFixed(2)); console.log("avg=" + avg.toFixed(2)); }



от Smytt_kp (115 точки)


0

При декларирането на променливите защо ползващ args[0] ? Трябва да е :

function solve(args) {
   var min = 10000,
        max = -10000,
        sum = 0,
        avg = 0;

За да ти сработи toFixed в тялото if условието сложи един плюс - min= + args[i]  и  max= + args[i].


от peter_85 (279 точки)

0

1) args[0] ползвам, защото е същото. приемам една стойност за минимална и сравнявам всеки елемент на масива с нея и замествам, ако намеря по-малка. По същия начин за max.

2) toFixed не ми е в if... :( Пропуснах да кажа, че в конзолата си работи без проблем. Само в кодера вади някаква грешка


от Smytt_kp (115 точки)



0
Нулевите тестове са малко подлъгващи. В самите тестове може да получиш повече от 3 числа и ще трябва да използваш един for loop до args.length :)

от plmn.tnsv (130 точки)


1
Danke schön :)



0

Може и да греша, защото не разбирам напълно кода ти, НО a,b и c са три параметъра, а в условието пише,че те може да са между 1 и 1000; Затова 2та нулеви излизат, а нататък е грешно. 

Домашното е от темата цикли, пробвай с цикъл for през целия args и търсиш най-голяма, най-малка и т.н.

Също така има готови методи за пресмятане на макс и мин елементи от масив, може да погледнеш Math.max ТУК , Math.min e аналогично :)


от svrakata (591 точки)


1
Много благодаря :)



0

Здравеайте колеги. Имам няколко въпроса, първия е: защо следния код изкарва 40/100 в бгкодер?

function solve(args){ let min = 0, max = 0, sum = 0, avg = 0; for (let i = 0; i < args.length; i+=1){ if (+args[i] < min){ min = +args[i]; } if (+args[i] > min){ max = +args[i]; } sum+= +args[i]; } avg = sum / args.length; console.log('min=' + min.toFixed(2)); console.log('max=' + max.toFixed(2)); console.log('sum=' + sum.toFixed(2)); console.log('avg=' + avg.toFixed(2)); }
И втория ми въпрос е, понеже видях, че можем да използваме Math.max и Math.min , на които можем да им подаваме масиви, обаче като в условията входа ни е числа под формата на стрингове, а пък тези функции работят директно с числа, как да ги използваме?


от olebg (598 точки)


0
+-сът преди елементите на args масива парсва стринг към число. Може да използваш и parseInt() или parseFloat(). 

от Slavka74 (436 точки)

1

При декларацията на променливите направи min =10000, а max = -10000 и ще стане. Това са ограниченията в задачата.

По втория въпрос можеш да направиш в нов масив var array = args.map(Number)

По този начин създаваш нов масив с тип Number.


от peter_85 (279 точки)



0

Имаме масив от N брой стрингове и след като го превърнем в масив от числа (arr = arr.map(Number);):

Сортираме: arr=arr.sort(function(a,b){return a-b}); //от малко към голямо или b-a   от голямо към малко число

Сума : let sum = arr.reduce((a, b) => a + b, 0); 


от stanly65 (49 точки)


0

Здравейте, някой може ли да помогне с идея къде бъркам? 

    function solve(args) {
         var max,
               min,
               sum = 0,
               avg,
               index,
               arr = args.map(Number);

     for (index in arr) {
         max = Math.max(...arr);
         min = Math.min(...arr);
         sum += arr[index];
         avg = sum / arr.length;
     };
    console.log('min=' + min.toFixed(2) + '\n' +
                       'max=' + max.toFixed(2) + '\n' +
                       'sum=' + sum.toFixed(2) + '\n' +
                       'avg=' + avg.toFixed(2));
     };




0

Time limit ли ти дава?

Подозирам, че е от spread operator (...array), защото и на мен на една от задачите ми дава time limit като го ползвам


от peter_85 (279 точки)

0
Не, runtime error, а на конзолата няма проблеми - всичко си работи.




1

Ето работещ код на 100% :

function solve(args){
    let array = args.map(Number),
        min = Math.min(...array),
        max = Math.max(...array),
        sum = 0,
        avg = 0;

    for (let i = 0; i < args.length; i+=1){
        sum+= +args[i];
    }
    avg = sum / args.length;

    console.log('min=' + min.toFixed(2));
    console.log('max=' + max.toFixed(2));
    console.log('sum=' + sum.toFixed(2));
    console.log('avg=' + avg.toFixed(2));
}


от webdesign (52 точки)


0
Блaгодаря!



0
Някой изкарал ли е 100/100 като е използвал JavaScript(NodeJS)? С няколко различни решения стигнах до 100 на JavaScript code (ES 2015), но на Node e греда.



0
А какъв е смисъла да се мъчиш над стара версия? :D

от olebg (598 точки)


0
Ето и моят код доста опростен ( да отбележа ,че не работи защото не принти както трябва иначе логиката си е ок,сега ще фиксна принтенето, но не става идеи защо .... :) ) : 
function solve(args) {
  let a = +args[0],
      b = +args[1],
      c = +args[2];

if ( (a && b && c) < 1000 && (a && b && c) > -1000 ){
    if ( a > b && a > c && b > c){
        console.log('min='+ c.toFixed(2));
        console.log('max='+ a.toFixed(2));
        console.log('sum='+(a+b+c).toFixed(2));
        console.log('avg=' +((a+b+c)/3).toFixed(2));
    }
    else if ( a > b && a > c && c > b){
        console.log('min='+ b.toFixed(2));
        console.log('max='+ a.toFixed(2));
        console.log('sum='+(a+b+c).toFixed(2));
        console.log('avg=' +((a+b+c)/3).toFixed(2));
    }
    else if ( b > a && b > c && a > c){
        console.log('min='+ c.toFixed(2));
        console.log('max='+ b.toFixed(2));
        console.log('sum='+(a+b+c).toFixed(2));
        console.log('avg=' +((a+b+c)/3).toFixed(2));
    }
    else if ( b > a && b > c && c > a){
        console.log('min='+ a.toFixed(2));
        console.log('max='+ b.toFixed(2));
        console.log('sum='+(a+b+c).toFixed(2));
        console.log('avg=' +((a+b+c)/3).toFixed(2));
    }
    else if ( c > a && c > b && a > b){
        console.log('min='+ b.toFixed(2));
        console.log('max='+ c.toFixed(2));
        console.log('sum='+(a+b+c).toFixed(2));
        console.log('avg=' +((a+b+c)/3).toFixed(2));
    }
    else if ( c > a && c > b && b > a){
        console.log('min='+ a.toFixed(2));
        console.log('max='+ c.toFixed(2));
        console.log('sum='+(a+b+c).toFixed(2));
        console.log('avg=' +((a+b+c)/3).toFixed(2));
    }
}
}



0
Това е от лекцията за Цикли, а не виждам да има цикъл. Идеята на домашните е да тренираш наученото от лекцията.


1

По условие: 

1 <= N <= 1000

т.е. масив с три елемента си е частен случай, явно само в нулевите тестове. Затова си ви трябва цикъл от 0 до N-1

от Slavka74 (436 точки)



0
Колеги някой има ли успех с последната задача  Hex to Decimal ? Намирам няколко решения за Decimal to Hex, но не успявам да ги обърна.



0

Ето

function solve (args) { let hex = args[0], dec = 0, temp = 0, len = +hex.length, reversedString = reverse(hex); for (let i = 0; i <= len - 1; i += 1) { switch (reversedString[i]) { case 'A': temp = 10; break; case 'B': temp = 11; break; case 'C': temp = 12; break; case 'D': temp = 13; break; case 'E': temp = 14; break; case 'F': temp = 15; break; default: temp = reversedString[i]; break; } dec += temp * Math.pow(16, i); } console.log(dec); function reverse (str) { let result = ''; for (let i = str.length - 1; i >= 0; i--) result += str[i]; return result; } }


от olebg (598 точки)


0
Здравейте след около 60-70 опита с 0/100, успях да ги докарам 100/100. Проблема идваше от там, че числата идват като стриг и самото конвертиране прави мизерии. Пробвах с к'во ли не и ето го решението, дано помогне на някого :)
// Copy Code Snippet Here function solve(args){ let min = -Infinity, max = -Infinity, sum = 0, avg = 0; for(let i = 0; i < args.length; i +=1){ sum += +args[i]; if(min > (+args[i])){ min = (+args[i]); } if(max < (+args[i])){ max = (+args[i]); } } avg = sum / arr.length; console.log('min=' + min.toFixed(2)); console.log('max=' + max.toFixed(2)); console.log('sum=' + sum); console.log('avg=' + avg); }

от k_kaneva (127 точки)