JavaScript Fundamentals Course- Loops- Practical Tasks- Find Average

Здравейте- подготвям се самостоятелно за предварителния изпит на 9 апр. и имам проблем с две от задачите в Loop - едната е: Find Average, другата е : Min Max Sum Average (task 3 & 4 in prep materials). Успявам да ги подкарам в visual studio code и ми дава правилните отговори, обаче не успявам да ги подкарам в jungle системата на Telerik и искам да разбера къде греша. Може ли някой да прегледа моите решения и да ми кажи къде греша или да ми изпрати правилните решения? Благодаря предварително, Костадин.

Find Average- My solution:
let input = [
3,
2.5,
1.25,
3,
];

let print = this.print || console.log;
let gets = this.gets || ((arr, index) => () => arr[index++])(input, 0);

let x= +gets();
let s=0;

for(i=1; i<=x; i++){
s=s + input[i];
}
if(x>y.length){
print(‘number not defined’);
} else {
print((s/x).toFixed(2));}

Min Max Sum Average- my solution:
let input = [
3,
2,
-1,
4,
];

let print = this.print || console.log;
let gets = this.gets || ((arr, index) => () => arr[index++])(input, 0);

let x= +gets();
let y= input.slice(1);
let s=0;
let a=0;
let max= Math.max.apply(null,input);
let min=Math.min.apply(null,input);

for(i=1; i<=x; i++){
if(input[i]===max){
print("max= " + (input[i]).toFixed(2));}
if(input[i]===min){
print("min= " + (input[i]).toFixed(2));}
}

for(i=1; i<=x; i++){

s=s + input[i];

}

if(x>y.length){
print(‘number not defined’);
} else {
print("average= " + (s/x).toFixed(2));}
print("sum= " + s);

Здрасти!

По първата задача …
Първо – съветвам те винаги да си слагаш инпутите в кавички, защото ще стигнеш до един момент в който няма да е int и може да береш големи ядове:

let input = [
‘3’,
‘2’,
‘-1’,
‘4’,
];
После :
if(x>y.length){
print(‘number not defined’);

Тук имаш променлива ‘y’ която не е декларирана и дефинирана никъде. На вторият ред кавичките са от някакво странно естество , не са стандартните, които JavaScript приема , или при копирането на кода през Word се е получило така …
Тази проверка и без това ми се струва излишна.

Главният проблем е, че изглежда самият Judge не харесва когато работиш директно с членовете на input масива – input[i] . Очаква се, че чрез gets() ще си взимаш стойностите от него една по една все едно си ги прочел ред по ред от user input . Дано съм се изразил разбираемо.

Качвам ти кода работещ, макар, че е мечешка услуга , но единствено, за да усетиш какви са особеностите на Judge и да нямаш проблеми по-нататък.

let input = [
3,
2.5,
1.25,
3,
];
let print = this.print || console.log;
let gets = this.gets || ((arr, index) => () => arr[index++])(input, 0);
let x= +gets();
let s=0;
for(i=1; i<=x; i++)
{
s = s + ( +gets() );
}
print((s/x).toFixed(2));

За втората задача :

let y= input.slice(1);
Тук също имаш директни операции с масива ‘input’ и това е проблем.

Ето така си пълниш твой масив от ‘input’ и след това си оперираш с него и вече нямаш никакви проблеми с Judge :

for ( let i = 0 ; i < x ; ++i )
{
arr.push( +gets() );
}
let max= Math.max.apply(null,arr);
let min= Math.min.apply(null,arr);

Ето отново проблемна операция с ‘input’ : if(input[i]===max){

Също изключително важно е изхода да ти е точно както ти е даден в примера в условието на задачата.
Разменил си местата на ‘min’, ’max’, ‘sum’ и ‘average’ . Те трябва да са в точната последователност като в примера. Освен това ‘average’ трябва да е ‘avg’ .
Имаш и допълнителни интервали след знаците ‘=’ и те също са проблем за Judge. Не трябва да ги има ако не са дадени в примера.

print("average= " + (s/x).toFixed(2));}
print("sum= " + s);

И също като правиш for цикъл декларирай си винаги с let променливата с която ще итерираш. На някои места работи и без let но на някои Judge се сърди.
Това е което съм забелязал. Качвам и тук работещ код пак с уговорката, че е единствено за да се изтъкнат спецификите на Judge. То се вижда, че алгоритмически знаеш как да ги решиш задачите.

let x= +gets();
var s=0;
let a=0;
let arr = [] ;
for ( let i = 0 ; i < x ; ++i )
{
arr.push( +gets() );
}
let max= Math.max.apply(null,arr);
let min= Math.min.apply(null,arr);
print(“min=” + (min).toFixed(2));
print(“max=” + (max).toFixed(2));
for( let i = 0; i < x ; i++)
{
s= s + arr[i];
}
print(“sum=” + s.toFixed(2));
print(“avg=” + (s/x).toFixed(2));

Надявам се, че съм ти помогнал. Ако има още нещо пиши.
Поздрави!

Здравейте,

За по-голямо улеснение и удобство при споделянето на код, може да изпозлзвате --> https://pastebin.com/

Поздрави!

Супер! Благодаря много! Часта, която ми се губеше беше пълненето на масива.

Ясно. Ще го използвам за напред. Благодаря за информацията!