Wordsearcher

By Caaz
Platform:  Perl
Published  May 05, 2010
Updated  May 05, 2010
Basically, if you want to hack your morning newspaper word searches, put the letters in a text file, and load it up with this. It will ask you questions, to help you through finding words. #!/usr/bin/perl
$Name = "Worm";
Say("Hi, I'm Book$Name, here to solve your word searches.");
Say("Where is your Word Search located?");
chomp($File = <STDIN>);
open SEARCH, "<".$File;
@Problem=<SEARCH>;
close SEARCH;
chomp(@Problem);
@Rows = split //, $Problem[0];
Say($Rows = @Rows." Rows and Columns, assuming it's a square.");
$Problem = join "", @Problem;
@Let = split //, $Problem;
Say("What word do you want me to find?");
chomp($Word = <STDIN>);
@Letters = split //, $Word;
$LetterNum = @Letters;
$MyRow = 1;
$Num = -1;
foreach $CLet (@Let) {
$MyColumn++;
$Num++;
if($MyColumn > @Rows) {
$MyColumn = 1;
$MyRow++;
}
if($CLet =~ /^$Letters[0]$/i) {
print "\n";
$Found++;
Say("Found $CLet! Column $MyColumn Row $MyRow");
if($LetterNum <= $Found) {
Say("Found $Word!");
exit;
}
$TempVarA = 0;
$TempVarB = 0;
$TempVarC = $MyColumn;
$TempVarD = $MyRow;
# Vertically, down.
while ($Found > 0) {
$TempVarA += @Rows;
$TempVarB++;
$TempVarD++;
if($Let[$Num + $TempVarA] =~ /^$Letters[$TempVarB]$/i) {
Say("Found $Let[$Num + $TempVarA]! Column $TempVarC Row $TempVarD");
$Found++;
if($LetterNum <= $Found) {
Say("Found $Word! South.");
$Found = 0;
exit;
}
else {
redo;
}
}
else {
$Found = 0;
}
}
$TempVarA = 0;
$TempVarB = 0;
$TempVarC = $MyColumn;
$TempVarD = $MyRow;
$Found = 1;
# Vertically, Up.
while ($Found > 0) {
$TempVarA += @Rows;
$TempVarB++;
$TempVarD--;
if($Let[$Num - $TempVarA] =~ /^$Letters[$TempVarB]$/i) {
if($Num - $TempVarA < 0) {
redo;
}
Say("Found $Let[$Num - $TempVarA]! Column $TempVarC Row $TempVarD");
$Found++;
if($LetterNum <= $Found) {
Say("Found $Word! North");
$Found = 0;
exit;
}
else {
redo;
}
}
else {
$Found = 0;
}
}
#
$TempVarA = 0;
$TempVarB = 0;
$TempVarC = $MyColumn;
$TempVarD = $MyRow;
$Found = 1;
# Horizantally, Right.
while ($Found > 0) {
$TempVarA++;
$TempVarB++;
$TempVarC++;
if($TempVarC > @Rows) {
$Found = 0;
next;
}
if($Let[$Num + $TempVarA] =~ /^$Letters[$TempVarB]$/i) {
Say("Found $Let[$Num + $TempVarA]! Column $TempVarC Row $TempVarD");
$Found++;
if($LetterNum <= $Found) {
Say("Found $Word! East.");
$Found = 0;
exit;
}
else {
redo;
}
}
else {
$Found = 0;
}
}
#
$TempVarA = 0;
$TempVarB = 0;
$TempVarC = $MyColumn;
$TempVarD = $MyRow;
$Found = 1;
# Horizantally, Left.
while ($Found > 0) {
$TempVarA++;
$TempVarB++;
$TempVarC--;
if($TempVarC < 1) {
$Found = 0;
next;
}
if($Let[$Num - $TempVarA] =~ /^$Letters[$TempVarB]$/i) {
Say("Found $Let[$Num - $TempVarA]! Column $TempVarC Row $TempVarD");
$Found++;
if($LetterNum <= $Found) {
Say("Found $Word! West.");
$Found = 0;
exit;
}
else {
redo;
}
}
else {
$Found = 0;
}
}
#
$TempVarA = 0;
$TempVarB = 0;
$TempVarC = $MyColumn;
$TempVarD = $MyRow;
$Found = 1;
# Diagonally South-West
while ($Found > 0) {
$TempVarA += @Rows - 1;
$TempVarB++;
$TempVarC += @Rows - 1;
if($TempVarC > @Rows) {
$TempVarD++;
$TempVarC = $TempVarC - @Rows;
}
if($Let[$Num + $TempVarA] =~ /^$Letters[$TempVarB]$/i) {
Say("Found $Let[$Num + $TempVarA]! Column $TempVarC Row $TempVarD");
$Found++;
if($LetterNum <= $Found) {
Say("Found $Word! South-West.");
$Found = 0;
exit;
}
else {
redo;
}
}
else {
$Found = 0;
}
}
#
$TempVarA = 0;
$TempVarB = 0;
$TempVarC = $MyColumn;
$TempVarD = $MyRow;
$Found = 1;
# Diagonally South-East
while ($Found > 0) {
$TempVarA += @Rows + 1;
$TempVarB++;
$TempVarC += @Rows + 1;
if($TempVarC > @Rows) {
$TempVarD++;
$TempVarC = $TempVarC - @Rows;
}
if($Let[$Num + $TempVarA] =~ /^$Letters[$TempVarB]$/i) {
Say("Found $Let[$Num + $TempVarA]! Column $TempVarC Row $TempVarD");
$Found++;
if($LetterNum <= $Found) {
Say("Found $Word! South-East.");
$Found = 0;
exit;
}
else {
redo;
}
}
else {
$Found = 0;
}
}
#
$TempVarA = 0;
$TempVarB = 0;
$TempVarC = $MyColumn;
$TempVarD = $MyRow;
$Found = 1;
# Diagonally North-West
while ($Found > 0) {
$TempVarA += @Rows + 1;
$TempVarB++;
$TempVarD--;
$TempVarC--;
if($TempVarC < 1) {
$Found = 0;
next;
}
if($Let[$Num - $TempVarA] =~ /^$Letters[$TempVarB]$/i) {
if($Num - $TempVarA < 0) {
Say("Too far...");
redo;
}
Say("Found $Let[$Num - $TempVarA]! Column $TempVarC Row $TempVarD");
$Found++;
if($LetterNum <= $Found) {
Say("Found $Word! North-West.");
$Found = 0;
exit;
}
else {
redo;
}
}
else {
$Found = 0;
}
}
#
$TempVarA = 0;
$TempVarB = 0;
$TempVarC = $MyColumn;
$TempVarD = $MyRow;
$Found = 1;
# Diagonally North-East
while ($Found > 0) {
$TempVarA += @Rows - 1;
$TempVarB++;
$TempVarD--;
$TempVarC++;
if($TempVarC < 1) {
$Found = 0;
next;
}
if($Let[$Num - $TempVarA] =~ /^$Letters[$TempVarB]$/i) {
if($Num - $TempVarA < 0) {
Say("Too far...");
redo;
}
Say("Found $Let[$Num - $TempVarA]! Column $TempVarC Row $TempVarD");
$Found++;
if($LetterNum <= $Found) {
Say("Found $Word! North-East.");
$Found = 0;
exit;
}
else {
redo;
}
}
else {
$Found = 0;
}
}
#
}
}
print "\n";
Say("I failed to find $Word.\n");

sub Say { print "$Name - $_[0]\n"; }

Comments

Sign in to comment.
Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.