Wordsearch Solver

Removes all letters that do not belong to words for the input.

by briguy37

HTML

<table valign="top">
   
    <tr>
        <td valign="top">
    <b>Puzzle 1:</b>
<pre id="puzzle1">LLJKCABLFCI
OROLOBOCOIM
GELACSAPRSX
LPSTAHWVTAV
ANRLXLXQRBI
IHPLEDOXAHS
KJYAPHPYNOU
FABMADANZJA
EVISNOHTYPL
AAYLBMESSAC
WEIVBALOGOM</pre>
        </td>
        <td valign="top">
            <b>Words:</b>
            <pre>ADA
ALGOL
ASSEMBLY
BASIC
COBOL
DELPHI
FORTRAN
JAVA
LABVIEW
LOGO
PASCAL
PERL
PHP
PYTHON
SMALLTALK
VISUALC</pre>
        </td>
        <td valign="top">
            <b>Solution 1:</b>
            <pre id="input1"></pre>
            
        </td>
    </tr>
    <tr>
        <td valign="top">
    <b>Puzzle 2:</b>
<pre id="puzzle1">IAUERAWTFOSICPN
DGZPFLOPPYARFLU
RSNOCURSORVZDBM
AMNIUOMRNHEGUIN
OTBNSRMONITORNT
BEYTTSGPJBOLDRT
YRQEAHEHARDWARE
EOGRRNECECLOSEP
KIONTYKTODTOWER
ELCENSUPERPDKNN
ATRTPRYKELPVIEJ
GIEANPOTKSEDUSL
NXCMPASSWORDRUC
TEDITAGVSWJCTOV
CWOYPGYQKNLVXMW</pre>
        </td>
        <td valign="top">
            <b>Words:</b>
            <pre>BACKSPACE
BOLD
CLOSE
COMPACTDISC
COPY
CPU
CURSOR
DELETE
DESKTOP
DVD
EDIT
ENTER
EXIT
FLOPPY
FONT
HARDWARE
INTERNET
KEYBOARD
MONITOR
MOUSE
PASSWORD
PASTE
RETURN
SAVE
SOFTWARE
START
TEXT
TOWER
WORDPROCESSING</pre>
        </td>
        <td valign="top">
            <b>Solution 2:</b>
            <pre id="input2"></pre>
            
        </td>
    </tr>
</table>

CSS

td {
    border: 1px solid black;
    padding: 5px;
}

JavaScript

function solveWordsearch(input){
    var lineBreak = '\n';
    var solver = input.split(lineBreak+lineBreak);
    var board = solver[1].split(lineBreak);

    for(row=-1,output=[]; line=board[++row];){
        for(col=-1,output[row]=[]; line[++col];){
            for(rowIncrement=-2,output[row][col]=' ';2>++rowIncrement;){
                for(colIncrement=-2;2>++colIncrement;){
                    for(k=0; word=solver[0].split(lineBreak)[k++];){
                        for(charPosition=-1; wordChar=word[++charPosition];){
                            var startRowIndex=row-charPosition*rowIncrement-rowIncrement;
                            var startColIndex=col-charPosition*colIncrement-colIncrement;
                            for(wordIndex=0;(compareWordChar=word[wordIndex++])&&(compareBoardRow=board[startRowIndex+=rowIncrement])&&(compareBoardChar=compareBoardRow[startColIndex+=colIncrement])&&compareWordChar==compareBoardChar;){
                                if(wordIndex == word.length){
                                    output[row][col]=wordChar;
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    for(i=0;outLine=output[i];){
        output[i++]=outLine.join('');
    }

    return output.join('\n');
}

var input = "ADA\n"+
"ALGOL\n"+
"ASSEMBLY\n"+
"BASIC\n"+
"COBOL\n"+
"DELPHI\n"+
"FORTRAN\n"+
"JAVA\n"+
"LABVIEW\n"+
"LOGO\n"+
"PASCAL\n"+
"PERL\n"+
"PHP\n"+
"PYTHON\n"+
"SMALLTALK\n"+
"VISUALC\n"+
"\n"+
"LLJKCABLFCI\n"+
"OROLOBOCOIM\n"+
"GELACSAPRSX\n"+
"LPSTAHWVTAV\n"+
"ANRLXLXQRBI\n"+
"IHPLEDOXAHS\n"+
"KJYAPHPYNOU\n"+
"FABMADANZJA\n"+
"EVISNOHTYPL\n"+
"AAYLBMESSAC\n"+
"WEIVBALOGOM\n";
document.getElementById('input1').innerHTML=solveWordsearch(input);



var input2 =...