Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Можно ли что-то оптимизировать и улучшить в моем коде?задача с codewars

Само задание:
Нарциссическое число (или число Армстронга) — это положительное число, представляющее собой сумму собственных цифр, каждая из которых возведена в степень количества цифр в данном основании. В этом Ката мы ограничимся десятичными числами (с основанием 10).

Например, возьмем 153 (3 цифры), что является самовлюбленным:

1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
и 1652 (4 цифры), что не является:

1^4 + 6^4 + 5^4 + 2^4 = 1 + 1296 + 625 + 16 = 1938
Соревнование:

Ваш код должен возвращать истину или ложь (не «истину» и «ложь») в зависимости от того, является ли данное число Нарциссическим числом в базе 10. Это может быть Истина и Ложь на вашем языке, например PHP.

Проверка ошибок текстовых строк или других недопустимых входных данных не требуется, в функцию будут переданы только допустимые положительные ненулевые целые числа.


Мой код:

12345678910111213
 function narcissistic(value) { 
  const arr = value.toString(10).split(""); 
 
  const AmstrongNumber = arr.reduce((acc, number) => { 
    return acc + number ** arr.length; 
  }, 0); 
 
  if (AmstrongNumber == value) { 
    return true; 
  } else { 
    return false; 
  } 
}  


С ним все нормально, все проверки проходит, просто хотл узнать можно ли улучшить и оптимизировать тут что-либо?

По дате
По рейтингу
Аватар пользователя
Новичок
123
 function narcissistic(value) {
  return [...value.toString()].reduce((acc, current, i, arr) => acc + current**arr.length, 0) == value;
} 

Вот мой вариант.

Он не то что бы оптимальнее, он просто короче.

Вообще в CodeWars после выполнения задачи можно видеть ответы других юзеров.

Аватар пользователя
Просветленный
12
 
    return AmstrongNumber == value 
Аватар пользователя
Мыслитель

Дальше некуда.
Подай свой код на Шнобелевскую премию.