SPUG: "Programming Challenge"

Michael R. Wolf MichaelRWolf at att.net
Wed Dec 17 23:09:59 CST 2003


Ross Wolin <rowol at copper.net> writes:


[...]

>     #Method 3 (same as #1, but buffered writes)
>     #Now interleave the low and high bytes and write to STDOUT,
>     #buffering the write in memory first
>     my $buf;
>     while ($LSB =~/(.)/g) {
>        $buf .= $1;
>        $MSB =~/(.)/g;
>        $buf .= $1;
>     }
>     syswrite(STDOUT, $buf, length($buf));

Caveat emptor.  All code is untested.

You can get rid of the regexp keeping track of pos() via the /g by
spliting it all at once.

    @lsb = split //, $lsb;
    @msb = split //, $msb;

    die "Oops. Bad balance." unless @lsb == @msb;

    while (@lsb && @msb) {
        print pop @lsb, pop $msb;
    }

Anyone remember Perl6 enough to do this with parallel iterators?
Something like this....

    for @lsb ; @msb -> $lsb; $msb {
        print $lsb, $msb;
    }

Or (sorry, Tim... sometimes I like it the other way around)

    print $lsb, $msb for split //, $LSB ; split //, $MSB -> $lsb ; $msb;

Well, perhaps not in *this* case.....

But then again, I think this has a parsing problem. Is ";" the
expression terminator or the stream separator? I guess we'll have to
wait and see.

Enjoy,
Michael Wolf


P.S. Did you like my use of "remember" to reference the future?

    It's a poor sort of memory that only works backward.
      -- Lewis Carroll

-- 
Michael R. Wolf
    All mammals learn by playing!
        MichaelRWolf at att.net





More information about the spug-list mailing list