SNOBOL4 (VERSION 3.4.3, JAN. 16, 1971) DIGITAL EQUIPMENT CORP., PDP-10 1 DATA('CARD(NUM,NEXT)') * 2 OUTPUT('TITLE',6,'(14H1THIS IS HAND ,22A5)') 3 OUTPUT('DEALER',6,'(11H DEALER IS ,22A5)') 4 OUTPUT('SKIP',6,'(A1)') * * * FUNCTIONS * 5 DEFINE('INSERT(LIST,CARD)TEMP') :(INSERTEND) * 6 INSERT $LIST = IDENT($LIST) CARD(NUM(CARD),NULL) :S(RETURN) 7 $LIST = GT(NUM(CARD),NUM($LIST)) CARD(NUM(CARD),$LIST) 7 . :S(RETURN) 8 TEMP = $LIST 9 INS1 IDENT(NEXT(TEMP)) :S(INS2) 10 NEXT(TEMP) = GT(NUM(CARD),NUM(NEXT(TEMP))) 10 . CARD(NUM(CARD),NEXT(TEMP)) :S(RETURN) 11 TEMP = NEXT(TEMP) :(INS1) 12 INS2 NEXT(TEMP) = CARD(NUM(CARD),NULL) :(RETURN) 13 INSERTEND * * 14 DEFINE('LINE(STR1,COL1,STR2,COL2)BL1,BL2') :(LINEEND) * 15 LINE BL LEN(COL1 - 1) . BL1 16 IDENT(STR2) :S(LINE1) 17 BL LEN(COL2 - (COL1 + SIZE(STR1))) . BL2 18 LINE1 LINE = BL1 STR1 BL2 STR2 :(RETURN) 19 LINEEND * * 20 DEFINE('NTH(LIST,NUM)TEMP') :(NTHEND) * 21 NTH NTH = EQ(NUM,0) $LIST :F(NTH1) 22 $LIST = NEXT($LIST) :(RETURN) 23 NTH1 TEMP = $LIST 24 NTH2 NUM = NUM - 1 25 NTH = EQ(NUM,0) NEXT(TEMP) :S(NTH3) 26 TEMP = NEXT(TEMP) :(NTH2) 27 NTH3 NEXT(TEMP) = NEXT(NEXT(TEMP)) :(RETURN) 28 NTHEND * * 29 DEFINE('RANDOM(N)') :(RANDOMEND) 30 RANDOM RAN.VAR = RAN.VAR * 1061 + 3251 31 RAN.VAR ARB RPOS(5) = 32 RANDOM = (RAN.VAR * N) / 100000 :(RETURN) 33 RANDOMEND * * 34 DEFINE('SUITL(HAND,SUIT)') :(SUITLEND) * 35 SUITL SUITL = SUIT ' ' 36 SUITL1 GT(NUM($HAND),$SUIT) :F(RETURN) 37 SUITL = SUITL $(NUM($HAND) - $SUIT) 38 $HAND = DIFFER(NEXT($HAND)) NEXT($HAND) :S(SUITL1)F(RETURN) 39 SUITLEND * * * CONSTANTS * 40 BL = ' ' 40 . ' ' 41 S = 39 42 H = 26 43 D = 13 44 C = 0 45 $1 = 2 46 $2 = 3 47 $3 = 4 48 $4 = 5 49 $5 = 6 50 $6 = 7 51 $7 = 8 52 $8 = 9 53 $9 = 10 54 $10 = 'J' 55 $11 = 'Q' 56 $12 = 'K' 57 $13 = 'A' 58 DEALSEQ = 'NORTH,EAST,SOUTH,WEST,NORTH,' 59 RAN.VAR = 157 60 DEALMAX = 3 61 NTHDEAL = 62 DEAL = 'WEST' 63 NEWDEAL NTHDEAL = LT(NTHDEAL,DEALMAX) NTHDEAL + 1 :F(END) 64 N = 1 65 NORTH = 66 EAST = 67 SOUTH = 68 WEST = 69 DECK = 70 DLOOP DECK = CARD(N,DECK) 71 N = LT(N,52) N + 1 :S(DLOOP) 72 DEALSEQ DEAL ',' BREAK(',') . DEAL :F(ERR) 73 HAND = DEAL 74 N = 52 75 NLOOP DEALSEQ HAND ',' BREAK(',') . HAND :F(ERR) 76 INSERT(HAND,NTH('DECK',RANDOM(N))) 77 N = GT(N,1) N - 1 :S(NLOOP) * * * OUTPUT OF HAND * 78 TITLE = NTHDEAL 79 DEALER = DEAL 80 SKIP = ' ' 81 OUTPUT = LINE('NORTH',40) 82 OUTPUT = 83 OUTPUT = LINE(SUITL('NORTH','S'),40) 84 OUTPUT = LINE(SUITL('NORTH','H'),40) 85 OUTPUT = LINE(SUITL('NORTH','D'),40) 86 OUTPUT = LINE(SUITL('NORTH','C'),40) 87 SKIP = ' ' 88 OUTPUT = LINE('WEST',20,'EAST',60) 89 OUTPUT = 90 OUTPUT = LINE(SUITL('WEST','S'),20, 90 . SUITL('EAST','S'),60) 91 OUTPUT = LINE(SUITL('WEST','H'),20, 91 . SUITL('EAST','H'),60) 92 OUTPUT = LINE(SUITL('WEST','D'),20, 92 . SUITL('EAST','D'),60) 93 OUTPUT = LINE(SUITL('WEST','C'),20, 93 . SUITL('EAST','C'),60) 94 SKIP = ' ' 95 OUTPUT = LINE('SOUTH',40) 96 OUTPUT = 97 OUTPUT = LINE(SUITL('SOUTH','S'),40) 98 OUTPUT = LINE(SUITL('SOUTH','H'),40) 99 OUTPUT = LINE(SUITL('SOUTH','D'),40) 100 OUTPUT = LINE(SUITL('SOUTH','C'),40) 100 . :(NEWDEAL) 101 END NO ERRORS DETECTED IN SOURCE PROGRAM THIS IS HAND 1 DEALER IS NORTH NORTH S A64 H K762 D Q98 C A98 WEST EAST S KQJ872 S 105 H AQ9 H 85 D J6 D AK542 C 52 C QJ74 SOUTH S 93 H J1043 D 1073 C K1063 THIS IS HAND 2 DEALER IS EAST NORTH S 93 H AJ1073 D AJ5 C KQJ WEST EAST S KQ1052 S A64 H 6 H K984 D 98743 D 1062 C 103 C 976 SOUTH S J87 H Q52 D KQ C A8542 THIS IS HAND 3 DEALER IS SOUTH NORTH S J8643 H 63 D 42 C J1082 WEST EAST S K1097 S A2 H 2 H K985 D AQ1053 D KJ86 C A63 C Q75 SOUTH S Q5 H AQJ1074 D 97 C K94 NORMAL TERMINATION AT LEVEL 0 LAST STATEMENT EXECUTED WAS 63 SNOBOL4 STATISTICS SUMMARY- 2046 MS. COMPILATION TIME 5081 MS. EXECUTION TIME 10527 STATEMENTS EXECUTED, 3211 FAILED 3368 ARITHMETIC OPERATIONS PERFORMED 375 PATTERN MATCHES PERFORMED 11 REGENERATIONS OF DYNAMIC STORAGE 0 READS PERFORMED 69 WRITES PERFORMED 40 K CORE USED, 4535 FREE WORDS LEFT 0.48 MS. AVERAGE PER STATEMENT EXECUTED