### Search

 Search WWW Search DelphiForFun.org

As of October, 2016, Embarcadero is offering a free release of Delphi (Delphi 10.1 Berlin Starter Edition ).     There are a few restrictions, but it is a welcome step toward making more programmers aware of the joys of Delphi.  They do say "Offer may be withdrawn at any time", so don't delay if you want to check it out.  Please use the feedback link to let me know if the link stops working.

Support DFF - Shop

If you shop at Amazon anyway,  consider using this link.

We receive a few cents from each purchase.  Thanks

### Support DFF - Donate

If you benefit from the website,  in terms of knowledge, entertainment value, or something otherwise useful, consider making a donation via PayPal  to help defray the costs.  (No PayPal account necessary to donate via credit card.)  Transaction is secure.

Mensa® Daily Puzzlers

For over 15 years Mensa Page-A-Day calendars have provided several puzzles a year for my programming pleasure.  Coding "solvers" is most fun, but many programs also allow user solving, convenient for "fill in the blanks" type.  Below are Amazon  links to the two most recent years.

(Hint: If you can wait, current year calendars are usually on sale in January.)

### Contact

 Search DelphiForFun.org only

### Background & Techniques

Another puzzle from our 2013  "Brain Game" page-a-day calendar.  I worked on this one for about 10 minutes before deciding that a 10 minute program would be more fun and  more likely to guarantee a solution.  To write it took more like 30 minutes, but it does find the two solutions in less than a second.

We'll number the cells of a tic-tac-toe board 1 to 9 from left to right and top to bottom.   We can then use the numbers to represent positions in a 9 digit binary number and interpret 1's as X's.

 1 2 3 4 5 6 7 8 9

The program searches for solutions by generating the 9 binary digit representation of all numbers all integers from 1('000000001') to 511 ('111111111') and testing all of those which have six 1's.

The "forbidden" rows, columns and diagonals are predefined as the eight triples (1,2,3), (4,5,6), (7,8,9), (1,4,7), (2,5,8), (3,6,9), (1,5,9), and (3,5,7). Any number with six 1's which does not have 1's in all 3 of any of those triplets is a solution!

### Programmer's Notes:

The key to this 50 line program is our IntToBinaryString function contained in the DFFUtils unit.  Calling the function passing integers up to 511 and specifying a minimum length of 9 makes it an easy matter to check all arrangements of six X's on the board.  For example, 207 has binary representation 011001111 which has six "1" bits, but is not a solution since the bits in the positions 7, 8, and 9 represent three X's in the last row.

Everything else is simple and well commented in the source code.

### Running/Exploring the Program

 Download  executable Download source  (Note: Our library zip file of commonly used units.  Library file DFFVLIB13 or later contains the DFFUtils unit which is required to recompile this program ) Download current library file (DFFLibV15) required to recompile..

### Suggestions for Further Explorations

 ???

 Original:  mmmm dd, yyyy Modified:  May 15, 2018