<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
            "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <title>Battleships</title>
        
        <style type="text/css">
            BODY
            {
                color: #003;
                background: #ffe;
            }
            DT { font-weight: bold; }
            TABLE
            {
                border-collapse: collapse;
            }
            TH
            {
                background: #003;
                color: #ffe;
                border: 1px solid black;
            }
            TD
            {
                border: 1px solid;
            }

<?php
    
foreach (array(1=>'red'2=>'blue'3=>'magenta'4=>'lime'5=>'orange'6=>'yellow'7=>'cyan') as $k=>$c)
    {
        foreach (array(
'top','bottom','left','right') as $p)
        {
            
$l substr(strtoupper($p), 01);
            print 
"\t\t\tTD.B{$k}{$l} { border-{$p}: 3px solid {$c}; }\n";
        }
        print 
"\t\t\tTD.B{$k}I { color: {$c}; }\n";
    }
?>
        </style>
    </head>
    <body>
        <h1>Battleships</h1>
    
<?php

    
function safe_implode ($str$arr)
    {
        if (
is_array($arr))
            return 
implode($str$arr);
        return 
$arr;
    }
    
    function 
get_styling ($boxes)
    {
        
$retval = array();
        foreach (
$boxes as $k=>$b)
        {
            
// Find "top" and "bottom" borders
            
for ($i=$b[0]; $i<=$b[2]; $i++)
            {
                
$retval[$b[1]][$i][] = 'B'.$k.'T';
                
$retval[$b[3]][$i][] = 'B'.$k.'B';
            }
            
// Find "left" and "right" borders
            
for ($i=$b[1]; $i<=$b[3]; $i++)
            {
                
$retval[$i][$b[0]][] = 'B'.$k.'L';
                
$retval[$i][$b[2]][] = 'B'.$k.'R';
            }
            
// Fill interior
            
for ($i=$b[0]; $i<=$b[2]; $i++)    
                for (
$j=$b[1]; $j<=$b[3]; $j++)
                    
$retval[$j][$i][] = 'B'.$k.'I';
        }
        return 
$retval;
    }
    
    
$box[1] = array(1226);    // top left col, top left row, bottom right col, bottom right row
    
$box[2] = array(4758);    // ditto
    
$box[3] = array(5387);    // overlaps!
    
$box[4] = array(6474);
    
$box[5] = array(7676);
    
$box[6] = array(19210);
    
$box[7] = array(107109);
    
$style get_styling($box);
    
    
$LETTERS 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

    print 
"\t\t<table>\n";
    print 
"\t\t\t<thead>\n";
    print 
"\t\t\t\t<tr>\n";
    print 
"\t\t\t\t\t<th>&nbsp;</th>\n";
    for (
$j=1$j<=10$j++)
        print 
"\t\t\t\t\t".sprintf('<th scope="col">%s</th>'substr($LETTERS$j-11))."\n";
    print 
"\t\t\t\t</tr>\n";
    print 
"\t\t\t</thead>\n";
    print 
"\t\t\t<tbody>\n";
    for (
$i=1$i<=10$i++)
    {
        print 
"\t\t\t\t<tr>\n";
        print 
"\t\t\t\t\t".sprintf('<th scope="row">%s</th>'$i)."\n";
        for (
$j=1$j<=10$j++)
        {
            
$cell substr($LETTERS$j-11).$i;
            print 
"\t\t\t\t\t".sprintf('<td class="%s">%s</td>',
                
safe_implode(' '$style[$i][$j]), $cell)."\n";
        }
        print 
"\t\t\t\t</tr>\n";
    }
    print 
"\t\t\t</tbody>\n";
    print 
"\t\t</table>\n";    
            
?>

    </body>
    
    <dl>
        <dt>Red</dt>
        <dd>Dave's favourite positions in battleships</dd>
        <dt>Blue</dt>
        <dd>Bob's</dd>
        <dt>Magenta</dt>
        <dd>Steve's</dd>
        <dt>Lime</dt>
        <dd>Tom's</dd>
        <dt>Orange</dt>
        <dd>Dick's</dd>
        <dt>Yellow</dt>
        <dd>Harry's</dd>
        <dt>Cyan</dt>
        <dd>Phil's</dd>
    </dl>
</html>