var getYears = function (yearStart, yearEnd, number) {
var years = [];
for (var i=yearStart; i<=yearEnd; i++) {
var sum = 0;
var yearLength = String(i).length;
var year = i;
for (var j=0; j<yearLength; j++) {
sum += year%10;
year = Math.floor(year/10);
}
if (sum === number) {
years.push(i);
}
}
return years
}
как-то так)
var getYears = function (startYear, endYear, sum) {
var dates = [];
for (var i = startYear; i <= endYear; i++) {
var a = String(i)[0];
var b = String(i)[1];
var c = String(i)[2];
var d = String(i)[3];
if (Number(a) + Number(b) + Number(c) + Number(d) === sum) {
dates.push(i);
}
}
return dates
}
Посмотрел варианты решения и как понимаю мой вообще неоригинальный вариант, но весьма понятный)
var getYears = function (firstYear, lastYear, sum) {
var arrYears = [];
for (var year = firstYear; year <= lastYear; year++) {
var numbersYear = 0;
for (var i = 0; i < String(year).length; i++ ) {
var stringYear = String(year);
numbersYear += Number(stringYear[i]);
}
if (numbersYear === sum) {
arrYears.push(Number(stringYear));
}
}
return arrYears;
};
var getYears = function(yearStart, yearEnd, sumOfYear){
var goodYears= [];
for (var i=yearStart; i<=yearEnd; i++){
var sum = 0;
var yearStr = i+[];
for(var j=0;j<4;j++){
sum += +yearStr[j];
}
if (sum === sumOfYear){
goodYears.push(i);
}
}
return goodYears;
}
Думал сделать цикл в цикле, но, подумав логически, что целей для олимпийских игр, на ближайшие 10000 лет ставиться не будет, поэтому решил обойтись без второго цикла. Очень похоже на решения других форумчан. Принципиально делаю самостоятельно, без гугления и смотрения в форумы. Уже сравниваю только постфактум, когда задача сделана.
let getYears = function (firstYear, lastYear, sumYearNumbers) {
let targetYears = [];
for (let i = firstYear; i <= lastYear; i++) {
if (Number(String(i)[0]) + Number(String(i)[1]) + Number(String(i)[2]) + Number(String(i)[3]) === sumYearNumbers) {
targetYears.push(i);
};
};
return targetYears
};
Краткое решение с преобразованием к числу с помощью “+”
let getYears = function (firstYear, lastYear, sum) {
let result = []
for (let i = firstYear; i <= lastYear; i++) {
if (+String(i)[0] + +String(i)[1] + +String(i)[2] + +String(i)[3] == sum) {
result.push(i)
}
}
return result
}
Изначально думал создать доп цикл для суммирования чисел года, но в итоге решил что нет смысла пилить велосипед
Мой вариант решения, добавил комментарии вдруг кому-то пригодится:
let getYears = function(startYear, endYear, sumOfTheYear) {
let properYears = [];
//цикл добавляющий года в массив с последующей проверкой суммы чисел года на соответствие значению sumOfTheYear
for(i = startYear; i <= endYear; i++) {
let yearToString = i + '';
let sumOfTheYearCheck =
Number(yearToString[0]) +
Number(yearToString[1])+
Number(yearToString[2])+
Number(yearToString[3]);
// запись в массив properYears
if (sumOfTheYearCheck === sumOfTheYear) {
properYears.push(i);
}
}return properYears;
}