alex-romanov,
http://javascript.ru/forum/css-html/...teki-v-js.html |
Цитата:
|
в коде может быть указан
- метод разблокировки - метод блокировки Это неправильно. Сначала нужно указать метод который блокирует ресурс, затем должен быть метод который освобождает ресурс. Например, программист ошибся и указал лишнии методы, либо в неправильном порядке. Поэтому программа получает на вход порядок расположения методов (блокировка/разблокировка) и предлагает несколько вариантов правильных. Когда идет многопоточная обработка: один метод блокирует ресурс (lock), затем после обработки данных, ресурс должен быть разблокирован(unlock) lock - { unlock - } |
Цитата:
Твоя задача почти идеальна, но удаляет ценную одну пару, то есть в одном из вариантов она выдает [] для такой входной строки var str='[]][]]'; [],[[]],[][] |
Цитата:
В моем варианте показываются все разные и "валидные" расстановки скобок из заданной последовательности. Цитата:
|
Цитата:
alex-romanov, каждый запущенный метод имеет конец! Метод важно закрыть! Но удалять запущенные методы нельзя! Вот мой вариант... { class IndexedRegExp extends RegExp { [Symbol.replace](s, f) { let i = 0; return s.replace(new RegExp(this), function() { return f(i++, ...arguments); }); } } class Pairs extends Array { constructor(string, openingMethod, closingMethod) { super(); Object.assign(this, { string, openingMethod, closingMethod }); var l = [...string].filter(v => v === closingMethod).length; var re = new IndexedRegExp(`\\${closingMethod}`,"g"); for (var i = 0, len = 2 ** l; i < len; i++) { let x = string.replace(re, (j,m) => ((1 << j) & i) === 0 ? "" : closingMethod); if(this.isValid(x) && !this.includes(x)) this.push(x); } } isValid(string) { var index = 0; for(const char of string) { if(char === this.openingMethod) index++; else if(char === this.closingMethod) index--; if(index < 0) return false; } return index === 0; } } // Примеры console.log(new Pairs("[ x] x] [ x]x ]","[","]")); console.log(new Pairs("[ ] x ] x]","[","]")); console.log(new Pairs("[ x ] x ] x]","[","]")); console.log(new Pairs("{}}{}}","{","}")); console.log(new Pairs("[]][]]","[","]")); } Также можете посмотреть интерактивный пример с добавленным функционалом закрытия не закрытых методов! (Если поставите галочку в Auto Closing)https://codepen.io/Malleys/pen/rEGjVM?editors=0010 |
Цитата:
|
Цитата:
Lock() - uncock() Lock() lock() unlock() unlock() - вот эту схему и заменили скобками. Иногда можеты быть ошибка в коде вот такая unlock() unlock() lock() - валидатор при такой схемы должен вернуть 0 вариантов Lock()-lock()-lock()-unlock()-unlock() Здесь один из lock() лишний и т.д. |
Цитата:
|
Цитата:
var l = [...string].filter(v => v === closingMethod).length; мне это не понятно думаю вы использовали node.js я его с трудом понимаю, а точнее вообще непонятно, только некторые моменты. Спасибо за труд, но я не смогу перевести ваш код на свой язык. Даже зная немного jquery и javascript трудно читать. Но вообще спасибо. Кстати регулярка здесь не должна использоваться, так как она требует больше ресурсов (то есть ее в рабочем коде в серверной части редко используют и стараются избегать), поэтому ее не используем. |
Часовой пояс GMT +3, время: 18:14. |