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(X)=.01*INT(100*X+.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

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 ";1.00000E-03*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 "ENTEP 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 

315 RANDOMIZE

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 "1.00000E-03*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 1.00000E-03

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