Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: Re: Re: Re: Re: should this backspace removal code be done better?

by eyepopslikeamosquito (Archbishop)
on Oct 05, 2003 at 07:59 UTC ( [id://296673]=note: print w/replies, xml ) Need Help??


in reply to Re: Re: Re: Re: should this backspace removal code be done better?
in thread should this backspace removal code be done better?

Not any more. This new smack is a lot faster by eliminating the alternation.

#!/usr/bin/perl -w use Benchmark qw(cmpthese); $s = "\bthis is an\b correct\b\b\b usage\b"; sub uk { $a = $s; $a =~ s[(?:[^\cH]\cH|^\cH)][]g while 1+index $a, chr(8); $a; } sub new1 { $a = $s; while ($a =~ s/(?:[^\cH]\cH|^\cH+)//g) {} $a; } sub smack { $a = $s; $a =~ s/^\cH+//; 1 while ($a =~ s/[^\cH]\cH//g); $a; } cmpthese(-5,{uk=>\&uk,new1=>\&new1,smack=>\&smack}); $s x= 100; cmpthese(-5,{uk=>\&uk,new1=>\&new1,smack=>\&smack}); Benchmark: running new1, smack, uk, each for at least 5 CPU seconds... new1: 6 wallclock secs ( 5.39 usr + 0.03 sys = 5.42 CPU) @ 11 +344.28/s (n=61486) smack: 6 wallclock secs ( 5.24 usr + 0.02 sys = 5.26 CPU) @ 36 +814.64/s (n=193645) uk: 4 wallclock secs ( 5.26 usr + 0.06 sys = 5.32 CPU) @ 13 +261.09/s (n=70549) Rate new1 uk smack new1 11344/s -- -14% -69% uk 13261/s 17% -- -64% smack 36815/s 225% 178% -- Benchmark: running new1, smack, uk, each for at least 5 CPU seconds... new1: 5 wallclock secs ( 5.22 usr + 0.05 sys = 5.27 CPU) @ 14 +0.04/s (n=738) smack: 6 wallclock secs ( 5.26 usr + 0.07 sys = 5.33 CPU) @ 87 +3.55/s (n=4656) uk: 5 wallclock secs ( 5.18 usr + 0.04 sys = 5.22 CPU) @ 17 +6.44/s (n=921) Rate new1 uk smack new1 140/s -- -21% -84% uk 176/s 26% -- -80% smack 874/s 524% 395% --

/-\

  • Comment on Re: Re: Re: Re: Re: should this backspace removal code be done better?
  • Download Code

Replies are listed 'Best First'.
Re: Re: Re: Re: Re: Re: should this backspace removal code be done better?
by antirice (Priest) on Oct 05, 2003 at 08:27 UTC

    Small problem. You may want to clear out the leading \b's after the while statement. Like many others on this thread, you've been bitten by the terminal's evaluation of \b.

    #!/usr/bin/perl -l $s = "\bt\b\bhello"; sub smack { $a = $s; $a =~ s/^\cH+//; 1 while ($a =~ s/[^\cH]\cH//g); $a; } sub othersmack { $a = $s; 1 while ($a =~ s/[^\cH]\cH//g); $a =~ s/^\cH+//; $a; } print smack(); print othermack(); print "smack correct" unless grep {ord==ord"\b"} split//,smack(); print "othersmack correct" unless grep {ord==ord"\b"} split//,othersma +ck(); __END__ output: hello hello othersmack correct

    However, getting rid of the alternation is a good bit quicker. =)

    antirice    
    The first rule of Perl club is - use Perl
    The
    ith rule of Perl club is - follow rule i - 1 for i > 1

      Hell yes!   It's over 4 times faster than even my attempt, with your repair making it correct.   Gratuitous benchmark below:
                     Rate     smack    new1      uk  badkcams othersmack
      smack         188/s        --    -96%    -97%      -97%       -99%
      new1         5088/s     2607%      --     -8%      -23%       -86%
      uk           5517/s     2835%      8%      --      -16%       -85%
      badkcams     6594/s     3409%     30%     20%        --       -82%
      othersmack  37394/s    19797%    635%    578%      467%         --
                  
                     Rate     smack    new1      uk  badkcams othersmack
      smack        42.6/s        --    -23%    -29%      -43%       -93%
      new1         54.9/s       29%      --     -8%      -27%       -91%
      uk           59.6/s       40%      9%      --      -21%       -90%
      badkcams     75.0/s       76%     37%     26%        --       -88%
      othersmack    626/s     1372%   1040%    951%      735%         --
      
      (See shenme's scratchpad for oogly program)

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://296673]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having an uproarious good time at the Monastery: (5)
As of 2024-04-24 09:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found