RE: HHC 2014 Programming Contest
Discussion about the 2014 contest seems to have waned a bit, but I'll go ahead and post an update on my progress. I was able to shorten my slow version to 44 steps. I had a slightly faster version at 50 steps. My reasonably fast version was stuck at 83 steps and I did not see any opportunities to improve that by much. I was not particularly satisfied with the shorter versions due to the speed, or the longer version based on length, so I kept on trying to come up with new approaches, thought of one, and developed it. (No earth-shaking insights I'm sure, just different than previous attempts.) I was able to develop a 44 step program that seems as fast as my 83 step version. There may be opportunities to shave a few steps off of that, but I think I'm pretty satisfied at this point. In case anyone is interested, here it is:
Code:
YYYY is input year
YYYx is year before input year
YYYz is year after input year
YYY? is indeterminate, could be YYYY, YYYx or YYYz, depending on the situation
calculator must be in yyyy.mmdd date mode
Operation - key in the year you wish to check for Prime Pair Dates, press XEQ 'PPD'.
Program will display any prime pair dates in that year in chronological order. When
done, it will display the input year. (Ignore any values in the Y display if you have
Y display on.)
001 LBL 'PPD' Label "Prime Pair Dates"
002 STO 03 Store input year in register 3
003 SDL 004 multiply by 10000
004 INC X add 1 to YYYY0000, now have YYYY0001
005 SDR 002 divide by 100 to get in form to allow month to be incremented
006 STO 01 store YYYY00.01 in reg 1
007 #11 enter constant 11
008 STO 04 store 11 in loop counter
009 XEQ 01 check YYYx.1231/YYYY0101, YYYY0131/0201…YYYY1031/1101*
010 DSE 04 decrement counter
011 BACK 002 go back to check next date pair
012 #89 when done checking through 1031/1101, enter constant 89
013 STO+ 01 add 89 to YYYY11.01 to get YYYz00.01
014 XEQ 01 check YYYY.1231/YYYz0101
015 RCL 03 recall input year to display when complete
016 STOP
017 LBL 01 subroutine to check date pairs for prime
018 INC 01 increment month
019 RCL 01 recall first of month date
020 SDL 02 multiply by 100 to get in proper form
021 PRIME? is first of month date prime?
022 SKIP 001 if prime, skip to check last of previous month
023 RTN if not prime, return to get next month
024 SDR 004 divide by 10,000 to get in form to allow date arithmetic
025 1 enter 1
026 +/- enter -1
027 DAYS+ subtract 1 day from 1st of month to get last of previous month
028 SDL 004 multiply by 10000 to get in proper form
029 PRIME? is last of prior month date prime?
030 SKIP 001 if prime, skip to display prime date(s)
031 RTN if not prime, return to get next month
032 RCL 01 recall first of month date
033 SDL 002 multiply by 100 to get in proper form for display
034 <>YYXX re-order stack for display in chronological order
035 XEQ 02 execute display subroutine
036 <>TTTT re-order stack to display second date
037 LBL 02 subroutine to display prime date(s)
038 SDR 004 divide year by 10000
039 IP take integer portion to get year value YYY?
040 x=/=? 03 compare YYY? to input year
041 SKIP 002 if not equal, do not display prime date, it is in wrong year
042 <>YYTT re-order stack to display date
043 PSE 25 pause to display prime date
044 RTN
* - 1130 and 1201 can not be a prime pair, so stop after checking 1031/1101 prior
to checking 1231. This program does check other non-possible prime pairs, e.g.
430/501, 630/701 up to that point. This beats checking all days of the year :-)
For the heck of it, I converted Neil's listing of prime date pairs to a list of years with at least one PPD and all PPDs in each such year. There are 1121 years between 1583 and 9999 which have at least one Prime Pair Date (i.e. half of a prime date pair). 218 years have one PPD, 839 have two PPDs, 40 have three PPDs, 23 have four PPDs, none have five PPDs, and one year has the maximum of 6 PPDs, that year being 1679. That totals 2114 individual dates that are one-half of a prime pair, which agrees with Neil's total of 1057 prime pairs. The most common prime pair dates are 31-Jan and 01-Feb, occurring 153 times. The others occur with the following frequency:
31-Dec/01-Jan: 129 occurrences
31-Jan/01-Feb: 153 occurrences
29-Feb/01-Mar: 45 occurrences
31-Mar/01-Apr: 151 occurrences
31-May/01-Jun: 146 occurrences
31-Jul/01-Aug: 149 occurrences
31-Aug/01-Sep: 138 occurrences
31-Oct/01-Nov: 146 occurrences
1-Jan and 31-Dec never occur in the same year.
Here's the complete list:
Code:
1586 31-Oct, 01-Nov
1588 31-Aug, 01-Sep
1600 31-Dec
1601 01-Jan
1608 31-Mar, 01-Apr
1613 31-Jan, 01-Feb
1621 31-Dec
1622 01-Jan
1629 31-Mar, 01-Apr
1632 31-Mar, 01-Apr
1636 29-Feb, 01-Mar
1652 31-Oct, 01-Nov
1664 31-Jul, 01-Aug
1672 31-Aug, 01-Sep
1674 31-Mar, 01-Apr
1678 31-Aug, 01-Sep
1679 31-Jan, 01-Feb, 31-Jul, 01-Aug, 31-Oct, 01-Nov
1697 31-Jul, 01-Aug
1706 31-Jul, 01-Aug
1709 31-Oct, 01-Nov
1732 31-May, 01-Jun
1733 31-Oct, 01-Nov
1747 31-Dec
1748 01-Jan
1764 31-Mar, 01-Apr
1769 31-Jan, 01-Feb
1787 31-Jan, 01-Feb
1793 31-Jan, 01-Feb, 31-Oct, 01-Nov
1796 31-Jul, 01-Aug
1804 31-May, 01-Jun
1805 31-Oct, 01-Nov
1810 31-Dec
1811 01-Jan, 31-Oct, 01-Nov
1824 31-Mar, 01-Apr
1828 31-Dec
1829 01-Jan
1835 31-Jan, 01-Feb
1841 31-Jul, 01-Aug
1847 31-Jul, 01-Aug
1866 31-Mar, 01-Apr
1870 31-May, 01-Jun
1876 31-May, 01-Jun
1881 31-Mar, 01-Apr
1886 31-Jul, 01-Aug
1891 31-Dec
1892 01-Jan
1913 31-Jul, 01-Aug
1921 31-May, 01-Jun
1924 29-Feb, 01-Mar
1925 31-Jan, 01-Feb
1930 31-Dec
1931 01-Jan
1950 31-Mar, 01-Apr
1972 31-Dec
1973 01-Jan
1978 31-Dec
1979 01-Jan, 31-Jan, 01-Feb
1983 31-Mar, 01-Apr
1987 31-Dec
1988 01-Jan
1990 31-Aug, 01-Sep
1997 31-Oct, 01-Nov
2002 31-May, 01-Jun
2017 31-Aug, 01-Sep
2018 31-Jul, 01-Aug
2020 31-Dec
2021 01-Jan
2028 29-Feb, 01-Mar
2029 31-Dec
2030 01-Jan
2036 31-Oct, 01-Nov
2064 31-Mar, 01-Apr
2068 31-Aug, 01-Sep
2075 31-Jan, 01-Feb
2080 29-Feb, 01-Mar, 31-May, 01-Jun
2081 31-Oct, 01-Nov
2093 31-Jul, 01-Aug
2107 31-Aug, 01-Sep
2110 31-May, 01-Jun
2122 31-May, 01-Jun
2132 31-Oct, 01-Nov
2136 31-Mar, 01-Apr
2138 31-Jan, 01-Feb
2150 31-Oct, 01-Nov
2161 31-Dec
2162 01-Jan
2165 31-Jan, 01-Feb
2171 31-Jan, 01-Feb
2204 31-Jul, 01-Aug
2211 31-Mar, 01-Apr
2216 31-Oct, 01-Nov
2242 31-Aug, 01-Sep
2257 31-May, 01-Jun
2262 31-Mar, 01-Apr
2264 31-Jan, 01-Feb
2281 31-Aug, 01-Sep
2282 31-Jul, 01-Aug
2289 31-Mar, 01-Apr
2290 31-Aug, 01-Sep
2291 31-Jan, 01-Feb
2302 31-Aug, 01-Sep
2304 29-Feb, 01-Mar
2308 29-Feb, 01-Mar
2312 31-Oct, 01-Nov
2315 31-Jul, 01-Aug
2320 31-Aug, 01-Sep
2330 31-Jan, 01-Feb
2338 31-May, 01-Jun
2372 31-Jan, 01-Feb
2374 31-Aug, 01-Sep
2383 31-Dec
2384 01-Jan
2385 31-Mar, 01-Apr
2396 31-Jul, 01-Aug
2404 31-Aug, 01-Sep
2413 31-Aug, 01-Sep, 31-Dec
2414 01-Jan, 31-Oct, 01-Nov
2420 31-Jan, 01-Feb, 31-Oct, 01-Nov
2425 31-May, 01-Jun
2435 31-Jul, 01-Aug, 31-Oct, 01-Nov
2437 31-Dec
2438 01-Jan, 31-Jan, 01-Feb
2444 31-Oct, 01-Nov
2446 31-Aug, 01-Sep
2448 29-Feb, 01-Mar
2456 31-Jan, 01-Feb
2485 31-May, 01-Jun
2508 29-Feb, 01-Mar
2510 31-Oct, 01-Nov
2511 31-Mar, 01-Apr
2531 31-Oct, 01-Nov
2533 31-Dec
2534 01-Jan
2535 31-Mar, 01-Apr
2539 31-May, 01-Jun, 31-Aug, 01-Sep
2540 31-Jul, 01-Aug
2542 31-May, 01-Jun
2561 31-Jul, 01-Aug
2570 31-Oct, 01-Nov
2574 31-Mar, 01-Apr
2576 31-Jan, 01-Feb
2581 31-Dec
2582 01-Jan
2600 31-Jan, 01-Feb
2602 31-Dec
2603 01-Jan
2611 31-Aug, 01-Sep
2614 31-Aug, 01-Sep
2615 31-Jul, 01-Aug
2617 31-Aug, 01-Sep
2633 31-Jan, 01-Feb
2634 31-Mar, 01-Apr
2650 31-Dec
2651 01-Jan
2660 31-Oct, 01-Nov
2674 31-May, 01-Jun
2680 31-May, 01-Jun
2689 31-Dec
2690 01-Jan
2706 31-Mar, 01-Apr
2713 31-May, 01-Jun
2728 31-Aug, 01-Sep
2729 31-Oct, 01-Nov
2731 31-May, 01-Jun
2737 31-May, 01-Jun
2765 31-Jan, 01-Feb
2776 31-Dec
2777 01-Jan, 31-Jul, 01-Aug
2781 31-Mar, 01-Apr
2798 31-Jul, 01-Aug
2801 31-Oct, 01-Nov
2802 31-Mar, 01-Apr
2814 31-Mar, 01-Apr
2818 31-May, 01-Jun
2829 31-Mar, 01-Apr
2834 31-Oct, 01-Nov
2847 31-Mar, 01-Apr
2850 31-Mar, 01-Apr
2864 31-Oct, 01-Nov
2867 31-Oct, 01-Nov
2876 31-Jan, 01-Feb
2884 31-May, 01-Jun
2885 31-Jan, 01-Feb
2900 31-Jan, 01-Feb
2912 31-Jul, 01-Aug, 31-Oct, 01-Nov
2926 31-Aug, 01-Sep
2927 31-Oct, 01-Nov
2932 31-Dec
2933 01-Jan, 31-Jan, 01-Feb
2940 31-Mar, 01-Apr
2944 31-May, 01-Jun
2945 31-Oct, 01-Nov
2951 31-Jul, 01-Aug
2987 31-Jan, 01-Feb
2990 31-Oct, 01-Nov
3000 31-Mar, 01-Apr
3014 31-Jul, 01-Aug
3036 29-Feb, 01-Mar
3039 31-Mar, 01-Apr
3047 31-Jan, 01-Feb
3068 31-Jan, 01-Feb
3072 31-Mar, 01-Apr
3079 31-Aug, 01-Sep
3083 31-Jan, 01-Feb
3085 31-May, 01-Jun
3097 31-Dec
3098 01-Jan
3107 31-Oct, 01-Nov
3109 31-Aug, 01-Sep
3114 31-Mar, 01-Apr
3122 31-Jul, 01-Aug
3124 29-Feb, 01-Mar
3131 31-Jul, 01-Aug
3155 31-Jan, 01-Feb, 31-Jul, 01-Aug
3171 31-Mar, 01-Apr
3173 31-Oct, 01-Nov
3176 31-Jul, 01-Aug
3186 31-Mar, 01-Apr
3190 31-Aug, 01-Sep
3210 31-Mar, 01-Apr
3212 31-Jul, 01-Aug
3221 31-Jan, 01-Feb
3223 31-Aug, 01-Sep
3226 31-May, 01-Jun
3252 31-Mar, 01-Apr
3260 31-Jul, 01-Aug
3264 29-Feb, 01-Mar
3266 31-Jul, 01-Aug
3267 31-Mar, 01-Apr
3274 31-May, 01-Jun, 31-Aug, 01-Sep
3278 31-Jul, 01-Aug
3285 31-Mar, 01-Apr
3289 31-May, 01-Jun
3297 31-Mar, 01-Apr
3298 31-Dec
3299 01-Jan
3317 31-Jan, 01-Feb
3327 31-Mar, 01-Apr
3328 31-Aug, 01-Sep
3344 31-Jul, 01-Aug
3346 31-Aug, 01-Sep
3351 31-Mar, 01-Apr
3377 31-Jul, 01-Aug
3379 31-Dec
3380 01-Jan
3388 31-May, 01-Jun
3395 31-Oct, 01-Nov
3398 31-Jul, 01-Aug
3407 31-Oct, 01-Nov
3424 29-Feb, 01-Mar
3428 31-Oct, 01-Nov
3430 31-Aug, 01-Sep
3439 31-Aug, 01-Sep
3441 31-Mar, 01-Apr
3470 31-Oct, 01-Nov
3472 31-May, 01-Jun
3475 31-Aug, 01-Sep
3480 31-Mar, 01-Apr
3487 31-Dec
3488 01-Jan
3508 31-Aug, 01-Sep
3511 31-May, 01-Jun
3515 31-Jan, 01-Feb
3521 31-Jul, 01-Aug
3538 31-Dec
3539 01-Jan
3546 31-Mar, 01-Apr
3554 31-Jul, 01-Aug
3564 31-Mar, 01-Apr
3572 31-Jul, 01-Aug
3574 31-Dec
3575 01-Jan, 31-Oct, 01-Nov
3591 31-Mar, 01-Apr
3598 31-May, 01-Jun
3611 31-Jul, 01-Aug
3614 31-Jan, 01-Feb
3632 31-Oct, 01-Nov
3633 31-Mar, 01-Apr
3634 31-Dec
3635 01-Jan
3640 31-Aug, 01-Sep
3648 31-Mar, 01-Apr
3653 31-Jul, 01-Aug
3661 31-Aug, 01-Sep
3670 31-Aug, 01-Sep
3685 31-Dec
3686 01-Jan
3688 29-Feb, 01-Mar, 31-Dec
3689 01-Jan
3692 31-Jul, 01-Aug
3694 31-Dec
3695 01-Jan
3710 31-Jul, 01-Aug
3727 31-Dec
3728 01-Jan
3747 31-Mar, 01-Apr
3748 29-Feb, 01-Mar
3755 31-Jul, 01-Aug
3758 31-Jul, 01-Aug
3787 31-May, 01-Jun
3800 31-Jul, 01-Aug, 31-Oct, 01-Nov
3816 29-Feb, 01-Mar
3818 31-Jul, 01-Aug
3820 29-Feb, 01-Mar
3822 31-Mar, 01-Apr
3827 31-Jan, 01-Feb
3853 31-Aug, 01-Sep
3855 31-Mar, 01-Apr
3857 31-Oct, 01-Nov
3862 31-May, 01-Jun
3868 31-May, 01-Jun
3875 31-Jul, 01-Aug
3877 31-May, 01-Jun
3886 31-Aug, 01-Sep
3887 31-Jul, 01-Aug
3894 31-Mar, 01-Apr
3896 31-Oct, 01-Nov
3899 31-Oct, 01-Nov
3901 31-Aug, 01-Sep
3904 29-Feb, 01-Mar
3914 31-Jan, 01-Feb
3920 31-Jul, 01-Aug
3923 31-Jan, 01-Feb
3928 31-May, 01-Jun
3929 31-Jan, 01-Feb
3932 31-Oct, 01-Nov
3944 31-Jan, 01-Feb
3995 31-Oct, 01-Nov
4000 31-Dec
4001 01-Jan
4007 31-Jul, 01-Aug
4016 31-Oct, 01-Nov
4024 31-Aug, 01-Sep
4064 31-Jul, 01-Aug
4073 31-Jul, 01-Aug
4084 31-May, 01-Jun
4088 31-Oct, 01-Nov
4099 31-Dec
4100 01-Jan
4118 31-Jul, 01-Aug
4123 31-May, 01-Jun
4135 31-Aug, 01-Sep
4141 31-Dec
4142 01-Jan
4150 31-May, 01-Jun
4157 31-Jul, 01-Aug
4162 31-Dec
4163 01-Jan
4171 31-Aug, 01-Sep
4181 31-Jul, 01-Aug, 31-Oct, 01-Nov
4189 31-Dec
4190 01-Jan
4202 31-Jan, 01-Feb
4210 31-Aug, 01-Sep
4220 31-Jan, 01-Feb
4225 31-May, 01-Jun
4231 31-May, 01-Jun, 31-Aug, 01-Sep
4240 31-Dec
4241 01-Jan
4246 31-Dec
4247 01-Jan
4252 31-Dec
4253 01-Jan, 31-Jul, 01-Aug
4262 31-Oct, 01-Nov
4271 31-Jan, 01-Feb
4298 31-Jul, 01-Aug
4306 31-Dec
4307 01-Jan
4310 31-Jul, 01-Aug
4323 31-Mar, 01-Apr
4328 31-Jan, 01-Feb
4334 31-Oct, 01-Nov
4340 31-Oct, 01-Nov
4349 31-Jul, 01-Aug
4352 31-Jan, 01-Feb
4364 31-Jul, 01-Aug
4365 31-Mar, 01-Apr
4383 31-Mar, 01-Apr
4388 31-Jul, 01-Aug
4394 31-Oct, 01-Nov
4396 31-May, 01-Jun
4400 31-Oct, 01-Nov
4409 31-Jan, 01-Feb
4411 31-May, 01-Jun, 31-Dec
4412 01-Jan
4415 31-Jan, 01-Feb
4417 31-May, 01-Jun
4445 31-Oct, 01-Nov
4449 31-Mar, 01-Apr
4456 31-May, 01-Jun
4459 31-Aug, 01-Sep
4464 29-Feb, 01-Mar
4467 31-Mar, 01-Apr
4478 31-Oct, 01-Nov
4480 31-May, 01-Jun
4484 31-Oct, 01-Nov
4486 31-Aug, 01-Sep
4490 31-Jan, 01-Feb
4491 31-Mar, 01-Apr
4525 31-Aug, 01-Sep
4528 31-May, 01-Jun, 31-Aug, 01-Sep
4538 31-Jan, 01-Feb
4559 31-Oct, 01-Nov
4567 31-Aug, 01-Sep
4571 31-Oct, 01-Nov
4580 31-Oct, 01-Nov
4585 31-May, 01-Jun
4597 31-Dec
4598 01-Jan, 31-Oct, 01-Nov
4629 31-Mar, 01-Apr
4630 31-Aug, 01-Sep
4642 31-Dec
4643 01-Jan, 31-Jul, 01-Aug
4650 31-Mar, 01-Apr
4663 31-May, 01-Jun
4669 31-May, 01-Jun
4684 31-Dec
4685 01-Jan, 31-Jul, 01-Aug
4693 31-May, 01-Jun
4695 31-Mar, 01-Apr
4701 31-Mar, 01-Apr
4722 31-Mar, 01-Apr
4726 31-May, 01-Jun
4732 31-Aug, 01-Sep
4752 31-Mar, 01-Apr
4756 31-Dec
4757 01-Jan
4765 31-Aug, 01-Sep
4769 31-Oct, 01-Nov
4779 31-Mar, 01-Apr
4781 31-Jan, 01-Feb
4790 31-Jan, 01-Feb
4793 31-Oct, 01-Nov
4796 31-Oct, 01-Nov
4802 31-Oct, 01-Nov
4803 31-Mar, 01-Apr
4807 31-May, 01-Jun
4813 31-Dec
4814 01-Jan
4816 31-May, 01-Jun
4834 31-May, 01-Jun
4836 31-Mar, 01-Apr
4871 31-Jan, 01-Feb, 31-Jul, 01-Aug
4873 31-May, 01-Jun
4874 31-Oct, 01-Nov
4876 31-May, 01-Jun
4881 31-Mar, 01-Apr
4912 31-Aug, 01-Sep
4914 31-Mar, 01-Apr
4915 31-Aug, 01-Sep
4925 31-Oct, 01-Nov
4927 31-Aug, 01-Sep
4934 31-Oct, 01-Nov
4935 31-Mar, 01-Apr
4936 29-Feb, 01-Mar
4948 31-May, 01-Jun
4950 31-Mar, 01-Apr
4979 31-Jan, 01-Feb
4990 31-Dec
4991 01-Jan
4992 31-Mar, 01-Apr
4996 31-Aug, 01-Sep, 31-Dec
4997 01-Jan
4999 31-May, 01-Jun
5000 31-Jan, 01-Feb
5003 31-Oct, 01-Nov
5004 29-Feb, 01-Mar
5015 31-Jan, 01-Feb
5020 29-Feb, 01-Mar
5029 31-Dec
5030 01-Jan
5039 31-Jul, 01-Aug, 31-Oct, 01-Nov
5041 31-May, 01-Jun
5045 31-Oct, 01-Nov
5053 31-Dec
5054 01-Jan
5067 31-Mar, 01-Apr
5068 31-Aug, 01-Sep
5080 31-Aug, 01-Sep
5082 31-Mar, 01-Apr
5093 31-Jul, 01-Aug
5096 31-Jan, 01-Feb
5104 31-Dec
5105 01-Jan
5108 31-Jan, 01-Feb
5110 31-May, 01-Jun
5116 29-Feb, 01-Mar
5129 31-Jan, 01-Feb
5132 31-Jan, 01-Feb
5144 31-Jul, 01-Aug
5150 31-Oct, 01-Nov
5153 31-Jan, 01-Feb
5158 31-Aug, 01-Sep
5161 31-Aug, 01-Sep
5196 29-Feb, 01-Mar
5229 31-Mar, 01-Apr
5239 31-Aug, 01-Sep
5244 29-Feb, 01-Mar
5255 31-Jul, 01-Aug
5272 31-Aug, 01-Sep
5273 31-Jan, 01-Feb
5276 31-Jul, 01-Aug
5294 31-Jul, 01-Aug
5298 31-Mar, 01-Apr
5302 31-May, 01-Jun
5306 31-Jan, 01-Feb
5326 31-Dec
5327 01-Jan, 31-Jan, 01-Feb
5338 31-May, 01-Jun
5359 31-May, 01-Jun
5371 31-Aug, 01-Sep
5374 31-Dec
5375 01-Jan, 31-Jan, 01-Feb
5378 31-Jan, 01-Feb
5389 31-May, 01-Jun
5396 31-Oct, 01-Nov
5399 31-Jul, 01-Aug
5425 31-May, 01-Jun
5428 31-Dec
5429 01-Jan, 31-Oct, 01-Nov
5437 31-Dec
5438 01-Jan
5441 31-Jan, 01-Feb
5455 31-Aug, 01-Sep
5461 31-May, 01-Jun
5469 31-Mar, 01-Apr
5473 31-Aug, 01-Sep
5480 31-Jan, 01-Feb
5483 31-Jul, 01-Aug
5486 31-Oct, 01-Nov
5512 31-May, 01-Jun
5524 31-Aug, 01-Sep
5531 31-Jan, 01-Feb
5537 31-Oct, 01-Nov
5541 31-Mar, 01-Apr
5542 31-Dec
5543 01-Jan
5557 31-Dec
5558 01-Jan
5560 29-Feb, 01-Mar
5570 31-Jan, 01-Feb
5580 31-Mar, 01-Apr
5582 31-Jan, 01-Feb
5584 31-Aug, 01-Sep
5588 31-Oct, 01-Nov
5603 31-Jul, 01-Aug
5613 31-Mar, 01-Apr
5614 31-Aug, 01-Sep
5616 29-Feb, 01-Mar
5618 31-Oct, 01-Nov
5619 31-Mar, 01-Apr
5635 31-May, 01-Jun
5642 31-Jul, 01-Aug
5643 31-Mar, 01-Apr
5647 31-Dec
5648 01-Jan
5650 31-Aug, 01-Sep
5652 29-Feb, 01-Mar
5655 31-Mar, 01-Apr
5658 31-Mar, 01-Apr
5659 31-Dec
5660 01-Jan
5680 29-Feb, 01-Mar
5681 31-Oct, 01-Nov
5693 31-Jan, 01-Feb
5709 31-Mar, 01-Apr
5716 31-Dec
5717 01-Jan
5721 31-Mar, 01-Apr
5726 31-Oct, 01-Nov
5735 31-Jul, 01-Aug
5738 31-Jan, 01-Feb
5745 31-Mar, 01-Apr
5764 31-Aug, 01-Sep
5768 31-Oct, 01-Nov
5776 31-May, 01-Jun
5785 31-May, 01-Jun
5788 31-Dec
5789 01-Jan
5804 31-Oct, 01-Nov
5818 31-Dec
5819 01-Jan
5823 31-Mar, 01-Apr
5839 31-Aug, 01-Sep
5840 31-Jan, 01-Feb
5848 31-Dec
5849 01-Jan
5850 31-Mar, 01-Apr
5887 31-Aug, 01-Sep
5897 31-Jul, 01-Aug
5909 31-Jan, 01-Feb
5915 31-Jul, 01-Aug
5919 31-Mar, 01-Apr
5930 31-Oct, 01-Nov
5953 31-Dec
5954 01-Jan
5955 31-Mar, 01-Apr
5956 31-May, 01-Jun
5968 31-May, 01-Jun
5976 31-Mar, 01-Apr
5990 31-Jan, 01-Feb
5992 31-Aug, 01-Sep
5996 31-Jul, 01-Aug
5998 31-Aug, 01-Sep
6042 31-Mar, 01-Apr
6050 31-Jan, 01-Feb
6058 31-Aug, 01-Sep
6064 31-Aug, 01-Sep
6073 31-May, 01-Jun
6082 31-May, 01-Jun
6089 31-Oct, 01-Nov
6092 31-Jul, 01-Aug
6099 31-Mar, 01-Apr
6103 31-May, 01-Jun, 31-Dec
6104 01-Jan
6112 31-May, 01-Jun
6113 31-Jul, 01-Aug
6118 31-May, 01-Jun
6124 29-Feb, 01-Mar
6125 31-Jul, 01-Aug
6153 31-Mar, 01-Apr
6158 31-Jul, 01-Aug
6167 31-Jul, 01-Aug, 31-Oct, 01-Nov
6181 31-May, 01-Jun
6184 31-Dec
6185 01-Jan
6196 31-May, 01-Jun, 31-Dec
6197 01-Jan, 31-Jan, 01-Feb
6200 31-Jan, 01-Feb
6201 31-Mar, 01-Apr
6203 31-Jan, 01-Feb
6208 31-Aug, 01-Sep, 31-Dec
6209 01-Jan
6226 31-Aug, 01-Sep
6235 31-Aug, 01-Sep, 31-Dec
6236 01-Jan
6242 31-Oct, 01-Nov
6251 31-Jul, 01-Aug
6255 31-Mar, 01-Apr
6257 31-Jul, 01-Aug
6259 31-Dec
6260 01-Jan
6270 31-Mar, 01-Apr
6273 31-Mar, 01-Apr
6275 31-Jul, 01-Aug
6280 31-Aug, 01-Sep
6281 31-Oct, 01-Nov
6283 31-May, 01-Jun
6298 31-Dec
6299 01-Jan, 31-Jan, 01-Feb
6301 31-May, 01-Jun
6314 31-Jan, 01-Feb
6317 31-Jan, 01-Feb
6320 31-Jan, 01-Feb
6326 31-Oct, 01-Nov
6328 31-May, 01-Jun
6343 31-Aug, 01-Sep
6353 31-Oct, 01-Nov
6394 31-Aug, 01-Sep
6396 29-Feb, 01-Mar
6397 31-May, 01-Jun
6401 31-Jan, 01-Feb
6408 29-Feb, 01-Mar
6422 31-Jan, 01-Feb
6424 31-Aug, 01-Sep
6428 31-Jan, 01-Feb
6435 31-Mar, 01-Apr
6436 29-Feb, 01-Mar
6446 31-Oct, 01-Nov
6452 31-Oct, 01-Nov
6458 31-Jul, 01-Aug
6460 29-Feb, 01-Mar
6475 31-May, 01-Jun
6479 31-Jul, 01-Aug
6488 31-Jan, 01-Feb
6526 31-Aug, 01-Sep
6527 31-Jan, 01-Feb
6530 31-Oct, 01-Nov
6532 31-May, 01-Jun, 31-Dec
6533 01-Jan
6539 31-Jan, 01-Feb
6541 31-May, 01-Jun
6544 31-Dec
6545 01-Jan, 31-Jan, 01-Feb
6547 31-Aug, 01-Sep
6548 31-Jan, 01-Feb
6549 31-Mar, 01-Apr
6554 31-Jan, 01-Feb
6560 31-Jan, 01-Feb
6581 31-Jan, 01-Feb
6599 31-Jul, 01-Aug
6607 31-May, 01-Jun
6613 31-Dec
6614 01-Jan
6620 31-Jan, 01-Feb
6631 31-Aug, 01-Sep
6644 31-Oct, 01-Nov
6650 31-Jan, 01-Feb
6653 31-Jan, 01-Feb
6655 31-Dec
6656 01-Jan, 31-Oct, 01-Nov
6664 31-May, 01-Jun
6666 31-Mar, 01-Apr
6677 31-Jan, 01-Feb
6679 31-May, 01-Jun
6688 31-Dec
6689 01-Jan
6699 31-Mar, 01-Apr
6704 31-Jul, 01-Aug
6710 31-Jul, 01-Aug
6730 31-May, 01-Jun
6731 31-Jul, 01-Aug
6742 31-Aug, 01-Sep
6754 31-May, 01-Jun
6760 29-Feb, 01-Mar
6761 31-Jan, 01-Feb
6763 31-Dec
6764 01-Jan
6768 31-Mar, 01-Apr
6774 31-Mar, 01-Apr
6803 31-Jul, 01-Aug
6806 31-Jul, 01-Aug
6814 31-Dec
6815 01-Jan
6822 31-Mar, 01-Apr
6823 31-Aug, 01-Sep
6831 31-Mar, 01-Apr
6838 31-Aug, 01-Sep
6839 31-Jul, 01-Aug
6851 31-Jan, 01-Feb
6853 31-May, 01-Jun
6859 31-Dec
6860 01-Jan
6863 31-Jan, 01-Feb
6873 31-Mar, 01-Apr
6878 31-Jul, 01-Aug
6884 31-Jan, 01-Feb
6892 31-Dec
6893 01-Jan, 31-Jan, 01-Feb
6895 31-Aug, 01-Sep
6899 31-Oct, 01-Nov
6904 31-Aug, 01-Sep
6914 31-Oct, 01-Nov
6917 31-Oct, 01-Nov
6920 31-Jul, 01-Aug
6929 31-Jul, 01-Aug
6937 31-May, 01-Jun
6940 31-Dec
6941 01-Jan
6953 31-Oct, 01-Nov
6979 31-May, 01-Jun
6983 31-Jul, 01-Aug
7001 31-Oct, 01-Nov
7003 31-Dec
7004 01-Jan
7007 31-Jul, 01-Aug
7008 29-Feb, 01-Mar
7022 31-Jan, 01-Feb
7039 31-May, 01-Jun
7058 31-Oct, 01-Nov
7063 31-May, 01-Jun
7090 31-Dec
7091 01-Jan
7100 31-Jul, 01-Aug
7102 31-Dec
7103 01-Jan
7108 31-May, 01-Jun
7111 31-May, 01-Jun
7118 31-Oct, 01-Nov
7120 31-May, 01-Jun
7124 31-Jul, 01-Aug
7130 31-Oct, 01-Nov
7139 31-Oct, 01-Nov
7151 31-Oct, 01-Nov
7153 31-May, 01-Jun
7169 31-Oct, 01-Nov
7170 31-Mar, 01-Apr
7175 31-Jan, 01-Feb
7183 31-May, 01-Jun
7187 31-Jul, 01-Aug
7209 31-Mar, 01-Apr
7217 31-Jul, 01-Aug
7222 31-May, 01-Jun
7223 31-Jan, 01-Feb, 31-Jul, 01-Aug
7241 31-Jul, 01-Aug
7247 31-Oct, 01-Nov
7248 29-Feb, 01-Mar
7249 31-Dec
7250 01-Jan
7253 31-Oct, 01-Nov
7258 31-Dec
7259 01-Jan
7268 31-Oct, 01-Nov
7274 31-Jan, 01-Feb
7289 31-Jan, 01-Feb
7291 31-Dec
7292 01-Jan
7297 31-Dec
7298 01-Jan
7330 31-Aug, 01-Sep
7343 31-Oct, 01-Nov
7354 31-May, 01-Jun
7363 31-Aug, 01-Sep
7370 31-Oct, 01-Nov
7373 31-Jan, 01-Feb
7384 31-May, 01-Jun
7391 31-Jul, 01-Aug
7405 31-Dec
7406 01-Jan
7421 31-Oct, 01-Nov
7436 31-Oct, 01-Nov
7449 31-Mar, 01-Apr
7450 31-Aug, 01-Sep
7454 31-Oct, 01-Nov
7457 31-Jan, 01-Feb
7466 31-Oct, 01-Nov
7475 31-Oct, 01-Nov
7483 31-Aug, 01-Sep
7496 31-Jul, 01-Aug
7519 31-Aug, 01-Sep
7523 31-Jan, 01-Feb
7529 31-Oct, 01-Nov
7538 31-Jul, 01-Aug
7552 31-Dec
7553 01-Jan
7555 31-Aug, 01-Sep
7560 31-Mar, 01-Apr
7561 31-Aug, 01-Sep
7562 31-Oct, 01-Nov
7570 31-Dec
7571 01-Jan
7585 31-May, 01-Jun
7601 31-Jul, 01-Aug
7608 31-Mar, 01-Apr
7610 31-Jan, 01-Feb, 31-Oct, 01-Nov
7612 31-Aug, 01-Sep
7624 31-May, 01-Jun
7633 31-Dec
7634 01-Jan
7663 31-Aug, 01-Sep, 31-Dec
7664 01-Jan
7672 31-May, 01-Jun
7680 31-Mar, 01-Apr
7684 31-Dec
7685 01-Jan
7692 29-Feb, 01-Mar
7699 31-Dec
7700 01-Jan
7717 31-Aug, 01-Sep
7720 31-Aug, 01-Sep
7730 31-Jul, 01-Aug
7733 31-Jul, 01-Aug
7742 31-Oct, 01-Nov
7744 29-Feb, 01-Mar
7766 31-Jul, 01-Aug
7768 31-Aug, 01-Sep
7770 31-Mar, 01-Apr
7789 31-May, 01-Jun
7790 31-Jan, 01-Feb
7799 31-Jan, 01-Feb
7803 31-Mar, 01-Apr
7806 31-Mar, 01-Apr
7826 31-Jan, 01-Feb
7832 31-Jan, 01-Feb
7837 31-May, 01-Jun
7858 31-Dec
7859 01-Jan, 31-Jul, 01-Aug
7884 31-Mar, 01-Apr
7888 31-May, 01-Jun
7892 31-Jul, 01-Aug
7897 31-Dec
7898 01-Jan
7936 31-Dec
7937 01-Jan
7950 31-Mar, 01-Apr
7957 31-Dec
7958 01-Jan
7966 31-May, 01-Jun
7968 29-Feb, 01-Mar, 31-Mar, 01-Apr
7979 31-Jan, 01-Feb
7982 31-Jan, 01-Feb
7988 31-Oct, 01-Nov
8008 31-May, 01-Jun
8012 31-Oct, 01-Nov
8024 31-Jan, 01-Feb
8029 31-Aug, 01-Sep
8030 31-Oct, 01-Nov
8038 31-Aug, 01-Sep
8039 31-Jul, 01-Aug
8041 31-May, 01-Jun, 31-Dec
8042 01-Jan
8049 31-Mar, 01-Apr
8052 29-Feb, 01-Mar
8055 31-Mar, 01-Apr
8060 31-Jul, 01-Aug
8065 31-Aug, 01-Sep
8086 31-May, 01-Jun
8105 31-Jan, 01-Feb
8110 31-Dec
8111 01-Jan
8127 31-Mar, 01-Apr
8131 31-May, 01-Jun
8149 31-Aug, 01-Sep
8154 31-Mar, 01-Apr
8164 31-Aug, 01-Sep
8191 31-Aug, 01-Sep
8194 31-Dec
8195 01-Jan, 31-Jul, 01-Aug
8198 31-Jan, 01-Feb
8204 31-Jul, 01-Aug
8207 31-Jul, 01-Aug
8210 31-Oct, 01-Nov
8212 31-May, 01-Jun
8220 31-Mar, 01-Apr
8233 31-May, 01-Jun, 31-Dec
8234 01-Jan
8257 31-May, 01-Jun
8262 31-Mar, 01-Apr
8272 31-Aug, 01-Sep
8280 31-Mar, 01-Apr
8283 31-Mar, 01-Apr
8287 31-Aug, 01-Sep
8288 31-Jul, 01-Aug
8294 31-Jul, 01-Aug
8297 31-Jul, 01-Aug
8309 31-Jul, 01-Aug
8317 31-May, 01-Jun
8321 31-Oct, 01-Nov
8324 31-Oct, 01-Nov
8327 31-Jul, 01-Aug, 31-Oct, 01-Nov
8344 31-Aug, 01-Sep
8375 31-Jul, 01-Aug
8384 31-Oct, 01-Nov
8408 31-Jan, 01-Feb
8435 31-Jul, 01-Aug
8440 31-Dec
8441 01-Jan
8446 31-Dec
8447 01-Jan
8455 31-Aug, 01-Sep, 31-Dec
8456 01-Jan
8470 31-May, 01-Jun
8478 31-Mar, 01-Apr
8483 31-Oct, 01-Nov
8490 31-Mar, 01-Apr
8494 31-Aug, 01-Sep
8497 31-May, 01-Jun
8503 31-May, 01-Jun, 31-Dec
8504 01-Jan
8507 31-Jul, 01-Aug
8520 29-Feb, 01-Mar
8528 31-Jan, 01-Feb
8534 31-Jan, 01-Feb
8540 31-Jan, 01-Feb
8545 31-Aug, 01-Sep
8560 31-May, 01-Jun
8573 31-Oct, 01-Nov
8578 31-May, 01-Jun
8581 31-May, 01-Jun
8587 31-Dec
8588 01-Jan
8589 31-Mar, 01-Apr
8594 31-Jan, 01-Feb, 31-Jul, 01-Aug
8599 31-Aug, 01-Sep
8606 31-Jul, 01-Aug
8611 31-Dec
8612 01-Jan
8621 31-Jul, 01-Aug
8642 31-Jul, 01-Aug
8653 31-Dec
8654 01-Jan
8656 31-Dec
8657 01-Jan, 31-Jan, 01-Feb
8659 31-May, 01-Jun
8660 31-Jan, 01-Feb
8665 31-Aug, 01-Sep
8675 31-Jul, 01-Aug
8686 31-Dec
8687 01-Jan
8694 31-Mar, 01-Apr
8743 31-May, 01-Jun
8750 31-Jan, 01-Feb, 31-Oct, 01-Nov
8755 31-Dec
8756 01-Jan
8758 31-May, 01-Jun
8765 31-Jan, 01-Feb
8769 31-Mar, 01-Apr
8783 31-Jul, 01-Aug
8789 31-Oct, 01-Nov
8807 31-Jan, 01-Feb
8813 31-Jan, 01-Feb
8819 31-Jul, 01-Aug, 31-Oct, 01-Nov
8862 31-Mar, 01-Apr
8866 31-May, 01-Jun
8875 31-Dec
8876 01-Jan
8881 31-Aug, 01-Sep
8884 31-Aug, 01-Sep
8892 29-Feb, 01-Mar
8905 31-Aug, 01-Sep
8906 31-Jul, 01-Aug
8909 31-Jul, 01-Aug
8932 31-Aug, 01-Sep
8935 31-May, 01-Jun
8936 31-Jul, 01-Aug
8948 31-Oct, 01-Nov
8967 31-Mar, 01-Apr
8968 29-Feb, 01-Mar
8977 31-May, 01-Jun
8978 31-Oct, 01-Nov
8985 31-Mar, 01-Apr
8989 31-Dec
8990 01-Jan
9000 31-Mar, 01-Apr
9001 31-Dec
9002 01-Jan
9005 31-Jan, 01-Feb
9009 31-Mar, 01-Apr
9014 31-Jan, 01-Feb
9031 31-Dec
9032 01-Jan
9035 31-Jan, 01-Feb
9068 31-Jan, 01-Feb
9082 31-Aug, 01-Sep
9092 31-Oct, 01-Nov
9094 31-Aug, 01-Sep
9122 31-Jan, 01-Feb
9137 31-Oct, 01-Nov
9139 31-May, 01-Jun
9145 31-Aug, 01-Sep
9146 31-Oct, 01-Nov
9155 31-Jan, 01-Feb
9179 31-Jul, 01-Aug
9194 31-Jul, 01-Aug
9204 31-Mar, 01-Apr
9218 31-Jan, 01-Feb
9244 31-Dec
9245 01-Jan
9249 31-Mar, 01-Apr
9263 31-Jul, 01-Aug
9275 31-Jan, 01-Feb
9290 31-Oct, 01-Nov
9301 31-Aug, 01-Sep
9304 31-Dec
9305 01-Jan
9310 31-Aug, 01-Sep
9313 31-Aug, 01-Sep, 31-Dec
9314 01-Jan
9323 31-Oct, 01-Nov
9326 31-Jul, 01-Aug
9328 31-May, 01-Jun
9330 31-Mar, 01-Apr
9344 31-Jan, 01-Feb
9370 31-May, 01-Jun
9373 31-May, 01-Jun
9392 31-Oct, 01-Nov
9395 31-Oct, 01-Nov
9397 31-Aug, 01-Sep
9415 31-May, 01-Jun
9431 31-Jan, 01-Feb, 31-Oct, 01-Nov
9435 31-Mar, 01-Apr
9447 31-Mar, 01-Apr
9451 31-Aug, 01-Sep
9464 31-Oct, 01-Nov
9467 31-Jul, 01-Aug
9482 31-Jul, 01-Aug
9490 31-Aug, 01-Sep
9519 31-Mar, 01-Apr
9532 29-Feb, 01-Mar
9536 31-Jul, 01-Aug
9547 31-Aug, 01-Sep, 31-Dec
9548 01-Jan, 31-Oct, 01-Nov
9559 31-May, 01-Jun
9566 31-Oct, 01-Nov
9575 31-Jan, 01-Feb
9577 31-May, 01-Jun
9625 31-Aug, 01-Sep
9637 31-May, 01-Jun
9658 31-Aug, 01-Sep
9662 31-Jan, 01-Feb
9673 31-Dec
9674 01-Jan
9693 31-Mar, 01-Apr
9694 31-May, 01-Jun
9696 29-Feb, 01-Mar
9700 31-Aug, 01-Sep
9701 31-Jan, 01-Feb
9731 31-Jan, 01-Feb
9750 31-Mar, 01-Apr
9760 31-Aug, 01-Sep
9765 31-Mar, 01-Apr
9766 31-Dec
9767 01-Jan
9770 31-Jan, 01-Feb
9773 31-Jan, 01-Feb
9780 31-Mar, 01-Apr
9812 31-Jan, 01-Feb
9817 31-Dec
9818 01-Jan
9830 31-Jan, 01-Feb
9832 31-May, 01-Jun
9833 31-Jul, 01-Aug
9838 31-Aug, 01-Sep
9841 31-Aug, 01-Sep
9843 31-Mar, 01-Apr
9850 31-Dec
9851 01-Jan, 31-Jan, 01-Feb
9864 31-Mar, 01-Apr
9868 31-May, 01-Jun
9872 31-Jul, 01-Aug
9876 31-Mar, 01-Apr
9884 31-Oct, 01-Nov
9889 31-May, 01-Jun
9913 31-May, 01-Jun
9925 31-Aug, 01-Sep
9956 31-Jul, 01-Aug
9959 31-Jul, 01-Aug
9968 31-Jan, 01-Feb
9976 31-Dec
9977 01-Jan
9997 31-May, 01-Jun
**edit** revised version, one step shorter, less clunky display routine. I will leave the original version on which Paul commented above.
Code:
001 LBL 'PPD' Label "Prime Pair Dates"
002 STO 03 Store input year in register 3
003 SDL 004 multiply by 10000
004 INC X add 1 to YYYY0000, now have YYYY0001
005 SDR 002 divide by 100 to get in form to allow month to be incremented
006 STO 01 store YYYY00.01 in reg 1
007 #11 enter constant 11
008 STO 04 store 11 in loop counter
009 XEQ 01 check YYYx.1231/YYYY0101, YYYY0131/0201…YYYY1031/1101*
010 DSE 04 decrement counter
011 BACK 002 go back to check next date pair
012 #89 when done checking through 1031/1101, enter constant 89
013 STO+ 01 add 89 to YYYY11.01 to get YYYz00.01
014 XEQ 01 check YYYY.1231/YYYz0101
015 RCL 03 recall input year to display when complete
016 STOP
017 LBL 01 subroutine to check date pairs for prime
018 INC 01 increment month
019 RCL 01 recall first of month date
020 SDL 02 multiply by 100 to get in proper form
021 PRIME? is first of month date prime?
022 SKIP 001 if prime, skip to check last of previous month
023 RTN if not prime, return to get next month
024 SDR 004 divide by 10,000 to get in form to allow date arithmetic
025 1 enter 1
026 +/- enter -1
027 DAYS+ subtract 1 day from 1st of month to get last of previous month
028 SDL 004 multiply by 10000 to get in proper form
029 PRIME? is last of prior month date prime?
030 SKIP 001 if prime, skip to display prime date(s)
031 RTN if not prime, return to get next month
032 XEQ 02 execute display subroutine
033 RCL 01 recall first of month date
034 SDL 002 multiply by 100 to get in proper form for display
035 LBL 02 subroutine to display prime date(s)
036 RCL X duplicate X value
037 SDR 004 divide year by 10000
038 IP take integer portion to get year value YYY?
039 x=/=? 03 compare YYY? to input year
040 SKIP 002 if not equal, do not display prime date, it is in wrong year
041 VIEW Y display date
042 PSE 25 pause to display prime date
043 RTN
**edit 2** I ultimately got around to analyzing Paul's and Eric's versions to see what tips and tricks they used that I likely missed. I discovered similarities, of course. Eric’s posted version, at 50 steps, is a bit longer than the best version I came up with before checking others, but as he noted, it can be easily shortened. A few simple changes (e.g. changing the direct entry of 8800 to CONST #088 SDL 002 and changing the multiplications and divisions by 10000 to SDL 004 and SDR 004) and removing the labels and replacing the GTOs with SKIPs and BACKs reduces it to only 38 steps.
After seeing Eric's program, I first applied his technique of adding 100 to the date instead of dividing by 100 and adding 1 to increment the month. That got my program down to 42 steps. I then applied his technique of using flags to handle dates outside of the test year, and came up with what I believe to be the best I can do, 39 steps, with initialization of date mode and finishing with display of the input year. I prefer this to having the program finish with display of first of the following year, because that looks like an output and could confuse the judges :-) Anyhow, here is that version.
Code:
001 LBL 'PPD' Label "Prime Pair Dates"
002 Y.MD Set y.md mode to allow date arithmetic
003 CF ALL clear all flags to initialize Flag 1 and Flag 2
004 STO 01 Store input year in register 1
005 SDL 004 multiply by 10000
006 INC X add 1 to YYYY0000, now have YYYY0001
007 STO 02 store YYYY0001 in reg 2
008 #11 enter constant 11
009 STO 03 store 11 in loop counter
010 XEQ 01 check YYYx.1231/YYYY0101, YYYY0131/0201…YYYY1031/1101
011 DSE 03 decrement counter
012 BACK 002 go back to check next date pair
013 SF 02 Set flag 2 to not display YYYz0101
014 #89 when done checking through 1031/1101,
015 SDL 002 ...enter constant 8900
016 STO+ 02 add 8900 to YYYY1101 to get YYYz0001
017 LBL 01 subroutine to check date pairs for prime
018 # 100 enter constant 100
019 STO+ 02 increment month
020 RCL 02 recall first of month date
021 PRIME? is first of month date prime?
022 SKIP 003 if prime, skip to check last of previous month
023 SF 01 set flag 1 to display last of prior month if prime after YYYx1231
024 RCL 01 recall input year to display when complete
025 RTN return for next month or stop.
026 SDR 004 divide prime date by 10,000 to allow date arithmetic
027 1 enter 1
028 +/- enter -1
029 DAYS+ subtract 1 day from 1st of month to get last of previous month
030 SDL 004 multiply by 10000 to get in proper form
031 PRIME? is last of prior month date prime?
032 SKIP 001 if prime, we have a prime pair, skip to display prime date(s)
033 BACK 010 if not prime, loop back for next month or to exit
034 FS? 01 Flag 1 clear first to skip display of YYYx1231, set after that
035 PSE 10 pause to display prime date
036 RCL 02 recall first of month date
037 FC? 02 Flag 2 set last iteration to skip display of YYYz0101
038 PSE 10 pause to display prime date
039 BACK 016 loop back to return
**edit 3** A couple more improvements gets it down to 38 steps if the final END is included, while still displaying the input year when the program is done. This could drop to 37 steps if I was satisfied with displaying a zero when done, or 36 steps if the judges were told to ignore the value in the display when the program stops running. This value will either be YYYY1231 or YYYz0101, either of which gives the appearance of an output, so I would prefer to suppress.
Code:
001 LBL 'PPD' Label "Prime Pair Dates"
002 Y.MD Set y.md mode to allow date arithmetic
003 CF ALL clear all flags to initialize Flag 1 and Flag 2
004 STO 00 Store input year in register 0 to display when done. This step
could be eliminated, see comments regarding display at completion
005 SDL 004 multiply by 10000
006 INC X add 1 to YYYY0000, now have YYYY0001
007 #11 enter constant 11
008 C-STO J store 11 for loop counter in J and YYYY0001 in K using complex store
009 XEQ 01 check YYYx.1231/YYYY0101, YYYY0131/0201…YYYY1031/1101
010 DSE J decrement counter
011 BACK 002 go back to check next date pair
012 SF 02 Set flag 2 to not display YYYz0101
013 #89 when done checking through 1031/1101,
014 SDL 002 ...enter constant 8900
015 STO+ K add 8900 to YYYY1101 to get YYYz0001
016 LBL 01 subroutine to check date pairs for prime
017 # 100 enter constant 100
018 STO+ K increment month
019 RCL K recall first of month date
020 PRIME? is first of month date prime?
021 SKIP 001 if prime, skip to check last of previous month
022 SKIP 013 if not prime, skip to common loop-back/end point
023 SDR 004 divide prime date by 10,000 to allow date arithmetic
024 1 enter 1
025 +/- enter -1
026 DAYS+ subtract 1 day from 1st of month to get last of previous month
027 SDL 004 multiply by 10000 to get in proper form
028 PRIME? is last of prior month date prime?
029 SKIP 001 if prime, we have a prime pair, skip to display prime date(s)
030 SKIP 005 if not prime, skip to common loop-back/end point
031 FS? 01 Flag 1 clear first to skip display of YYYx1231, set after that
032 PSE 10 pause to display prime date
033 RCL K recall first of month date
034 FC? 02 Flag 2 set last iteration to skip display of YYYz0101
035 PSE 10 pause to display prime date
036 SF 01 set flag 1 to display last of prior month if prime after YYYx1231
037 RCL 00 recall input year to display when complete. This step could be
a CLx or eliminated, see comments regarding display at completion
038 END loop back or stop when done
Dave - My mind is going - I can feel it.
|