Олимпиада для котов

var getYears = function(firstYear, lastYear, sumYear) {
  var appropriateDates = [];
  for (var i=firstYear; i<=lastYear; i++) {
    i = String(i)
    var sumNumbers = Number(i[0]) +
                     Number(i[1]) +   
                     Number(i[2]) +
                     Number(i[3]);
    if (sumNumbers === sumYear) {
       appropriateDates.push(Number(i));
    }
  } return appropriateDates
}

При раскладе

getYears(2019, 2030, 5)

Возникла проблема с дублированием года в итоговом массиве потому решение с поправкой на это. Вдруг у кого - нибудь такая же проблема.

const getYears = (startYear, endYear, queryed) => {
  let result = [];
  for (let i = startYear; i <= endYear; i++) {
    let yearArray = Array.from(String(i));
    let sum = 0;
    yearArray.forEach((year) => {
      	sum += Number(year);
      
      	if (sum === queryed) {
    		result.push(i);
    	}
    });
  }
  
  for (let year of result) {
    if (result.indexOf(year) !== result.lastIndexOf(year)) {
      result.pop(year);
    }
  }
  
  return result;
};

ухх, было посложнее чем все предыдущее. Получилось как то так

var getYears = function(year, lastYear, sum) {
var a = [];
var c = 0;
var d = 0;
var e = [];
for (var i=year; i<=lastYear; i++) {
a.push(String(i));
for (j=0; j<a.length; j++) {
d = a[j].split(’’);
c = parseInt(d[0]) + parseInt(d[1]) + parseInt(d[2]) + parseInt(d[3])
}
if(c === sum) {
e.push(i)
}
}
return e;
}

let getYears = (yearStart,yearEnd,sumNumber)=>{
let a0 = Array(yearEnd).fill().map((a,i)=>a=(i+1)+’’).filter(a=> a>=yearStart);
return a0.filter((a,i)=>a.split(’’).reduce((b,c)=>(+b)+(+c))==sumNumber).map(a=>+a);

};

Мой вариант решения. Признаюсь пришлось попотеть. Но мне нравится.

let getYears = function (firYear, secYear, sum) {
    let goodDates = []
    for (let i = firYear; i <= secYear; i++) {
        let arrYear = (i.toString()).split('')
        let sumNumYear = 0;
        for (j = 0; j < arrYear.length; j++) {
            sumNumYear += +(arrYear[j])
        }
        if (sumNumYear == sum) {
            goodDates.push(i)
        }
    }
    return goodDates
}
Мой вариант через filter :)

const getYears = (startY, endY, sumNum) => […Array(endY - startY + 1)].map((_, i) => startY + i).filter(a=>(a+’’).split(’’).reduce((b,c)=>+b+c*1)==sumNum);