14.12.2016, 11:45
|
Интересующийся
|
|
Регистрация: 16.08.2015
Сообщений: 18
|
|
Преобразование массивов. Задача не для слабонервных
Доброго времени суток уважаемые форумчане.
Прошу помочь с решением задачи (сам не смог справиться, честно пытался).
Есть два массива с числами, пример:
arrOne [0, 9, 10, 11, 12, 20, 28, 32, 33, 47, 65, 69]
arrTwo [8, 14, 15, 16, 17, 18, 19, 31, 35, 36, 37, 58, 68, 73]
Нужно преобразовать эти массивы так, чтобы:
1.Первое значение элемента первого массива было меньше значения первого элемента второго массива, второе значение элемента первого массива меньше значения второго элемента второго массива и так далее
2. Оставлять только максимально приближенные к значению, т.е. 0 ->8 = ok, 9-14,10-14,11-14 -> не ok, потому как есть 12
В идеале нужно массивы привести к виду:
arrOne = [0, 12, 28, 33, 47, 65, 69];
arrTwo = [8, 14, 31, 35, 58, 68, 73];
Буду благодарен возможным вариантам решения, а так-же подсказкам.
Заранее спасибо
|
|
14.12.2016, 13:42
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
timecom, тебе кто задачку поставил?
Есть т.с. оригинальный текст?
Сообщение от timecom
|
Прошу помочь с решением задачи (сам не смог справиться, честно пытался).
|
Раздел "Работа" как раз для таких ситуаций.
|
|
14.12.2016, 14:08
|
|
Профессор
|
|
Регистрация: 21.11.2015
Сообщений: 440
|
|
timecom,
Братан))) Пиши
|
|
14.12.2016, 14:18
|
Интересующийся
|
|
Регистрация: 16.08.2015
Сообщений: 18
|
|
Сообщение от ksa
|
timecom, тебе кто задачку поставил?
Есть т.с. оригинальный текст?
Раздел "Работа" как раз для таких ситуаций.
|
Задачку поставил себе сам с целью изучения языка.
Что Вас развеселило - не понятно.
Последний раз редактировалось timecom, 14.12.2016 в 14:23.
|
|
14.12.2016, 14:20
|
Интересующийся
|
|
Регистрация: 16.08.2015
Сообщений: 18
|
|
Сообщение от Coriolan161
|
timecom,
Братан))) Пиши
|
Ну для начала я Вам не братан.
Иногда лучше молчать - как раз про Вас.
---
Задача как по мне вполне интересная и занимательная получилась. Кто не хочет дать подсказку - не давайте. Кто хочет - буду благодарен.
|
|
14.12.2016, 14:32
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
var arrOne = [0, 9, 10, 11, 12, 20, 28, 32, 33, 47, 65, 69],
arrTwo = [8, 14, 15, 16, 17, 18, 19, 31, 35, 36, 37, 58, 68, 73];
function foo(e, f) {
var b = [],
d = [f[0]];
e.forEach(function(c,i) {
a = d.slice(-1)[0];
c > a && (arrTwo.some(function(b) {
return b > c && d.push(b)
}), c = e[i - 1], b.push(c))
});
b.push(e.slice(-1)[0]);
return {
one: b,
two: d
}
};
var res = foo(arrOne, arrTwo);
alert(res.one + '\n'+res.two)
|
|
14.12.2016, 14:41
|
Интересующийся
|
|
Регистрация: 16.08.2015
Сообщений: 18
|
|
Сообщение от рони
|
var arrOne = [0, 9, 10, 11, 12, 20, 28, 32, 33, 47, 65, 69],
arrTwo = [8, 14, 15, 16, 17, 18, 19, 31, 35, 36, 37, 58, 68, 73];
function foo(e, f) {
var b = [],
d = [f[0]];
e.forEach(function(c,i) {
a = d.slice(-1)[0];
c > a && (arrTwo.some(function(b) {
return b > c && d.push(b)
}), c = e[i - 1], b.push(c))
});
b.push(e.slice(-1)[0]);
return {
one: b,
two: d
}
};
var res = foo(arrOne, arrTwo);
alert(res.one + '\n'+res.two)
|
Большое человеческое спасибо.
|
|
14.12.2016, 14:48
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от timecom
|
Задачку поставил себе сам с целью изучения языка.
|
Ну как, изучил?
Или будут еще "занимательные" задачки?
|
|
14.12.2016, 14:49
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Вариант
var arrOne = [0, 9, 10, 11, 12, 20, 28, 32, 33, 47, 65, 69],
arrTwo = [8, 14, 15, 16, 17, 18, 19, 31, 35, 36, 37, 58, 68, 73],
i = 0, j = 0;
while (i < arrOne.length) {
if(arrOne[i] < arrTwo[j]) {
while(arrOne[i + 1] < arrTwo[j]) { arrOne.splice(i, 1);}
i++; j++;
} else {
arrTwo.splice(j, 1);
}
}
alert(arrOne + '\n' + arrTwo);
|
|
14.12.2016, 15:20
|
Интересующийся
|
|
Регистрация: 16.08.2015
Сообщений: 18
|
|
Сообщение от Dilettante_Pro
|
Вариант
var arrOne = [0, 9, 10, 11, 12, 20, 28, 32, 33, 47, 65, 69],
arrTwo = [8, 14, 15, 16, 17, 18, 19, 31, 35, 36, 37, 58, 68, 73],
i = 0, j = 0;
while (i < arrOne.length) {
if(arrOne[i] < arrTwo[j]) {
while(arrOne[i + 1] < arrTwo[j]) { arrOne.splice(i, 1);}
i++; j++;
} else {
arrTwo.splice(j, 1);
}
}
alert(arrOne + '\n' + arrTwo);
|
Спасибо). Примерно так я пытался делать, только через for.
|
|
|
|