Вопрос из задачника

295
11 апреля 2022, 07:40

Число называется счастливым если при складывании, суммы обеих сторон числа ровны друг другу.На пример։A=1230 считается счастливым потому что сумма первой половины числа ровна второй половине (1+2 | 3+0).Нужно написать функцию solution которое получает число и возвращает true если число счастливое, false в обратном случае.

Нужно реализовать код под 4 варианта

  • на входе:x=[1230],на выходе:true
  • на входе:x=[239017],на выходе:false
  • на входе:x=[134008],на выходе:true
  • на входе:x=[10],на выходе:false

x=[239017]; 
   function solution(x){ 
        let newArr = []; 
    for(let i=0;i<x.length;i++){ 
        if (i % 2 == 0){ 
            let temp = x[i] + x[i+1]; 
            newArr.push(temp); 
        } 
        if(newArr[i]===newArr[i+1]){ 
            return true 
        }  
            return false 
          
    } 
   } 
    console.log(solution(x))

Как реализовать код правильно

Answer 1

А число в качестве аргумента функции передаётся именно как массив?

Тогда как-то так можно сделать:

function solution(num) { 
  let x = num.join(''); //преобразуем массив в строку 
  let left = 0; 
  let right = 0; 
  //в цикле проходим по строке с двух сторон 
  for(let i = 0, j = x.length-1; i < x.length/2; i++, j--) { 
    left += Number(x[i]); //складываем левую часть 
    right += Number(x[j]); //складываем правую часть 
  } 
  if(left == right) { 
    return true; 
  } 
  else { 
    return false; 
  } 
} 
 
console.log(solution([134008]));

Answer 2

Как-то так получилось, проверки корректности входных данных нет:

let test = x => 0 === String(x).split('')   
                               .map((x, i, a) => x * (a.length/2 > i ? -1 : 1)) 
                               .reduce((a, x) => a + x); 
 
[1230, 239017, 134008, 10].forEach(x => console.log(x, ' -> ', test(x)));

В этом решении число представляется как строка, разбивается на символы, после чего каждый из символов приводится к числу, а те числа, индекс которых в исходном масиве больше половины длины массива, умножаются на -1. Потом сумма всех этих элементов сравнивается с 0.

Answer 3

Я вот такое решение нашёл :)

//на входе:x=[1230],на выходе:true 
//на входе:x=[239017],на выходе:false 
//на входе:x=[134008],на выходе:true 
//на входе:x=[10],на выходе:false 
 
let xn = [1230, 239017, 134008, 10]; 
 
function solution(x) { 
  x.forEach(elem => { 
    let a = elem.toString().split(''); 
    let res1 = a.slice(0, a.length / 2).reduce((acc, cur) => +acc + +cur); 
    let res2 = a.slice(a.length / 2, a.length).reduce((acc, cur) => +acc + +cur) 
    console.log(elem, res1 === res2); 
  }); 
} 
 
solution(xn);

Answer 4
function div(a, b) {
  return (a - a % b) / b
}
function solution(num) {
  let len = num.toString().length;
  const half = div(len, 2);
  let a = 0;
  let b = 0;
  let count = 0;
  let flag = true;
  while (num > 0) {
    if (count === half) {
      flag = !flag;
      if (len % 2 > 0) {
        num = div(num, 10);
      }
    }
    if (flag) {
      b += num % 10;
    } else {
      a += num % 10;
    }
    num = div(num, 10);
    count++;
  }
  return a === b;
}
console.log(solution(1230));  // true
console.log(solution(239017));  // false
console.log(solution(134008));  // true
console.log(solution(10));  // false
console.log(solution(112));  // false
console.log(solution(35108));  // true
Answer 5

function isHappy(number) { 
  const arrayOfNumbers = String(number).split(''); 
 
  if (arrayOfNumbers.length % 2 !== 0) return false; 
 
  const average = arrayOfNumbers.length / 2; 
 
  const leftSideSum = arrayOfNumbers.slice(0, average).reduce((res, num) => Number(res) + Number(num)); 
  const rightSideSum = arrayOfNumbers.slice(average).reduce((res, num) => Number(res) + Number(num)); 
 
 
  return leftSideSum === rightSideSum 
}

READ ALSO
Хочу понять как работает эта функция (Java Script)

Хочу понять как работает эта функция (Java Script)

Найти наибольший общий делитель двух натуральных чисел:

212
Почему не работают мягкие переходы страниц (barba)?

Почему не работают мягкие переходы страниц (barba)?

Я подключил barba js(второй версии) и gsap через cdn:

145
javascript и mongodb: Cannot read property &#39;insertOne&#39; of undefined

javascript и mongodb: Cannot read property 'insertOne' of undefined

Есть проблема, в файле dbjs есть такой код:

122
Объединение объектов javascript

Объединение объектов javascript

Имеется массив объектов:

103