Sun, 23 Jan 2011

Thoughts on masak's Perl 6 Coding Contest

Masak's
Perl 6 Coding Contest (short p6cc) is now in its final stage - the public
commentary of solutions. So far masak has commented on p1, p2,
and p3.
I enjoyed the reviews and explanations so far, and look forward to more
(except to the p4 review, because I botched the solution to this one).

The reviews made a good read, and here are only a few very minor points
that I find worth mentioning. No criticism intended (neither to the author nor
the reviewer).

Matthias'
p1 solution uses side effects in subroutine named
to-string. I would avoid that in "production" code (for
whatever I might mean with that word...), since it's not what I would
expect from the name. Instead of a counter, the array indexes could be
used to identify which matrix to stringify.

Masak's review of fox' p1
solution contains the question I wonder why the @items array
deserved a plural but the @matrix only a singular.... I'd say
that's because @matrix holds one matrix, but
@items holds many items. Speaking of which, I don't like
the name @matrix - it describe a structure rather than
the contents. The structure becomes pretty obvious through the access,
but what is in the matrix?

After viewing my own p1
submission without syntax hilighting, I wonder why I chose so many
double blank lines. My vim color scheme uses a dark blue for comments,
which means that comment blocks need more visual distance from code,
in my personal opinion. But when sharing code, I shouldn't make layout
decisions based on non-shared syntax hilighting.

colomon's
p2 submission uses complex numbers for coordinates. I considered
that myself, and there's nothing wrong with it. Just strange that he
then reinvented subtraction of two complex numbers in sub
lines-intersect. Maybe he didn't want to come up with
names for the intermediate results, $slope and
$axes-intercept might have been viable ones.

Matthias
could have simplified comb: /<&number>/ to just
comb: &number -- a regex is just a callable, and when
it's explicit in the current scope, you can just use a hard reference
to it.

colomon's
p3 solution could, as far as I can tell, replace all regexes with
tokens - less backtracking, fewer surprises.

Reviewing my own p3
solution, masak asked I wonder what stopped moritz from,
rather than doing $_ && .including on line 39, doing .?including
instead. Either he considered that too cute, or he didn't consider
it. I did consider it, but I decided against it, because the two
things are subtly different. Mine only calls the method if the topic is
true, whereas .?including always tries the call - even on a
type object, where accessing an attribute leads to a fatal error. I
think in my code that case doesn't show up, but it did appear during
debugging in earlier versions.