Algorithm-Search
view release on metacpan or search on metacpan
#!/usr/bin/perl
#Copyright 2008 Arthur S Goldstein
#word search
use Test::More tests => 1;
package words;
our %word_list;
our $tree = {};
my $count = 0;
# my $dictionary = "/Users/arthurgoldstein/downloads/TWL06.txt";
my $dictionary = "t/wsdict";
my $fh;
open $fh, "<", $dictionary;
while (my $word = <$fh>) {
$word = uc $word;
$word =~ s/[^A-Z]//g;
$word_list{$word}=1;
my @letters = split //,$word;
my $add_to_tree = $tree;
foreach my $letter (@letters) {
#print STDERR "Letter $letter\n";
$add_to_tree->{$letter} = $add_to_tree->{$letter} || {};
$add_to_tree = $add_to_tree->{$letter};
}
#print STDERR "end of word $word\n";
}
close $fh;
#use Data::Dumper;
#print STDERR Dumper($tree)."\n";
#print STDERR "is AD a word? ";
#print STDERR $word_list{'AD'};
#print STDERR "\n";
#exit;
# print STDERR "Word count ".scalar(keys %word_list);
sub new {return bless {}}
sub set_position {
my $self = shift;
my ($row, $column, $board) = @_;
#print STDERR "board is $board\n";
$self->{row} = $row;
$self->{column} = $column;
$self->{tree} = $tree;
my @rows = split (" ", $board);
my $row_count = 0;
foreach my $row_in (@rows) {
my $column_count = 0;
foreach my $letter (split (//,$row_in)) {
$self->{board}->[$row_count]->[$column_count++] = $letter;
}
$self->{max_column} = $column_count-1;
$row_count++;
}
$self->{max_row} = $row_count-1;
#print STDERR "max row set to ".$self->{max_row}."\n";
#print STDERR "row is $row and col is $column\n";
my $letter = $self->{board}->[$self->{row}]->[$self->{column}];
$self->{chosen}->[$self->{row}]->[$self->{column}]++;
$self->{tree} = $self->{tree}->{$letter};
$self->{word} = $letter;
}
sub value {
my $self = shift;
return $self->{row}.' '.$self->{column};
}
sub move {
my $self = shift;
my $direction = shift;
if ($direction eq 'U' || $direction eq 'UL' || $direction eq 'UR') {
if ($self->{row} == 0) {
#print STDERR "cannot move up\n";
return}
$self->{row}--;
}
if ($direction eq 'D' || $direction eq 'DL' || $direction eq 'DR') {
if ($self->{row} == $self->{max_row}) {
#print STDERR "cannot move down\n";
return}
$self->{row}++;
}
if ($direction eq 'L' || $direction eq 'UL' || $direction eq 'DL') {
if ($self->{column} == 0) {
#print STDERR "cannot move left\n";
return}
$self->{column}--;
( run in 0.731 second using v1.01-cache-2.11-cpan-39bf76dae61 )