Damm algorithm: Difference between revisions
Content added Content deleted
(Added XPL0 example.) |
Not a robot (talk | contribs) (Add MACRO-11) |
||
Line 1,750: | Line 1,750: | ||
112940 5 False |
112940 5 False |
||
</pre> |
</pre> |
||
=={{header|MACRO-11}}== |
|||
<syntaxhighlight lang="macro11"> .TITLE DAMMAL |
|||
.MCALL .GTLIN,.PRINT,.EXIT |
|||
DAMMAL::JMP DEMO |
|||
; VALIDATE DAMM STRING IN R0; ZERO FLAG SET IF VALID |
|||
DAMM: CLR R2 ; INTERIM DIGIT |
|||
BR 2$ |
|||
1$: SUB #60,R1 ; DIGIT? |
|||
BCS 3$ ; IF NOT, NOT VALID |
|||
CMP R1,#^D9 |
|||
BGT 3$ |
|||
MOV R2,R3 ; CALCULATE DAMM TABLE INDEX |
|||
ASL R3 |
|||
ASL R3 |
|||
ADD R2,R3 |
|||
ASL R3 |
|||
ADD R1,R3 |
|||
MOVB 4$(R3),R2 ; GET NEW INTERIM DIGIT FROM TABLE |
|||
2$: MOVB (R0)+,R1 ; NEXT CHAR |
|||
BNE 1$ ; END OF STRING? |
|||
TST R2 ; IF SO, CHECK IF INTERIM DIGIT IS 0 |
|||
3$: RTS PC |
|||
4$: .BYTE ^D0,^D3,^D1,^D7,^D5,^D9,^D8,^D6,^D4,^D2 |
|||
.BYTE ^D7,^D0,^D9,^D2,^D1,^D5,^D4,^D8,^D6,^D3 |
|||
.BYTE ^D4,^D2,^D0,^D6,^D8,^D7,^D1,^D3,^D5,^D9 |
|||
.BYTE ^D1,^D7,^D5,^D0,^D9,^D8,^D3,^D4,^D2,^D6 |
|||
.BYTE ^D6,^D1,^D2,^D3,^D0,^D4,^D5,^D9,^D7,^D8 |
|||
.BYTE ^D3,^D6,^D7,^D4,^D2,^D0,^D9,^D5,^D8,^D1 |
|||
.BYTE ^D5,^D8,^D6,^D9,^D7,^D2,^D0,^D1,^D3,^D4 |
|||
.BYTE ^D8,^D9,^D4,^D5,^D3,^D6,^D2,^D0,^D1,^D7 |
|||
.BYTE ^D9,^D4,^D4,^D8,^D6,^D1,^D7,^D2,^D0,^D5 |
|||
.BYTE ^D2,^D5,^D8,^D1,^D4,^D3,^D6,^D7,^D9,^D0 |
|||
DEMO: .GTLIN #5$ ; READ LINE |
|||
MOV #5$,R0 |
|||
TSTB (R0) ; EMPTY LINE? |
|||
BNE 1$ |
|||
.EXIT ; IF SO, STOP |
|||
1$: JSR PC,DAMM ; TEST LINE |
|||
BNE 2$ ; FAIL? |
|||
.PRINT #3$ |
|||
BR DEMO |
|||
2$: .PRINT #4$ ; PASS? |
|||
BR DEMO |
|||
3$: .ASCIZ /PASS/ |
|||
4$: .ASCIZ /FAIL/ |
|||
5$: .BLKB 200 |
|||
.END DAMMAL</syntaxhighlight> |
|||
{{out}} |
|||
<pre>5724 |
|||
PASS |
|||
5727 |
|||
FAIL |
|||
112946 |
|||
PASS |
|||
112949 |
|||
FAIL</pre> |
|||
=={{header|MAD}}== |
=={{header|MAD}}== |
||
<syntaxhighlight lang="mad"> NORMAL MODE IS INTEGER |
<syntaxhighlight lang="mad"> NORMAL MODE IS INTEGER |
||
Line 1,797: | Line 1,855: | ||
112946 VALID |
112946 VALID |
||
112949 INVALID</pre> |
112949 INVALID</pre> |
||
=={{header|Mathematica}} / {{header|Wolfram Language}}== |
=={{header|Mathematica}} / {{header|Wolfram Language}}== |