Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Преобразование массивов. Задача не для слабонервных (https://javascript.ru/forum/misc/66418-preobrazovanie-massivov-zadacha-ne-dlya-slabonervnykh.html)

timecom 14.12.2016 11:45

Преобразование массивов. Задача не для слабонервных
 
Доброго времени суток уважаемые форумчане.
Прошу помочь с решением задачи (сам не смог справиться, честно пытался).
Есть два массива с числами, пример:
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];

Буду благодарен возможным вариантам решения, а так-же подсказкам.
Заранее спасибо

ksa 14.12.2016 13:42

timecom, тебе кто задачку поставил? :D
Есть т.с. оригинальный текст?

Цитата:

Сообщение от timecom
Прошу помочь с решением задачи (сам не смог справиться, честно пытался).

Раздел "Работа" как раз для таких ситуаций. ;)

Coriolan161 14.12.2016 14:08

timecom,
Братан))) Пиши

timecom 14.12.2016 14:18

Цитата:

Сообщение от ksa (Сообщение 437980)
timecom, тебе кто задачку поставил? :D
Есть т.с. оригинальный текст?


Раздел "Работа" как раз для таких ситуаций. ;)

Задачку поставил себе сам с целью изучения языка.
Что Вас развеселило - не понятно.

timecom 14.12.2016 14:20

Цитата:

Сообщение от Coriolan161 (Сообщение 437985)
timecom,
Братан))) Пиши

Ну для начала я Вам не братан.
Иногда лучше молчать - как раз про Вас.

---
Задача как по мне вполне интересная и занимательная получилась. Кто не хочет дать подсказку - не давайте. Кто хочет - буду благодарен.

рони 14.12.2016 14:32

:-?
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)

timecom 14.12.2016 14:41

Цитата:

Сообщение от рони (Сообщение 437990)
:-?
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)

Большое человеческое спасибо.

ksa 14.12.2016 14:48

Цитата:

Сообщение от timecom
Задачку поставил себе сам с целью изучения языка.

Ну как, изучил? :D
Или будут еще "занимательные" задачки?

Dilettante_Pro 14.12.2016 14:49

Вариант
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);

timecom 14.12.2016 15:20

Цитата:

Сообщение от Dilettante_Pro (Сообщение 437993)
Вариант
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.


Часовой пояс GMT +3, время: 00:07.