Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
41
Task/Langtons-ant/Perl/langtons-ant.pl
Normal file
41
Task/Langtons-ant/Perl/langtons-ant.pl
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
#!/usr/bin/perl
|
||||
use strict;
|
||||
# Perl 5 implementation of Langton's Ant
|
||||
|
||||
# Using screen coordinates - 0,0 in upper-left, +X right, +Y down -
|
||||
# these directions (right, up, left, down) are counterclockwise
|
||||
# so advance through the array to turn left, retreat to turn right
|
||||
my @dirs = ( [1,0], [0,-1], [-1,0], [0,1] );
|
||||
my $size = 100;
|
||||
|
||||
# we treat any false as white and true as black, so undef is fine for initial all-white grid
|
||||
my @plane;
|
||||
for (0..$size-1) { $plane[$_] = [] };
|
||||
|
||||
# start out in approximate middle
|
||||
my ($x, $y) = ($size/2, $size/2);
|
||||
|
||||
# pointing in a random direction
|
||||
my $dir = int rand @dirs;
|
||||
|
||||
my $move;
|
||||
for ($move = 0; $x >= 0 && $x < $size && $y >= 0 && $y < $size; $move++) {
|
||||
# toggle cell's value (white->black or black->white)
|
||||
if ($plane[$x][$y] = 1 - ($plane[$x][$y] ||= 0)) {
|
||||
# if it's now true (black), then it was white, so turn right
|
||||
$dir = ($dir - 1) % @dirs;
|
||||
} else {
|
||||
# otherwise it was black, so turn left
|
||||
$dir = ($dir + 1) % @dirs;
|
||||
}
|
||||
$x += $dirs[$dir][0];
|
||||
$y += $dirs[$dir][1];
|
||||
}
|
||||
|
||||
print "Out of bounds after $move moves at ($x, $y)\n";
|
||||
for (my $y=0; $y<$size; ++$y) {
|
||||
for (my $x=0; $x<$size; ++$x) {
|
||||
print $plane[$x][$y] ? '#' : '.';
|
||||
}
|
||||
print "\n";
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue