Цитата:
в итоге в массив напушилось одно и то же значение, и никакого вложенного цикла по факту и не было https://jsperf.com/uniqs5436436/ - исправленное и дополненное вариант 3 - тоже с Set, только заполняется по ходу пьесы, в Хроме он оказался быстрее первого варианта, в ФФ медленнее (но оба они существенно быстрее второго, который рулит, только если разных значений совсем мало). вариант 4 "читерский", заточен под конкретные данные, вместо Set используется настоящий массив, и он ожидаемо уделывает всех без шансов |
Alexandroppolus,
Цитата:
спасибо за способы, и почему я сразу до такого 'кеша' не додумался. if (s[v] === 0) { newArr.push(v); s[v] = 1; } |
Продолжаем тему 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] |
вариант 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); |
рони,
нет, сами куски во время обмена нельзя разворачивать. См. пример. |
Извиняюсь что врываюсь в тему, а не подскажите к какой математической теории (решению, алгоритму) мне обратится с такой задачей:
Есть лист бумаги размером 1250 х 2000 мм Нужно его раскроить по размеру 1250 на заготовки размерами 180, 230, 95 мм чтобы получился минимальный отход. Размер 2000 не трогаем он остаётся для заготовок. Кол-во заготовок задаётся динамически (под заказ). В реальности и размеры 180, 230, 95 тоже под заказ, я их как пример указал. Нужно найти оптимальную схему раскроя. Вы тут люди с большим опытом и наверняка решали подобные задачи. Я нашёл задачу Канторовича, разбираю её и вроде как понимаю смысл, но решить и написать код пока не пробовал - по моему у него для решения более сложных задач, чем то что мне нужно. Подскажите пожалуйста, куда мне копать? |
MC-XOBAHCK,
95,95,95,95,180,230,230,230 |
Цитата:
Я наверно как обычно непонятно описал задачу, имеется ввиду оптимально раскроить какое то кол-во листов, чтобы получить например: 230 - 40 штук 180 - 45 штук 95 - 16 штук. |
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 13:58. |