### Re^2: Knight's Tour Problem in Perl

by GrandFather (Saint)
 on Dec 01, 2008 at 02:38 UTC Need Help??

in reply to Re: Knight's Tour Problem in Perl
in thread Knight's Tour Problem in Perl

Actually hardly any of the OP's lines were more than one line. However, processing the OP code through Perl tidy and with a little hand tidying (including adding strictures and some blank lines) the code is still only 62 lines long:

```use strict;
use warnings;

print "\nUse: SIZE START_X START_Y [0,1]" and exit if @ARGV < 4;

my (\$N, \$X0, \$Y0, \$VERBOSE) = @ARGV;
my \$MOVES = 0;
my @moves = ([-2, -1], [-1, -2], [-2, 1], [-1, 2], [2, -1], [1, -2], [
+2, 1], [1, 2]);
my @board;

my \$last_move = [\$X0, \$Y0] and inform_board ();

\$last_move = inform_board (\$last_move) while \$MOVES < \$N * \$N;

sub init {
return (\$_[0] > \$N / 2) ? init (\$N - 1 - \$_[0], \$_[1])
: (
\$_[1] > \$N / 2 ? init (\$_[0], \$N - 1 - \$_[1])
: (
\$_[0] >= 2
&& \$_[1] >= 2 ? 8
: (   (\$_[0] >= 2 && \$_[1] == 1 || \$_[1] >= 2 && \$_[0] ==
+1) ? 6
: (\$_[0] + \$_[1] > 1 ? 4 : (\$_[0] + \$_[1] == 1 ? 3 : 2
+)))
)
);
}

sub inRange {
my (\$pos, \$D) = @_;
my (\$x, \$y) = (\$pos->[0] + \$D->[0], \$pos->[1] + \$D->[1]);
return (\$x >= 0 && \$x < \$N && \$y >= 0 && \$y < \$N && \$board[\$x][\$y]
+ >= 0)
? [\$x, \$y]
: 0;
}

sub inform_board {
my (\$moved_to) = @_;

if (\$moved_to) {
\$MOVES++;
print "\n\$MOVES.\$moved_to->[0], \$moved_to->[1]" if \$VERBOSE;
my (\$MIN, \$next_to_move) = (10, []);

foreach (@moves) {
if (my \$finalPos = inRange (\$moved_to, \$_)) {
my \$value_ref = \\$board[\$finalPos->[0]][\$finalPos->[1]
+];
(\$MIN, \$next_to_move, \$board[\$moved_to->[0]][\$moved_to
+->[1]]) =
(\$\$value_ref, \$finalPos, 0)
if (--\$\$value_ref >= 0 && \$\$value_ref < \$MIN);
}
}

return \$next_to_move;
} else {
push @board, [(0) x \$N] for (1 .. \$N);

for my \$i (0 .. \$N - 1) {
\$board[\$i][\$_] = init (\$i, \$_) for 0 .. \$N - 1;
}
}
}

Perl's payment curve coincides with its learning curve.

Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://726982]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (4)
As of 2024-07-24 20:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?

No recent polls found

Notices?
 • erzuuli ‥ 🛈The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.