Нужна помощь в решении задачи

178
30 июня 2017, 08:44

Собственно выполняю задание на Codewars(Ссылка) и столкнулся с проблемой: что при тестировании кода, не всё хорошо...

Описание Здесь описаны методы: для Сложения(add), вычитания(subtract), умножения(Dot), и возведения в квадрат(norm) пример с Codewars:

var a = new Vector([1,2,3]);
var b = new Vector([3,4,5]);
var c = new Vector([5,6,7,8]);
a.add(b); // should return Vector([4,6,8])
a.subtract(b); // should return Vector([-2,-2,-2])
a.dot(b); // should return 1*3+2*4+3*5 = 26
a.norm(); // should return sqrt(1^2+2^2+3^2)=sqrt(14)
a.add(c); // throws an error

function Vector(arr) { 
   this.arr = arr; 
} 
 
Vector.prototype = { 
 
    add: function(v){ 
            if(this.arr.length != v.length){ 
                throw new Error('Size mismatch'); 
            } 
            var add_res = []; 
            for(var i = 0; i < this.arr.length; i++){ 
                add_res.push(this.arr[i] +v[i]); 
            } 
            return add_res; 
    }, 
 
    subtract: function(v){ 
            if(this.arr.length != v.length){ 
                throw new Error('Size mismatch'); 
            } 
            var subtract_res = []; 
            for(var i = 0; i < this.arr.length; i++){ 
                subtract_res.push(this.arr[i] - v[i]); 
            } 
            return subtract_res; 
    }, 
 
    dot: function(v){ 
        if(this.arr.length != v.length){ 
                throw new Error('Size mismatch'); 
            } 
            var dot_res = 0; 
            for(var i = 0; i < this.arr.length; i++){ 
                dot_res += (this.arr[i] *= v[i]); 
            } 
            return dot_res; 
    }, 
 
    norm: function(v){ 
        var res = 0; 
        for(var i = 0; i < this.arr.length; i++){ 
            res += Math.pow(this.arr[i], 2); 
        }    
        return Math.sqrt(res);      
    }, 
    equals: function(v){ 
        if(this.toString() == v.toString()){ 
            return true; 
        } 
        return false; 
    }, 
    toString: function () { 
        return '(' + this.arr.join(',') + ')'; 
    }, 
}
при проверке ругается на функцию checkSize. Объясните где я допустил ошибку?)

Answer 1

Параметром методов ожидается другой Vector, а у него нет свойства length, как и доступа к элементам массива через индексер.

Vector.prototype = {
  size: function() {
    return this.arr.length;
  },
  component: function(index) {
    return this.arr[index];
  },
  add: function(v) {
    if (this.size() != v.size()) {
      throw new Error('Size mismatch');
    }
    var result = [];
    for(var i = 0; i < this.arr.length; i++) {
        result.push(this.arr[i] + v.component(i));
    }
    return new Vector(result);
  },
  ...
}
READ ALSO
Почему не выполняется код на Developer Server

Почему не выполняется код на Developer Server

Всем привет! Есть код для оповещений он работает, все ок

168
Анимация движения картинки,когда по ней водят мышкой

Анимация движения картинки,когда по ней водят мышкой

Есть пример анимации https://themeislecom/demo/?theme=Parallax%20One Как создать такое "движение" картинки? Выяснил, что там используется transform-style:preserve-3d и несколько...

293
Как понять, что шрифт отрендерился

Как понять, что шрифт отрендерился

Как понять, что загруженный шрифт отрендерился? Не загрузился, а именно отрендерился

291
htaccess убираем php ошибка одинаковых имен папок и файлов

htaccess убираем php ошибка одинаковых имен папок и файлов

Здравствуйте, как все знают чтобы убрать у названия файла его расширение надо в htaccess ввести следующее

301