Wordsearcher

By Caaz on 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.