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

Решение на основе только пройденного материала:

let getYears = function (fistYear, lastYear, numberSumYear) {
let array = []
for (let i = fistYear; i <= lastYear; i++) {
let sum = 0
for (let j = 0; j <= String(i).length - 1; j++) {
sum += Number(String(i)[j])
}
if(sum == numberSumYear) {
array.push(i)
}
}
return array
}

2 лайка
Когда пойдет летоисчисление на десятки тысяч, мой код сломается ))  Два цикла 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
}

var getYears = function(startYear, endYear, summNumbersYear) {
var correctYears = [];
count = 0;
for(var i = startYear; i <= endYear; i++ ) {
if(summNumbersYear === calculateSummNumbersInYear(i)){
correctYears[count] = i;
count++;
}
}
return correctYears;
}
//Считаем сумму цифр в году
var calculateSummNumbersInYear = function(year) {
var str = String(year);
var summNumbers = 0;
for(var i = 0; i < str.length; i++) {
summNumbers += Number(str[i]);
}
return summNumbers;
}

Мое решение задачи

let getYears = function(fierstYear, lastYear, sumYear){
 let arrYear = [] ;

 for(let i = fierstYear; fierstYear <= lastYear; fierstYear++){
   
    let sumNumber = 0;
    fierstYear = String(fierstYear);
    
    for(let j = 0; j < fierstYear.length; j++){
      sumNumber += Number(fierstYear[j]);
    }
    
    if(sumNumber === sumYear){
      arrYear.push(Number(fierstYear))
    }
  
 } 
return arrYear;
}

Мозг выдал чуть по другому решение))
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;
}

Буду благодарен за критику

let sum = 0;
let data = [];

let getYears = function (startYear, endYear, number) {
let firstNumber = startYear;

for (let i = 0; firstNumber <= endYear; i++) {
firstNumber = String(firstNumber)

for (let j = 0; j <= firstNumber.length - 1; j++) {
sum += Number(firstNumber.slice(j, j + 1));
}
firstNumber = Number(firstNumber);
if (sum === number) {
data.push(firstNumber);

}
sum = 0;
firstNumber++;
}
return data;
}

Мой код

function getYears(yearStart, yearFinish, yearSumNumbers) {

let arr = [];
let sum = 0;

for (let i = yearStart; i <= yearFinish; i++) {

i = String(i);

for (let j = 0; j < i.length; j++) {
  if (j < 4) {
    sum = +(i[0]) + +(i[1]) + +(i[2]) + +(i[3]);
  }
}
if (sum === yearSumNumbers) {
  arr.push(+i);
}

}
return arr;
}

Получилось как-то так))
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’
:wink:

Спойлер
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 (yearFrom, YearTo, sumInYear) {
let years = []
let sumOfYears = [];
let sumArray = []
let resultYears = [];

for (let j = yearFrom; j<=YearTo; j++){
years.push(j);
}
for (let i = 0; i<years.length; i++){
sumOfYears[i] = (""+years[i]).split("").map(Number);
sum = sumOfYears[i].map(i=>x+=i, x=0).reverse()[0]
sumArray.push(sum)
}
for (let i = 0; i<=sumArray.length; i++) {
if (sumArray[i]===sumInYear) {
resultYears.push(years[i])
}
}
return resultYears
}

Вот мой вариантик, тоже думаю имеет место быть, если что открыт к критике, но может кому поможет)

Спойлер
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;
}