From 28890adf52414c172b3749530991574e7a90ebe3 Mon Sep 17 00:00:00 2001 From: dtr200 Date: Sat, 26 Jun 2021 15:21:05 +0300 Subject: [PATCH] Homework-2: task G has been completed --- homework-lecture-2/biggest-numbers-mult.js | 85 ++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 homework-lecture-2/biggest-numbers-mult.js diff --git a/homework-lecture-2/biggest-numbers-mult.js b/homework-lecture-2/biggest-numbers-mult.js new file mode 100644 index 0000000..653a2aa --- /dev/null +++ b/homework-lecture-2/biggest-numbers-mult.js @@ -0,0 +1,85 @@ +function getBiggestNumbersMult(list){ + list = list.split(' ').map(num => + Number(num)); + + if(list.length === 2){ + return list[0] > list[1] ? + `${list[1]} ${list[0]}` : + `${list[0]} ${list[1]}`; + } + + // Считаю количество минусовых чисел + + let negative = []; + let negativePos = []; + let notNegative = false; + + for(let i = 0; i < list.length; i++){ + if(list[i] < 0){ + negative.push(list[i]); + negativePos.push(i); + } + } + + // Если негативное только одно, тогда убираю из массива. + + if(negative.length === 1){ + list.splice(negativePos[0], 1); + notNegative = true; + } + + /* Ищу наибольшие значения или наименьшие среди минусовых. + В sign приходит false если работаю с минусовыми и + true для плюсовых */ + + const getBigger = (nums, sign) => { + let bigger = nums[0]; + biggerPos = 0; + for(let i = 1; i < nums.length; i++){ + const current = nums[i]; + if( (!sign && current < bigger) || + (sign && current > bigger) ){ + bigger = current; + biggerPos = i; + } + } + return biggerPos; + } + + const firstNegativePos = notNegative ? null : + getBigger(negative, false); + const firstPositivePos = getBigger(list, true); + + const firstNegative = negative[firstNegativePos]; + const firstPositive = list[firstPositivePos]; + + // Удаляю наибольшие значения чтобы не мешались + negative.splice(firstNegativePos, 1); + list.splice(firstPositivePos, 1); + + const secondNegativePos = notNegative ? null : + getBigger(negative, false); + const secondPositivePos = getBigger(list, true); + + const secondNegative = negative[secondNegativePos]; + const secondPositive = list[secondPositivePos]; + + const negativeMult = firstNegative * secondNegative; + const positiveMult = firstPositive * secondPositive; + + const getResult = (first, second) => { + return first > second ? + `${second} ${first}` : + `${first} ${second}`; + } + + let result; + if(negativeMult > positiveMult) + result = getResult(firstNegative, secondNegative); + else + result = getResult(firstPositive, secondPositive); + + return result; +} + +getBiggestNumbersMult('-4 3 -5 2 5'); \ No newline at end of file