Когда пойдет летоисчисление на десятки тысяч, мой код сломается )) Два цикла for понадежнее будет )))
let getYears = function(year, endYear, sum) {
let yeasr = [];
while(year <= endYear) {
let str = String(year);
sumYear = Number(str[0]) + Number(str[1]) + Number(str[2]) + Number(str[3]);
if(sumYear == sum) {
yeasr.push(year);
}
year++;
}
return yeasr;
}
Всем привет! У меня мозг взорвался от этой казалось бы простой задачи. Написал “почти правильный код сразу”. Почти… Дело оказалось в области видимости переменных. Т.е. переменные которые объявляются вне блока кода для остальной программы невидимы… в моем случае это переменная sum. Если её объявить в другом месте, всё идет прахом. Вот мой код:
const getYears = (start, final, digit) => {
let result = [];
for (start; start <= final; start++) {
let sum = 0;
for (let i = 0; i <= 3; i++) {
sum += +start.toString()[i];
}
if (sum === digit) {
result.push(start);
}
}
return result
}
Мозг выдал чуть по другому решение))
let Array1 = [];
function getYears(a, b ,c ) {
for (let i = a; i <= b; i++) {
let sum = 0;
let ost = i;
for (let j = 0; j < 4; j++) {
sum = sum + (ost % 10);
ost = ost / 10;
ost = Math.floor(ost)
}
if (c == sum) {
Array1.push(i)
}
}
return Array1;
}
Получилось как-то так))
function getYears(yearStart, yearEnd, sum) {
let z = [];
while (yearStart <= yearEnd) {
let k = 0;
for (i = 0; i < String(yearStart).length; i ++) {
k += Number(String(yearStart).charAt(i));
}
if (k === sum) {
z.push(yearStart);
}
yearStart++;
}
return z;
}
Получается, что решил)
Может кому-то поможет, через цикл ‘While’
Спойлер
let endNumber;
let sum;
let fits = [];
let getYears = function(startNumb, endNumber, sum) {
while (startNumb <= endNumber) {
let index = String(startNumb);
let total = 0;
for(let i = 0; i <= index.length - 1; i++) {
total += Number(index[i]);
}
if (total == sum) {
let appIndex = Number(index);
fits.push(appIndex);
}
startNumb++;
}
return fits;
};
//Создаем пустой массив
//Создаем переменную для сложения чисел года
//Перебираем даты
//Преобразовываем текущую дату в строу
//Перебираем строку
//Текущее значение строки преобразуем в число
//Число добавляем к переменной для сложения
//Сравниваем получившуюся сумму со значением sum
//Если совпали, то добавляем текущий год в новый массив
//Обнуляем перменную для сложения
//Переходим к следующей итерации
//Возвращаем полученный массив
let getYears = function(yearStart, yearEnd, sum ) {
let array = [];
let total = 0;
while(yearStart <= yearEnd) {
let yearString = String(yearStart);
for(let i = 0; i < yearString.length; i++) {
let yearNumber = Number(yearString[i]);
total += yearNumber;
};
if(total == sum) {
array.push(yearStart);
};
total = 0;
yearStart++;
};
return array;
};
Вот мой вариантик, тоже думаю имеет место быть, если что открыт к критике, но может кому поможет)
Спойлер
let getYears = function (yearStart, yearEnd, yearSum) {
let result = [];
for (let i = yearStart; i <= yearEnd; i++) {
let arr = String(i).split('');
let sum = arr.reduce((prevValue, value) => +prevValue + +value, 0);
if (sum === yearSum) {
result.push(i);
};
}
return result
}
var getYears = function(yearMin,yearMax,sum){
var mas=[];
for (var i = yearMin; i<=yearMax; i++){
var y = i;
var n = 0;
while (y>0){
n+=y%10;
y=Math.floor(y/10);
}
if (n===sum){
mas.push(i);
}
}
return mas;
}
даже не думалось что так много способов решения одной задачи…
function getYears(startYear, endYear, sum) {
let years = [];
for (let year = startYear; year <= endYear; year++) {
let digits = year.toString().split('').map(Number);
let digitsSum = digits.reduce((a, b) => a + b, 0);
if (digitsSum === sum) {
years.push(year);
}
}
return years;
}