summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/GridFiller.pm15
1 files changed, 12 insertions, 3 deletions
diff --git a/lib/GridFiller.pm b/lib/GridFiller.pm
index 4ab25ac..38bf7f6 100644
--- a/lib/GridFiller.pm
+++ b/lib/GridFiller.pm
@@ -217,9 +217,18 @@ sub _build_result {
sub _find_colour_for {
my ($self,$x,$y,$dir) = @_;
- return $colourmap{$self->grid->[$y][$x]}->{$dir}->{
- ($dir == $HORIZONTAL) ? ($y % 2) : ($x % 2)
- };
+ my $parity = ($dir == $HORIZONTAL) ? ($y % 2) : ($x % 2);
+
+ my $chosen = $colourmap{$self->grid->[$y][$x]}->{$dir}->{$parity};
+
+ # avoid colour runs
+ if ( ( $x>0 && $dir == $HORIZONTAL && $self->result->[$y][$x-1][0] == $chosen )
+ or
+ ( $y>0 && $dir == $VERTICAL && $self->result->[$y-1][$x][0] == $chosen )
+ ) {
+ $chosen = $colourmap{$self->grid->[$y][$x]}->{$dir}->{1-$parity};
+ }
+ return $chosen;
}
}