Помогите написать на C#

druzhanja

Client
Регистрация
25.05.2017
Сообщения
23
Благодарностей
1
Баллы
3
На входе у меня список searches нужно написать на C# на каком языке написано увы не знаю
Заране благодарен

JavaScript:
var previousData = void 0;
var todayData = void 0;
var count = void 0;
var data = void 0;

  if (searches.length > 30) {
    data = searches.slice(-30);
  } else {
    data = searches;
  }

  var firstRecord = parseInt(data[0], 10);

  if (data.length < 6) {
    if (data.length === 1) {
      previousData = firstRecord;
    } else {
      previousData = firstRecord;
      for (var index = 1; index < data.length; index += 1) {
        count = index + 1;
        todayData = previousData + (data[index] - previousData) / count * 0.2;
        previousData = todayData;
      }
    }

    return Math.round(previousData);
  }

  previousData = firstRecord;
  for (var _index = 1; _index < data.length; _index += 1) {
    if (_index < 5) {
      count = _index + 1;
      todayData = previousData + (data[_index] - previousData) / count * 0.2;
      previousData = todayData;
    } else {
      count = _index + 1;
      todayData = previousData + (data[_index] - previousData) / count;
      previousData = todayData;
    }
  }
  return Math.round(previousData);
 
Регистрация
05.06.2019
Сообщения
570
Благодарностей
453
Баллы
63
На входе у меня список searches нужно написать на C# на каком языке написано увы не знаю
Заране благодарен

JavaScript:
var previousData = void 0;
var todayData = void 0;
var count = void 0;
var data = void 0;

  if (searches.length > 30) {
    data = searches.slice(-30);
  } else {
    data = searches;
  }

  var firstRecord = parseInt(data[0], 10);

  if (data.length < 6) {
    if (data.length === 1) {
      previousData = firstRecord;
    } else {
      previousData = firstRecord;
      for (var index = 1; index < data.length; index += 1) {
        count = index + 1;
        todayData = previousData + (data[index] - previousData) / count * 0.2;
        previousData = todayData;
      }
    }

    return Math.round(previousData);
  }

  previousData = firstRecord;
  for (var _index = 1; _index < data.length; _index += 1) {
    if (_index < 5) {
      count = _index + 1;
      todayData = previousData + (data[_index] - previousData) / count * 0.2;
      previousData = todayData;
    } else {
      count = _index + 1;
      todayData = previousData + (data[_index] - previousData) / count;
      previousData = todayData;
    }
  }
  return Math.round(previousData);
Не знаю что за яп, JS или Java.
Могу помочь, но лучше поставить задачу, нежели переписать.

C#:
List<int> searches = new List<int>() {1, 2, 3, 4, 5}; //test data
List<int> data = null;

int previousData = 0;
int todayData = 0;
double count = 0;

  if (searches.Count > 30) {
    data = searches.GetRange(0, 29);
  } else {
    data = searches;
  }
 
  int firstRecord = data[0];

  if (data.Count < 6) {
    if (data.Count == 1) {
      previousData = firstRecord;
    } else {
      previousData = firstRecord;
      for (var i= 1; i < data.Count; i++) {
        count = i + 1;
        todayData = previousData + (data[i] - previousData) / (int)(count * 0.2);
        previousData = todayData;
      }
    }

    return previousData;//Math.Round(previousData);
  }

  previousData = firstRecord;
  for (var i = 1; i < data.Count; i++) {
    if (i < 5) {
      count = i + 1;
      todayData = previousData + (data[i] - previousData) / (int)(count * 0.2);
      previousData = todayData;
    } else {
      count = i + 1;
      todayData = previousData + (data[i] - previousData) / (int)count;
      previousData = todayData;
    }
  }
  return previousData;//Math.Round(previousData);
Пробуя по мотивам того что вижу, но "Попытка деления на нуль."
 
Последнее редактирование:
  • Спасибо
Реакции: druzhanja

druzhanja

Client
Регистрация
25.05.2017
Сообщения
23
Благодарностей
1
Баллы
3
Спасибо за помощь

строку data = searches.GetRange(0, 29); я не понял
тут нужно взять последние 30 значений а не первые, если количество больше 30, ну то я могу и снипетами сделать, но если есть решение , то было бы здорово

Данные приходят в таком виде одной строковой переменной

[4485,4436,4585,3961,4298,3129,2346,2048,2355,2205,2404,4707,3462,3695,3085,2558,2074,3067,2342,2813,2095,2527,2375,2485,1665,606,1095,1052,632,2317,1854,1022,2808,-338,2293,1265,864,864,2332,2298,2082,2053,1976,668,692,638,88,93,0,0,0,14,0,115,0,0,67,-70,0,730,0,0,0,0,803,1246,1146,1201,1066,3448,2532,5811,2302,7270,5795,4635,5213,0,0,1077,203,5347,5672,-246,825,1176,1131,2105,1921,1744,1109,1322,1,2370,1868,1419,2305,1730,616,1477,915,1051,193,54,551,-361,204,37,1711,7125,6790,1366,2275,5825,5953,5953,2719,2430,2430,2608,2542,997,865,795,1597,1124,1155,1590,813,2671,7327,6795,6163,5476,1582,1714,291,1292,1472,922,452,891,226,1591,1093,805,295,361,813,1019,-107,136,114,452,-619]

потом я удаляю квадратные скобки и загоняю в список
 
Последнее редактирование:

druzhanja

Client
Регистрация
25.05.2017
Сообщения
23
Благодарностей
1
Баллы
3
Написал пока вот так



C#:
//List<int> searches = new List<int>() {1124,1155,1590,813,2671,7327,6795,6163,5476,1582,1714,291,1292,1472,922,452,891,226,1591,1093,805,295,361,813,1019,-107,136,114,452,-619}; //test data

//List<string> searches = new List<string>() {project.Variables["amazonSearches"].Value}; //test data



List<string> searches = project.Lists["searches"].ToList();// зеновский список

List<string> data = null;



var previousData = 0;

var todayData = 0;

var count = 0;



  if (searches.Count > 30) {

    data = searches.GetRange(0, 30);

  } else {

    data = searches;

  }



  var firstRecord = data[0];

  var firstRecord1 = Convert.ToInt32(firstRecord);



  if (data.Count < 6) {

    if (data.Count == 1) {

      previousData = firstRecord1;

    } else {

      previousData = firstRecord1;

      for (var i= 1; i < data.Count; i++) {

        count = i + 1;

        var record = data;

        var record1 = Convert.ToInt32(record);

        todayData = previousData + (record1 - previousData) * 2 / (count * 10);

        previousData = todayData;

      }

    }



    return previousData;//Math.Round(previousData);

  }



  previousData = firstRecord1;

  for (var i = 1; i < data.Count; i++) {

    if (i < 5) {

      count = i + 1;

      var record = data;

      var record1 = Convert.ToInt32(record);

      todayData = previousData + (record1 - previousData) * 2 / (count * 10);

      previousData = todayData;

    } else {

      count = i + 1;

      todayData = previousData + (record1 - previousData) / count;

      previousData = todayData;

    }

  }

  return previousData;//Math.Round(previousData);
Но что то с типами данных не то
 

druzhanja

Client
Регистрация
25.05.2017
Сообщения
23
Благодарностей
1
Баллы
3
Все работает


C#:
//List<int> searches = new List<int>() {1124,1155,1590,813,2671,7327,6795,6163,5476,1582,1714,291,1292,1472,922,452,891,226,1591,1093,805,295,361,813,1019,-107,136,114,452,-619}; //test data
//List<string> searches = new List<string>() {project.Variables["amazonSearches"].Value}; //test data

List<string> searches = project.Lists["searches"].ToList();// зеновский список
List<string> data = null;

var previousData = 0;
var todayData = 0;
var count = 0;
var r1 = 0;
var total = searches.Count;

  if (searches.Count > 30) {
    r1 = total - 30;
    data = searches.GetRange(r1, 30);
  } else {
    data = searches;
  }
 
  var firstRecord = data[0];
  var firstRecord1 = Convert.ToInt32(firstRecord);

  if (data.Count < 6) {
    if (data.Count == 1) {
      previousData = firstRecord1;
    } else {
      previousData = firstRecord1;
      for (var i= 1; i < data.Count; i++) {
        count = i + 1;
        var record = data[i];
        var record1 = Convert.ToInt32(record);
        todayData = previousData + (record1 - previousData) * 2 / (count * 10);
        previousData = todayData;
      }
    }

    return previousData;//Math.Round(previousData);
  }

  previousData = firstRecord1;
  for (var i = 1; i < data.Count; i++) {
    if (i < 5) {
      count = i + 1;
      var record = data[i];
      var record1 = Convert.ToInt32(record);
      todayData = previousData + (record1 - previousData) * 2 / (count * 10);
      previousData = todayData;
    } else {
      count = i + 1;
      var record = data[i];
      var record1 = Convert.ToInt32(record);
      todayData = previousData + (record1 - previousData) / count;
      previousData = todayData;
    }
  }
  return previousData;//Math.Round(previousData);
 
  • Спасибо
Реакции: Маломальский

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)