Perl: sort string alphabetically, or remove dupe chars?

Nikolas Britton nikolas.britton at gmail.com
Thu Apr 27 20:10:38 UTC 2006


On 4/27/06, Andrew Reitz <ajr9 at po.cwru.edu> wrote:
>
> On Apr 26, 2006, at 12:34 AM, Nikolas Britton wrote:
>
> > On 4/25/06, Parv <parv at pair.com> wrote:
> [snip]
> > Thanks parv... I meant the algorithm was clunky, not the code... I'm
> > so new at this that I can't read your code, and I have a hard enough
> > time reading mine own :-).
> >
> > I've got another simple problem now. How do I get this code to stop
> > printing everything on a newline, I'm not using \n in my print
> > statement so why does it do that and how do I get it to stop?
> >
> > @wordlist1 = `sed /^$sedstring1\\\$/\\!d < enable2k_wordlist`;
> > foreach (@wordlist1) {
> >   $string = $_;
> >   $string =~ s/[$solvedletters1]//g;
> >   my @chars = split("", $string);
> >   $string = ""; @chars = sort (@chars);
> >     foreach (@chars) {
> >       $string .= $_;
> >     }
> >   $string =~ tr///cs;
> >   print "$string";
> > }
>
> Hi Nikolas,
>
> Most likely, your input has '\n' characters at the end of every line,
> and you aren't doing anything in perl to strip those away. Try adding
> a 'chomp($string);' line before you print.
>

Hey thanks, I think I did try that already... anyways... it doesn't
matter now because I reworked the code block, this is what I have so
far:

open(DATA, "< $wordlistfile")
    or die "Couldn't open $wordlistfile for reading: $!\n";

$regex = qr{^$sedstring1$};
my %freq;    #keys = characters, values = frequency count
while (<DATA>) {
   chomp;
   if (/$regex/) {
      push @guesswords, "\n$_";
      $_ =~ s/[$solvedletters1]//g;
      my @chars = split("", $_);
      $_ = ""; @chars = sort (@chars);
      foreach (@chars) {
         $foobar3 .= $_;
      }
      $_ = "$foobar3"; $foobar3 = "";
      $_ =~ tr///cs;
      #print "$_\n"; # For debugging
      $freq{$_}++ for  split(//, lc $_);
   }
}

$_ = scalar @guesswords;
print " Guesswords in list: $_\n";
if (@guesswords <= "20") {
   print "@guesswords\n\n";
}

# Print probabilities list.
foreach $_ (sort {$freq{$a} <=> $freq{$b}} (keys(%freq))) {
   print " $_\t=>\t$freq{$_}\n";
}


--
BSD Podcasts @ http://bsdtalk.blogspot.com/


More information about the freebsd-questions mailing list