Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как минимумом операций заполнить или лучше сразу объявить массив ц.чисел от X до Y? (https://javascript.ru/forum/misc/75912-kak-minimumom-operacijj-zapolnit-ili-luchshe-srazu-obyavit-massiv-c-chisel-ot-x-do-y.html)

Svorg 16.11.2018 08:46

Как минимумом операций заполнить или лучше сразу объявить массив ц.чисел от X до Y?
 
Здрасьте!
У меня тут в одной из задач "какой-то кастрированный урезанный JS".
Большинства методов нету, объекта Array нету, даже инкремента/декремента нету.
Дополнительная фишка в том что "оно" как-то типа считает вызовы операторов и если превышен лимит - тупо отменяет выполнение.
А мне "там" надо воплотить и использовать массив целых чисел, заполненный подряд по возрастанию начиная от заданного числа и до конца массива (тоже заданное число).
  1. Например задано: размер массива 10, начальное 400;
  2. Тогда нужен массив: [400,401,402,403,404,405,406,407,408,409];
Нагуглил кучу способов, но они или не работают в урезанных условиях, или жрут много операций.
Да и вообще от циклов хотелось бы избавиться. Может кто знает совсем тайные секретные фишки?
Спасибо!

Dilettante_Pro 16.11.2018 09:18

Цитата:

Сообщение от Svorg
массив целых чисел, заполненный подряд по возрастанию начиная от заданного числа

А зачем нужен такой массив, каждый элемент которого вычислим по начальному значению и индексу?

var startValue = 400,  index = 5;

var currValue = startValue + index;
alert(currValue);

Nexus 16.11.2018 09:20

Цитата:

Сообщение от Svorg
объекта Array нету

А что такое тогда массив, если объекта Array нет?

var start = 400 - 1,
    arrayLength = 10,
    max = start + arrayLength,
    result = [];

while (start <= max)
    result.push(start += 1);

alert(result);

рони 16.11.2018 10:27

заполнение массива es6
 
Svorg,
function createArray(length, initItem, increment = 1 )
{
   return Array.from({length}, (_,index) => initItem + increment * index)
}
alert(JSON.stringify(createArray(10, 400), null, 0));

SuperZen 16.11.2018 11:09

мои 5 копеек )

<script>
  createArray = (from, count) => {
    return Array(count).fill().map((_, i) => from + i)
  }
  console.log(createArray(400, 10))
</script>

j0hnik 16.11.2018 11:10

рони,
Там походу нет constructor и соответственно нет его статических методов.

SuperZen 16.11.2018 11:17

Если нет методов то пора подключать полифилл ) https://github.com/es-shims/es5-shim

Svorg 16.11.2018 11:46

Невозможно что-либо подключать. Обходиться тем что имеется. А имеется мало.
Кстати объявлять функции тоже нельзя)))
Цитата:

var A=[4,"test",null];
return A;
Цитата:

<OK> [4, "test", null]

Цитата:

var A=new Array(...);
return A;
Цитата:

<ERROR> undefined identifier 'new' in line 1

Цитата:

var A=Array.from(...);
return A;
Цитата:

<ERROR> undefined identifier 'Array' in line 1


Цитата:

А зачем нужен такой массив, каждый элемент которого вычислим по начальному значению и индексу?
Его требуется передавать параметром в доступные внутрибиблиотечные функции/методы. А последние заточены только под "дайте массив целых чисел!".

j0hnik 16.11.2018 11:51

Svorg,
Вот так должно сработать
var arr = [],
x = 400-1;
for (var i = 0; i<10; i+=1) arr[i] = x+=1;

SuperZen 16.11.2018 11:55

<script>
  var arr = []
  for (var i = 0; i < 10; i++) arr[i] = 400 + i
  console.log(arr)
</script>

j0hnik 16.11.2018 11:56

SuperZen,
он говорил инкремента нет

SuperZen 16.11.2018 12:06

j0hnik, ыыы... :haha:

<script>
  var arr = []
  for (var i = 0; i < 10; i = i + 1) arr[i] = 400 + i
  console.log(arr)
</script>

Svorg 16.11.2018 12:07

Цитата:

<ERROR> undefined identifier 'for' in line 2
хах!) Можно только while. Жесть)
"+=" или "-=" не понимает, "++" или "--" не понимает...
Даже "A[i]=x;" тоже не работает (non-variable in assignment) - могу делать только "A.push(x);"...


Ну, допустим, пока как-то так:
Цитата:

var A=[],x=400,i=0;
while(i<     10     ){
  A.push(x);
  i=i+1;
  x=x+1;
};
return A;
Цитата:

<OK> [400, 401, 402, 403, 404, 405, 406, 407, 408, 409]

Но теперь фокус:
Цитата:

var A=[],x=400,i=0;
while(i<     500     ){
  A.push(x);
  i=i+1;
  x=x+1;
};
return A;
Цитата:

<ERROR> Too many operations, aborted


SuperZen 16.11.2018 12:09

было бы проще если бы ТС написал среду выполнения этого шлака )

Dilettante_Pro 16.11.2018 12:14

Svorg,
Выбросить i, работать только с x - все поменьше операций

Svorg 16.11.2018 12:15

Вроде как упростим:
Цитата:

var A=[],Curr=400,Len=665,Max=Curr+Len;
while(Curr<Max){
  A.push(Curr);
  Curr=Curr+1;
};
return A;
Цитата:

<OK> [400, ... , 1064]

Граница увеличилась:
Цитата:

var A=[],Curr=400,Len=666,Max=Curr+Len;
while(Curr<Max){
  A.push(Curr);
  Curr=Curr+1;
};
return A;
Цитата:

<ERROR> Too many operations, aborted

Но это капец не дело, может кто знает кардинально более полезные хитрости?

SuperZen 16.11.2018 12:17

попробуй сделать несколько while'ов ) пачучуть

Svorg 16.11.2018 12:18

А вот так ещё каплю выжалось:
var A=[],Curr=400-1,Len=768,Max=Curr+Len;
while(Curr<Max){
  A.push(Curr=Curr+1);
};
return A;
А вот 769 опять не тянет.

Svorg 16.11.2018 12:19

Ладно, видимо всё же "никак"...

j0hnik 16.11.2018 12:20

Svorg,
ты там не каты случаем решаешь на codewars ?

Svorg 16.11.2018 12:23

Цитата:

Сообщение от j0hnik (Сообщение 498737)
ты там не каты случаем решаешь на codewars ?

Впервые слышу, чё это вообще такое?

Ладно, говорю, если нету кардинального способа не сожрущего операции, то придётся заходить вообще с совершенно другого угла...

SuperZen 16.11.2018 12:31

мне кажется ты нас троллишь )

j0hnik 16.11.2018 12:34

Цитата:

Сообщение от Svorg
Впервые слышу, чё это вообще такое?

https://www.codewars.com/
площадка на которой множество задач, для некоторых как раз есть ограничения использования методов, скорости, кол-во символов.

SuperZen 16.11.2018 12:36

сгенерируй строку типа
var arr = [400, и т.д. сколько нужно]

потом скопипасти ее ) и запусти...

Svorg 16.11.2018 12:46

j0hnik, Подобным "спортом" не занимаюся, у меня тут реальных но долбанутых задач хватает))

SuperZen, гм... Если бы не ограничение сервера на длину POST запросов - могло бы даже подойти...

SuperZen 16.11.2018 12:50

а что с несколькими вайлами?

Nexus 16.11.2018 12:53

Svorg, чайник программируете?)
Что за среда исполнения такая?

Svorg 16.11.2018 14:46

Да какая разница, оно видимо считает "операции" относительно всего скрипта.

Чёрный ящик. Отправляете строку с кодом через POST запрос на сервер и тот выполняет. Или ругается.
Названия не указано, просто "код в формате похожем на JavaSсript/ActionScript", и мол пользоваться можно тем-то и тем-то, всё.

Кажется подобрал другую функцию, которая понимает "начало + количество". Выдаёт правда не те данные, но сейчас вот пытаюсь их скрестить...
Всем спасибо за участие!

Aetae 16.11.2018 20:10

А если так, растягивая?
var A=[],Curr=400-1,Len=768,Max=Curr+Len;
while(Curr<Max){
   Curr=Curr+A.push(Curr, Curr+1, Curr+2, Curr+3, Curr+4, Curr+5);
};
return A;


Часовой пояс GMT +3, время: 03:27.