Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked

Re: Stuck in komplexer regex, at least for me

by saintly (Scribe)
on Mar 26, 2007 at 17:17 UTC ( #606622=note: print w/ replies, xml ) Need Help??

in reply to Stuck in komplexer regex, at least for me

Well, I can make a ruleset that seems to fit:

  1. Always keep the first two numbers intact
  2. If any zeros start at position 3, remove them all.
  3. If you didn't do that, then if two or more zeros start after position 3, truncate them to a single 0
  4. If you didn't do either of the first two techniques, then remove a single 0 starting at position 3 or later entirely.

What happens if a single 0 starts at position 3? What does '35010333356' turn into?

Here's my code:
#!/usr/bin/perl use strict; use warnings; use Test::More; my %output_for = ( '215000007801' => '21507801', '300000324002' => '30324002', '890000457651' => '89457651', '210004563401' => '214563401', '201045139158' => '20145139158', ); plan tests => scalar keys %output_for; while ( my ($input, $correct_output) = each %output_for ) { my $orig_input = $input; $input = &compress_numstring( $input ); is( $input, $correct_output, "Solved '$orig_input'" ); } sub compress_numstring { my $starting_num = shift; return $starting_num unless(defined $starting_num && $starting_num =~ /^(\d{2})(\d+)/); my( $keep, $modify ) = ($1,$2); ( $modify =~ s/^0+// ) || ( $modify =~ s/0{2,}/0/ ) || ( $modify =~ s/(?<!0)0([1-9]|$)/$1/ ); return $keep . $modify; }
It passes the validation test, but it may fail further tests since the rules aren't clearly spelled out.

Comment on Re: Stuck in komplexer regex, at least for me
Download Code
Replies are listed 'Best First'.
Re^2: Stuck in komplexer regex, at least for me
by saintly (Scribe) on Mar 26, 2007 at 18:11 UTC
    (for the regex fanboys:
    sub compress_numstring { substr($_[0], 2) =~ s/(^0+|(0)0+|(?<!0)0([1-9]|$))/$2$3/; return $_[0]; }

    does the same thing as the other function, but with more job security)
    Unfortunately, 'use warnings' will complain.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (2)
As of 2015-11-28 04:08 GMT
Find Nodes?
    Voting Booth?

    What would be the most significant thing to happen if a rope (or wire) tied the Earth and the Moon together?

    Results (737 votes), past polls