Archive:
Subtopics:
Comments disabled |
Tue, 24 Sep 2013
In which I revisit the pastimes of my misspent youth
I lost my original one somewhere along the way, and also the spare I had bought from a friend against the day when I lost the original, and I was glad to get another one, even though I didn't have any idea what I was going to do with it. My phone has a perfectly serviceable scientific calculator in it, a very HP-ish one called RealCalc. (It's nice, you should check it out.) The 15C was sufficiently popular that someone actually brought it back a couple of years ago, in a new and improved version, with the same interface but 21st-century technology, and I thought hard about getting one, but decided I couldn't justify spending that much money on something so useless, even if it was charming. Finding a cheap replacement was a delightful surprise. Then on Friday night I was sitting around thinking about which numbers n are such that !!10n^2+9!! a perfect square, and I couldn't think of any examples except for 0, 2, and 4. Normally I would just run and ask the computer, which would take about two minutes to write the program and one second to run it. But I was out in the courtyard, it was a really nice evening, my favorite time of the year, the fading light was beautiful, and I wasn't going to squander it by going inside to brute-force some number problem. But I did have the HP-15C in my pocket, and the HP-15C is programmable, by mid-1980s programmable calculator standards. That is to say, it is just barely programmable, but just barely is all you need to implement linear search for solutions of !!10n^2+9 = m^2!!. So I wrote the program and discovered, to my surprise, that I still remember many of the fussy details of how to program an HP-15C. For example, the SST button single-steps through the listing, in program mode, but single-steps the execution in run mode. And instead of using the special test 5 to see if the x and y registers are equal you might as well subtract them and use the x=0 test; it uses the same amount of program memory and you won't have to flip the calculator over to remember what test 5 is. And the x^{2} and INT() operations are on the blue shift key. Here's the program:
001 - 42,21,11 Label A: (subroutine) 002 - 43 11 x² 003 - 1 004 - 0 10 005 - 20 multiply 006 - 9 9 007 - 40 add 008 - 36 enter (dup) 009 - 11 √ 010 - 36 enter (dup) 011 - 43 44 x ← int(x) 012 - 30 subtract 013 - 43 20 unless x=0: 014 - 31 STOP 015 - 43 32 return from subroutine 016 - 42,21,12 Label B: 017 - 40 + 018 - 45 0 load register 0 019 - 32 11 call A 020 - 2 2 021 - 44,40, 0 add to register 0 022 - 22 12 goto BI see now that when I tested !!\sqrt{10n^2+9}!! for integrality, I did it the wrong way. My method used four steps: 010 - 36 -- enter (dup) 011 - 43 44 -- x ← INT(x) 012 - 30 -- subtract 013 - 43 20 -- unless x=0: …but it would have been better to just test the fractional part of the value for zeroness: 42 44 -- x ← FRAC(x) 43 20 -- unless x=0: …Saving two instructions might not seem like a big deal, but it takes the calculator a significant amount of time to execute two instructions. The original program takes 55.2 seconds to find n=80; with the shorter code, it takes only 49.2 seconds, a 10% improvement. And when your debugging tool can only display a single line of numeric operation codes, you really want to keep the program as simple as you can. Besides, stuff should be done right. That's why it's called "right". But I kind of wish I had that part of my brain back. Who knows what useful thing I would be able to remember if I wasn't wasting my precious few brain cells remembering that the back-step key ("BST") is on the blue shift, and that "42,21,12" is the code for "subroutine B starts here". Anyway, the program worked, once I had debugged it, and in short order (by 1986 standards) produced the solutions n=18, 80, 154, which was enough to get my phone to search the OEIS and find the rest of the sequence. The OEIS entry mentioned that the solutions have the generating function
$$\frac{2x^2(1+2x+9x^2+2x^3+x^4)}{1-38x^3+x^6}$$ and when I saw that !!38x^3!! in the denominator, I laughed, really loudly. My new neighbor was in her back yard, which adjoins the courtyard, and heard me, and said that if I was going to laugh like that I had to explain what was so funny. I said “Do you really want to know?” and she said yes, but I think she was mistaken.[ Addendum 20200204: Had I been doing this in the 1980s, I would have had to go into the house to check the OEIS, but I have wistfully gotten rid of my useless hardback copy, because these days I can do it from the courtyard on my phone. ] [Other articles in category /brain] permanent link |