Maksim
То есть мое решение полностью неправильное?
я не знаю на счет правильности, но канонично скобки считать на стеках
Andrey
Стеки, форы, чем вам пцре регулярки не угодили? [^(]*\((?R)?\)[^()]*
Zaff
вот такие еще могут быть паттерны
Anonymous
смайлик
Lupusregina[beta]
да
var config1 = [['(', ')']]; function check(str, bracketsConfig) { const chars = str.split(''); const config = bracketsConfig; const map = Object.create(null); for(const char of chars) { let f = config.find(v => v.includes(char)); if ( f ) { const open = f[0]; map[open] = map[open] || 0; map[open] += ( open === char ) ? 1 : -1; if ( map[open] < 0 ) return false; } } if ( Object.entries(map).find(v => v[1] !== 0) ) return false; return true; } check('((()))()', config1)
Andrey
под капотом регулярок стеки и есть
Нет там никаких стеков, там nfa/dfa. (Если конечно не считать колстеки, но они есть вообще везде)
Lupusregina[beta]
Это решение
напиши плиз решение
Anonymous
Ребят, кто делал уведомление о использовании куки
Anonymous
как его правильно сделать
Dmitry
на пол экрана мочи и все
Lupusregina[beta]
если их несколько видов, тогда да не поймет
Dmitry
и что бы только по таймеру через 3 минуты ухходило
Vladislav
Есть в event что-то типа отсчета сколько прошел курсор с момента зажатия кнопки?
Maksim
если их несколько видов, тогда да не поймет
не, имеется в виду, что )( это не валидно
Максим
напиши плиз решение
https://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D1%81%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D0%B5%D0%BC
Lupusregina[beta]
не, имеется в виду, что )( это не валидно
Нет, в моем примере не валидно будет. А вот к примеру {(}) уже пропустит и это ошибка
Lupusregina[beta]
но я сейчас исправлю
Anton
вот такие еще могут быть паттерны
const rg = new RegExp(config.map(([a, b]) => `[${a}],?[${b}]`).join('|')); while(str !== (str = str.replace(rg, ''))); return !str;
Maksim
но я сейчас исправлю
вряд ли это будет тривиально для твоего подхода
Alexander
А в чем проблемма?
Alexander
с уведомление про куки?
Denis
javascript `:1::2::3::4::5::6::7::8::9::10::11::12::13::14::15::16::17:` .split(new RegExp(`:${['5', '8', '14'].join(':|:')}:`)) .map((word) => word.match(/:\d+:/g).map((num) => +num.match(/\d+/)[0]))
Lupusregina[beta]
тест var cfg = [["(", ")"], ["[", "]"], ["{", "}"]]; // true console.log( check('{ text [ 23 ds s ] } ()', cfg) ) // false console.log( check('{ text [ 23 ds s ] (} )', cfg) )
Lupusregina[beta]
хотя тут ошибка, надо проверять еще вконце, есть ли что в стеке
Lupusregina[beta]
нет, там все же ошибка
Zaff
Ладно, спасибо всем, доберусь домой и посмотрю. Сейчас срочно нужно было отойти
Denis
У С++ программистов
Denis
Когда вы уже делом займетесь?
Igor
А написать самому не вариант?
Igor
Это же тестовое
Igor
Если сам не можешь - значит не тянешь, очевидно 🤷‍♂️
Lupusregina[beta]
Ладно, спасибо всем, доберусь домой и посмотрю. Сейчас срочно нужно было отойти
да я там написал полную чушь. В том варианте и стек не нужен
Lupusregina[beta]
+ генераторы, при каждой рекурсии `for(const char of chars) `он обновляется
Lupusregina[beta]
function check(str, bracketsConfig, dev = false) { const config = bracketsConfig; const genChars = function*(str) { const chars = str.split(''); for(const char of chars) yield char; }; const deep = (chars, expClose = undefined) => { let char; while((char = chars.next().value) !== undefined) { const f = config.find(v => v.includes(char)); if ( f ) { const [open, close] = f; if ( open === char ) { deep(chars, close); continue; } if ( expClose !== close ) throw new Error(`Expected '${expClose === undefined ? "end of text" : expClose}', got '${close}'`); return; } } if ( expClose !== undefined ) throw new Error(`Expected '${expClose}', got 'end of text'`); } try { deep(genChars(str)); return true; } catch(e) { if ( dev ) console.log("Error: %s", e.message); } return false; } var cfg = [["(", ")"], ["[", "]"], ["{", "}"]]; // true console.log( check('{ text [ 23 ds s ] } ()', cfg, true) ) // false console.log( check('{ text [ 23 ds s ] (} )', cfg, true) ) // false console.log( check('{text', cfg, true) ) // false console.log( check('text}', cfg, true) )
Lupusregina[beta]
вот точно работающий код
Zaff
да я там написал полную чушь. В том варианте и стек не нужен
Я просто хотел свое решение добить, если этим способом вообще можно
Igor
По первой ссылке из гугла рабочее решение для js
Lupusregina[beta]
ща еще со стеком сделаю
Lupusregina[beta]
это, но не один вариант не подошел
Lupusregina[beta]
и у них даже ошибку не пишет, просто ошибка во время исполнения и все
Igor
hackernoon.com/programming-with-js-merge-sort-deb677b777c0
Igor
function merge
Igor
и у них даже ошибку не пишет, просто ошибка во время исполнения и все
Ну так может это ошибка в сабмите тогда, а не в алгоритме?
Славик
Славик
речь о вот этой задаче?
Славик
здесь вся загвоздка в том, что нужно модифицировать массив, а не создавать новый
Славик
при любом slice и т.д. произойдет потеря ссылки
Славик
тебе уже в соседнем чате Антон расписал отличное решение
Igor
Ну так может с этого и надо было начинать
Igor
А не со скидывания кода на джаве с вопросом, кто знает плюсы
Igor
🤦‍♂️
Славик
при любом slice и т.д. произойдет потеря ссылки
здесь надо реализовать алгоритм merge, но с модификацией - сдвигать элементы самостоятельно
Lupusregina[beta]
Я просто хотел свое решение добить, если этим способом вообще можно
вот вариант со стеком function check(str, bracketsConfig, dev = false) { const config = bracketsConfig; const chars = str.split(''); try { const stack = []; for(const char of chars) { const f = config.find(v => v.includes(char)); if ( f ) { const [open, close] = f; if ( open === char ) { stack.push(close); continue; } let expClose = stack.pop(); if ( expClose !== close ) throw new Error(`Expected '${expClose === undefined ? "end of text" : expClose}', got '${close}'`); } } if ( stack.length ) throw new Error(`Expected '${stack.pop()}, got 'end of text'`); return true; } catch(e) { if ( dev ) console.log("Error: %s", e.message); } return false; } var cfg = [["(", ")"], ["[", "]"], ["{", "}"]]; // true console.log( check('{ text [ 23 ds s ] } ()', cfg, true) ) // false console.log( check('{ text [ 23 ds s ] (} )', cfg, true) ) // false console.log( check('{text', cfg, true) ) // false console.log( check('text}', cfg, true) )
Славик
и работать с имеющимся массивом, не перетирая ссылку в переменной
Lupusregina[beta]
Славик
можно по идеи одним обходом
Igor
Сортируешь, идёшь с обеих сторон проверяя сумму
Igor
Либо кидаешь в хеш таблицу и проверяешь за один проход
Igor
В зависимости что важнее, память или время
Lupusregina[beta]
я эту предлагал, вроде работате
Igor
Сел бы и сделал
Lupusregina[beta]
function merge(nums1, m, nums2, n) { const tmp = Array(m + n); let i = 0, j = 0, k = 0; while(i < m && j < n) { if ( nums1[i] < nums2[j] ) { tmp[k] = nums1[i++]; } else { tmp[k] = nums2[j++]; } k++; } while( i < m ) tmp[k++] = nums1[i++]; while( j < n ) tmp[k++] = nums2[j++]; for(let i = 0; i < tmp.length; i++) nums1[i] = tmp[i]; return nums1; }
Serhii
Привет. Хлопцы и девчата, подскажите плиз кто знает, какой объем JS'a браузер может хранить?
Lupusregina[beta]
ну работает дома, а тесты не проходит
Lupusregina[beta]
а что это должно делать?
Igor
Как минимум времени могло не зайти