taguti wrote:
> Hello,
> 
> I'm wondering more good or Perlish code.
> 
> Strings are in formed "wwwHHMM", from "MON0000" to "SUN2359".
> So all data in good order is:
> @week = qw(MON TUE WED THU FRI SAT SUN);
> for my $w (@week) {
>   for my $HH ('00' .. '23') {
>     for my $MM ('00' .. '59') {
>       push @all, $w . $HH . $MM;
>     }
>   }
> }
> 
> So for example,
> &sortByWeek('FRI0101', 'TUE0202', 'MON2359')
> is favoured to return
> ('MON2359', 'TUE0202', 'FRI0101')
> 
> My code is below, not checked well,
> but I think it is too cheap, or not tricky,
> I'm searching another...
> 
> sub sortByWeek {
>   my @in = @_;
>   my %WeekNum = ('MON'=>0, 'TUE'=>1....);
>   my @WeekStr = ('MON', 'TUE'....);
>   for (@in) {
>     substr($_,0,3) = $WeekNum{(substr($_,0,3)} . "\x00\x00"
>      if defined $WeekNum{(substr($_,0,3)};
>   }
>   @in = sort @in;
>   for (@in) {
>     substr($_,0,3) = $WeekStr[substr($_,0,1)]
>      if substr($_,0,3) =~ /[0123456]\x00\x00/;
>   }
>   return @in;
> }

You could try something like this:

my @res = &sortByWeek ('FRI0101', 'TUE0202', 'MON2359');
print "@res\n";

sub sortByWeek {
        my %WeekNum = ('MON'=>0, 'TUE'=>1, 'WED'=>2, 'THU'=>3, 'FRI'=>4,
          'SAT'=>5, 'SUN'=>6);

return map $_->[0], sort { $a->[1] cmp $b->[1] }
   map [$_, $WeekNum{substr ($_, 0, 3)} . substr ($_, 3, 4)], @_;

}

__END__



-- 
   ,-/-  __      _  _         $Bill Luebkert   ICQ=162126130
  (_/   /  )    // //       DBE Collectibles   Mailto:[EMAIL PROTECTED]
   / ) /--<  o // //      http://dbecoll.tripod.com/ (Free site for Perl)
-/-' /___/_<_</_</_     Castle of Medieval Myth & Magic http://www.todbe.com/

_______________________________________________
Perl-Unix-Users mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to