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"; }