Post Reply 
(HP-67/97) a little fun with the fifteen puzzle
12-03-2016, 09:26 PM (This post was last modified: 12-06-2016 03:29 PM by Don Shepherd.)
Post: #1
(HP-67/97) a little fun with the fifteen puzzle
Everyone knows the fifteen puzzle; fifteen little numbered tiles, 1-15, in a little 4 by 4 container with one position empty, usually interlocking pieces that cannot be removed from the container. But what if the pieces are not interlocking and are removable, allowing you to setup your own random start position? Is every such configuration solvable (solvable meaning being able to arrange the pieces, by sliding only, into order 1-15)? Surprisingly, the answer is, "no." It turns out that half of the possible initial configurations are not solvable. How can you tell if a given initial configuration of the tiles is solvable? That's what this program is about.

There is this thing called "number of inversions." If the number of inversions is an even number, the configuration is solvable, else it is not. How do you determine the number of inversions? You run this program!

Imagine all 15 tiles in a single row. Start at the tile in the leftmost position; how many tiles to its right have values that are less than this tile? Those are called inversions. If the leftmost tile was number 7, then the number of inversions for the first tile would be 6, obviously. Then move to the second tile; how many tiles to its right are less than its value? Keep doing this for all tiles, and that sum is the number of inversions (plus the row number of the empty space).

I have a nice wooden fifteen puzzle that came with a great book describing everything about the puzzle. The pieces are removable, so this program will let me create an initial configuration that is solvable.

To run the program, press A (initialization). Then enter the tile piece in the leftmost position of the first row, followed by pressing B. Then continue along the first row, pressing B for each of the other 3 values. Then enter the first number in the second row and press B, and so on. For the empty space, press 0 then B. After all 16 values are entered, press C. The program will run for about two and one-half minutes before it displays the number of inversions. If this number is even, great, the puzzle is solvable. If the number is odd, simply switch any two tiles with each other and it will be solvable.

I always wanted to create this program for my HP-65, but it was impossible due to only 9 variables (really 8 unless you have no conditionals) and lack of indirect addressing. The HP-67 works fine, however, with its extended programming capabilities.

I am aware of the fact that, in the time the program takes to run, you could have calculated the number of inversions manually. But I generally make a mistake when I do it that way, and the program never makes a mistake, like all good computers.

Remember, A is initialization, B enters the 16 values, and C calculates the number of inversions.

Code:

LBL A
1
ST I
RTN
LBL B
STO (i)
ISZ
RTN
LBL C
16
ST I
LBL 1
RCL (i)
X <> 0
GOTO 2
RCL I
3
+
4
/
INT
STO 0
GOTO 3
LBL 2
DSZ
GOTO 1
LBL 3
1
STO A
LBL 4
RCL A
ST I
RCL (i)
STO C
RCL A
1
+
STO B
LBL 5
RCL B
ST I
RCL (i)
X=0
GOTO 6
RCL C
X<=Y
GOTO 6
1
STO+0
LBL 6
RCL B
1
+
STO B
16
RCL B
X<=Y
GOTO 5
RCL A
1
+
STO A
15
RCL A
X<=Y
GOTO 4
RCL 0
RTN
Find all posts by this user
Quote this message in a reply
12-05-2016, 09:51 PM
Post: #2
RE: (HP-67/97) a little fun with the fifteen puzzle
(12-03-2016 09:26 PM)Don Shepherd Wrote:  The HP-67 works fine, however, with its extended programming capabilities.

Hmmm.... even the 67's capabilities do not offer a X<Y? test or a X<>0 command.
Is this program designed for an emulator with extended instruction set?

Dieter
Find all posts by this user
Quote this message in a reply
12-05-2016, 10:07 PM
Post: #3
RE: (HP-67/97) a little fun with the fifteen puzzle
The X NE 0 or X <> 0 conditional is f + or yellow shift +.

It is the X < Y ? conditional that is not on the keyboard. Unless Don meant that one to be X <= Y ? :-)


The best approaches to supplying the missing conditionals are found in this PPC booklet: Better Programming on the HP-67/97
Find all posts by this user
Quote this message in a reply
12-06-2016, 12:24 AM (This post was last modified: 12-06-2016 03:38 PM by Don Shepherd.)
Post: #4
RE: (HP-67/97) a little fun with the fifteen puzzle
Thanks Dieter and Gene. I changed the x<y to x<=y in the code above.

Yes, I remember as I was entering the program that there was no x<y, so as Gene suggested I tried x<=y and that worked (it works because, in this instance, the two values in x and y can never be equal). I created the HP-67 program from a solver equation I had on the 17b which runs much faster than the 67 code (20 seconds versus 2 and a half minutes).

Thanks for that link Gene, it appears to be a treasure trove of good information on the 67. I plan on studying that document over the holidays.
Find all posts by this user
Quote this message in a reply
12-06-2016, 01:43 AM
Post: #5
RE: (HP-67/97) a little fun with the fifteen puzzle
Maybe post the 17b solver equation if anyone shows an interest? {hint}

SlideRule
Find all posts by this user
Quote this message in a reply
12-06-2016, 03:46 AM
Post: #6
RE: (HP-67/97) a little fun with the fifteen puzzle
(12-06-2016 01:43 AM)SlideRule Wrote:  Maybe post the 17b solver equation if anyone shows an interest? {hint}

SlideRule

Sure, SlideRule, here it is:

Code:

FIFTEEN:SIGMA(I:1:16:1:IF(ITEM(C:I)=0:IDIV(I+3:4):0))+SIGMA(I:1:15:1:SIGMA(J:I+1​:16:1:IF(ITEM(C:J)<>0 AND ITEM(C:J)<ITEM(C:I):1:0)))-INV

solve for INV, sum list C contains the 16 values, 0=empty cell
Find all posts by this user
Quote this message in a reply
12-06-2016, 05:14 AM
Post: #7
RE: (HP-67/97) a little fun with the fifteen puzzle
Here is a link to a version of the fifteen puzzle that has removable pieces. It includes a small book that is very well illustrated and gives the interesting history of the puzzle.

book
Find all posts by this user
Quote this message in a reply
12-06-2016, 07:06 AM
Post: #8
RE: (HP-67/97) a little fun with the fifteen puzzle
(12-05-2016 10:07 PM)Gene Wrote:  The X NE 0 or X <> 0 conditional is f + or yellow shift +.

Ah, so this is supposed to be a *test*!
I read this as an X exchange R0 command!

(12-05-2016 10:07 PM)Gene Wrote:  The best approaches to supplying the missing conditionals are found in this PPC booklet: Better Programming on the HP-67/97

Thank you for the link. The technique itself (two or more consecutive tests) is well known, I once wrote about this in the old forum.

Dieter
Find all posts by this user
Quote this message in a reply
12-06-2016, 12:52 PM
Post: #9
RE: (HP-67/97) a little fun with the fifteen puzzle
(12-06-2016 03:46 AM)Don Shepherd Wrote:  
(12-06-2016 01:43 AM)SlideRule Wrote:  Maybe post the 17b solver equation if anyone shows an interest? {hint}
SlideRule
Sure, SlideRule, here it is:
Thanks!
SlideRule
Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: 1 Guest(s)