1  REM  ****  HP BASIC PROGRAM LIBRARY  ******************************
2  REM
3  REM        MARKET:  TWO COMPANIES IN ONE-PRODUCT COMPETITION
4  REM
5  REM        36619  REV A  -- 10/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
100  REM MARKET - SIMULATION OF MARKET COMPETITION BETWEEN 2 COMPANIES
105  REM DEVELOPED BY S. FINKELSTEIN, J. MCGRATH, I. STAW, D. SOBIN 
110  REM ALSO DEVELOPED BY D. KLASSEN - PROGRAMMED BY D. SOBIN
115  REM LATEST REVISION 8-29-72
120  REM COPYRIGHT 1972 - STATE UNIVERSITY OF NEW YORK
125  DEF FNR()=.01*INT(100*+.5)
130  DIM C[2],I[2],T[2],A[2],L[2],D[2],P[2],V[2],W[2],B[2],E[5]
135  PRINT "DO YOU WANT INSTRUCTIONS(TYPE 1 FOR YES, 0 FOR NO)";
140  INPUT H
145  READ K2,N,K,K3,C[1],C[2],I[1],I[2],F,U,R,G1,G2,G3,M1,K4
150  LET Q=0
151  W2=0
152  W4=0
153  W3=0
155  PRINT 
160  IF H=0 THEN 200
165  PRINT "MARKET SIMULATES THE COMPETITION BETWEEN TWO COMPANIES"
170  PRINT "SELLING A PRODUCT DIFFERENTIATED BY BRAND ADVERTISING."
175  PRINT "THE QUANTITY EACH COMPANY SELLS IS DEPENDENT UPON PRICE"
180  PRINT "AND ADVERTISING BUDGET. THE GAME ENDS WHEN ONE "
185  PRINT "COMPANY GOES BANKRUPT OR REACHES ";.001*M1;" MILLION IN"
190  PRINT "TOTAL ASSETS."
195  PRINT 
200  PRINT "ARE YOU BEGINNING THE GAME OR CONTINUING"
205  PRINT "(TYPE 1 FOR BEGINNING, 2 FOR CONTINUING)";
210  INPUT A
215  PRINT 
220  IF A=1 THEN 270
225  FOR J=1 TO 2
230  PRINT "COMPANY "J;"ENTER PREVIOUS CASH ON HAND,PREVIOUS INVENTORY";
235  INPUT C[J],I[J]
240  PRINT 
245  NEXT J
250  PRINT "ENTER VARIABLE PRODUCTION COST";
255  INPUT U
260  PRINT "ENTER QUARTER NUMBER";
265  INPUT Q
270  PRINT 
275  PRINT "FIXED PRODUCTION COST=$";F*1000;"/ QUARTER"
280  PRINT "VARIABLE PRODUCTION COST=$";U;"/UNIT"
285  PRINT "WITH NO ADVERTISING AND A SELLING PRICE OF $50/UNIT"
290  PRINT "A COMPANY WILL SELL ";K2*500;" UNITS (PRINTED AS ";K2/2;")"
295  PRINT "WAREHOUSE  CHARGE FOR INVENTORY="R*100;" PER CENT"
300  PRINT "INTEREST CHARGE ON BORROWED MONEY="K3*100;" PER CENT"
305  PRINT 
310  PRINT 
320  PRINT 
325  PRINT 
330  PRINT "UNITS AND DOLLARS BELOW ARE IN THOUSANDS "
335  PRINT 
340  PRINT 
345  FOR J=1 TO 5
350  LET E[J]=0
355  NEXT J
360  LET P4=0
365  GOSUB 875
370  FOR J=1 TO 2
375  LET W[J]=0
380  LET D[J]=0
385  LET T[J]=0
390  LET B[J]=U*I[J]+C[J]
395  GOSUB 900
400  NEXT J
405  PRINT 
410  LET Q=Q+1
415  GOSUB 1060
420  GOSUB 675
425  GOSUB 865
430  REM COMPUTE DEMAND 
435  FOR J=1 TO 2
440  LET D[J]=(1-E[5])*.5*(K2+2*V[J]*D1)/(P[J]/50)^N
445  NEXT J
450  GOSUB 1000
455  FOR J=1 TO 2
460  IF D[J]>I[J] THEN 475
465  LET T[J]=D[J]
470  GOTO 480
475  LET T[J]=I[J]
480  LET T[J]=INT(T[J])
485  LET C[J]=C[J]+T[J]*P[J]
490  LET I[J]=I[J]-T[J]
495  NEXT J
500  FOR J=1 TO 2
505  LET C[J]=C[J]-R*I[J]*U-K3*C[J]*(SGN(C[J])-SGN(C[J])^2)/2
510  LET C[J]=INT(C[J])
515  IF E[5]=0 THEN 530
520  LET W[J]=0
525  GOTO 540
530  IF T[1]+T[2]=0 THEN 520
535  LET W[J]=INT(10000*T[J]/(T[1]+T[2]))/100
540  NEXT J
545  FOR J=1 TO 2
550  GOSUB 900
555  LET B[J]=C[J]+U*I[J]
560  IF B[J]>0 THEN 580
565  PRINT 
570  GOSUB 975
575  PRINT 
580  IF B[J]<M1 THEN 620
585  IF B[J] <= C[3-J]+U*I[3-J] THEN 620
590  LET P4=17
595  PRINT 
600  PRINT TAB(14);"********************"
605  PRINT "COMPANY ";J;" YOU HAVE REACHED ".001*M1;" MILLION AND WON"
610  PRINT TAB(14);"********************"
615  PRINT 
620  NEXT J
625  PRINT 
630  IF P4 <> 17 THEN 410
635  PRINT 
640  PRINT "DO YOU WANT TO PLAY AGAIN(TYPE 1 FOR YES, 0 FOR NO)";
645  INPUT H
650  IF H=0 THEN 670
655  RESTORE 
660  PRINT 
665  GOTO 135
670  STOP 
675  PRINT 
680  FOR J=1 TO 2
685  PRINT 
690  PRINT 
695  PRINT "COMPANY ";J
700  IF E[2] <> 1 THEN 715
705  PRINT "NO PRODUCTION POSSIBLE DUE TO STRIKE"
710  GOTO 730
715  PRINT "PRODUCTION LEVEL";
720  INPUT L[J]
725  IF L[J]<0 THEN 715
730  PRINT "ADVERTISING BUDGET";
735  INPUT A[J]
740  IF A[J]<0 THEN 730
745  LET C[J]=C[J]-F-L[J]*U-A[J]
750  IF E[2]=1 THEN 760
755  LET I[J]=I[J]+L[J]
760  PRINT "UNIT PRICE";
765  INPUT A
770  IF E[1] <> 1 THEN 800
775  IF A <= P[J] THEN 800
780  PRINT 
785  PRINT "YOU MAY NOT RAISE PRICES DURING THE WAGE-PRICE FREEZE"
790  PRINT 
795  GOTO 760
800  LET P[J]=A
805  IF A>200 THEN 760
810  IF P[J] <= 0 THEN 760
815  NEXT J
820  LET A2=A[1]+A[2]
825  IF A2>0 THEN 845
830  LET V[1]=0
835  LET V[2]=0
840  GOTO 855
845  LET V[1]=A[1]/A2
850  LET V[2]=A[2]/A2
855  LET D1=(K2-K2*EXP(-K*A2))*K4
860  RETURN 
865  PRINT 
870  PRINT 
875  PRINT "QUARTER ";Q
880  PRINT 
885  PRINT "PROFIT  MARKET SHARE  CASH ON HAND  NUMBER SOLD  ";
890  PRINT "INVENTORY  ASSETS"
895  RETURN 
900  PRINT U*I[J]+C[J]-B[J];TAB(9);W[J];TAB(23);C[J];TAB(37);
905  PRINT T[J];TAB(50);I[J];TAB(61);U*I[J]+C[J]
910  RETURN 
915  DATA 50
920  DATA 2
925  DATA .001
930  DATA .05
935  DATA 5000,5000
940  DATA 100,100
945  DATA 250
950  DATA 20
955  DATA .05
960  DATA .2,.4,.4
965  DATA 12000
970  DATA 1.5
975  PRINT TAB(7);"********************"
980  PRINT "COMPANY "J;" YOU HAVE GONE BANKRUPT"
985  PRINT TAB(7);"********************"
990  LET P4=17
995  RETURN 
1000  IF P[1]<P[2] THEN 1015
1005  LET M=2
1010  GOTO 1020
1015  LET M=1
1020  LET G4=(P[3-M]-P[M])/P[3-M]
1025  IF G4 <= G1 THEN 1055
1030  IF G4<G2 THEN 1040
1035  LET G4=G2
1040  LET G5=D[3-M]*((G4-G1)/(G2-G1))*G3
1045  LET D[3-M]=D[3-M]-G5
1050  LET D[M]=D[M]+G5
1055  RETURN 
1060  IF Q<6 THEN 1230
1065  IF RND(1)<.1 THEN 1090
1070  IF RND(1)<.1 THEN 1115
1075  IF RND(1)<.1 THEN 1165
1080  IF RND(1)<.1 THEN 1200
1085  GOTO 1230
1090  IF E[1]>0 THEN 1070
1095  GOSUB 1300
1100  LET E[1]=1
1105  LET Q1=Q
1110  GOTO 1070
1115  LET I=INT(RND(1)+1.5)
1120  IF Q-W2 <= 2 THEN 1075
1125  IF C[I]<0 THEN 1075
1130  IF C[I]>200 THEN 1145
1135  LET C[I]=.75*C[I]
1140  GOTO 1150
1145  LET C[I]=C[I]-200
1150  GOSUB 1325
1155  LET W2=Q
1160  GOTO 1075
1165  LET J=INT(RND(1)+1.5)
1170  IF Q-W3 <= 2 THEN 1080
1175  GOSUB 1350
1180  LET C[J]=C[J]+U*I[J]*.75
1185  LET I[J]=0
1190  LET W3=Q
1195  GOTO 1080
1200  IF E[1]=1 THEN 1230
1205  IF Q-W4 <= 2 THEN 1230
1210  LET W4=Q
1215  GOSUB 1375
1220  LET E[5]=1
1225  LET Q2=Q
1230  IF INT((Q-1)/4)*4 <> Q-1 THEN 1425
1235  IF Q=1 THEN 1425
1240  IF E[1]=1 THEN 1425
1245  IF RND(1)>.25 THEN 1280
1250  IF Q<6 THEN 1280
1255  GOSUB 1400
1260  LET E[2]=1
1265  LET U=INT(U*(1.1+.1*RND(1)))
1270  LET Q3=Q
1275  GOTO 1425
1280  LET U=INT(U*(1.05+.1*RND(1)))
1285  PRINT "NEW LABOR CONTRACT - VARIABLE PRODUCTION COST NOW=";
1290  PRINT " $";U;"/UNIT"
1295  GOTO 1425
1300  PRINT "THE PRESIDENT HAS JUST IMPOSED A WAGE-PRICE FREEZE ON THE"
1305  PRINT "ECONOMY, AND YOU MAY NOT RAISE THE PRICE OF YOUR PRODUCT"
1310  PRINT "OVER THE NEXT 2 QUARTERS."
1315  PRINT 
1320  RETURN 
1325  PRINT "COMPANY ";I;"HAS BEEN THE VICTIM OF EMBEZZLEMENT BY THE"
1330  PRINT "VICE PRESIDENT OF THE COMPANY. YOUR CASH ON HAND IS NOW ";
1335  PRINT "$";C[I]
1340  PRINT 
1345  RETURN 
1350  PRINT "COMPANY";J;" HAS SUFFERED FIRE DAMAGE IN ITS WAREHOUSE"
1355  PRINT "ALL UNITS WERE DESTROYED. YOUR INSURANCE WILL REIMBURSE YOU"
1360  PRINT "IN THE AMOUNT OF $";INT(U*I[J]*.75);" FOR THESE UNITS"
1365  PRINT 
1370  RETURN 
1375  PRINT "A TRANSPORTATION STRIKE HAS OCCURED, AND YOU ARE UNABLE TO"
1380  PRINT "MOVE YOUR GOODS TO THE DISTRIBUTORS. NEGOTIATIONS HAVE"
1385  PRINT "BEGUN, BUT HOPE OF A SETTLEMENT LOOKS DIM."
1390  PRINT 
1395  RETURN 
1400  PRINT "THERE HAS BEEN A STRIKE AND YOUR PRODUCTION HAS BEEN"
1405  PRINT "HALTED. NEGOTIATIONS HAVE BEEN STARTED, BUT HOPE OF"
1410  PRINT "A SETTLEMENT LOOKS DIM."
1415  PRINT 
1420  RETURN 
1425  IF E[1] <> 1 THEN 1450
1430  IF Q<Q1+2 THEN 1450
1435  LET E[1]=2
1440  PRINT "THE WAGE-PRICE FREEZE HAS ENDED"
1445  PRINT 
1450  IF E[5] <> 1 THEN 1475
1455  IF Q2=Q THEN 1475
1460  LET E[5]=0
1465  PRINT "TRANSPORTATION STRIKE SETTLED. NORMAL DELIVERIES RESUMED"
1470  PRINT 
1475  IF E[2] <> 1 THEN 1505
1480  IF Q3=Q THEN 1505
1485  PRINT "STRIKE SETTLED. NORMAL PRODUCTION RESUMED"
1490  PRINT "NEW VARIABLE COST=$";U;" / UNIT DUE TO INCREASED WAGES"
1495  PRINT 
1500  LET E[2]=0
1505  RETURN 
1510  END 
