Я пишу скрипт на языке Perl, который, учитывая список строки в качестве входных данных, похожее на это:Perl скрипт для сжатия строки замены повторяющихся символов
AADDDDKPP PrRRRR
wwwwwwwwwwYY SSSSS SSSSGGGGGGGGGGGGGG
ZZZZZFZZQZZZZZZZZZZZZZ
должен substituite каждый символ, который повторяется более чем в 2 раза последовательно с числом повторений, за которым следует символ. Таким образом, с входной показано выше, сценарий должен дать на выходе эти строки:
AA4DKPP Pr4R
10wYY 5S 4S14G
5ZFZZQ13Z
Вот Perl скрипт я написал до сих пор:
foreach my $line(@lines){
@letters=split("",$line);
@alreadyChecked=();
foreach my $letter(@letters){
$count=0;
if (grep {$letter} @alreadyChecked) {
next;
}
push(@alreadyChecked,$letter);
foreach my $index(@letters){
if($letter eq $index){
$count=$count+1;
} else {
@alreadyChecked=0;
last;
}
}
if($count>2){
@chops=split(/$letter+/,$line);
$line=$chops[0].$count.$letter.$chops[1];
}
}
}
Я думаю, что есть более чем один недостаток в этом код, но не может найти, где.
Как вы хотите цифры в строке ввода обрабатываются? Ваш пример не включает никаких, поэтому, возможно, их нет. Но было бы полезно получить разъяснения. – AdrianHHH
Почему вы хотите сжать строку таким образом, в частности? – ysth
@ysth Это просто упражнение, которое я делаю для себя. – Andrew