Pátek třináctého - RPN


Řešení první

Stejně jako výchozí řešení pro HP-50g i tato RPN varianta pro HP-35s "parazituje" na dávno existující verzi výpočtu dne v týdnu a počtu dní mezi dvěma daty. Použití silných slov dělá text akčnějším, proto ten nelichotivý výraz v minulé větě. Méně zábavné, zato mnohem pravdivější, je tvrzení, že zde popisovaná novota ten starší program doplňuje, rozšiřuje, ba co víc, obohacuje! To doplnění je patrné z adresy první instrukce. Nezačíná očekávaným L001, ale pokračuje tam, kde sled instrukcí předchozího programu skončil.

Provedení pro HP-35s z pochopitelných důvodů nenabízí takový komfort zobrazení výsledků, jako RPL verze pro HP-50g. Běh programu není ukončen vytvořením seznamu výsledných hodnot, ale je (pro potřebu zobrazení mezivýsledku) zastaven instrukcí STOP při každém nalezeném nešťastném pátku. Pokračování běhu programu stiskem R/S vede k dalšímu nálezu. Proto je před spuštěním programu zadán pouze výchozí rok. Pokud hledače přestanou další eventuální nálezy zajímat, tak ať konečně přestane na klávesu R/S dorážet.

Přesto lze mezi oběma řešeními nalézt podobnosti. (Aby ne, když oba programy dělají v zásadě totéž :-) "Ty dva fóry" v hlavním (závěrečném) bloku RPL programu jsou tu také, jen to není tak okaté. (1) Cyklus kráčející po rocích zde degradoval na pouhou inkrementaci proměnné Y s následným skokem na úplný začátek programu. (2) Vnořený cyklus procházející měsíce v daném roce obstarává instrukce ISG N.

Pozn.: dvouřádkového displeje HP-35s je zde s výhodou využito pro zobrazení nejen aktuálního, ale i předchozího nálezu.

ADDRCODEXYZT
Vstupní bod, zadán rok
L055STO Yyp

L0561.0121.012yp
L057STO N1.012yp
L05813131.012yp
L059STO D131.012yp
L060R↑p


Cyklus: všechny měsíce v roce
L061RCL Nm.012p

L062IPmp

L063STO Mmp

L064R↓p


L065XEQ L016fp

L06677fp
L067RMDRwp

L06866wp
L069-w - 6p

L070x≠0?w - 6p

L071GTO L081w - 6p

Zobrazení nálezu
L072CLx0p

L0730.00010.0001p

L074RCL× D0.00ddp

L0750.010.010.00ddp
L076RCL× M0.mm0.00ddp
L077+0.mmddp

L078RCL+ Yyyyy.mmddp

L079STOPyyyy.mmddp

L080x<>ypyyyy.mmdd

Pokračování cyklu
L081R↓p


L082ISG Np


L083GTO L061p


Další rok
L08411p

L085RCL+ Yy + 1p

L086GTO L055



Použití programu:
Stisk klávesČinnostDisplay
2 0 1 3 výchozí rok 0.0000
2013_
XEQ L055 spuštění programu
RUNNING
první nález 0.0000
2,013.0913
R/S pokračování hledání
RUNNING
druhý nález 2,013.0913
2,013.1213
R/S pokračování hledání
RUNNING
třetí nález 2,013.1213
2,014.0613
R/S R/S R/S R/Sopakované pokračování
RUNNING
poslední nález 2,015.1113
2,016.0513


Řešení druhé

I modifikace pro HP-15C využívá existující verzi programu ML-20. Zdálo by se, že mezi programem pro HP-15C a předchozím pro HP-35s nemůže být příliš mnoho rozdílů. V zásadě je to pravda, ale drobné odlišnosti tu jsou. (1) Z programu pro HP-35s je volán pouze jediný podprogram na adrese L016 - výpočet faktoru zadaného data. Ve variantě HP-15C je pro tento účel volán celý podprogram pro určení dne v týdnu (začíná návěštím LBL D). Důvod je prostý: HP-15C nemá funkci RMDR. Zbytek po dělení 7 je vyřešen právě v rámci programové sekvence určující den v týdnu, proto je zde tato sekvence využita celá. (2) Zobrazení nálezu řeší HP-35s "svépomocí" na adrese L072. V případě HP-15C je použit podprogram s návěštím LBL 5, který je v programu pro určení dne v týdnu obsažen.

Jinak si obě RPN varianty nemají co vyčítat: vstupní hodnotou je výchozí rok, styl zobrazení každé nalezené hodnoty je stejný, ovládáním se také neliší. I tvrzení o doplnění, rozšíření a obohacení platí pro HP-15C také. Proto zde popisovaný program na ten předchozí bezprostředně navazuje.

ADDRCODEXYZT
Vstupní bod, zadán rok
140-42,21,.3LBL .3yp

141- 333yp
142- 36ENTER33yp
143- 1113yp
144-42,23,11DIM A13yp
145- 33R↓3yp
146- 33R↓yp

147- 111yp
148- 48.1.yp
149- 001.0yp
150- 111.01yp
151- 221.012yp
152- 44 2STO 21.012yp
153- 33R↓yp

Cyklus: všechny měsíce v roce
154-42,21,.2LBL .2yp

155-42,16, 1MATRIX 1yp

156u 44 11STO AYYYY → A[1]


157- 111yp
158- 3313yp
159u 44 11STO ADD → A[2]


160- 45 2RCL 2MM.01213yp
161- 43 44INTMM13yp
162- 44 11STO AMM → A[3]


163- 43 33R↑p


164- 32 14GSB Dwppp
165- 555wpp
166-43,30, 6TEST 6 (x≠y)je to pátek?


167- 22 .1GTO .1není


168-42,16, 1MATRIX 15wpp
179- 43 33R↑p


170- 32 5GSB 5wppp
171- 31R/SYYYY.MMDDppp
172- 33R↓pppYYYY.MMDD
Pokračování cyklu
173-42,21,.1LBL .1???p
174- 43 33R↑p


175-42,16, 1MATRIX 1p


176- 45 11RCL Ayp

177-42, 6, 2ISG 2yp

178- 22 .2GTO .2



Další rok
179- 111yp
180- 40+yp

181- 22 .3GTO .3



Použití programu:
Stisk klávesČinnostDisplay
2 0 1 3 výchozí rok 2013
GSB . 3 spuštění programu running
první nález 2,013.0913
R/S pokračování hledání running
druhý nález 2,013.1213
x<>y předchozí (první) nález2,013.0913
x<>y zpět druhý nález 2,013.1213
R/S pokračování hledání running
třetí nález 2,014.0613
R/S R/S R/S R/Sopakované pokračování running
poslední nález 2,016.0513