HP Forums
HHC 2017 RPN Programming contest information and results thread - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Calculators (and very old HP Computers) (/forum-3.html)
+--- Forum: General Forum (/forum-4.html)
+--- Thread: HHC 2017 RPN Programming contest information and results thread (/thread-9084.html)

Pages: 1 2 3


RE: HHC 2017 RPN Programming contest information and results thread - Werner - 09-18-2017 06:00 AM

Dave: if you replace

RDN
1

by

SIGN

you're down to 69. Congrats!

Werner


RE: HHC 2017 RPN Programming contest information and results thread - Werner - 09-18-2017 07:51 AM

I've been able to get it down to 68 bytes, Dave's idea

Code:
>LBL"HAPPY"
 CLA
 CF 29
 FIX 0
 0
 STO Z
>LBL 02
 CLX
 4
 X=Y?
 GTO 04
 SIGN
 X=Y?
 GTO 01
 ARCL Y
 MOD
 ISG Y
>LBL 03
 ATOX
 X=0?
 GTO 02
 48
 -
 X^2
 +
 GTO 03
>LBL 04
 "UN"
>LBL 01
 +"HAPPY "
 ARCL Z
 SF 29
 FIX 4
 AVIEW
 END

Cheers, Werner


RE: HHC 2017 RPN Programming contest information and results thread - Paul Dale - 09-18-2017 08:23 AM

Just wondering if a CLSTK at the end is shorter than the '0' at step 5?
Default state at the start means zeros on the stack but to be rerunnable these have to be restored.

Pauli


RE: HHC 2017 RPN Programming contest information and results thread - Werner - 09-18-2017 09:03 AM

No, 0 and CLST are both 1 byte on a 41.
Werner


RE: HHC 2017 RPN Programming contest information and results thread - Didier Lachieze - 09-18-2017 11:02 AM

(09-18-2017 07:51 AM)Werner Wrote:  I've been able to get it down to 68 bytes, Dave's idea

Excellent! but there are too much labels. We can save one byte by removing LBL 01 , going down to 67 bytes:
Code:
Step  Bytes    Instruction 
 1      9     >LBL"HAPPY"
 2      2      CLA
 3      2      CF 29
 4      1      FIX 0
 5      1      0
 6      2      STO Z
 7      1     >LBL 02
 8      1      CLX
 9      1      4
10      1      X#Y?
11      1      SIGN
12      1      X=Y?
13      2      GTO 04
14      2      ARCL Y
15      1      MOD
16      2      ISG Y
17      1     >LBL 03
18      2      ATOX
19      1      X=0?
20      2      GTO 02
21      2      48
22      1      -
23      1      X^2
24      1      +
25      2      GTO 03
26      1     >LBL 04
27      2      DSE X
28      3      "UN"
29      8      "|-HAPPY "
30      2      ARCL Z
31      2      SF 29
32      2      FIX 4
33      1      AVIEW
34      3      END
       67



RE: HHC 2017 RPN Programming contest information and results thread - Werner - 09-18-2017 11:26 AM

You Shall Not Pass!

66 bytes

Code:
>LBL"HAPPY"
 CLA
 CF 29
 FIX 0
 0
 STO Z
>LBL 02
 CLX
 4
 X!=Y?
 SIGN
 X=Y?
 GTO IND X
 ARCL Y
 MOD
 ISG Y
>LBL 03
 ATOX
 X=0?
 GTO 02
 48
 -
 X^2
 +
 GTO 03
>LBL 04
 "UN"
>LBL 01
 +"HAPPY "
 ARCL Z
 SF 29
 FIX 4
 AVIEW
 END

Werner


RE: HHC 2017 RPN Programming contest information and results thread - Dave Britten - 09-18-2017 11:39 AM

Ah, I KNEW there had to be a way to improve the 4/1 tests somehow. Didn't think to use SIGN and indirect GTO. Very nice.


RE: HHC 2017 RPN Programming contest information and results thread - Gene - 09-18-2017 08:04 PM

Some of the below is repeated in the post for the RPL programming contest...

--------------------------------------------------------------------------------------------
The way the contests work at a real HHC gathering goes something like this.

1) We announce that program submissions (a physical machine with the program in it already AND a printed/hand written listing of the program AND the author's name on the machine and listing) are due to the judge at say Noon.

2) Noon happens to be when we break for lunch.

3) So as we break for lunch, those entering the contest are fighting their way to the judge who has to be careful to keep the machines safe (I dropped a 41C two years ago and broke it - ugh - didn't enjoy getting that fixed).

4) The judge tries to go get some lunch and then runs the inputs to the RPL and RPN contests on the machines and tries to record results / score them.

5) This is often a slow process since people want to be friendly and are curious. Personally, I don't like to hide, but I probably should.

6) The contest results are usually determined in an hour or so and then announced around 3pm. The results are kept secret until then.

7) Winner of each contest gets to pick a prize from the prize table AFTER the Best Speaker picks one but before all the other attendees will pick one.

8) The judge then starts trying to think of a contest for next year!

--------------------------------------------------------------------------------------------
Here are the numbers I used as test inputs.


Number 1: 123,456,789
Result: UNHAPPY 13

Number 2: 987,654,321
Result: UNHAPPY 13

Number 3: 555,555,555
Result: UNHAPPY 12

Number 4: 20
Result: UNHAPPY 1

Number 5: 989
Result: HAPPY 6

Number 6: 13
Result: HAPPY 2

Number 7: 15999
Result: UNHAPPY 16 (Note: 16 is the highest number of cycles required for a 10 digit or less number to process. Thanks, Eric Smith for finding this!)

Number 8: 100
Result: HAPPY 1

Number 9: 8002
Result: HAPPY 3

Number 10: 1
Result: HAPPY 1


RE: HHC 2017 RPN Programming contest information and results thread - Don Shepherd - 09-18-2017 09:23 PM

Never having used a 41, I wanted to implement the problem using the 17bii solver. Here is the equation:
Code:
HAPPY:HAP+CYC+
ANS=SIGMA(I:1:100:1:
L(N:SIGMA(J:0:LOG(NUM):1:
SQ(MOD(IDIV(NUM:10^J):10))))
+L(NUM:G(N))+
IF(NUM=1 OR NUM=4:L(HAP:NUM)+L(CYC:I)/0:0))

This is not a normal solver equation, it takes advantage of the fact you can exit a loop by inducing an error in the calculation (divide by 0 works well) after saving whatever values you want in variables that you can then RCL. So, to run this, enter your desired number to test and press NUM. Then press ANS (solve for ANS). After a few seconds it will beep and display SOLUTION NOT FOUND. Just RCL HAP (4=unhappy, 1=happy) and RCL CYC for the number of cycles.


RE: HHC 2017 RPN Programming contest information and results thread - John Keith - 09-18-2017 10:26 PM

OK then, here's my (irrelevant) RPL version using DavidM's ListExt library:

Code:
\<< 0 SWAP DO I\->NL SQ LSUM SWAP 1 + SWAP
           UNTIL { 1 4 } OVER POS
           END "HAPPY"
        IF SWAP 4 SAME
        THEN "UN" SWAP +
        END \->TAG
\>>



RE: HHC 2017 RPN Programming contest information and results thread - Dieter - 09-18-2017 10:36 PM

(09-18-2017 11:02 AM)Didier Lachieze Wrote:  
Code:
Step  Bytes    Instruction 
 1      9     >LBL"HAPPY"
 2      2      CLA

Why should "CLA" require 2 bytes?

Dieter


RE: HHC 2017 RPN Programming contest information and results thread - Didier Lachieze - 09-19-2017 04:01 AM

Good catch, of course CLA requires only 1 byte instead of 2 and on step 4 FIX 0 requires 2 bytes and not 1. It seems I swapped the byte count for these two instructions, but the total count is right.

I can't find any further optimization of Werner's last code. The GTO IND is brilliant !


RE: HHC 2017 RPN Programming contest information and results thread - Werner - 09-19-2017 05:57 AM

Well, I missed all big improvements (ATOX, the 1/4 combined test), all I did was find two tricks ;-)

Now, what should 1 HAPPY return? "HAPPY 1" or "HAPPY 0"? I vote for the latter.
It's logical that 1 HAPPY is "HAPPY 0" and 10 HAPPY is "HAPPY 1".

Cheers, Werner


RE: HHC 2017 RPN Programming contest information and results thread - Bernd Grubert - 09-19-2017 09:53 AM

Here is my version. It uses synthetic programming. It restores the flags and settings to its previous state and uses register 'a' as counter for the (un-)happy steps.

71 Bytes, no regs.

Regards Bernd

Code:

BYTES   Command
  9     LBL "HAPPY"
  1     LBL 11 
  1     ENTER^
  2     ST- Y       ( prepare Y as summation register)
  1     LBL 12
  2     RCL X
  2     10
  2     ST/ Z
  1     MOD
  1     X^2
  2     ST+ Z       ( calculate sqr sum in Z)
  1     RDN
  1     INT
  1     X#0?
  2     GTO 12
  2     ISG a
  1     ""          ( byte 0xF0 )
  1     RDN
  1     4
  1     X=Y?
  2     GTO 13
  1     SIGN
  1     X<>Y
  1     X#Y?
  2     GTO 11
  1     CLX
  1     LBL 13
  1     CLA
  1     X#0?
  3     "UN"
  8     +"HAPPY "
  2     RCL d
  2     FIX 0
  2     CF 29
  2     ARCL a
  2     STO d
  1     AVIEW
  3     END
--
71 bytes total



RE: HHC 2017 RPN Programming contest information and results thread - Gene - 09-19-2017 12:14 PM

(09-19-2017 05:57 AM)Werner Wrote:  Well, I missed all big improvements (ATOX, the 1/4 combined test), all I did was find two tricks ;-)

Now, what should 1 HAPPY return? "HAPPY 1" or "HAPPY 0"? I vote for the latter.
It's logical that 1 HAPPY is "HAPPY 0" and 10 HAPPY is "HAPPY 1".

Cheers, Werner

Hello all! The powers of the on-site judge are nearly all-inclusive.

Per the rules I wrote :-) which say this:

"Start with a number and replace it with the sum of the squares of each of its digits. Compare the computed sum of these squares to the rules below. Repeat the process with the previous result as the next input."

1 should return HAPPY 1.

Start with a number - in this case 1 is entered.

Then replace it with the sum of the squares of each of its digits. Ok, still 1.

THEN compare the computed sum to the rules below.

At this point, one cycle has occurred so when 1 is evaluated, the cycle count should be 1. Same score as 10 or 100 etc. of course.

:-)


RE: HHC 2017 RPN Programming contest information and results thread - Werner - 09-19-2017 01:05 PM

I bow to the judge..
[Edited] Still 66 bytes

Code:
>LBL"HAPPY"
 CLA
 CF 29
 FIX 0
 0
 X<>Y
 ENTER
>LBL 02
 ARCL Y
 MOD
 ISG Y
>LBL 03
 ATOX
 X=0?
 GTO 00
 48
 -
 X^2
 +
 GTO 03
>LBL 00
 CLX
 4
 X=Y?
 "UN"
 X!=Y?
 SIGN
 X!=Y?
 GTO 02
 +"HAPPY "
 ARCL Z
 SF 29
 FIX 4
 AVIEW
 END



RE: HHC 2017 RPN Programming contest information and results thread - DanM - 09-19-2017 03:05 PM

(09-19-2017 01:05 PM)Werner Wrote:  I bow to the judge..

Wow, that is slick and impressive. Everything that my program isn't. :-)

For the conference, my notes indicate that Gene said 10 entries for the RPN contest and only 5 for the RPL. I find that ratio interesting.


RE: HHC 2017 RPN Programming contest information and results thread - Gene - 09-19-2017 03:18 PM

(09-19-2017 01:05 PM)Werner Wrote:  I bow to the judge..
[Edited] Still 66 bytes

Gene: :-) Don't bow to me! I try not to let those Judging powers go to my head. Honest! lol.


RE: HHC 2017 RPN Programming contest information and results thread - Bernd Grubert - 09-19-2017 09:02 PM

Here is another 66 byte version that uses Werner's clever trick of 4/1 check. It works on a HP 41C, but uses synthetic commands.

Regards
Bernd

Code:
LBL "HAPPY"
ENTER^
CLA
LBL 11 
CLX
X<>Y
LBL 12
RCL X
10
ST/ Z
MOD
X^2
ST+ Z       ( calculate sqr sum in Z)
RDN
INT
X#0?
GTO 12
ISG a
""          ( byte 0xF0 )
RDN
4
X=Y?
"UN"
X!=Y?
SIGN
X!=Y?
GTO 11
+"HAPPY "
RCL d
FIX 0
CF 29
ARCL a
STO d
AVIEW
END



RE: HHC 2017 RPN Programming contest information and results thread - David Hayden - 09-19-2017 09:05 PM

(09-19-2017 03:05 PM)DanM Wrote:  For the conference, my notes indicate that Gene said 10 entries for the RPN contest and only 5 for the RPL. I find that ratio interesting.
Those are high numbers for both contests if my memory serves. There are usually more entries for the RPN contest than the RPL one. IN 2016 there were only 4 RPL entries.