если я правильно понял, надо "схлопнуть" одинаковые символы, и указать их количество, если более одного.
var str = 'AAAADEEESSQQQQQQ'; var result = str.replace(/(.)\1+/g, function(m, c) { return c + m.length; }); alert(result); |
Так это уже тысячу раз обсуждалось. Сжатие по хафману хорошо работает. с построением дерева и расчета весов на узел. Можно еже добавить семейство алгоритмов LZMA и получим самый настоящий zip.
Цитата:
|
А теперь с такой строкой, пожалуйста:
'AAAADEEESSQQQQ1111122QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ'естесно с возможностью распаковать:) |
Aetae,
var str = 'AAAADEEESSQQQQ1111122QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ'; var result = str.replace(/(.)\1+/g, function(m, c) {return c + '('+m.length+')'}); alert(result); |
j0hnik, вооот, уже разделители пошли, а на средне "шумном" - это приведёт не к сжатию а к увеличению.)
А ещё надо учитывать, что в строке могуть быть скобочки.) Тащем архиватор - это вам не хухры-мухры. Впрочем собес я получается тоже завалил: слишком много думаю. Есть тз, должен быть результат. Думать не надо. Любые доработки - за отдельные деньги.) |
Aetae,
Это же тестовое задание, тут цель эксперимента проверить способность испытуемого, а не придумать новый алгоритм сжатия который будет лучше существующих. |
именно. Алгоритм сжатия - это было бы задание дома сделать и прислать ответ. А если "на 15 мин в сраном блокнотике" - как раз простое схлопывание повторяющихся символов в строке только из букв. Ну и конечно, простое очевидное решение с регексом делается за минуту, хотя они, скорее всего, ожидали с циклом что-то..
|
Цитата:
|
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 06:57. |