Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #141 (permalink)  
Старый 22.08.2018, 16:58
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Alexandroppolus
вариант из предыдущего поста должен быть в разы быстрее.
Нет Сань, это к сожалению не так.

https://jsperf.com/4543543543
Ответить с цитированием
  #142 (permalink)  
Старый 22.08.2018, 17:58
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Сообщение от j0hnik
Нет Сань, это к сожалению не так.

https://jsperf.com/4543543543
ты забыл скобки после rnd в строке while(i--) arr.push(rnd);
в итоге в массив напушилось одно и то же значение, и никакого вложенного цикла по факту и не было

https://jsperf.com/uniqs5436436/ - исправленное и дополненное
вариант 3 - тоже с Set, только заполняется по ходу пьесы, в Хроме он оказался быстрее первого варианта, в ФФ медленнее (но оба они существенно быстрее второго, который рулит, только если разных значений совсем мало).
вариант 4 "читерский", заточен под конкретные данные, вместо Set используется настоящий массив, и он ожидаемо уделывает всех без шансов

Последний раз редактировалось Alexandroppolus, 22.08.2018 в 18:00.
Ответить с цитированием
  #143 (permalink)  
Старый 22.08.2018, 18:33
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Alexandroppolus,
Сообщение от Alexandroppolus
while(i--) arr.push(rnd);
да, прошу прощения, напушил функцию.

спасибо за способы, и почему я сразу до такого 'кеша' не додумался.
if (s[v] === 0) {
          newArr.push(v);
          s[v] = 1;
        }
Ответить с цитированием
  #144 (permalink)  
Старый 23.08.2018, 15:44
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Продолжаем тему reverse, с которой стартовал топик

https://www.codewars.com/kata/block-exchanging-reverse/

Требуется развернуть массив из 99 элементов, единственное допустимое действие - обменять местами любые два соседних слайса, и надо уложиться в 50 обменов.

Пример действия:
было [0, 1, 2, 3, 4, 5, 6], стало [0, 3, 4, 5, 1, 2, 6] - обменяли местами куски [1, 2] и [3, 4, 5]
Ответить с цитированием
  #145 (permalink)  
Старый 23.08.2018, 16:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

вариант reverse
function doReverse(a) {
    var c = a.length,
        d = Math.floor(c / 2),
        b = a.slice(d);
        a.length = d;
    2 < c && (b = doReverse(b), a = doReverse(a));
    return b.concat(a)
    };
    var i = doReverse([0, 1, 2, 3, 4, 5, 6])
    alert(i);
    var a = Array.from({length : 100}, (a,b)=>b)
    alert(a);
    a = doReverse(a);
    alert(a);
Ответить с цитированием
  #146 (permalink)  
Старый 23.08.2018, 17:45
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

рони,
нет, сами куски во время обмена нельзя разворачивать. См. пример.
Ответить с цитированием
  #147 (permalink)  
Старый 02.09.2018, 15:07
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Извиняюсь что врываюсь в тему, а не подскажите к какой математической теории (решению, алгоритму) мне обратится с такой задачей:

Есть лист бумаги размером 1250 х 2000 мм
Нужно его раскроить по размеру 1250 на заготовки размерами 180, 230, 95 мм чтобы получился минимальный отход. Размер 2000 не трогаем он остаётся для заготовок. Кол-во заготовок задаётся динамически (под заказ). В реальности и размеры 180, 230, 95 тоже под заказ, я их как пример указал.

Нужно найти оптимальную схему раскроя.

Вы тут люди с большим опытом и наверняка решали подобные задачи. Я нашёл задачу Канторовича, разбираю её и вроде как понимаю смысл, но решить и написать код пока не пробовал - по моему у него для решения более сложных задач, чем то что мне нужно.

Подскажите пожалуйста, куда мне копать?
Ответить с цитированием
  #148 (permalink)  
Старый 02.09.2018, 16:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

MC-XOBAHCK,
95,95,95,95,180,230,230,230
Ответить с цитированием
  #149 (permalink)  
Старый 02.09.2018, 16:43
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Сообщение от рони Посмотреть сообщение
95,95,95,95,180,230,230,230
Спасибо!
Я наверно как обычно непонятно описал задачу, имеется ввиду оптимально раскроить какое то кол-во листов, чтобы получить например:
230 - 40 штук
180 - 45 штук
95 - 16 штук.
Ответить с цитированием
  #150 (permalink)  
Старый 02.09.2018, 16:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от MC-XOBAHCK
Подскажите пожалуйста, куда мне копать?
https://javascript.ru/forum/misc/619...tml#post411098
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тестовое задание Yandex xShift Общие вопросы Javascript 22 17.02.2018 21:53
Задание с SIP heeel Firefox/Mozilla 0 12.06.2017 01:12
Интересное задание "Поединок" помогите решить Anton27 Общие вопросы Javascript 2 23.05.2017 22:24
Тестовое задание. Дайте идею. FINoM Оффтопик 14 28.03.2011 10:09
Помогите сделать тестовое задание начального уровня по js makregistr Работа 1 16.12.2010 14:26