Bill Cutler Puzzles, Inc.
The BURR6 program has two main sections. The first section
determines how many assemblies, or `legal configurations' can be
formed with the six pieces in the design. The second section takes each
of these assemblies and tries to disassemble them using `rectilinear'
movements, as described above.

The general method for the assembly section is as follows:

Each of the six pieces is rotated and flipped end-for-end
to determine how many different cube configurations
result. The piece is checked for symmetry and
duplication with previous pieces examined. These results
appear on the printout.

A non-symmetric piece without duplicates is chosen. This
is marked as the `fixed' piece. If no such piece exists,
a warning that duplicate assemblies may be produced is
printed. This piece is placed first, and its end-for-end
flips are not used.

The completion of the assembly with the other five pieces is
done using a straightforward approach with ten nested
loops.

The disassembly section will not be explained in any more detail.
The listing of `states,' which appears on some of the output, gives
insight into the fundamental logical process in this section. The
disassembly portion can be used on much larger and more complicated
burrs. It has run successfully on Van der Pol's 18-piece puzzle, for
example.

Options Available in the BURR6 Program

Analysis Matrix Size - this is the size of the grid that must hold the
assembled burr and any states that may be reached in the process
of disassembling the burr. When each new state is analyzed to
determine new motion, the pieces are repositioned in this matrix.
If this matrix is not large enough, so that some pieces extend
beyond the edges, the resulting analysis may contain incorrect
movements. The allowable values for matrix size are even numbers
from 10 to 14. This will be increased to at least 20, but the
runtime for some of the disassembly routines increases as the
cube of the matrix size. (See runtimes below.)

Length of Pieces - the pieces may be of length six or eight. There may be
some reason to increase this to ten or more. See Challenge
Questions.

External Holes - if external holes are allowed, then pieces may be
rotated so as to bring their cube holes into places that may not
intersect other pieces, and are visible to the outside. Such
constructions are usually not allowed. This analysis is allowed
as an option to see how many such solutions would be discovered
by people who would attempt this type of construction. A sample
output with Bill's Baffling Burr and such a solution is included.

Details and Pictures - the pictures (cross-sections of assemblies) and
details of the disassembly steps can be shown for (a) all
assemblies, (b) only those assemblies that are solutions (See
output on `Impossible Second Move' for its limitations), or (c)
no assemblies.

Subassembly Details - if desired, the program can print out pictures and
details for the subassemblies that must also be disassembled.
The program always goes through the subassembly analysis, but
will only produce output if this option is selected.

List of States - if desired, the program will print out a list of all
states discovered when it has either found a solution or has
completed analysis of all movement without finding a solution.
Analysis of this listing (included for a few designs in the
output section) reveals the logical method which is fundamental
to the disassembly portion of the program.

Runtimes

Following are some sample runtimes on an IBM PC AT. The program
is written entirely in FORTRAN using all 16-bit integer variables and
was compiled using the Microsoft compiler (IBM's marketed version).
The operating system is DOS. The computer does not have an 80287 math
coprocessor chip, but this is irrelevant as there are no floating
point variables in the program.

&nbsp

&nbsp

&nbsp

&nbsp

&nbsp

Runtimes(seconds)

Design

Name

Matrix

Size

Piece

Length

External

Holes

(#Asmbly, #Soln)

Assembly

Disassembly

Total

BBB

10

6

no

(24, 1)

3

14

17

BBB

14

6

no

(24,1)

3

28

31

BBB

10

6

yes

(66,5)

67

37

104

BBB

14

6

yes

(66,5)

67

81

148

Mar-B

10

6

no

(10,1)

1

10

11

Mar-B

14

6

no

(10,1)

1

19

20

Mourik

12

6

no

(31,30)

3

57

60

Mourik

12

8

no

(31,25)

3

56

59

Love B-5

12

8

no

(508,27)

6

424

430

** For comparison with mainframe times: The same program was compiled for
running on IBM mainframes with VS Fortran Optimize(3) using 32-bit
integers. The program ran for 4.13 CPU on an IBM 8083, Model J,
when running BBB with external holes and matrix size 14. This was
about 36 times faster than the run on the IBM PC AT.