Post Reply 
[VA] HP-71B Mini-challenge: Qualifying for a job II: Your best image
09-29-2022, 09:24 PM
Post: #1
[VA] HP-71B Mini-challenge: Qualifying for a job II: Your best image
  
Hi, all,

After passing with flying colors the first part of your job application evaluation (the infamous "DEF FN Hell" part,) now the Human Resources manager, Ms. Lovejoy, mercilessly inflicts a new programming task upon those applicants who survived, namely asking them to create a simple three-liner strictly according to the following specification:

The BASIC program (for a bare-bones HP-71B) must first (1) perform some initialization, ask for a real value x and force it to the range [1..100], then (2) it must display on a single line the values of
    x, sin(x), cos(x), tan(x) and ln(x)+exp(x)
in FIX format rounded to, respectively, 3, 1, 4, 1, 6 places to the right of the decimal point (*), and finally (3) display "OK" on a new line and end. As always, the shorter the better.
    (*) If the number of digits to be displayed exceeds 12 (the value is too big), or if a nonzero value rounded to N places past the decimal point would be displayed as zero (the value is too small), then the value should be displayed in SCI format, rounded to N places past the decimal point.
The first part is easy and she provides it for you:
    1 DESTROY ALL @ RADIANS @ INPUT X @ X=MAX(MIN(X,100),1)
The third part, also provided by Ms. Lovejoy, is even easier:
    3 DISP "OK"
So all you have to do is fill in the dots in the second part with your own code:
    2 DISP...
There shouldn't be any DISP-like (PRINT, etc.) statements in line 2 other than the initial 2 DISP..., either explicit or implicit, and you may not add or modify any other program lines.

Your finished program must produce the following five test sample runs (plus "OK"), roughly tabulated here as follows for clarity's sake (the values should be output exactly as shown, the spacing is just indicative):
    >RUN -> ?   SQR(5) [ENDLINE]  ->   2.236   0.8  -0.6173     -1.3            10.161188
    >RUN -> ?    PI/2  [ENDLINE]  ->   1.571   1.0  -5.1034E-12 -195948537906.   5.262060
    >RUN -> ?     13   [ENDLINE]  ->  13.000   0.4   0.9074      0.5        442415.956958
    >RUN -> ?     30   [ENDLINE]  ->  30.000  -1.0   0.1543     -6.4             1.068647E13
    >RUN -> ? 51*PI/2  [ENDLINE]  ->  80.111  -1.0  -3.9728E-11  25171429518.9   6.188666E34 
That's all. Give your all to try and cast the best image using your HP-71B programming abilities. As always, if I see interest I'll post my original solution in a few days.

Best of luck with your job application ! Smile
V.

  
All My Articles & other Materials here:  Valentin Albillo's HP Collection
 
Visit this user's website Find all posts by this user
Quote this message in a reply
09-30-2022, 02:58 PM
Post: #2
RE: [VA] HP-71B Mini-challenge: Qualifying for a job II: Your best image
OK, I have one solution.
99 bytes for the 3 lines, passes the test cases.

As often with exam-type problems, carefully read the problem and promptly eliminate potential solutions that can't work to concentrate on solutions that may.

Can we find a shorter one? Not sure there are alternative solutions.

J-F
Visit this user's website Find all posts by this user
Quote this message in a reply
09-30-2022, 08:07 PM (This post was last modified: 09-30-2022 08:11 PM by C.Ret.)
Post: #3
RE: [VA] HP-71B Mini-challenge: Qualifying for a job II: Your best image
Hi there,

It doesn't have to be a coincidence; my solution is also exactly 99 bytes.

I really had a little trouble fitting everything into this line 2.
I almost gave up. Simply filling in the dotted lines is not enough.
But with a good shoehorn or a little trick consisting of a few additions and an omission... it's fine!!
Find all posts by this user
Quote this message in a reply
09-30-2022, 10:04 PM
Post: #4
RE: [VA] HP-71B Mini-challenge: Qualifying for a job II: Your best image
.
Hi, J-F and C.Ret,

J-F Garnier Wrote:OK, I have one solution. 99 bytes for the 3 lines, passes the test cases.
Can we find a shorter one? Not sure there are alternative solutions.

C.Ret Wrote:It doesn't have to be a coincidence; my solution is also exactly 99 bytes.

By sheer coincidence, my original solution is 99 bytes too !! Smile Might it be the case that all three solutions are essentially identical ?

I'd suggest to delay posting solutions until Monday or Tuesday, just in case either we or someone else concocts a shorter one or some novel ideas.

Thanks for your interest and best regards.
V.

  
All My Articles & other Materials here:  Valentin Albillo's HP Collection
 
Visit this user's website Find all posts by this user
Quote this message in a reply
10-03-2022, 11:31 AM
Post: #5
RE: [VA] HP-71B Mini-challenge: Qualifying for a job II: Your best image
Hello HP-71B users/fans/experts,

This challenge is not that difficult, let me give one more hint: the solution is in the problem statement, what is to do is to implement it in a single BASIC line - a single DISP but not necessary a single statement.

I believe the solution is unique, so if you follow the right track - knowing that the solution exists - you will for sure find it, it's a matter of logic (and a little bit of HP-71 BASIC knowledge, but not so much), just don't give up!

J-F
Visit this user's website Find all posts by this user
Quote this message in a reply
10-04-2022, 07:22 AM
Post: #6
RE: [VA] HP-71B Mini-challenge: Qualifying for a job II: Your best image
Since there are no last-minute candidate for the job, I will give my answer now.

The idea is, as requested, to use the FIX display mode. As a single DISP is allowed, a way to execute a FIX command before each argument is needed, and a user-defined-function will do it.
Then the problem is just to fit everything in one line:

2 DISP FNF(3)+X,FNF(1)+SIN(X),FNF(4)+COS(X),FNF(1)+TAN(X),FNF(6)+LN(X)+EXP(X) @ DEF FNF(N) @ FIX N @ END DEF

To enter the line, the spaces (except the first one after the line number) and the "DISP" string must not be typed, using the HP-71 implicit DISP feature - the only real trick needed here.

J-F
Visit this user's website Find all posts by this user
Quote this message in a reply
10-04-2022, 08:42 PM
Post: #7
RE: [VA] HP-71B Mini-challenge: Qualifying for a job II: Your best image
.
Hi, all,

Thanks to J-F Garnier and C.Ret for their interest in this mini-challenge, time for a wrap up. J-F's solution is:

J-F Garnier Wrote:As a single DISP is allowed, a way to execute a FIX command before each argument is needed, and a user-defined-function will do it [...]

2 DISP FNF(3)+X,FNF(1)+SIN(X),FNF(4)+COS(X),FNF(1)+TAN(X),FNF(6)+LN(X)+EXP(X) @ DEF FNF(N) @ FIX N @ END DEF

which, as foreshadowed, it's virtually identical to my original solution, which is:

2 DISP FNF(3)+X;FNF(1)+SIN(X);FNF(4)+COS(X);FNF(1)+TAN(X);FNF(6)+LN(X)+EXP(x) @ DEF FNF(N) @ FIX N @ END DEF

the only difference being that J-F uses "," to separate the items while my OP uses ";", which results in a more compact output. Both solutions are 99 bytes long.

C.Ret Wrote:Simply filling in the dotted lines is not enough. But with a good shoehorn or a little trick consisting of a few additions and an omission... it's fine!!

Let's see C.Ret's solution to ascertain whether it's also identical to the ones above, which seems likely. The omission he mentions is probably the implicit DISP while entering the line.

The idea for this mini-challenge was to let HP-71B users to further realize that
  • (1) DEF FN can appear anywhere within a line, not just at the beginning.
  • (2) There's no need to assign FN any value, in which case the default is zero.
  • (3) A multi-statement user-defined function can be used to execute whatever statements (say: changing modes, logging values, etc.) in the middle of the evaluation of a mathematical expression which includes one or more calls to it at appropriate places.
All three can be put to very good use in many specialized situations and they're worth keeping in mind in case the need to use them arises.

Thanks and regards.
V.

  
All My Articles & other Materials here:  Valentin Albillo's HP Collection
 
Visit this user's website Find all posts by this user
Quote this message in a reply
10-06-2022, 05:45 AM
Post: #8
RE: [VA] HP-71B Mini-challenge: Qualifying for a job II: Your best image
Thanks Valentin for your inspiring problems (and detailed solutions) - and all others that share information and inspires!

It was many years since I was (?) a real 71B addict, and I was totally lost on this second assignment (looking for a trick using IMAGE instead of user defined functions ... Wink) but I never managed to cram it in to one line ...

As a programmer I always have liked these kinds of problems - and the gained knowledge helps me in all kinds of other assignments.
The better one knows the landscape - the more you can gain from the map! It has nothing to do with writing obfuscated code, rather writing solid code, avoiding pitfalls and using the available resources in the best way!

Looking forward to similar assignments and challenges!

Best regards,
Thomas (7397)[134]

[35/45/55/65/67/97/80 21/25/29C 31E/32E/33E|C/34C/38E 41C|CV|CX 71B 10C/11C/12C/15C|CE/16C 32S|SII/42S 28C|S 48GX/49G/50G 35S 41X]
Find all posts by this user
Quote this message in a reply
10-06-2022, 02:17 PM
Post: #9
RE: [VA] HP-71B Mini-challenge: Qualifying for a job II: Your best image
.
Hi, ThomasF,

(10-06-2022 05:45 AM)ThomasF Wrote:  Thanks Valentin for your inspiring problems (and detailed solutions) - and all others that share information and inspires!

Thanks to you for your appreciation. I now I always say the same but there are only so many ways to express my thanks and I always mean it.

Quote:[...] I was totally lost on this second assignment (looking for a trick using IMAGE instead of user defined functions ... Wink) but I never managed to cram it in to one line ...

Hehe, that was pretty much my intent, that's why I put words like "image" and "using" in my OP in a subliminal way, to make people think about considering USING and IMAGE statements from the get-go.

I don't think there's a solution using IMAGEs. One might try something like this and attempt to fine-tune it:
    2 DISP USING "MD.3D,MZ.D,MZ.4D,MZ.D,MZ.6D";X,SIN(X),COS(X),TAN(X),LN(X)+EXP(X)
but it doesn't reproduce the results in my OP and gives WRN L2:IMAGE Ovf with large values at runtime. The IMAGE statement can't be used, of course, as it would require an additional line and more bytes.

Quote:As a programmer I always have liked these kinds of problems - and the gained knowledge helps me in all kinds of other assignments. The better one knows the landscape - the more you can gain from the map! It has nothing to do with writing obfuscated code, rather writing solid code, avoiding pitfalls and using the available resources in the best way!

I fully concur, couldn't say it better myself.

Quote:Looking forward to similar assignments and challenges!

Well, yesterday I just posted SRC #012a - Then and Now: Probability , the first of a number of non-trivial modern problems to be solved using exclusively vintage HP calcs, not the intended laptops.

Most of them require solid programming abilities, and I'll supply nice HP-71B solutions for all of them. You might want to develop and post your own as well, it'll be great fun !

Thanks again and regards.
V.

  
All My Articles & other Materials here:  Valentin Albillo's HP Collection
 
Visit this user's website Find all posts by this user
Quote this message in a reply
10-08-2022, 01:38 PM (This post was last modified: 10-08-2022 02:07 PM by C.Ret.)
Post: #10
RE: [VA] HP-71B Mini-challenge: Qualifying for a job II: Your best image
Hello all,

My final version is exactly that of Valentin because like him I used semicolons for a more compact display.

2 DISP FND(3)+X;FND(1)+SIN(X);FND(4)+COS(X);FND(1)+TAN(X);FND(6)+EXP(X)+LOG(X) @ DEF FND(N) @ FIX N @ END DEF

And like Jean-François, to enter this line you must omit typing the spaces between the key words and also typing DISP which will be added automatically by the HP-71B.
It is precisely this omission that I alluded to in my previous post.

Additions are more difficult to explain. But that's also what's most exciting.
As I said before, I had a lot of trouble finding this solution and I almost gave up.

The easiest thing for me is to tell you the whole story in the correct order.


As usual, I started by reading the statement very quickly without paying attention to the details.

Like Thomas, I went immediately to a formatting solution using the operators of the IMAGE command. In spite, having read that everything had to be put on line 2, I actually went head-on into a solution using a DISP USING ...

Quickly I get a program a line resembling the one proposed above by Valentin:

2 DISP USING '9DZ.3D,11DZ.DX,8DZ.4D,11DZ.D,6DZ.6D';X,SIN(X),COS(X),TAN(X),EXP(X)+LOG(X)

Well immediately I see that it's wrong, because I'm not getting the right results and a lot of error warning messages for large numbers.


This is then I read the statement more carefully and see what is expected when the values ​​are too low or too high...
I then plan to format the result using a very complex user function that takes two arguments and returns a string. I get a DISPlay part already taking almost all available space on line 2:

2 DISP FND$(X,3);FND$(SIN(X),1);FND$(COS(X),4);FND$(TAN(X),1);FND$(EXP(X)+LOG(X),6)

At first and hoping to be able to put all the code on line 2 after having found an optimization, I add lines 10 to 19 at the end of the program to put the definition of my FNF$(V, D) function. It's a nice function full of tests IF THEN ELSE statements, etc. that manipulates character strings to form integer part, fractional part and possibly the exponent depending of the number value to display.
I will spare you the details of the 8 lines of code for this function. It is obvious that I went to a dead end, never such a structure will be able to enter the rest of the space available on line 2.

So I need to find a trick.

For everything to fit on line 2, there must necessarily be a way. Like using something that this wonderful HP-71B does naturally.

That's when I found this on page 280 of my reference manual where syntax and usage of the STR$ function is explain:
Quote:Format d'affichage à décimale fixe (FIX). La valeur est affichée en étant arrondie à n positions au-delà du signe décimal, où n est spécifié par FIX n.
Si le nombre de chiffres affichés par cette méthode dépasse 12, la valeur est affichée en format SCI n.
Si la valeur différente de zéro arrondie à n positions au-delà du signe décimal est égal à zéro, la valeur est affichée en format SCI n.

The translation is also on page 280 of the English Reference Manual, but it is also almost word for word what is specified in Valentin's statement:
   

I therefore immediately plan to use the STR$() instruction to format my values and my display function FND$ length goes from 8 lines to one single line:

10 DEF FND$(V,D) @ FIX D @ FND$=STR$(V) @ END DEF

This compact my function nicely, but still not everything is fitting in the single line 2.

I must be doing something unnecessary. As it can't be the FIX n, it has to be related to the use of the STR$().
And yes! On page 82 of the same manual the operation of DISP is explained and it's said that DISP displays numbers according to the FIX n format exactly as the STR$() instruction does.

It clicked in my little head.

2 DISP FND(X,3);FND(SIN(X),1);FND(COS(X),4);FND(TAN(X),1);FND(EXP(X)+LOG(X),6)
...
10 DEF FND(V,D) @ FIX D @ FND=V @ END DEF


Still too long, I certainly have to avoid repetition of arguments or affectations such as FND=V, etc.
So, a shorter function with a single argument definition results: FND(N) @ FIX N @ END DEF

I then erased the superfluous and prohibited lines and reentered the whole line 2. Everything entered in but with the shoehorn, ie without any spaces or the initial DISP.

2 DISP FND(3);X;FND(1);SIN(X);FND(4);COS(X);FND(1);TAN(X);FND(6);EXP(X)+LOG(X) @ DEF FND(N) @ FIX N @ END DEF


Unfortunately, this does not show the expected results but something like:
[RUN]
?_ SQRT(5) [END LINE]
 0.000  2.236  0.0  0.8  0.0000 -0.6173  0.0 -1.3  0.000000  10.161188 [END LINE]
OK
>


The solution is finally to replace the semicolons after each call to the FND function by an addition sign, which causes the unwanted zeros to disappear from the display.
2 DISP FND(3)+X;FND(1)+SIN(X);FND(4)+COS(X);FND(1)+TAN(X);FND(6)+EXP(X)+LOG(X) @ DEF FND(N) @ FIX N @ END DEF


Ah! What a challenge! That's not going to tarnish Valentin's reputation. I gave myself completely! And for once I found something decent.

In any case, a thousand thanks, I really appreciate this type of exercise, even if it takes up a lot of my leisure time.
Find all posts by this user
Quote this message in a reply
10-09-2022, 11:37 PM
Post: #11
RE: [VA] HP-71B Mini-challenge: Qualifying for a job II: Your best image
.
Hi, C.Ret,

(10-08-2022 01:38 PM)C.Ret Wrote:  My final version is exactly that of Valentin because like him I used semicolons for a more compact display.

Yup, as expected all three posted solutions are essentially identical. I don't think a significantly different one exists. This is a rare occurrence, usually some latitude is possible.

Quote:The easiest thing for me is to tell you the whole story in the correct order.

Wow, such an enthralling read, thank you very much for your time and effort in sharing with us your thought processes and tries while solving the challenge, this is exactly the kind of feedback I crave for; much appreciated and thanks a lot for it ! Smile Smile

Quote:Ah! What a challenge! That's not going to tarnish Valentin's reputation. I gave myself completely! And for once I found something decent. In any case, a thousand thanks, I really appreciate this type of exercise, even if it takes up a lot of my leisure time.

My sincerest congratulations for your success and thank you very much for your appreciation, I relly hope it was worth your while.

Best regards.
V.

  
All My Articles & other Materials here:  Valentin Albillo's HP Collection
 
Visit this user's website Find all posts by this user
Quote this message in a reply
Post Reply 




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