<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Kirk D. Brown — Blog</title>
    <subtitle>Notes on software engineering and AI-assisted development.</subtitle>
    <link href="https://kdborg.com/blog/feed.xml" rel="self" />
    <link href="https://kdborg.com/blog/" />
    <id>https://kdborg.com/blog/</id>
    
    <updated>2026-09-07T00:00:00.000Z</updated>
    <author>
        <name>Kirk D. Brown</name>
        <email>kdborg@gmail.com</email>
    </author>
    
    <entry>
        <title>CodeCup - Training for pnn7</title>
        <link href="https://kdborg.com/blog/2026-09-07-codecup-2027-pnn7/" />
        <id>https://kdborg.com/blog/2026-09-07-codecup-2027-pnn7/</id>
        <updated>2026-09-07T00:00:00.000Z</updated>
        <summary>CodeCup 2027 Training for pnn7</summary>
        <content type="html">&lt;h1&gt;CodeCup 2027 Training for pnn7&lt;/h1&gt;
&lt;p&gt;After another 30 hours of &lt;a href=&quot;/blog/2026-09-06-codecup-2027-pnn6&quot;&gt;training&lt;/a&gt;, Fable 5 was disappointed in the results, since there wasn&#39;t any meaningful improvement made.&lt;/p&gt;
&lt;p&gt;Fable 5 created a set of experiments to figure out the next steps rather than just relying on another training run.  Those experiments tested various parameters and neural network configurations.&lt;/p&gt;
&lt;p&gt;Fable 5 made updates to the model and generated pnn7.&lt;/p&gt;
&lt;p&gt;Results, including pnn7, in local competition:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Points&lt;/th&gt;
&lt;th&gt;Player&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;49899&lt;/td&gt;
&lt;td&gt;pnn7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;48678&lt;/td&gt;
&lt;td&gt;pnn6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;45762&lt;/td&gt;
&lt;td&gt;pnn5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;45573&lt;/td&gt;
&lt;td&gt;pnn5c&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;43848&lt;/td&gt;
&lt;td&gt;pnn4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;42749&lt;/td&gt;
&lt;td&gt;pnn3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;35601&lt;/td&gt;
&lt;td&gt;pnn2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;34487&lt;/td&gt;
&lt;td&gt;pnn1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30391&lt;/td&gt;
&lt;td&gt;player3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28374&lt;/td&gt;
&lt;td&gt;player2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24738&lt;/td&gt;
&lt;td&gt;player1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;pnn6 had been updated as well.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>CodeCup - New Training</title>
        <link href="https://kdborg.com/blog/2026-09-06-codecup-2027-pnn6/" />
        <id>https://kdborg.com/blog/2026-09-06-codecup-2027-pnn6/</id>
        <updated>2026-09-06T00:00:00.000Z</updated>
        <summary>CodeCup 2027 New Training</summary>
        <content type="html">&lt;h1&gt;Change in Training&lt;/h1&gt;
&lt;p&gt;After a &lt;a href=&quot;/blog/2026-09-04-codecup-2027-2&quot;&gt;change in training&lt;/a&gt; from win-loss records to total points scored in the competition, pnn6 finished training.  The training started before the test competition and finished hours later.&lt;/p&gt;
&lt;p&gt;Local competition points results:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Points&lt;/th&gt;
&lt;th&gt;Player&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;43735&lt;/td&gt;
&lt;td&gt;pnn6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;43500&lt;/td&gt;
&lt;td&gt;pnn5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;42238&lt;/td&gt;
&lt;td&gt;pnn5c&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;40944&lt;/td&gt;
&lt;td&gt;pnn4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;39706&lt;/td&gt;
&lt;td&gt;pnn3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;32965&lt;/td&gt;
&lt;td&gt;pnn2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;31923&lt;/td&gt;
&lt;td&gt;pnn1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28205&lt;/td&gt;
&lt;td&gt;player3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26085&lt;/td&gt;
&lt;td&gt;player2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22599&lt;/td&gt;
&lt;td&gt;player1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;pnn5c was an adjustment made to pnn5 for testing.&lt;/p&gt;
&lt;p&gt;pnn6 is only 235 points ahead of pnn5.  This appears to be a minor improvement.&lt;/p&gt;
&lt;h2&gt;For the Next Competition&lt;/h2&gt;
&lt;p&gt;The next test competition will be on September 19.&lt;/p&gt;
&lt;p&gt;Fable 5 was asked what improvements could be made based on the &lt;a href=&quot;/blog/2026-09-05-codecup-2027-test-competition&quot;&gt;first test competition results&lt;/a&gt; and the latest training results.&lt;/p&gt;
&lt;p&gt;Some tests were run to evaluate the conversion of numbers from Python training to C++ player code.&lt;/p&gt;
&lt;p&gt;There were also some adjustments made to the C++ player code to improve its competition performance.&lt;/p&gt;
&lt;p&gt;Another training round was started.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>CodeCup - Test Competition #1 Results</title>
        <link href="https://kdborg.com/blog/2026-09-05-codecup-2027-test-competition/" />
        <id>https://kdborg.com/blog/2026-09-05-codecup-2027-test-competition/</id>
        <updated>2026-09-05T00:00:00.000Z</updated>
        <summary>CodeCup 2027 Test Competition #1</summary>
        <content type="html">&lt;h1&gt;CodeCup 2027 Test Competition #1 Results&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;/blog/2026-09-04-codecup-2027-2&quot;&gt;pnn5&lt;/a&gt; was submitted for the first test competition as it was the best-trained player in a local competition.&lt;/p&gt;
&lt;p&gt;There were 23 entries in the competition.  Five Swiss rounds were played to get an initial ranking.  Then 20 rounds were played to determine the final ranking.  In each round, two games were played, once as the red player and once as the white player.&lt;/p&gt;
&lt;p&gt;pnn5 ranked 6th in the test competition, from the 20 rounds, with a score of 6741.  The first-place score was 7529, 788 points ahead of pnn5.  That is 19.7 points per game to make up.&lt;/p&gt;
&lt;p&gt;Fable 5 analyzed the results of the games and it reached the same conclusion as I did on the scoring.  It also went deeper into the games and looked at the moves made by each player.&lt;/p&gt;
&lt;p&gt;Fable 5 made guesses as to what algorithms were used by the players.  I installed the Claude for Chrome extension.  Fable 5 used the extension to gather data from the games.  Fable 5 even updated the code to run a sample game to test adjustments against the top player.&lt;/p&gt;
&lt;h2&gt;Next Competition&lt;/h2&gt;
&lt;p&gt;The next test competition will be in two weeks, on September 19.&lt;/p&gt;
&lt;p&gt;My thoughts were that Fable 5 might be able to make changes to the code to improve the player&#39;s performance in the next competition.&lt;/p&gt;
&lt;p&gt;I thought that if the top players are also using AI to code their players, they might be able to improve their performance as well and possibly faster than I have been.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>CodeCup - Training Updates</title>
        <link href="https://kdborg.com/blog/2026-09-04-codecup-2027-2/" />
        <id>https://kdborg.com/blog/2026-09-04-codecup-2027-2/</id>
        <updated>2026-09-04T00:00:00.000Z</updated>
        <summary>CodeCup 2027 Update</summary>
        <content type="html">&lt;h1&gt;CodeCup 2027 Update&lt;/h1&gt;
&lt;p&gt;Continuing with the &lt;a href=&quot;/blog/2026-09-02-codecup-2027&quot;&gt;CodeCup 2027 posts&lt;/a&gt;, this update reports the results of the 5th training round and an update to the training evaluations.&lt;/p&gt;
&lt;h2&gt;5th Training Round Results&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Points&lt;/th&gt;
&lt;th&gt;Player&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;35478&lt;/td&gt;
&lt;td&gt;pnn5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;33280&lt;/td&gt;
&lt;td&gt;pnn4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;32735&lt;/td&gt;
&lt;td&gt;pnn3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27764&lt;/td&gt;
&lt;td&gt;pnn2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26655&lt;/td&gt;
&lt;td&gt;pnn1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23366&lt;/td&gt;
&lt;td&gt;player3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21460&lt;/td&gt;
&lt;td&gt;player2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18222&lt;/td&gt;
&lt;td&gt;player1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;pnn5 finished ahead of pnn4 by 2,198 points — a wider gap than pnn4&#39;s 545-point lead over pnn3.&lt;/p&gt;
&lt;h2&gt;Training Evaluations Update&lt;/h2&gt;
&lt;p&gt;While writing the previous post, I had AI review the post for any errors or issues.  In the post, I mentioned that the pnn4 player showed a minor improvement over the pnn3 player.  The AI noted that when the pnn3 and pnn4 players played each other, they tied on the win-loss record.&lt;/p&gt;
&lt;p&gt;While the 5th training round was underway, I informed the AI that the scores were added up for each player in the competition and the ranking in the competition was determined by the total score, which is slightly different from a win-loss record used in the training rounds.&lt;/p&gt;
&lt;p&gt;Fable 5 suggested updating the training to focus on the total score rather than the win-loss record.  This update was completed, and there wasn&#39;t enough time to complete the 6th training round before the test competition on Saturday.  It was taking about 3 hours to train each generation, and training 10 generations would take too long.&lt;/p&gt;
&lt;p&gt;The update to the training will be used for all training rounds going forward.&lt;/p&gt;
&lt;h3&gt;Scoring&lt;/h3&gt;
&lt;p&gt;The scoring of a game is as follows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Players score points based on the territory they control.&lt;/li&gt;
&lt;li&gt;The winner gets a bonus of 200 points.&lt;/li&gt;
&lt;li&gt;The loser gets a bonus of 100 points.&lt;/li&gt;
&lt;li&gt;A program that makes an invalid move, crashes, exits early, or otherwise behaves incorrectly gets a score of 0 points, regardless of territory.  In the competition, if a program fails in one of those ways, it gets replaced by another program so that the other player can still compete and earn points.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Fable 5 points out that the win-loss record is embedded in the scoring system in the 100-point difference between the winner and loser bonuses.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>CodeCup</title>
        <link href="https://kdborg.com/blog/2026-09-02-codecup-2027/" />
        <id>https://kdborg.com/blog/2026-09-02-codecup-2027/</id>
        <updated>2026-09-02T00:00:00.000Z</updated>
        <summary>CodeCup 2027 programming competition and using modern AI tools</summary>
        <content type="html">&lt;h1&gt;CodeCup&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://www.codecup.nl/intro.php&quot;&gt;CodeCup&lt;/a&gt; is an annual programming competition where you submit a code file that plays a game.  You can monitor how well the code runs through the test competitions that run every three weeks and make updates.  The final competition, the official one, runs in late January of a given year.&lt;/p&gt;
&lt;p&gt;While the game changes each year, the technical constraints usually remain the same.  Your program has a maximum size, a limited amount of memory, and a time limit per game.&lt;/p&gt;
&lt;p&gt;My first competition was for 2005 with the game &lt;a href=&quot;https://archive.codecup.nl/2005/rules_lamistra.html&quot;&gt;Lamistra&lt;/a&gt;, a Stratego-like game.  There have been many different games played over the years including a &lt;a href=&quot;https://archive.codecup.nl/2007/48/rules_ontherun.html&quot;&gt;Scotland Yard like game&lt;/a&gt;, a &lt;a href=&quot;https://archive.codecup.nl/2010/25/rules_amazes.html&quot;&gt;maze exploration game&lt;/a&gt;, &lt;a href=&quot;https://archive.codecup.nl/2012/39/rules_quantum%20tic-tac-toe.html&quot;&gt;quantum tic-tac-toe&lt;/a&gt;, &lt;a href=&quot;https://archive.codecup.nl/2019/09/flippo/rules.html&quot;&gt;a variation of Reversi&lt;/a&gt;, and &lt;a href=&quot;https://www.codecup.nl/archives.php&quot;&gt;many more&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;The Challenge&lt;/h2&gt;
&lt;p&gt;The challenge each year is with the &lt;a href=&quot;https://www.codecup.nl/rules_tech.php&quot;&gt;technical constraints&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The source code file has a maximum size of 1,474,560 bytes, which was the size of a floppy disk, and can use up to of 2GB of memory.  And your code has 30 seconds to run.  Your code cannot write files, spawn threads or processes, or connect to another server.  There&#39;s no &amp;quot;thinking&amp;quot; time while your code runs.  In some years, your program reads in a file.&lt;/p&gt;
&lt;p&gt;The competition software is what your program communicates with via standard input (stdin) and standard output (stdout).  Standard error (stderr) can be used to output debugging when a competition is running.&lt;/p&gt;
&lt;p&gt;CodeCup also provides software that can be used to test your code on your local computer, called &lt;a href=&quot;https://www.codecup.nl/download_caia.php&quot;&gt;Caia&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&#39;ve mostly implemented the players in C++ and it&#39;s become my yearly C++ project.&lt;/p&gt;
&lt;h2&gt;My CodeCup History&lt;/h2&gt;
&lt;p&gt;I was informed of the competition in 2004 for the CodeCup 2005 game called Lamistra.  I got hooked by both the game and the technical constraints.  I&#39;ve been following the competition each year since.  For Lamistra, my program ranked 11th in the final competition.  My best year was CodeCup 2016, placing 9th in the final competition.&lt;/p&gt;
&lt;p&gt;CodeCup 2027 was announced in early August 2026 with the final competition set for late January 2027.  The announcement time in previous years was usually in July or August with the final competition set for late January of the next year.&lt;/p&gt;
&lt;p&gt;I would write a program and work on it most years locally.  Over the years, I got into a pattern of writing a first program for a player that just made random moves, so that I got the protocol and rules of the game implemented correctly.  Some years, I wouldn&#39;t even submit a program if the program wasn&#39;t completed or if it didn&#39;t work correctly.&lt;/p&gt;
&lt;p&gt;My intent was to always improve my programs and try out different AI algorithms for playing games, but there was always a time constraint on my end.&lt;/p&gt;
&lt;p&gt;For CodeCup 2027, the game is called &lt;a href=&quot;https://www.codecup.nl/tumbleweed/rules.php&quot;&gt;Tumbleweed&lt;/a&gt;, an abstract game on a hexagonal grid where players place numbered stacks based on lines of sight to capture territory.&lt;/p&gt;
&lt;p&gt;Players score points in the competition based on the amount of territory they capture and if they won, lost, or had an error.  The winner gets an additional 200 points and the loser gets an additional 100 points.  A program that makes an illegal move, crashes, or exits early gets 0 points.&lt;/p&gt;
&lt;h2&gt;AI Round One: Claude Code and Opus 5&lt;/h2&gt;
&lt;p&gt;In previous years, I&#39;d download the Caia code and run my program against the three provided player programs.  And typically, my programs wouldn&#39;t do well against the best of those three players.&lt;/p&gt;
&lt;p&gt;When the competition was announced in early August 2026, I decided to use Claude Code and Opus 5 to do all of the work for me.  I downloaded the Caia software for the competition and I set up a directory for Claude Code to produce programs and run the games against the players.&lt;/p&gt;
&lt;p&gt;I was in the habit of taking parts of the C++ code I&#39;d written in previous years to start the code, usually the utility functions for communication and some basic utility functions for the game logic.  For 2027, I didn&#39;t do that.  I let AI figure out everything itself.&lt;/p&gt;
&lt;p&gt;My initial prompt in Claude Code was to look at the rules of the game and create a program that could beat each of the provided players.  I set each of the provided players as a goal, so that Opus could work up from the easiest to hardest player.  The prompt also said to read the rules and report back on how everything was supposed to work before jumping into coding anything.  The prompt also pointed the AI to the local Caia Tumbleweed installation and told it not to modify any code inside that directory and that it could only create a symbolic link to code.  It was also told how to run the code to test locally.&lt;/p&gt;
&lt;p&gt;After a couple of minutes, Opus reported what the game was about and an implementation plan for the game.  It first thought it played only one side of the two-player game, but I prompted it letting it know the program needed to be able to play as either player in the game.  15 seconds later, it updated its understanding of what was needed and started on the first goal, to beat the easiest player provided.&lt;/p&gt;
&lt;p&gt;After 9 minutes and 50 seconds, it had generated a program that could beat the easiest player as either player in the game.  The resulting program beat the easiest player 10–0 playing red and 10–0 playing white.  Then I approved moving on to playing against the second provided player.&lt;/p&gt;
&lt;p&gt;After another 41 minutes, there was a program that was very competitive against the second provided player.  The program won 9–1 playing red and 8–2 playing white.  Then I approved moving on to playing against the third player, the toughest player provided.&lt;/p&gt;
&lt;p&gt;After 5 and a half minutes, there was a player that was beating player3.  The heavy lifting was done against the second player.  The result was the program won 9–1 as red and 10–0 as white.&lt;/p&gt;
&lt;p&gt;After updates for each program, the final results were:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opponent&lt;/th&gt;
&lt;th&gt;Record&lt;/th&gt;
&lt;th&gt;as red&lt;/th&gt;
&lt;th&gt;as white&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;player1&lt;/td&gt;
&lt;td&gt;20–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;player2&lt;/td&gt;
&lt;td&gt;20–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;player3&lt;/td&gt;
&lt;td&gt;19–1&lt;/td&gt;
&lt;td&gt;9–1&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This was impressive.  In a couple of hours in total, Opus 5 created a program that could beat the toughest player provided by Caia.  This was something that I hadn&#39;t achieved in previous years of the competition.&lt;/p&gt;
&lt;p&gt;The program used &amp;quot;a classic iterative-deepening alpha-beta search with a hand-tuned positional evaluation — no MCTS, no neural net, no opening book, no transposition table.&amp;quot;&lt;/p&gt;
&lt;p&gt;I asked what could be done to improve the program.  I also asked about other AI algorithms that I was aware of and if they&#39;d work.  And of course, it came up with a plan.&lt;/p&gt;
&lt;h3&gt;Next Steps&lt;/h3&gt;
&lt;p&gt;I was running Claude Code inside a &lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt; container using a &lt;a href=&quot;https://docs.docker.com/ai/sandboxes/&quot;&gt;sandbox&lt;/a&gt; (SBX) so that I wouldn&#39;t constantly be prompted by it to permit it to do things.  Training a neural network would take a lot of time since Claude Code was running inside a Linux container and not on my MacBook Pro (MBP).  It didn&#39;t have access to the hardware to train things more quickly.  So I set up the container to be able to SSH into my MBP so that it could train on the hardware.&lt;/p&gt;
&lt;p&gt;Claude Code managed to update the code to fix some compatibility issues with functions not being available on a Mac that were available in Linux.  Then it came up with a plan to train a neural network.  It wanted a specific version of Python (3.12) and PyTorch, so I installed them.  It also complained that g++ wasn&#39;t installed and it was using clang++, so I installed g++ tools as well to get GCC parity with the competition server.&lt;/p&gt;
&lt;p&gt;Claude Code would run tests and go through each of the phases it planned and reported that the game ran in the time limit.  Both the clang and gcc builds fit in the normal time limit, so timing wasn&#39;t going to be an issue.&lt;/p&gt;
&lt;p&gt;After a few iterations, it managed to train a neural network that beat each player 10–0 as the red player and 10–0 as the white player.  It was creating various programs and comparing them using Elo rankings.  An analysis of the Elo rankings hasn&#39;t been performed yet other than noting that the neural network was improving with each iteration.&lt;/p&gt;
&lt;p&gt;Ultimately, it was training using Python and then updating C++ code for submission to the competition server.  It was a little frustrating waiting a few weeks before submissions were opened up to see how well the code would actually work on the competition server.&lt;/p&gt;
&lt;p&gt;I let Claude Code do its thing over the next few days with regular check-ins and monitoring the chat.  Most of my prompts at this point were &amp;quot;What&#39;s next?&amp;quot; or &amp;quot;What&#39;s running?&amp;quot;  If I was asked to make a decision, I typically went with what was suggested or told Claude Code to try them all out.&lt;/p&gt;
&lt;p&gt;At one point, I noticed that the produced programs would contain a lot of bugs and I told Claude Code to double and triple check each iteration to make sure it didn&#39;t introduce new bugs.&lt;/p&gt;
&lt;p&gt;An Opus 5 version of the program was submitted to the competition server.  It was accepted and it beat the server&#39;s test player.  It also ran in under 30 seconds per game, which was reassuring.&lt;/p&gt;
&lt;h2&gt;AI Round Two: Claude Desktop and Fable 5&lt;/h2&gt;
&lt;p&gt;On August 31, 2026, I switched to using Claude Desktop and Fable 5 to create a new project for CodeCup 2027.  It was a shorter prompt than with Claude Code and Opus 5.  Fable 5 took the prompt and started to do everything correctly the first time, including understanding that the program had to play the game as either player.&lt;/p&gt;
&lt;p&gt;Claude Desktop and creating a new project inside it worked well.  There were far fewer permission prompts and I didn&#39;t have to run an SBX sandbox for Claude Code.  The other way I&#39;ve run Claude Code is using a Linux VM inside Parallels and the flags to skip permission prompts.  My preference at the moment is to use Claude Desktop on macOS rather than spinning up a Linux VM or running Claude Code using SBX.&lt;/p&gt;
&lt;p&gt;Claude Desktop did find the programs created by Claude Code as those programs were linked in from the Caia directory.  So it was able to run the programs and evaluate them against each other.&lt;/p&gt;
&lt;p&gt;Claude Desktop also put the source code inside Caia&#39;s bin directory, despite being told to only link the compiled binary.&lt;/p&gt;
&lt;p&gt;There was an initial training run on macOS that took a few hours to run.  Once it completed, Fable 5 suggested continuing the training.  So I continued the training for a second time, letting it run for a much longer time.&lt;/p&gt;
&lt;p&gt;Once the second training run completed, Fable 5 evaluated the results and concluded that the approach was not good.  So Fable 5 updated the approach and we retrained from the results of the first training run.&lt;/p&gt;
&lt;p&gt;Four training runs have been made.  There may be time for a couple more training runs before the first test competition.&lt;/p&gt;
&lt;p&gt;The code files produced by Fable 5 after the first and fourth training runs were submitted to the competition server.  They both beat the server&#39;s test player and ran in under 30 seconds per game.&lt;/p&gt;
&lt;h3&gt;Organization of Files&lt;/h3&gt;
&lt;p&gt;Before compiling these results, the files were reorganized.  The code was moved out of the bin directory into a separate directory in order to keep the bin directory as clean as possible.&lt;/p&gt;
&lt;p&gt;The algorithm family was put into the file names, to prevent confusion between approaches and version numbers.  Versions 1 and 2 of the neural network family were recreated from the saved files.&lt;/p&gt;
&lt;p&gt;The older versions v1 and v2 that were created were from a different family of algorithms.  The focus of this project was on the neural network family.&lt;/p&gt;
&lt;h3&gt;Fable 5 Results&lt;/h3&gt;
&lt;p&gt;Here are the initial results from the Fable 5 training runs as of this writing.  The provided players were run against the four neural network players generated by Fable 5 from each of the training runs.&lt;/p&gt;
&lt;p&gt;The neural network players are named pnn1 through pnn4, where pnn stands for &amp;quot;pure neural network&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;pnn1 results&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opponent&lt;/th&gt;
&lt;th&gt;Record&lt;/th&gt;
&lt;th&gt;as red&lt;/th&gt;
&lt;th&gt;as white&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;player1&lt;/td&gt;
&lt;td&gt;20–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;player2&lt;/td&gt;
&lt;td&gt;20–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;player3&lt;/td&gt;
&lt;td&gt;19–1&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;9–1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pnn2&lt;/td&gt;
&lt;td&gt;8–12&lt;/td&gt;
&lt;td&gt;7–3&lt;/td&gt;
&lt;td&gt;1–9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pnn3&lt;/td&gt;
&lt;td&gt;0–20&lt;/td&gt;
&lt;td&gt;0–10&lt;/td&gt;
&lt;td&gt;0–10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pnn4&lt;/td&gt;
&lt;td&gt;1–19&lt;/td&gt;
&lt;td&gt;1–9&lt;/td&gt;
&lt;td&gt;0–10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;pnn2 results&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opponent&lt;/th&gt;
&lt;th&gt;Record&lt;/th&gt;
&lt;th&gt;as red&lt;/th&gt;
&lt;th&gt;as white&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;player1&lt;/td&gt;
&lt;td&gt;20–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;player2&lt;/td&gt;
&lt;td&gt;20–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;player3&lt;/td&gt;
&lt;td&gt;20–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pnn1&lt;/td&gt;
&lt;td&gt;12–8&lt;/td&gt;
&lt;td&gt;9–1&lt;/td&gt;
&lt;td&gt;3–7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pnn3&lt;/td&gt;
&lt;td&gt;1–19&lt;/td&gt;
&lt;td&gt;1–9&lt;/td&gt;
&lt;td&gt;0–10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pnn4&lt;/td&gt;
&lt;td&gt;3–17&lt;/td&gt;
&lt;td&gt;3–7&lt;/td&gt;
&lt;td&gt;0–10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;pnn3 results&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opponent&lt;/th&gt;
&lt;th&gt;Record&lt;/th&gt;
&lt;th&gt;as red&lt;/th&gt;
&lt;th&gt;as white&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;player1&lt;/td&gt;
&lt;td&gt;20–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;player2&lt;/td&gt;
&lt;td&gt;20–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;player3&lt;/td&gt;
&lt;td&gt;20–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pnn1&lt;/td&gt;
&lt;td&gt;20–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pnn2&lt;/td&gt;
&lt;td&gt;19–1&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;9–1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pnn4&lt;/td&gt;
&lt;td&gt;10–10&lt;/td&gt;
&lt;td&gt;9–1&lt;/td&gt;
&lt;td&gt;1–9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;pnn4 results&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opponent&lt;/th&gt;
&lt;th&gt;Record&lt;/th&gt;
&lt;th&gt;as red&lt;/th&gt;
&lt;th&gt;as white&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;player1&lt;/td&gt;
&lt;td&gt;20–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;player2&lt;/td&gt;
&lt;td&gt;20–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;player3&lt;/td&gt;
&lt;td&gt;20–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pnn1&lt;/td&gt;
&lt;td&gt;19–1&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;9–1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pnn2&lt;/td&gt;
&lt;td&gt;17–3&lt;/td&gt;
&lt;td&gt;10–0&lt;/td&gt;
&lt;td&gt;7–3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pnn3&lt;/td&gt;
&lt;td&gt;10–10&lt;/td&gt;
&lt;td&gt;9–1&lt;/td&gt;
&lt;td&gt;1–9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The competition script provided by Caia runs each program against each other player for 20 games, 10 times for each color.  The overall results are the sum of the points scored:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Total Points&lt;/th&gt;
&lt;th&gt;Player&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;29817&lt;/td&gt;
&lt;td&gt;pnn4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29201&lt;/td&gt;
&lt;td&gt;pnn3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25202&lt;/td&gt;
&lt;td&gt;pnn2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23866&lt;/td&gt;
&lt;td&gt;pnn1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20995&lt;/td&gt;
&lt;td&gt;player3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19095&lt;/td&gt;
&lt;td&gt;player2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16044&lt;/td&gt;
&lt;td&gt;player1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;We can see the improvements of the neural network models over the course of the training runs.  The exception to this is that pnn4 and pnn3 have a 10–10 win-loss record against each other.  In the competition, the more points a player earns, the higher their rank.&lt;/p&gt;
&lt;h2&gt;The Competitions&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.codecup.nl/competitionlist.php&quot;&gt;test competitions&lt;/a&gt; haven&#39;t started yet at the time of writing.  They start on September 5th, 2026 and run every three weeks.  I&#39;ll update this blog as the results come in and continue to use Claude Desktop and Fable 5.  I&#39;m curious to see how well Fable 5 will do.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I&#39;ve been impressed with the results so far.  The initial Opus 5 was able to beat the provided players in just a few hours.&lt;/p&gt;
&lt;p&gt;The code produced by Fable 5 has been submitted to the competition and I&#39;m looking forward to the results.  There will be more training runs from the Fable 5 codebase and we&#39;ll see how they do.  There will likely be another submission to the competition.&lt;/p&gt;
&lt;p&gt;After the final competition, I&#39;ll go through the technical details of the programs created by AI and describe the algorithms used.  I&#39;ll also include links to the code.&lt;/p&gt;
</content>
    </entry>
    
</feed>
