21.02.2017, 21:27
|
Аспирант
|
|
Регистрация: 30.06.2014
Сообщений: 56
|
|
Вычисление елемента в массиве и отбор за заданными условиями
Сразу хочу предупредить, что для того, что я описываю, Array.find() или что-то типа того совсем не подойдут.
А теперь к сути. У меня есть массив:
[
[1,2],
[8,9],
[1,5]
]
(на самом деле в моем случае массив немножко не такой, но суть та же.)
Мне нужно выбрать из массива такой "подмассив", сумма элементов которого дает наибольший результат. При чем нужно возвращать не сумму, а сами числа, из которых она сформирована.
Например:
blablabla( [ [1,60], [58,60] ] ) == [1,60] (ибо 58-60=2 < 1-60=59)
Последний раз редактировалось TimohaP, 21.02.2017 в 22:04.
Причина: орфография
|
|
21.02.2017, 21:40
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
TimohaP,
function a(d) {
return d.reduce(function(b, c) {
return Math.abs(b[0] - b[1]) > Math.abs(c[0] - c[1]) ? b : c
})
};
alert(a([ [1,60], [58,60] ]))
alert(a([ [1,2],[8,9],[1,5]]))
|
|
21.02.2017, 21:44
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
сума сумма!!! а на самом деле модуль разницы элементов
|
|
21.02.2017, 22:03
|
Аспирант
|
|
Регистрация: 30.06.2014
Сообщений: 56
|
|
рони,
окей, модуль разницы, но на самом деле задача несколько посложнее будет. я просто думал, что это аналогично, но нет.
в массиве хранятся значения координат x0, y0, x1, y1, и среди них нужно выбрать те, которые дадут наибольшую длину.
формула длины: Math.sqrt( Math.pow(x1-x0, 2) + Math.pow(y1-y0, 2) )
вот к примеру:
longest ( [
[ 0,0,20,20 ],
[ 0,0,10,10 ]
] ) = [0,0,20,20]
|
|
21.02.2017, 22:26
|
Аспирант
|
|
Регистрация: 30.06.2014
Сообщений: 56
|
|
окей, я уже разобрался. может не самое адекватное решение, но оно работает
var array = [
[ 0,0,20,20 ],
[ 0,0,10,10 ]
];
function longest(array){
var lengths = array.map( function(i){ return Math.sqrt( Math.pow(i[2]-i[0], 2) + Math.pow(i[3]-i[1], 2) ) } );
return array[ lengths.indexOf( Math.max.apply(null, lengths) ) ];
}
alert( longest(array) );
|
|
21.02.2017, 22:44
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
TimohaP,
function g(x0, y0, x1, y1)
{
return Math.sqrt( Math.pow(x1-x0, 2) + Math.pow(y1-y0, 2) )
}
function a(d) {
return d.reduce(function(b, c) {
return g.apply(null,b) > g.apply(null,c) ? b : c
})
};
var array = [
[ 0,0,20,20 ],
[ 0,0,10,10 ]
];
alert(a(array))
|
|
|
|