perm filename JOTTO[CSP,SYS] blob
sn#013348 filedate 1973-06-17 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00021 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 TITLE JOTTO HACK
C00005 00003 BEG0: MOVEI P,PDL-1
C00007 00004 BEG8: EXCH B,C
C00009 00005 DTOD12: CLEARB T,U DICT TO DICT1, DICT2 FORMAT, ARGUMENT IN B
C00010 00006 TURNT: TROE T,1 A
C00012 00007 STREWA: LSHC A1,-=24
C00014 00008 GJOTS: MOVEM SAVEAC GET JOTS OF ALL POSITIVE WORDS WITH RESPECT TO DICT(A)
C00018 00009 CODE0: MOVEI B,0 ABCDE
C00020 00010 CODE4: MOVEI B,0 ABBCC
C00021 00011 CODE5: MOVEI B,0 AABBB
C00023 00012 D12TOD: MOVEI C,0 DICT1, DICT2 TO DICT FORMAT, POINTER IN A
C00024 00013 EOF: CLOSE UTICHN,
C00029 00014 YORN: INCHRW A
C00031 00015 SETUP5: SKIPN CWTOT
C00032 00016 FIND3: PUSHJ P,RANDOM GET A WORD IN PERMUTATION GROUP
C00034 00017 FINOK3: HRRM A,SETUP7 GOT 0-4 JOTS, SO WEED DICTIONARY
C00035 00018 DEFINE FOO ! (Z1,Z2)
C00037 00019 LN: MOVSI A,(-1.0) NATURAL LOG OF T>0
C00038 00020 STYP: POP P,U
C00039 00021 IHD: BLOCK 3
C00041 ENDMK
C⊗;
TITLE JOTTO HACK
A←1
B←2
C←3
D←4
E←5
A1←←5
A2←←A1+1
A3←←A2+1
A4←←A3+1
A5←←A4+1
B1←←A5+1
B2←←B1+1
B3←←B2+1
B4←←B3+1
B5←←B4+1
R←7
S←10
T←11
U←12
P←17
UTICHN←←3
PDLL←←20
EXTERNAL JOBFF
LOC 124
JRST BEG0
RELOC
DEFINE NOECHO
{ PTYUUO 16,[0↔3] }
OPDEF CLEAR[SETZ]
OPDEF CLEARM[SETZM]
OPDEF CLEARB[SETZB]
;UUO'S FOR RANDOM NUMBER GEN
OPDEF .RDATE[CALLI 14]
OPDEF .RDTIM[CALLI 23]
OPDEF .SUSET[CALLI 27]
OPDEF .RTIME[CALLI 22]
DEFINE FIX(X)
< MULI X,400
TSC X,X
ASH X+1,-243(X)
>
DEFINE FLOAT(X)
< TLC X,232000
FADR X,X
>
DEFINE BARF ! (A)
< MOVE R,[440700,,[ASCII \A!$\]]
PUSHJ P,TYPMES
>
DEFINE TYPE ! (A)
< MOVE R,[440700,,[ASCII \A!$\]]
PUSHJ P,STRTYP
>
BEG0: MOVEI P,PDL-1
PUSHJ P,CRLF
BARF (READ NEW DICTIONARY?)
BEG1: INCHRW A
PUSHJ P,CRLF
CAIE A,"Y"
CAIN A,"y"
CAIA
JRST BEG
IFN 0,<
BARF [FILE NAME?]
MOVE B,[SIXBIT \@\]
MOVE C,B
MOVE D,[440600,,B]
BEG2: .IOT TYICHN,A ;INPUT FIRST FILE NAME
.IOT TYOCHN,A
CAIN A,177 ;RUBOUT
JRST BEG0
CAIN A,15
JRST BEG8
CAIN A,40
JRST BEG4
SUBI A,40
IDPB A,D
CAME D,[600,,B]
JRST BEG2
BEG3: .IOT TYICHN,A ;WAIT FOR FINISH OF FIRST FILE NAME
CAIN A,177 ;RUBOUT
JRST BEG0
CAIN A,15
JRST BEG8
CAIE A,40
JRST BEG3
.IOT TYOCHN,A
BEG4: MOVE D,[440600,,C]
BEG5: .IOT TYICHN,A ;INPUT SECOND FILE NAME
.IOT TYOCHN,A
CAIN A,177 ;RUBOUT
JRST BEG0
CAIN A,15
JRST BEG7
CAIN A,40
JRST BEG7
SUBI A,40
IDPB A,D
CAME D,[600,,C]
JRST BEG5
BEG6: .IOT TYICHN,A ;WAIT FOR FINISH OF SECOND FILE NAME
CAIN A,177 ;RUBOUT
JRST BEG0
CAIN A,15
JRST BEG7
CAIE A,40
JRST BEG6
JRST BEG7
BEG8: EXCH B,C
BEG7: PUSHJ P,CRLF
MOVE A,UTOPEN ;FILE NAMES COMPLETE
.OPEN UTICHN,A
JRST BEG0
>;END IFN 0
CLEAR A,
MOVSI B,'DSK'
MOVEI C,IHD
OPEN UTICHN,A
JRST [ BARF(CAN'T GET DISK.)
JRST BEG0]
MOVEI A,IBUF
EXCH A,JOBFF
INBUF UTICHN,2
MOVEM A,JOBFF
MOVE A,['JOTTO ']
MOVSI B,'DIC'
CLEARB C,D
LOOKUP UTICHN,A
JRST [ BARF(CAN'T LOOKUP JOTTO.DIC.)
JRST BEG0]
CLEARM CWORDS
MOVEI D,0
READ: MOVEI C,5
MOVEI B,0
READ1: PUSHJ P,GETDIC
CAIN A,14 ;FF
JRST READ1
CAIN A,3
JRST EOF
JUMPL A,EOF
CAIL A,"A"
CAILE A,"Z"
JRST BARF1
SUBI A,40
LSH B,6
IOR B,A
SOJG C,READ1
PUSHJ P,GETDIC
CAIE A,"-"
JRST READ2
AOS CWORDS
TLO B,200000
PUSHJ P,GETDIC
READ2: MOVEM B,DICT(D)
PUSHJ P,DTOD12
MOVEM T,DICT1(D)
MOVEM U,DICT2(D)
AOS D
CAIE A,15 ;CR
JRST BARF2
PUSHJ P,GETDIC
CAIN A,12 ;LF
JRST READ
BARF2: BARF (WORD ENDED IMPROPERLY)
JRST BARF0
BARF1: BARF (NON-ALPHABETIC CHARACTER IN WORD)
BARF0: PUSHJ P,TYPWRD
PUSHJ P,CRLF
JRST 4,.
SKPLIN: MOVNI A,5
ADDM A,IHD+2
AOS IHD+1
GETDIC: SOSG IHD+2
IN UTICHN,
CAIA
JRST [ SETO A, ;SET END OF FILE
POPJ P,]
IBP IHD+1
MOVE A,@IHD+1
TRNE A,1 ;LINE #?
JRST SKPLIN
LDB A,IHD+1
POPJ P,
DTOD12: CLEARB T,U ;DICT TO DICT1, DICT2 FORMAT, ARGUMENT IN B
MOVSI E,-5 ;RETURN IN T & U, CLOBRS B, C, E, A1, T, U
DD12A: LSHC B,-6
LSH C,-36
XCT TURNT-41(C)
JRST DD12C
DD12B: AOBJN E,DD12A
TLNE T,3400
ADD T,[400,,0]
POPJ P,
DD12C: ADD T,[400,,0]
XCT TURNU-41(C)
JRST DD12B
SUBI C,40
DPB C,[320500,,U]
JRST DD12B
TURNT: TROE T,1 ;A
TROE T,2 ;B
TROE T,4 ;C
TROE T,10 ;D
TROE T,20 ;E
TROE T,40 ;F
TROE T,100 ;G
TROE T,200 ;H
TROE T,400 ;I
TROE T,1000 ;J
TROE T,2000 ;K
TROE T,4000 ;L
TROE T,10000 ;M
TROE T,20000 ;N
TROE T,40000 ;O
TROE T,100000 ;P
TROE T,200000 ;Q
TROE T,400000 ;R
TLOE T,1 ;S
TLOE T,2 ;T
TLOE T,4 ;U
TLOE T,10 ;V
TLOE T,20 ;W
TLOE T,40 ;X
TLOE T,100 ;Y
TLOE T,200 ;Z
TURNU: TRON U,1 ;A
TRON U,2 ;B
TRON U,4 ;C
TRON U,10 ;D
TRON U,20 ;E
TRON U,40 ;F
TRON U,100 ;G
TRON U,200 ;H
TRON U,400 ;I
TRON U,1000 ;J
TRON U,2000 ;K
TRON U,4000 ;L
TRON U,10000 ;M
TRON U,20000 ;N
TRON U,40000 ;O
TRON U,100000 ;P
TRON U,200000 ;Q
TRON U,400000 ;R
TLON U,1 ;S
TLON U,2 ;T
TLON U,4 ;U
TLON U,10 ;V
TLON U,20 ;W
TLON U,40 ;X
TLON U,100 ;Y
TLON U,200 ;Z
STREWA: LSHC A1,-=24
LSHC A2,-=30
LSHC A3,-=30
LSHC A4,-=30
LSH A5,-=30
POPJ P,
GETJOT: LSHC B1,-=24
LSHC B2,-=30
LSHC B3,-=30
LSHC B4,-=30
LSH B5,-=30
GETJ1: CAMN A1,B1 ;TRY TO MATCH A1 AGAINST B'S
AOBJP B1,A1DUN1
CAMN A1,B2
AOBJP B2,A1DUN
CAMN A1,B3
AOBJP B3,A1DUN
CAMN A1,B4
AOBJP B4,A1DUN
CAMN A1,B5
AOBJP B5,A1DUN
A1DUN: CAMN A2,B1
AOBJP B1,A2DUN1
A1DUN1: CAMN A2,B2
AOBJP B2,A2DUN
CAMN A2,B3
AOBJP B3,A2DUN
CAMN A2,B4
AOBJP B4,A2DUN
CAMN A2,B5
AOBJP B5,A2DUN
A2DUN: CAMN A3,B1
AOBJP B1,A3DUN1
A2DUN1: CAMN A3,B2
AOBJP B2,A3DUN
CAMN A3,B3
AOBJP B3,A3DUN
CAMN A3,B4
AOBJP B4,A3DUN
CAMN A3,B5
AOBJP B5,A3DUN
A3DUN: CAMN A4,B1
AOBJP B1,A4DUN1
A3DUN1: CAMN A4,B2
AOBJP B2,A4DUN
CAMN A4,B3
AOBJP B3,A4DUN
CAMN A4,B4
AOBJP B4,A4DUN
CAMN A4,B5
AOBJP B5,A4DUN
A4DUN: CAMN A5,B1
AOBJP B1,A5DUN
A4DUN1: CAMN A5,B2
AOBJP B2,A5DUN
CAMN A5,B3
AOBJP B3,A5DUN
CAMN A5,B4
AOBJP B4,A5DUN
CAMN A5,B5
AOBJP B5,A5DUN
A5DUN: ADD B1,B2
ADD B1,B3
ADD B1,B4
ADD B1,B5 ;NUMBER OF JOTS IN L.H. OF B1
HLRZS B1
POPJ P,
GJOTS: MOVEM SAVEAC ;GET JOTS OF ALL POSITIVE WORDS WITH RESPECT TO DICT(A)
MOVE [1,,SAVEAC+1]
BLT SAVEAC+17
CLEARB B,LETRS
MOVE C,[LETRS,,LETRS+1]
BLT C,LETRS+=26-1
MOVE A1,DICT(A)
TLZ A1,770000
PUSHJ P,STREWA
AOS LETRS-41(A1) ;SIXBIT A = 41
AOS LETRS-41(A2)
AOS LETRS-41(A3)
AOS LETRS-41(A4)
AOS LETRS-41(A5)
MOVSI A,-=26
CLEARB E,JTEST4
GJOTS1: MOVE C,LETRS(A)
XCT GJOTS9(C)
GJOTS2: AOBJN A,GJOTS1
MOVE C,BLTAB1(B)
BLT C,BLTLOC+47
MOVSI A,-50
GJOTS5: HLRZ C,BLTLOC(A)
CAIE C,(<TRNE>)
CAIN C,(<TRNN>)
SKIPA
JRST GJOTS7
HRRZ C,BLTLOC(A)
MOVE D,(C)
TRNE D,777777
JRST GJOTS6 ;OK IF TESTING R.H.
HLRZS D ;PUT TESTING BIT INTO R.H.
HRLI D,(<<TRNE>≠<TLNE>>) ;CHANGE SKIP HALF-WORD
GJOTS6: XOR D,C
XORM D,BLTLOC(A)
GJOTS7: AOBJN A,GJOTS5
; MOVE A,[BLTLOC,,3]
; BLT A,30
MOVN A,CWTOT
HRLZS A
CLEARM JOTS0
CLEARM JOTS1
CLEARM JOTS2
CLEARM JOTS3
CLEARM JOTS4
CLEARM JOTS5
JRST 3+BLTLOC-3
GJOTS8: MOVE 17,[SAVEAC,,0]
BLT 17,17
POPJ P,
GJOTS9: JFCL
JRST GJ3A ;SINGLE LETTER
JRST GJ3B ;DOUBLE LETTER
JRST GJ3C ;TRIPLE LETTER
JRST 4,. ;ERROR, 4 LETTERS THE SAME
JRST 4,. ;ERROR, 5 LETTERS THE SAME
GJ3A: MOVE D,BITS(A)
MOVEM D,JTEST1(E)
AOJA E,GJOTS2
GJ3B: ADDI B,2
MOVE D,BITS(A)
EXCH D,JTEST4
JUMPE D,GJOTS2
MOVEM D,JTEST5
JRST GJOTS2
GJ3C: ADDI B,3
MOVE D,BITS(A)
MOVEM D,JTEST5
JRST GJOTS2
SAVEAC: BLOCK 20
JTEST: 0 ;TRIPLE LETTER
JTEST1: 0 ;FIRST
JTEST2: 0 ;SECOND
JTEST3: 0 ;THIRD
JTEST4: 0 ;FOURTH
JTEST5: 0 ;FIFTH
BLTLOC: BLOCK 50
BLTAB1: CODE0,,BLTLOC
0
CODE2,,BLTLOC
CODE3,,BLTLOC
CODE4,,BLTLOC
CODE5,,BLTLOC
LETRS: BLOCK =26
BITS: 1 ;A
2 ;B
4 ;C
10 ;D
20 ;E
40 ;F
100 ;G
200 ;H
400 ;I
1000 ;J
2000 ;K
4000 ;L
10000 ;M
20000 ;N
40000 ;O
100000 ;P
200000 ;Q
400000 ;R
1,,0 ;S
2,,0 ;T
4,,0 ;U
10,,0 ;V
20,,0 ;W
40,,0 ;X
100,,0 ;Y
200,,0 ;Z
CODE0: MOVEI B,0 ;ABCDE
MOVE DICT1(A)
TRNE JTEST1
AOS B
TRNE JTEST2
AOS B
TRNE JTEST3
AOS B
TRNE JTEST4
AOS B
TRNE JTEST5
AOS B
AOS JOTS0(B)
AOBJN A,3+BLTLOC-3
JRST GJOTS8
CODE2: MOVEI B,0 ;ABCDD
MOVE DICT1(A)
TRNE JTEST1
AOS B
TRNE JTEST2
AOS B
TRNE JTEST3
AOS B
TRNE JTEST4
AOJA B,20+BLTLOC-3;TO CODE2A
AOS JOTS0(B)
AOBJN A,3+BLTLOC-3
JRST GJOTS8
CODE2A: MOVE DICT2(A)
TRNE JTEST4
AOJA B,15+BLTLOC-3
JRST 15+BLTLOC-3
CODE3: MOVEI B,0 ;ABCCC
MOVE DICT1(A)
TRNE JTEST1
AOS B
TRNE JTEST2
AOS B
TRNE JTEST5
AOJA B,16+BLTLOC-3 ;TO CODE3A
AOS JOTS0(B)
AOBJN A,3+BLTLOC-3
JRST GJOTS8
CODE3A: MOVE DICT2(A)
TRNN JTEST5
JRST 13+BLTLOC-3
AOS B
LSH -=26
CAMN JTEST
AOJA B,13+BLTLOC-3
JRST 13+BLTLOC-3
CODE4: MOVEI B,0 ;ABBCC
MOVE DICT1(A)
TRNE JTEST1
AOS B
TRNE JTEST4
AOJA B,16+BLTLOC-3 ;TO CODE4A
TRNE JTEST5
AOJA B,BLTLOC+CODE4C-CODE4 ;TO CODE4C
AOS JOTS0(B)
AOBJN A,3+BLTLOC-3
JRST GJOTS8
CODE4A: TRNE JTEST5
AOJA B,BLTLOC+CODE4B-CODE4 ;TO CODE4B
MOVE DICT2(A)
TRNE JTEST4
AOJA B,13+BLTLOC-3
JRST 13+BLTLOC-3
CODE4B: MOVE DICT2(A)
TRNE JTEST4
AOS B
TRNE JTEST5
AOJA B,13+BLTLOC-3
JRST 13+BLTLOC-3
CODE4C: MOVE DICT2(A)
TRNE JTEST5
AOJA B,13+BLTLOC-3
JRST 13+BLTLOC-3
CODE5: MOVEI B,0 ;AABBB
MOVE DICT1(A)
TRNE JTEST4
AOJA B,14+BLTLOC-3 ;TO CODE5A
TRNE JTEST5
AOJA B,BLTLOC+CODE5C-CODE5 ;TO CODE5C
AOS JOTS0(B)
AOBJN A,3+BLTLOC-3
JRST GJOTS8
CODE5A: TRNE JTEST5
AOJA B,BLTLOC+CODE5B-CODE5 ;TO CODE5B
MOVE DICT2(A)
TRNE JTEST4
AOJA B,11+BLTLOC-3
JRST 11+BLTLOC-3
CODE5B: MOVE DICT2(A)
TRNE JTEST4
AOS B
TRNN JTEST5
JRST 11+BLTLOC-3
AOS B
LSH -=26
CAMN JTEST
AOJA B,11+BLTLOC-3
JRST 11+BLTLOC-3
CODE5C: MOVE DICT2(A)
TRNN JTEST5
JRST 11+BLTLOC-3
AOS B
LSH -=26
CAMN JTEST
AOJA B,11+BLTLOC-3
JRST 11+BLTLOC-3
;0 HAS WORD TO T(R,L)N(E,N) AGAINST
;A HAS AOBJN INDEX INTO DICTIONARY
;B IS JOT COUNTER
;3 THRU 30 GET BLT-ED
D12TOD: MOVEI C,0 ;DICT1, DICT2 TO DICT FORMAT, POINTER IN A
MOVE B,DICT1(A) ;RETURN IN B1-B5, CLOBBERS B, C, D, B1-B5
TLZ B,777400
MOVEI D,41 ;SIXBIT A
D12A: JUMPE B,D12C
TRNN B,1
JRST D12B
MOVEM D,B1(C)
AOS C
D12B: LSH B,-1
AOJA D,D12A
D12C: MOVE B,DICT2(A)
TLZ B,777400
MOVEI D,41
D12D: JUMPE B,D12F
TRNN B,1
JRST D12E
MOVEM D,B1(C)
AOS C
D12E: LSH B,-1
AOJA D,D12D
D12F: LDB B,[320500,,DICT2(A)]
SKIPE B
MOVEI B5,40(B)
POPJ P,
RANDOM: MOVE T,RN2
MUL T,RN1
DIV T,[SETZ-37]
MOVEM U,RN2
POPJ P, ;RANDOMNESS IN T EXCEPT TOP FEW BITS
RN1: 11060471625
RN2: 0 ;SET UP BY ERASE
EOF: CLOSE UTICHN,
BARF (#4. WORDS)
MOVEM D,WTOT
CALLI 12
BEG: MOVEI P,PDL-1
NOECHO
ERASE0: BARF (JOT COMPUTATION IS 1-TO-1 LETTER MATCHING AND INDEPENDENT OF WHICH IS SECRET WORD.)
ERASE: MOVEI B,0
.RDATE B, ;READ DATE, SIXBIT YYMMDD
.RDTIM A, ;READ SYSTEM TIME, 1/30 SECONDS
XOR B,A
.SUSET A,;[.RRUNT,,A] ;READ PROGRAM RUN TIME, 4.069 MICROSECONDS
XOR B,A
.RTIME A, ;READ TIME OF DAY, SIXBIT HHMMSS
XOR B,A
TLZ B,760000
MOVEM B,RN2
PUSHJ P,RANDOM
MOVMS T
IDIV T,CWORDS
MOVEI A,0
ERASE2: MOVE B,DICT(A)
TLZN B,200000
AOJA A,ERASE2
AOS A
SOJGE U,ERASE2 ;U HAS HOW MANY TO SKIP OVER
MOVEM B,SECRET
SETOM JSOFAR
CLEARM PWINS
CLEARM PGFLAG
CLEARM TSTWDS
MOVE A,[TSTWDS,,TSTWDS+1]
BLT A,TSTWDS+27
MOVN A,WTOT
MOVNM A,CWTOT
HRLZ A,A
ERASE1: MOVE B,DICT(A)
PUSHJ P,DTOD12
MOVEM T,DICT1(A)
MOVEM U,DICT2(A)
AOBJN A,ERASE1
BARF (WOULD YOU LIKE TO GO FIRST?)
PUSHJ P,YORN
CAIE A,"Y"
JRST FIND
SETUP: PUSHJ P,CRLF
SETUP1: NOECHO
TYPE (YOUR TEST WORD: )
PUSHJ P,GETWD
JRST SETUP1 ;RUBOUT OR ?N TYPED
MOVN A,WTOT
HRLZ A,A
SETUP3: MOVE C,DICT(A)
TLZ C,770000
CAME B,C
AOBJN A,SETUP3
JUMPL A,SETUP4
BARF (ARE YOU SURE THAT'S A WORD?)
PUSHJ P,YORN
CAIE A,"Y"
JRST SETUP1
SETUP4: CAMN B,SECRET
JRST SETUP5
MOVE A1,B
PUSHJ P,STREWA
MOVE B1,SECRET
PUSHJ P,GETJOT
MOVE A,B1
PUSHJ P,TYPJTS
FIND: SKIPN A,CWTOT ;FIND BEST TEST WORD
JRST SETUP1 ;NONE POSSIBLE
SKIPE PGFLAG
JRST FIND3
CAIL A,=100
JRST FIND1 ;BEST IS PROBABLY PRESTORED
NOBOOK: MOVE A,CWTOT
FLOAT A
MOVEM A,FWTOT
CLEARM BESTE
CLEARM DICTP1
SCAN1: CLEARM JOTS0
CLEARM JOTS1
CLEARM JOTS2
CLEARM JOTS3
CLEARM JOTS4
CLEARM JOTS5
MOVE A,DICTP1
MOVE B,DICT(A)
TLNN B,200000
JRST SAVEOK
PUSHJ P,GJOTS
MOVSI R,-6
MOVEI S,0
FIG: MOVE T,JOTS0(R)
JUMPE T,FIG1
FLOAT T
FDVR T,FWTOT
MOVEM T,JOTS0(R)
PUSHJ P,LN
FMPR D,JOTS0(R)
FADR S,D
FIG1: AOBJN R,FIG
MOVE C,[-1.0]
FDVR C,[0.6931471806] ;-1/LN 2 TO GET BITS EXPECTATION
FMPR S,C
MOVE C,DICTP1
MOVE C,DICT(C)
CAMG S,BESTE
JRST SAVEOK
MOVEM S,BESTE
TLZ C,770000
MOVEM C,BESTW
SAVEOK: AOS A,DICTP1
CAME A,WTOT
JRST SCAN1
MOVE B,BESTW
FINDOK: TYPE (MY TEST WORD: )
PUSHJ P,TYPWRD
PUSHJ P,CRLF
FINOK1: NOECHO
INCHRW A
CAIN A,"Y"
JRST FINOK2
CAIL A,"0"
CAILE A,"5"
JRST FINOK1
SUBI A,"0"
PUSHJ P,TYPJTS
MOVE B,JSOFAR
LSH B,3
IOR B,A
MOVEM B,JSOFAR
LSH B,41
IOR B,BESTW
MOVEI C,0
SKIPE TSTWDS(C)
AOJA C,.-1
MOVEM B,TSTWDS(C)
CAIE A,5
JRST FINOK3
BARF (IS IT YOUR SECRET WORD?)
PUSHJ P,YORN
CAIE A,"N"
JRST AIGOON
MOVE A1,BESTW
PUSHJ P,STREWA
FIN1A: MOVN A,WTOT
HRLZ A,A
MOVEI B,0
FINOK4: MOVE B1,DICT(A)
TLZ B1,770000
CAMN B1,BESTW
JRST FINOK5
PUSHJ P,GETJOT
CAIE B1,5
JRST FINOK5
MOVE C,DICT(A)
TLZ C,770000
MOVEM C,SDICT(B)
AOS B
FINOK5: AOBJN A,FINOK4
SKIPN B
JRST GIVEUP ;HIS SECRET WORD IS PERMUTATION OF BESTW NOT IN DICT
MOVEM B,PGFLAG
FINOK6: SKIPN PWINS
JRST SETUP1
JRST FIND
YORN: INCHRW A
CAIL A,140
SUBI A,40
CAIN A,"N"
JRST YORN1
CAIN A,"Y"
JRST YORN2
JRST YORN
YORN1: BARF (NO)
POPJ P,
YORN2: BARF (YES)
POPJ P,
GETWD: MOVEI B,0
MOVEI C,5
GETWD1: INCHRW A
CAIN A,177 ;RUBOUT
POPJ P,
CAIN A,"?"
JRST LOSER1
CAIL A,"A"
CAILE A,"Z"
JRST GETWD1
OUTCHR A
SUBI A,40
LSH B,6
IOR B,A
SOJG C,GETWD1
PUSHJ P,CRLF
AOS (P) ;SKIP IF SUCCESSFUL
POPJ P,
LOSER1: PUSHJ P,CRLF ;CALLED ONLY FROM GETWD
BARF (WANT TO GIVE UP?)
PUSHJ P,YORN
CAIE A,"Y"
POPJ P,
POP P,A ;REBALANCE P
TYPSEC: TYPE (MY SECRET WORD IS )
MOVE B,SECRET
PUSHJ P,TYPWRD
PUSHJ P,CRLF
JRST ERASE
SETUP5: SKIPN CWTOT
JRST SETUP6
BARF (<MOBY FOO, YOU WIN! SHALL I KEEP GUESSING?>)
PUSHJ P,YORN
CAIE A,"Y"
JRST ERASE
SETOM PWINS
JRST FIND
SETUP6: BARF (<YES, THAT'S IT.>)
JRST ERASE
FIND1: SETOM A ;GET PRESTORED TEST WORD
MOVE B,JSOFAR
FIND2: AOS A
SKIPN CHEAT(A)
JRST NOBOOK ;DICT EXPANSION NECESSITATES END TEST
CAME B,CHEAT(A)
AOJA A,FIND2
MOVE B,CHEAT+1(A)
MOVEM B,BESTW
JRST FINDOK
FINOK2: PUSHJ P,YORN2
JRST AIGOON
TYPJTS: TYPE ( #1 JOT)
MOVEI T,"S"
CAIE A,1
PUSHJ P,TYO
PUSHJ P,CRLF
POPJ P,
FIND3: PUSHJ P,RANDOM ;GET A WORD IN PERMUTATION GROUP
MOVMS T
IDIV T,PGFLAG
MOVE B,SDICT(U)
MOVEM B,BESTW
SOS A,PGFLAG
ADDI U,SDICT
HRLI U,1(U)
SKIPE A
BLT U,SDICT-1(A)
TYPE (IS YOUR WORD )
PUSHJ P,TYPWRD
BARF (?)
PUSHJ P,YORN
CAIE A,"N"
JRST AIGOON
SKIPE PGFLAG
JRST FINOK6
GIVEUP: BARF (I GIVE UP. WHAT WAS YOUR SECRET WORD?)
PUSHJ P,GETWD
JRST GIVEUP ;RUBOUT OR ?N TYPED
MOVEI A,0
MOVEM B,OPPSEC
CHECK: SKIPN B1,TSTWDS(A)
JRST NEWONE
MOVE A1,OPPSEC
PUSHJ P,STREWA
TLZ B1,770000
PUSHJ P,GETJOT
LDB C,[410300,,TSTWDS(A)]
CAMN C,B1
AOJA A,CHECK
TYPE (<GRUMBLE, GRUMBLE! YOU GAVE ME #3 JOTS ON >)
MOVE B,TSTWDS(A)
PUSHJ P,TYPWRD
MOVEI T,"!"
PUSHJ P,TYO
PUSHJ P,CRLF
NEWONE: SKIPE TSTWDS(A)
JRST AIGOON
BARF (THAT'S A NEW ONE TO ME.)
AIGOON: SKIPE PWINS ;ASK IF GO ON, UNLESS PERSON HAS ALREADY WON
JRST ERASE
CLEARM CWTOT
BARF (DO YOU WANT TO TRY TO GUESS MY WORD?)
PUSHJ P,YORN
CAIE A,"Y"
JRST TYPSEC
JRST SETUP1
FINOK3: HRRM A,SETUP7 ;GOT 0-4 JOTS, SO WEED DICTIONARY
MOVE A1,BESTW
PUSHJ P,STREWA
MOVN A,CWTOT
HRLZ A,A
CLEARM CWTOT
SETUP8: PUSHJ P,D12TOD
PUSHJ P,GETJ1
SETUP7: CAIE B1,.
JRST SETUP9
AOS B,CWTOT
MOVE C,DICT1(A)
MOVEM C,DICT1-1(B)
MOVE C,DICT2(A)
MOVEM C,DICT2-1(B)
SETUP9: AOBJN A,SETUP8
SKIPN A,CWTOT
JRST GIVEUP
CAIL A,20
JRST FINOK6
MOVNS A
HRLZS A
MOVE B,DICT1(A)
MOVE C,DICT2(A)
FIN3A: CAME B,DICT1(A) ;CHECK IF ONLY A PERMUTATION GROUP REMAINS
JRST FINOK6
CAME C,DICT2(A)
JRST FINOK6
AOBJN A,FIN3A
MOVEI A,0
PUSHJ P,D12TOD
MOVE A,[B1,,A1]
BLT A,A5
JRST FIN1A
DEFINE FOO ! (Z1,Z2)
{
XXX←←-1
FOR I ε{Z2}
<
XXX←←<XXX⊗3>
>
YYY←0
IFDIF{Z2}{}{YYY←Z2}
XXX+YYY
SIXBIT / !Z1/
}
CHEAT: FOO TEARS
FOO CHINK,0
FOO IMPLY,01
FOO DYING,02
FOO DEIGN,1
FOO SPOOL,10
FOO CHUMS,101
FOO CULLS,102
FOO SPILL,11
FOO CROON,110
FOO BONUS,111
FOO PITCH,112
FOO MODEL,12
FOO LONGS,121
FOO DIALS,122
FOO LOVED,13
FOO DINER,2
FOO FLOUT,20
FOO LAMPS,201
FOO SHOOS,202
FOO SLEEP,21
FOO BROOM,210
FOO SUITS,211
FOO SWANK,2111
FOO LEACH,212
FOO SILKS,2121
FOO SOUPS,213
FOO SNAIL,22
FOO PORCH,220
FOO WEEDS,221
FOO OPENS,222
FOO VISES,2222
FOO LARGE,223
FOO SNAIL,23
FOO FIRRY,231
FOO NOMAD,232
FOO HOIST,3
FOO CLUNG,30
FOO SLAPS,31
FOO REEDS,311
FOO DRUGS,312
FOO VALET,313
FOO HIRED,32
FOO STEEL,321
FOO HAILS,322
FOO PRINT,323
FOO ROACH,33
FOO PARCH,4
FOO PITCH,42
0
LN: MOVSI A,(-1.0) ;NATURAL LOG OF T>0
FADR A,T
MOVSI B,(1.0)
FADR B,T
FDVRB A,B
MOVSI C,(1.0)
MOVE D,A
MOVEI E,0
FMPR A,A
LN1: FADR D,E
FADR C,[2.0]
FMPR B,A
MOVE E,B
FDVR E,C
CAMGE E,[-0.0001] ;TEST GOOD ONLY FOR T<1
JRST LN1
FADR D,E
FSC D,1
POPJ P,
TYPWRD: PUSH P,A
MOVE A,[360600,,B]
TYPWD1: ILDB T,A
ADDI T,40
PUSHJ P,TYO
TLNE A,770000
JRST TYPWD1
POP P,A
POPJ P,
STYP: POP P,U
STRTYP: ILDB T,R ;START TYPING A MESSAGE
CAIN T,"$" ;SIGNALS END OF CHARACTER STRING
POPJ P,
CAIN T,"#" ;SIGNALS PLACE TO OUTPUT A VARIABLE NUMBER
JRST ACNUM
PUSHJ P,TYO
JRST STRTYP
TYPMES: PUSHJ P,STRTYP
JRST CRLF
CRLF: MOVEI T,15 ;CARRIAGE RETURN
PUSHJ P,TYO
MOVEI T,12 ;LINE FEED
TYO: OUTCHR T
POPJ P,
ACNUM: PUSH P,U ;OUTPUT THE NUMBER IN AN AC
PUSH P,[STYP]
ILDB U,R ;PICK UP AC LOCATION
MOVE T,-"0"(U)
ACN3: LSHC T,-43
LSH U,-1
DIVI T,12
HRLM U,(P)
SKIPE T
PUSHJ P,ACN3
HLRZ T,(P)
ADDI T,"0"
JRST TYO
IHD: BLOCK 3
IBUF: BLOCK 210*2
WTOT: 0 ;WORD TOTAL
CWTOT: 0 ;CURRENT TOTAL OF WORDS STILL POSSIBLE
FWTOT: 0 ;FLOATING CWTOT
CWORDS: 0 ;TOTAL NUMBER OF COMMON WORDS
SECRET: 0 ;SECRET WORD
JSOFAR: 0 ;JOTS SO FAR
PWINS: 0 ;-1 IF PERSON HAS WON
PGFLAG: 0 ;NUMBER IN GROUP IF NARROWED DOWN TO PERMUTATION GROUP
DICTP1: 0
JOTS0: 0
JOTS1: 0
JOTS2: 0
JOTS3: 0
JOTS4: 0
JOTS5: 0
BESTE: 0 ;BEST EXPECTATION
BESTW: 0 ;BEST WORD
SDICT: BLOCK 20 ;FOR PERMUTATION GROUPS
TSTWDS: BLOCK 30 ;RECORD OF TEST WORDS OF PROGRAM
OPPSEC: 0 ;SECRET WORD OF OPPONENT
PATCH: BLOCK 100
PDL: BLOCK PDLL
DICT: BLOCK 16000
DICT1: BLOCK 16000
DICT2: BLOCK 16000
END BEG