100  REM ELECT, HP 36798A, 6/74, 3 PROGS: ELECT1,ELECT2,ELECT3
105  REM COPYRIGHT 1972 - STATE UNIVERSITY OF NEW YORK
111  REM DEVELOPED BY D. KLASSEN, JUNE 1972
115  REM PROGRAMMED BY L. KAUFMAN, JUNE 1972
120  REM LATEST REVISION 8-29-72
125  DIM P[10],C[4],E[9],W[6],Y[3,2],I[3],S[3],T[3]
130  PRINT "PER";
135  INPUT R1
140  IF (R1-1)*(R1-2)*(R1-3)*(R1-4) <> 0 THEN 130
145  PRINT "RES UNITS R,D";
150  INPUT P[5],P[6]
155  PRINT "INPUT FACTORS (1=YES, 0=NO)";
160  INPUT I
165  IF I=0 THEN 200
170  IF I <> 1 THEN 155
175  PRINT "FAC";
180  INPUT P[1],P[2],C[1],C[2],C[3],C[4],P[9],P[10],P[7],P[3],P[4]
185  PRINT "CTRS";
190  INPUT N1,N2,N3,N4
195  GOTO 265
200  REM RANDOMIZE
205  LET P[1]=4*RND(0)+1
210  LET P[2]=4*RND(0)+1
215  LET C[1]=INT(3*RND(0)+1)
220  LET C[2]=INT(3*RND(0)+1)
225  LET C[3]=INT(3*RND(0)+1)
230  LET C[4]=C[3]
235  LET P[9]=4*RND(0)+1
240  LET P[10]=4*RND(0)+1
245  LET P[3]=.06*RND(0)+.02
250  LET P[4]=.06*RND(0)+.02
255  READ P[7],N1,N2,N3,N4
265  PRINT "INPUT MATRIX (1=YES, 0=NO)";
270  INPUT I
275  IF I=0 THEN 330
280  IF I <> 1 THEN 270
290  FOR I=1 TO 9
295  PRINT "CELL";I;" --- ";
300  INPUT X
305  IF ABS(X-3)>2 THEN 295
310  IF X <> INT(X) THEN 295
315  LET E[I]=X
320  NEXT I
325  GOTO 375
330  FOR I=1 TO 9 STEP 4
335  LET E[I]=INT(3*RND(0)+2)
340  NEXT I
345  LET E[2]=INT((E[1]+E[5])/2+.5)
350  LET E[3]=INT((E[1]+E[9])/2)
355  LET E[4]=E[2]
360  LET E[6]=INT((E[5]+E[9])/2+.5)
365  LET E[7]=E[3]
370  LET E[8]=E[6]
375  PRINT 
380  PRINT "MEDIA DISTORTION: R - ";INT(100*P[3]);" PC   D - ";
385  PRINT INT(100*P[4]);" PC"
390  PRINT 
395  PRINT "ALLOC RESOURCES - MIN. 20 PC FOR EACH AREA - TO"
400  PRINT "IMAGE, PARTY, AND ISSUES"
405  PRINT 
410  PRINT "ALLOC. R (MAX";
415  PRINT " =";P[5];" )";
420  INPUT W[1],W[2],W[3]
425  IF (W[1]+W[2]+W[3])>P[5] THEN 410
430  FOR I=1 TO 3
435  IF W[I]<.2*P[5] THEN 410
440  NEXT I
445  PRINT "ALLOC. D (MAX";
450  PRINT " =";P[6];" )";
455  INPUT W[4],W[5],W[6]
460  PRINT 
465  IF (W[4]+W[5]+W[6])>P[6] THEN 445
470  FOR I=4 TO 6
475  IF W[I]<.2*P[6] THEN 445
480  NEXT I
485  LET F5=1
490  LET F3=1
495  PRINT "TO HELP IMAGE -"
500  PRINT "STRESS EXP, ABIL, OR PERS"
505  GOTO 520
510  PRINT "TO PUBLICIZE ISSUES -"
515  PRINT "STRESS ECO, DOMEST, OR FOR POL"
520  PRINT "  R - HAS";W[F5];
525  GOTO 535
530  PRINT "  D - HAS";W[F5+3];
535  PRINT " UNITS -";
540  PRINT " ALLOC.";
545  INPUT I[1],I[2],I[3]
550  IF (I[1]-I[2])*(I[1]-I[3])*(I[2]-I[3]) <> 0 THEN 565
555  PRINT "NO EQUAL ALLOCATIONS!";
560  GOTO 540
565  IF F3=2 THEN 580
570  LET X=W[F5]
575  GOTO 585
580  LET X=W[F5+3]
585  IF (I[1]+I[2]+I[3]) <= X THEN 600
590  PRINT "MAX =";X;
595  GOTO 540
600  FOR I=1 TO 3
605  IF I[I]<.2*X THEN 620
610  NEXT I
615  GOTO 630
620  PRINT "NO ALLOC < 20 PC!";
625  GOTO 540
630  LET X=1
635  IF I[2]>I[1] THEN 650
640  LET I[2]=0
645  GOTO 660
650  LET X=2
655  LET I[1]=0
660  IF (I[3]-I[1])*(I[3]-I[2])<0 THEN 670
665  LET X=3
670  LET Y[F5,F3]=X
675  IF F3=2 THEN 695
680  LET S[F5]=I[X]
685  LET F3=2
690  GOTO 530
695  LET T[F5]=I[X]
700  IF F5=3 THEN 720
705  LET F3=1
710  LET F5=3
715  GOTO 510
720  PRINT 
725  PRINT "UPDATE - "
730  IF P[7]>.65 THEN 755
735  IF (W[2]-.3*P[5])<0 THEN 745
740  LET P[7]=P[7]+.025
745  IF (W[5]-.3*P[6])<0 THEN 755
750  LET P[7]=P[7]+.025
755  PRINT "TURNOUT: ";INT(100*P[7]);" PC"
760  LET F5=1
765  PRINT "IMPROVING IMAGE:"
770  GOTO 780
775  PRINT "STRESSING RIGHT ISSUE:"
780  PRINT " R IS ";
785  IF Y[F5,1] <> C[F5] THEN 825
790  LET I=(.5+S[F5]/(2*W[F5]))*(1-P[3])
795  IF F5=3 THEN 815
805  LET N1=N1+1
810  GOTO 860
815  LET N3=N3+1
820  GOTO 860
825  PRINT "NOT ";
830  LET I=-.25*(1-P[3])
835  IF F5=3 THEN 855
845  LET N1=0
850  GOTO 860
855  LET N3=0
860  PRINT "AND  D IS ";
865  IF Y[F5,2] <> C[F5+1] THEN 905
870  LET X=(.5+T[F5]/(2*W[F5+3]))*(1-P[4])
875  IF F5 <> 3 THEN 895
880  LET N4=N4+1
885  GOTO 965
895  LET N2=N2+1
900  GOTO 940
905  PRINT "NOT ";
910  LET X=-.25*(1-P[4])
915  IF F5 <> 3 THEN 930
920  LET N4=0
925  GOTO 965
930  LET N2=0
940  LET P[1]=P[1]+I
945  LET P[2]=P[2]+X
950  PRINT 
955  LET F5=3
960  GOTO 775
965  LET P[9]=P[9]+I
970  LET P[10]=P[10]+X
975  PRINT 
980  PRINT 
985  LET F5=1
990  IF ABS(P[F5]-P[F5+1])>.5 THEN 1010
995  PRINT "NO ONE HAS";
1000  LET E[F5]=3
1005  GOTO 1085
1010  IF P[F5+1]>P[F5] THEN 1045
1015  PRINT "R ";
1020  IF (P[F5]-P[F5+1])>1.5 THEN 1035
1025  LET E[F5]=4
1030  GOTO 1080
1035  LET E[F5]=5
1040  GOTO 1070
1045  PRINT "D ";
1050  IF (P[F5+1]-P[F5])>1.5 THEN 1065
1055  LET E[F5]=2
1060  GOTO 1080
1065  LET E[F5]=1
1070  PRINT "HAS A DECIDED";
1075  GOTO 1085
1080  PRINT "HAS A SLIGHT";
1085  PRINT " ADVANTAGE ";
1090  IF F5=9 THEN 1110
1095  PRINT "IN IMAGE"
1100  LET F5=9
1105  GOTO 990
1110  PRINT "WITH ISSUES"
1115  PRINT 
1120  IF E[2]>4 THEN 1145
1125  IF N1<2 THEN 1145
1130  LET E[2]=E[2]+1
1135  PRINT " R";
1140  GOSUB 1560
1145  IF E[4]<2 THEN 1170
1150  IF N2<2 THEN 1170
1155  LET E[4]=E[4]-1
1160  PRINT " D";
1165  GOSUB 1560
1170  IF E[7]>4 THEN 1200
1175  IF N1<1 THEN 1200
1180  IF Y[3,1] <> C[3] THEN 1200
1185  LET E[7]=E[7]+1
1190  PRINT " R";
1195  GOSUB 1570
1200  IF E[3]<2 THEN 1230
1205  IF N2<1 THEN 1230
1210  IF Y[3,2] <> C[4] THEN 1230
1215  LET E[3]=E[3]-1
1220  PRINT " D";
1225  GOSUB 1570
1230  IF N3<3 THEN 1255
1235  IF E[8]>4 THEN 1255
1240  LET E[8]=E[8]+1
1245  PRINT " R";
1250  GOSUB 1580
1255  IF E[6]<2 THEN 1280
1260  IF N4<3 THEN 1280
1265  LET E[6]=E[6]-1
1270  PRINT " D";
1275  GOSUB 1580
1280  PRINT "TURNOUT ";
1285  IF E[5] <> 3 THEN 1300
1290  PRINT "HAS NO EFFECT"
1295  GOTO 1390
1300  IF P[7]<.55 THEN 1355
1305  PRINT "FAVORS ";
1310  IF SGN(E[5]-3)=-1 THEN 1335
1315  PRINT "R"
1320  IF E[5]>4 THEN 1390
1325  LET E[5]=E[5]+1
1330  GOTO 1390
1335  PRINT "D"
1340  IF E[5]<2 THEN 1390
1345  LET E[5]=E[5]-1
1350  GOTO 1390
1355  PRINT "HINDERS ";
1360  IF SGN(E[5]-3)=-1 THEN 1380
1365  PRINT "R"
1370  LET E[5]=E[5]-1
1375  GOTO 1390
1380  PRINT "D"
1385  LET E[5]=E[5]+1
1390  FOR X=1 TO 3
1395  LET I[X]=(W[1]/P[5])*E[X]
1400  NEXT X
1405  FOR X=4 TO 6
1410  LET Y[X-3,1]=(W[2]/P[5])*E[X]
1415  NEXT X
1420  FOR X=7 TO 9
1425  LET W[X-6]=(W[3]/P[5])*E[X]
1430  NEXT X
1435  LET I[1]=I[1]+Y[1,1]+W[1]
1440  LET I[2]=I[2]+Y[2,1]+W[2]
1445  LET I[3]=I[3]+Y[3,1]+W[3]
1450  LET I=I[1]*(W[4]/P[6])+I[2]*(W[5]/P[6])+I[3]*(W[6]/P[6])
1455  LET X=ABS(10*(I-3))+50
1460  PRINT 
1465  IF R1=4 THEN 1480
1470  PRINT "THE LATEST POLL SHOWS ";
1475  GOTO 1485
1480  PRINT "THE RESULT IS ";
1485  IF SGN(I-3)=0 THEN 1545
1490  IF SGN(I-3)=-1 THEN 1505
1495  PRINT "R ";
1500  GOTO 1510
1505  PRINT "D ";
1510  IF R1=4 THEN 1525
1515  PRINT "LEADING ";
1520  GOTO 1530
1525  PRINT "HAS WON ";
1530  PRINT "WITH";.1*INT(10*X);" PC OF THE VOTE"
1535  PRINT "AND HIS OPPONENT WITH";.1*INT(10*(100-X));" PC"
1540  GOTO 1550
1545  PRINT "A  TIE"
1550  IF R1=4 THEN 1650
1555  GOTO 1600
1560  PRINT " HAS CHOSEN RIGHT IMAGE TWICE IN A ROW"
1565  GOTO 1585
1570  PRINT " HAS CHOSEN CORRECT ISSUE AND IMAGE"
1575  GOTO 1585
1580  PRINT " HAS CHOSEN RIGHT ISSUE 3 TIMES IN A ROW"
1585  PRINT " AND THIS SHOULD HELP HIM"
1590  PRINT 
1595  RETURN 
1600  PRINT 
1605  PRINT "FAC";INT(100*P[1])/100;INT(100*P[2])/100;C[1];C[2];C[3];
1610  PRINT C[4];INT(100*P[9])/100;INT(100*P[10])/100;P[7];
1615  PRINT INT(100*P[3])/100;INT(100*P[4])/100
1620  PRINT "CTRS";N1;N2;N3;N4
1625  PRINT "MAT:"
1630  FOR I=1 TO 9
1635  PRINT "CELL";I;" -- ";E[I]
1640  NEXT I
1645  DATA .45,0,0,0,0
1650  END 
