<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>// do something here &#187; Stack Overflow</title>
	<atom:link href="http://www.dosomethinghere.com/category/stack-overflow/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dosomethinghere.com</link>
	<description>Turning impossibilities into 1s and 0s professionally since 0&#120;07C1</description>
	<lastBuildDate>Thu, 29 Jul 2010 14:46:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Battleship AI contest on Stack Overflow</title>
		<link>http://www.dosomethinghere.com/2009/11/26/battleship-ai-contest-on-stack-overflow/</link>
		<comments>http://www.dosomethinghere.com/2009/11/26/battleship-ai-contest-on-stack-overflow/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 16:39:27 +0000</pubDate>
		<dc:creator>BP</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Stack Overflow]]></category>
		<category><![CDATA[C#.NET]]></category>

		<guid isPermaLink="false">http://www.dosomethinghere.com/?p=400</guid>
		<description><![CDATA[Recently there was a contest running on Stack Overflow to design the best Battleship AI. Here is a link to the page:
What is the best Battleship AI?
I must admit that I am still smarting over this contest, as my BP7 contest entry did awesomely well and incredibly poor at the same time. Here is the [...]]]></description>
			<content:encoded><![CDATA[<p>Recently there was a contest running on Stack Overflow to design the best Battleship AI. Here is a link to the page:</p>
<p><a href="http://stackoverflow.com/questions/1631414/what-is-the-best-battleship-ai" target="_blank">What is the best Battleship AI?</a></p>
<p>I must admit that I am still smarting over this contest, as my BP7 contest entry did awesomely well and incredibly poor at the same time. Here is the code:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">namespace</span> Battleship
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Drawing</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Linq</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> BP7 <span style="color: #008000;">:</span> IBattleshipOpponent
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Name <span style="color: #000000;">&#123;</span> get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> <span style="color: #666666;">&quot;BP7&quot;</span><span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span> <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">public</span> Version Version <span style="color: #000000;">&#123;</span> get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">version</span><span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
        Random rand <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Random<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        Version version <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Version<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">0</span>, <span style="color: #FF0000;">7</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        Size gameSize<span style="color: #008000;">;</span>
        List<span style="color: #008000;">&lt;</span>Point<span style="color: #008000;">&gt;</span> scanShots<span style="color: #008000;">;</span>
        List<span style="color: #008000;">&lt;</span>NextShot<span style="color: #008000;">&gt;</span> nextShots<span style="color: #008000;">;</span>
        <span style="color: #FF0000;">int</span> wins, losses<span style="color: #008000;">;</span>
        <span style="color: #FF0000;">int</span> totalWins <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
        <span style="color: #FF0000;">int</span> totalLosses <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
        <span style="color: #FF0000;">int</span> maxWins <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
        <span style="color: #FF0000;">int</span> maxLosses <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
        <span style="color: #FF0000;">int</span> matchWins <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
        <span style="color: #FF0000;">int</span> matchLosses <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">enum</span> Direction <span style="color: #000000;">&#123;</span> VERTICAL <span style="color: #008000;">=</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span>, UNKNOWN <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span>, HORIZONTAL <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span> <span style="color: #000000;">&#125;</span><span style="color: #008000;">;</span>
        Direction hitDirection, lastShotDirection<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #FF0000;">enum</span> ShotResult <span style="color: #000000;">&#123;</span> UNKNOWN, MISS, HIT <span style="color: #000000;">&#125;</span><span style="color: #008000;">;</span>
        ShotResult<span style="color: #000000;">&#91;</span>,<span style="color: #000000;">&#93;</span> board<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">struct</span> NextShot
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">public</span> Point point<span style="color: #008000;">;</span>
            <span style="color: #0600FF;">public</span> Direction direction<span style="color: #008000;">;</span>
            <span style="color: #0600FF;">public</span> NextShot<span style="color: #000000;">&#40;</span>Point p, Direction d<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                point <span style="color: #008000;">=</span> p<span style="color: #008000;">;</span>
                direction <span style="color: #008000;">=</span> d<span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">struct</span> ScanShot
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">public</span> Point point<span style="color: #008000;">;</span>
            <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> openSpaces<span style="color: #008000;">;</span>
            <span style="color: #0600FF;">public</span> ScanShot<span style="color: #000000;">&#40;</span>Point p, <span style="color: #FF0000;">int</span> o<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                point <span style="color: #008000;">=</span> p<span style="color: #008000;">;</span>
                openSpaces <span style="color: #008000;">=</span> o<span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> NewGame<span style="color: #000000;">&#40;</span>Size size, TimeSpan timeSpan<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">gameSize</span> <span style="color: #008000;">=</span> size<span style="color: #008000;">;</span>
            scanShots <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&lt;</span>Point<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            nextShots <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&lt;</span>NextShot<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            fillScanShots<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            hitDirection <span style="color: #008000;">=</span> Direction.<span style="color: #0000FF;">UNKNOWN</span><span style="color: #008000;">;</span>
            board <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ShotResult<span style="color: #000000;">&#91;</span>size.<span style="color: #0000FF;">Width</span>, size.<span style="color: #0000FF;">Height</span><span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> fillScanShots<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #FF0000;">int</span> x<span style="color: #008000;">;</span>
            <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span>x <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> x <span style="color: #008000;">&lt;</span> gameSize.<span style="color: #0000FF;">Width</span> <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> x<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                scanShots.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> Point<span style="color: #000000;">&#40;</span>x, x<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>gameSize.<span style="color: #0000FF;">Width</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">10</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span>x <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> x <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">3</span><span style="color: #008000;">;</span> x<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    scanShots.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> Point<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">9</span> <span style="color: #008000;">-</span> x, x<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                    scanShots.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> Point<span style="color: #000000;">&#40;</span>x, <span style="color: #FF0000;">9</span> <span style="color: #008000;">-</span> x<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #000000;">&#125;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> PlaceShips<span style="color: #000000;">&#40;</span><span style="color: #000000;">System.<span style="color: #0000FF;">Collections</span></span>.<span style="color: #0000FF;">ObjectModel</span>.<span style="color: #0000FF;">ReadOnlyCollection</span><span style="color: #008000;">&lt;</span>Ship<span style="color: #008000;">&gt;</span> ships<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>Ship s <span style="color: #0600FF;">in</span> ships<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                s.<span style="color: #0000FF;">Place</span><span style="color: #000000;">&#40;</span>
                    <span style="color: #008000;">new</span> Point<span style="color: #000000;">&#40;</span>
                        rand.<span style="color: #0000FF;">Next</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">gameSize</span>.<span style="color: #0000FF;">Width</span><span style="color: #000000;">&#41;</span>,
                        rand.<span style="color: #0000FF;">Next</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">gameSize</span>.<span style="color: #0000FF;">Height</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>,
                    <span style="color: #000000;">&#40;</span>ShipOrientation<span style="color: #000000;">&#41;</span>rand.<span style="color: #0000FF;">Next</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">2</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> Point GetShot<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            Point shot<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">nextShots</span>.<span style="color: #0000FF;">Count</span> <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>hitDirection <span style="color: #008000;">!=</span> Direction.<span style="color: #0000FF;">UNKNOWN</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>hitDirection <span style="color: #008000;">==</span> Direction.<span style="color: #0000FF;">HORIZONTAL</span><span style="color: #000000;">&#41;</span>
                    <span style="color: #000000;">&#123;</span>
                        <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">nextShots</span> <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">nextShots</span>.<span style="color: #0000FF;">OrderByDescending</span><span style="color: #000000;">&#40;</span>x <span style="color: #008000;">=&gt;</span> x.<span style="color: #0000FF;">direction</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">ToList</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                    <span style="color: #000000;">&#125;</span>
                    <span style="color: #0600FF;">else</span>
                    <span style="color: #000000;">&#123;</span>
                        <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">nextShots</span> <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">nextShots</span>.<span style="color: #0000FF;">OrderBy</span><span style="color: #000000;">&#40;</span>x <span style="color: #008000;">=&gt;</span> x.<span style="color: #0000FF;">direction</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">ToList</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                    <span style="color: #000000;">&#125;</span>
                <span style="color: #000000;">&#125;</span>
&nbsp;
                shot <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">nextShots</span>.<span style="color: #0000FF;">First</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">point</span><span style="color: #008000;">;</span>
                lastShotDirection <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">nextShots</span>.<span style="color: #0000FF;">First</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">direction</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">nextShots</span>.<span style="color: #0000FF;">RemoveAt</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">return</span> shot<span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
            List<span style="color: #008000;">&lt;</span>ScanShot<span style="color: #008000;">&gt;</span> scanShots <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&lt;</span>ScanShot<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> x <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> x <span style="color: #008000;">&lt;</span> gameSize.<span style="color: #0000FF;">Width</span><span style="color: #008000;">;</span> x<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> y <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> y <span style="color: #008000;">&lt;</span> gameSize.<span style="color: #0000FF;">Height</span><span style="color: #008000;">;</span> y<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>board<span style="color: #000000;">&#91;</span>x, y<span style="color: #000000;">&#93;</span> <span style="color: #008000;">==</span> ShotResult.<span style="color: #0000FF;">UNKNOWN</span><span style="color: #000000;">&#41;</span>
                    <span style="color: #000000;">&#123;</span>
                        scanShots.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> ScanShot<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> Point<span style="color: #000000;">&#40;</span>x, y<span style="color: #000000;">&#41;</span>, OpenSpaces<span style="color: #000000;">&#40;</span>x, y<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                    <span style="color: #000000;">&#125;</span>
                <span style="color: #000000;">&#125;</span>
            <span style="color: #000000;">&#125;</span>
            scanShots <span style="color: #008000;">=</span> scanShots.<span style="color: #0000FF;">OrderByDescending</span><span style="color: #000000;">&#40;</span>x <span style="color: #008000;">=&gt;</span> x.<span style="color: #0000FF;">openSpaces</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">ToList</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #FF0000;">int</span> maxOpenSpaces <span style="color: #008000;">=</span> scanShots.<span style="color: #0000FF;">FirstOrDefault</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">openSpaces</span><span style="color: #008000;">;</span>
&nbsp;
            List<span style="color: #008000;">&lt;</span>ScanShot<span style="color: #008000;">&gt;</span> scanShots2 <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&lt;</span>ScanShot<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            scanShots2 <span style="color: #008000;">=</span> scanShots.<span style="color: #0000FF;">Where</span><span style="color: #000000;">&#40;</span>x <span style="color: #008000;">=&gt;</span> x.<span style="color: #0000FF;">openSpaces</span> <span style="color: #008000;">==</span> maxOpenSpaces<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">ToList</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            shot <span style="color: #008000;">=</span> scanShots2<span style="color: #000000;">&#91;</span>rand.<span style="color: #0000FF;">Next</span><span style="color: #000000;">&#40;</span>scanShots2.<span style="color: #0000FF;">Count</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>.<span style="color: #0000FF;">point</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">return</span> shot<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #FF0000;">int</span> OpenSpaces<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> x, <span style="color: #FF0000;">int</span> y<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #FF0000;">int</span> ctr <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
            Point p<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// spaces to the left</span>
            p <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Point<span style="color: #000000;">&#40;</span>x <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span>, y<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span>p.<span style="color: #0000FF;">X</span> <span style="color: #008000;">&gt;=</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">&amp;&amp;</span> board<span style="color: #000000;">&#91;</span>p.<span style="color: #0000FF;">X</span>, p.<span style="color: #0000FF;">Y</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">==</span> ShotResult.<span style="color: #0000FF;">UNKNOWN</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                ctr<span style="color: #008000;">++;</span>
                p.<span style="color: #0000FF;">X</span><span style="color: #008000;">--;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// spaces to the right</span>
            p <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Point<span style="color: #000000;">&#40;</span>x <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span>, y<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span>p.<span style="color: #0000FF;">X</span> <span style="color: #008000;">&lt;</span> gameSize.<span style="color: #0000FF;">Width</span> <span style="color: #008000;">&amp;&amp;</span> board<span style="color: #000000;">&#91;</span>p.<span style="color: #0000FF;">X</span>, p.<span style="color: #0000FF;">Y</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">==</span> ShotResult.<span style="color: #0000FF;">UNKNOWN</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                ctr<span style="color: #008000;">++;</span>
                p.<span style="color: #0000FF;">X</span><span style="color: #008000;">++;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// spaces to the top</span>
            p <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Point<span style="color: #000000;">&#40;</span>x, y <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span>p.<span style="color: #0000FF;">Y</span> <span style="color: #008000;">&gt;=</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">&amp;&amp;</span> board<span style="color: #000000;">&#91;</span>p.<span style="color: #0000FF;">X</span>, p.<span style="color: #0000FF;">Y</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">==</span> ShotResult.<span style="color: #0000FF;">UNKNOWN</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                ctr<span style="color: #008000;">++;</span>
                p.<span style="color: #0000FF;">Y</span><span style="color: #008000;">--;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">// spaces to the bottom</span>
            p <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Point<span style="color: #000000;">&#40;</span>x, y <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span>p.<span style="color: #0000FF;">Y</span> <span style="color: #008000;">&lt;</span> gameSize.<span style="color: #0000FF;">Height</span> <span style="color: #008000;">&amp;&amp;</span> board<span style="color: #000000;">&#91;</span>p.<span style="color: #0000FF;">X</span>, p.<span style="color: #0000FF;">Y</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">==</span> ShotResult.<span style="color: #0000FF;">UNKNOWN</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                ctr<span style="color: #008000;">++;</span>
                p.<span style="color: #0000FF;">Y</span><span style="color: #008000;">++;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF;">return</span> ctr<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> NewMatch<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> opponenet<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            wins <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
            losses <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> OpponentShot<span style="color: #000000;">&#40;</span>Point shot<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> ShotHit<span style="color: #000000;">&#40;</span>Point shot, <span style="color: #FF0000;">bool</span> sunk<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            board<span style="color: #000000;">&#91;</span>shot.<span style="color: #0000FF;">X</span>, shot.<span style="color: #0000FF;">Y</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> ShotResult.<span style="color: #0000FF;">HIT</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #008000;">!</span>sunk<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                hitDirection <span style="color: #008000;">=</span> lastShotDirection<span style="color: #008000;">;</span>
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>shot.<span style="color: #0000FF;">X</span> <span style="color: #008000;">!=</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">nextShots</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> NextShot<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> Point<span style="color: #000000;">&#40;</span>shot.<span style="color: #0000FF;">X</span> <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span>, shot.<span style="color: #0000FF;">Y</span><span style="color: #000000;">&#41;</span>, Direction.<span style="color: #0000FF;">HORIZONTAL</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #000000;">&#125;</span>
&nbsp;
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>shot.<span style="color: #0000FF;">Y</span> <span style="color: #008000;">!=</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">nextShots</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> NextShot<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> Point<span style="color: #000000;">&#40;</span>shot.<span style="color: #0000FF;">X</span>, shot.<span style="color: #0000FF;">Y</span> <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span>, Direction.<span style="color: #0000FF;">VERTICAL</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #000000;">&#125;</span>
&nbsp;
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>shot.<span style="color: #0000FF;">X</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">gameSize</span>.<span style="color: #0000FF;">Width</span> <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">nextShots</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> NextShot<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> Point<span style="color: #000000;">&#40;</span>shot.<span style="color: #0000FF;">X</span> <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span>, shot.<span style="color: #0000FF;">Y</span><span style="color: #000000;">&#41;</span>, Direction.<span style="color: #0000FF;">HORIZONTAL</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #000000;">&#125;</span>
&nbsp;
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>shot.<span style="color: #0000FF;">Y</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">gameSize</span>.<span style="color: #0000FF;">Height</span> <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">nextShots</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> NextShot<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> Point<span style="color: #000000;">&#40;</span>shot.<span style="color: #0000FF;">X</span>, shot.<span style="color: #0000FF;">Y</span> <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span>, Direction.<span style="color: #0000FF;">VERTICAL</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #000000;">&#125;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>
                hitDirection <span style="color: #008000;">=</span> Direction.<span style="color: #0000FF;">UNKNOWN</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">nextShots</span>.<span style="color: #0000FF;">Clear</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>     <span style="color: #008080; font-style: italic;">// so now this works like gangbusters ?!?!?!?!?!?!?!?!?</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> ShotMiss<span style="color: #000000;">&#40;</span>Point shot<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            board<span style="color: #000000;">&#91;</span>shot.<span style="color: #0000FF;">X</span>, shot.<span style="color: #0000FF;">Y</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> ShotResult.<span style="color: #0000FF;">MISS</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> GameWon<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            wins<span style="color: #008000;">++;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> GameLost<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            losses<span style="color: #008000;">++;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> MatchOver<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>wins <span style="color: #008000;">&gt;</span> maxWins<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                maxWins <span style="color: #008000;">=</span> wins<span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>losses <span style="color: #008000;">&gt;</span> maxLosses<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                maxLosses <span style="color: #008000;">=</span> losses<span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
            totalWins <span style="color: #008000;">+=</span> wins<span style="color: #008000;">;</span>
            totalLosses <span style="color: #008000;">+=</span> losses<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>wins <span style="color: #008000;">&gt;=</span> losses<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                matchWins<span style="color: #008000;">++;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>
                matchLosses<span style="color: #008000;">++;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> FinalStats<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Games won: &quot;</span> <span style="color: #008000;">+</span> totalWins.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Games lost: &quot;</span> <span style="color: #008000;">+</span> totalLosses.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Game winning percentage: &quot;</span> <span style="color: #008000;">+</span> <span style="color: #000000;">&#40;</span>totalWins <span style="color: #008000;">*</span> <span style="color: #FF0000;">1.0</span> <span style="color: #008000;">/</span> <span style="color: #000000;">&#40;</span>totalWins <span style="color: #008000;">+</span> totalLosses<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;P&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Game losing percentage: &quot;</span> <span style="color: #008000;">+</span> <span style="color: #000000;">&#40;</span>totalLosses <span style="color: #008000;">*</span> <span style="color: #FF0000;">1.0</span> <span style="color: #008000;">/</span> <span style="color: #000000;">&#40;</span>totalWins <span style="color: #008000;">+</span> totalLosses<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;P&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Matches won: &quot;</span> <span style="color: #008000;">+</span> matchWins.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Matches lost: &quot;</span> <span style="color: #008000;">+</span> matchLosses.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Match winning percentage: &quot;</span> <span style="color: #008000;">+</span> <span style="color: #000000;">&#40;</span>matchWins <span style="color: #008000;">*</span> <span style="color: #FF0000;">1.0</span> <span style="color: #008000;">/</span> <span style="color: #000000;">&#40;</span>matchWins <span style="color: #008000;">+</span> matchLosses<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;P&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Match losing percentage: &quot;</span> <span style="color: #008000;">+</span> <span style="color: #000000;">&#40;</span>matchLosses <span style="color: #008000;">*</span> <span style="color: #FF0000;">1.0</span> <span style="color: #008000;">/</span> <span style="color: #000000;">&#40;</span>matchWins <span style="color: #008000;">+</span> matchLosses<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;P&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Match games won high: &quot;</span> <span style="color: #008000;">+</span> maxWins.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Match games lost high: &quot;</span> <span style="color: #008000;">+</span> maxLosses.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>The thing I find odd about this was that against the winning entry, Dreadnought, my AI was far and away the most successful, winning about 40% of the individual games. The next closest competitor to Dreadnought was BSKiller, crafted by my compatriot in crime, John Boker, winning 20% in the initial round robin and 12% and 14% in the knockout round.</p>
<p>And yet, BP7 stunk against most of the other real submissions, which is a bit mysterious to me. I understand that there is some random fortune involved here (for example, in the round robin, BSKiller defeated BP7 121 games to 80, even though in my own testing, BP7 was winning about 54% of the games over BSKiller), but to be defeated at almost every turn?</p>
<p>Oh well. Here is my VS2008 solution and class files, if you would care to try it out for yourself:</p>
<p><a href="http://www.dosomethinghere.com/downloads/Battleship.zip">Battleship solution</a></p>
<p>Also, when I was first looking into this problem, I created some graph paper to help me visualize certain situations. Here is the PDF file of this graph paper:</p>
<p><a href="http://www.dosomethinghere.com/downloads/battleship_graph_paper.pdf">Battleship Graph Paper</a></p>
<p>Happy Thanksgiving everyone! (For those outside the U.S., Happy November 26th.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dosomethinghere.com/2009/11/26/battleship-ai-contest-on-stack-overflow/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
