How a computer might go about solving a wooden block puzzle


        ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
        ³                                                              ³
        ³                   Steve Gibson's InfoWorld                   ³
        ³                   Magazine TechTalk Column                   ³
        ³                    for InfoWorld Issue #41                   ³
        ³                                                              ³
        ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

                  ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
                  º  Beyond Accounting: How a computer might  º
                  º  go about solving a wooden block puzzle.  º
                  ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ

        This week marks the end of my fifth consecutive year writing
        this TechTalk column for you every week. Somehow, despite the
        generation of 255 separate columns, I've never missed a week nor
        run out of ideas and discoveries to share. I remember worrying,
        many years ago, that I might soon exhaust the supply of
        worthwhile topics. But as this TechTalk column begins its sixth
        year, I see no such end in sight. I suppose that it won't come
        as news to any of you that I'm a total technology junkie who
        just can't get enough. Although many people regard the culture,
        lore, and details surrounding computers as boring,
        incomprehensible, and "nerdy", you're reading this right now
        because you haven't shut yourself down with such thoughts. So
        let's glide forward together into the sixth year of the TechTalk
        column, seeing what new amazing applied miracles our
        technologies will enable for us tomorrow.

        I recently ran across a gifted machinist who has a penchant for
        puzzles. The first thing Bob handed me was an assembly of wooden
        pieces which were keeping a 5 cent nickel captive. A hidden
        "gravity lock" required a subtle twist of the wrist at just the
        right moment in order to free the nickel. Well, luck must have
        been smiling upon me when I stumbled upon the solution for this
        first puzzle almost immediately. Bob quickly determined that
        he'd found a fellow puzzler, and so pulled a slightly bowed
        stick of wood from another pocket. My eyebrows peaked when I saw
        that this solid and almost featureless stick would only spin in
        one direction. When given a hard spin in the "wrong" direction,
        the stick would slow down and stop, then resume spinning in the
        "correct" direction. Looking carefully at the stick I saw that
        the specific shape of Bob's stick transferred the energy from
        spinning in the "wrong" direction spin into a vibration along
        the stick's long axis, this allowing the stick to store the
        energy of the spin in another form (vibration), and then to turn
        this vibrational energy back into a resumed spin in the
        "correct" direction.

        Over the course of the next several months I was able to solve
        the various puzzles Bob presented. Then Wednesday before last he
        handed me nine blocky pieces of wood with the instructions to
        assemble them into a 3 by 3 by 3 checkerboard cube. He had a
        sample cube rubberbanded together as a demonstration of the
        objective. After struggling without result for a few minutes (to
        Bob's extreme delight), it became clear that no solution lay
        near. So I took the nine loose pieces home with me. Just as I
        was leaving Bob made my day by mentioning that it had taken him
        over a month to assemble the cube. Great.

        Later that evening, as I was messing around with the nine
        separate pieces that refused to assemble themselves into
        anything even remotely resembling a cube, let alone a
        checkerboard, I began imagining a month of my life slipping
        away. Not long afterward I decided to write a computer program
        to solve Bob's wooden block puzzle.

        It's obvious that computers can do things such as manage
        accounting data, compute interest rates, and recalculate
        spreadsheets, but it's not nearly as obvious how a computer,
        which fundamentally adds and subtracts numbers, might be used to
        solve a puzzle as abstract as this one. The key to applying a
        computer to a problem that lies outside the domain of numerics
        is to represent the problem within the domain of numbers. In
        other words, we must first invent a representation system that
        can be used to contain and describe the problem numerically.
        Once we have established a means of representing the reality of
        the problem numerically, a computer can be programmed to
        meaningfully manipulate the result.

        The puzzle pieces consisted of simple light and dark blocks of
        wood glued together into complex shapes. Since some of the
        wooden blocks consisted of half cubes, I needed a way of
        describing where there was wood and where there wasn't within
        each cube-space. Conveniently, a complete cube has eight
        corners, just as a computer's data byte has eight bits, so the
        multiple-block configuration of the various pieces could be
        described by a collection of data bytes where the individual
        bits in each byte represented which corners of their
        corresponding cubes contained wood. Are you with me so far?

        Since the final assembled 3 by 3 by 3 checkerboard "master cube"
        would be built up from an array of 27 smaller cubes (3x3x3=27),
        I decided to use a 27 byte data array to describe the current
        composition of the master cube as the computer worked toward its
        solution. The first nine data bytes would represent the 3 by 3
        pattern of wood in the top layer of the assembled master cube,
        the next nine bytes would represent the wood in the middle
        layer, and the last nine would represent the wood in the bottom
        layer. This 27-byte data array would thus serve as a master
        template for modelling the 3 dimensional space occupied by the
        master cube. Sliding wooden pieces around within this 3
        dimensional space would simply consist of copying data bytes
        from one location to another.

        Computers excel at performing repetitive tasks, and they can be
        quite fast at doing so if they're programmed correctly. So my
        brute force "strategy" for solving this puzzle would be to
        explore all possible arrangements of all of the pieces.
        Somewhere among all of the possible combinations of the
        individual pieces there would be one combination where none of
        the pieces collide within the 3 by 3 by 3 master cube space.
        This combination would be the solution to the puzzle.
               
        Since this meant that each of the nine wooden pieces needed to
        be placed into every possible location and orientation within
        the 3 by 3 by 3 master cube, I decided I decided to begin by
        having the computer generate every possible position for each
        piece within the space of the master cube. For each of the nine
        puzzle pieces the computer would create a set of 27-byte arrays
        with each 27-byte array representing one piece floating within
        the 3 dimensional space of the 3 by 3 by 3 master cube. Each of
        the possibilities was created by describing the way the wood
        would move within the master cube when it was rotated about, and
        translated along, each of its three axis. By exploring all
        possible "translations" for every possible "rotation", and
        eliminating duplications, tables representing all possible piece
        locations were created. Written in pure assembly language (as is
        still my preference) the computer required less than a second to
        build the images of each piece occupying every possible
        position.
               
        It turned out that eight of the nine pieces could occupy 72
        different locations within a 3 by 3 by 3 cube, and that the
        remaining piece could occupy any of 96 locations. This meant
        that the total number of possible piece configurations for the
        puzzle would be 72 x 72 x 72 x 72 x 72 x 72 x 72 x 72 x 96 since
        each piece could be in any of its possible locations when all of
        the remaining pieces were in any of their possible locations ...
        all at once! When I multiplied this out I was a bit daunted to
        see that there were a little more than 69,331 million million
        possible combinations of pieces! Although the universe would
        still be intact when the computer had finished exploring them
        all, Bob and I would be ancient history.

        Salvation lay in the fact that the computer did not need to
        consider nearly this many total combinations. If the positions
        of the first two pieces collided within the master cube, there's
        no reason to worry about any of the 13 million million
        arrangements of the remaining 7 pieces and if the first three
        pieces were in collision then the 185,752 million combinations
        of the remaining 6 piece's could be safely ignored. This process
        of successive refinement serves to radically lower the total
        number of possibilities which must be examined. In computer
        parlance, an exhaustive search through a domain of such
        possibilities is called a "tree search" and making the decision
        to limit the search down a particular "branch" of the tree is
        known as "pruning the search tree."

        When the program was completed I fired it up and watched the
        screen flicker with a dazzling display of spinning pieces. (I'd
        given the program a nifty user interface too.) After about eight
        minutes and over 252,000 calculated moves the computer came to a
        grinding halt proudly displaying the correct solution to the
        puzzle. If you'd like to watch your own computer solve this
        puzzle it's available for downloading, with my complete source
        code, from the Gibson Research BBS at (714) 830-3300. It's
        amazing what computers can do!

                                      -30-

        ****************************************************************

Comments

Popular posts from this blog

BOTTOM LIVE script

Fawlty Towers script for "A Touch of Class"