| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > сжатие строки (cgi скрипт) |
| Автор: annairam 27.3.2011, 21:03 |
| Добрый вечер!Не могли бы вы помочь с написанием скрипта? Сжатие строки Один из простых способов сжатия информации заключается в поиске одинаковых частей, идущих подряд. Вместо нескольких повторений можно записать их количество и всего одну часть. Задача. По заданной строке выдать её максимальное сжатие. Длинна получившейся строки считается вместе с числом. Длина числа - количество цифр в десятичной записи. Техническое требования Задана строка не содержащая цифр. Длина входной строки не более 100 символов. Если вариантов сжатия несколько, то выдать любой. ПРИМЕР Строка: ababababABabAbbccccccccccc Сжатие: 4ab1ABabAbb11c |
| Автор: Pfailed 27.3.2011, 21:45 |
| http://search.cpan.org/perldoc?Compress::LZW |
| Автор: annairam 28.3.2011, 07:41 |
| Надо что-то делать с этим? " use Compress::LZW; my $compressed = compress($fatdata); my $fatdata = decompress($compressed); my $smallcompressed = compress($thindata, 12); my $thindata = decompress($smallcompressed, 12);" один раз только скрипты писали( |
| Автор: alezzz 28.3.2011, 10:25 | ||
Вот такой вариант, может поможет:
Результат: 4abABabA2b11c, так думаю правильнее |
| Автор: alezzz 28.3.2011, 14:47 | ||
Не учел случай когда нужна 1 перед неповторяющейся последовательностью, вот исправленый вариант:
|
| Автор: annairam 28.3.2011, 14:55 |
| спасибо огромное!вроде все работает))) |
| Автор: annairam 28.3.2011, 18:01 |
| Что то не работает сам cgi(((( Вот в html пишу <h2> Второе задание по CGI. </h2> <form action="cgi-bin/pyp2.cgi" method=GET> <input type="button" value="Справка" onClick='alert("Даннй скрипт по заданной строке выдает ее максимальное сжатие.");'><br> <h4>Введите слово</h4> <input type="text" name="qwe"> <input type=submit value="Проверить"> <input type=reset value="Сброс"> </form></div> сам cgi написала так #!/usr/bin/perl $string = $ENV{'QUERY_STRING'}; @p = split (/&/, $string); foreach $i (@p) { ($name,$value)= split (/=/,$i); }; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack ("C", hex ($1))/eg; if ($name eq "qwe"){ $str=$value;} print "Content-type: text/html; charset=KOI8-r \n\n"; while($str =~ /(\w*?)(\w+?)\2+/g){ $res .= "1".$1 if $1; $res .= (length($&) - length($1)) / length ($2) . $2; } print $res; и в итоге никакого результата не выдается(по идее надо чтоб после того как пользователь ввел слово в эту форму он это слово сжимал.в самом perl Ваш код работает когда слово задается сразу,а вот тут уже нет. может я что-то неправильно пишу? |