REM Statistics for dice in the board game Risk, qbasic, 2008. 2018. 2002. DIM res(3): REM results array, res(r) = attack wins, splits, defense wins REM 3 attack dice against 2 defense, sorted dice space traversal REM one sixth of the attack 6^3 and half the 6^2 defense dice roll spaces FOR r = 1 TO 3: res(r) = 0: NEXT r FOR i = 6 TO 1 STEP -1 FOR j = i TO 1 STEP -1 FOR k = j TO 1 STEP -1 FOR l = 6 TO 1 STEP -1 FOR m = l TO 1 STEP -1 r = (i > l) + (j > m) + 3: 'true=-1 IF l <> m THEN z = 2 ELSE z = 1 IF i = j XOR j = k THEN z = z * 3: 'interior face and not interior edge ELSEIF i <> j THEN z = z * 6: 'body and heel END IF res(r) = res(r) + z NEXT m NEXT l NEXT k NEXT j NEXT i FOR r = 1 TO 3: PRINT res(r), : NEXT r a = (2 * res(1) + res(2)) / (2 * 6 ^ 5): PRINT a; 1 - a; " 3v2" REM 3 attack dice against 2 defense, 6^5 space traversal 'r1 = 0: r2 = 0: r3 = 0 FOR r = 1 TO 3: res(r) = 0: NEXT r FOR i = 0 TO 5 FOR j = 0 TO 5 FOR k = 0 TO 5 FOR l = 0 TO 5 FOR m = 0 TO 5 a1 = i: a2 = j: a3 = k: d1 = l: d2 = m IF a3 > a2 THEN SWAP a2, a3 IF a2 > a1 THEN SWAP a1, a2 IF a3 > a2 THEN SWAP a2, a3 IF d2 > d1 THEN S = d1: d1 = d2: d2 = S ' IF a1 > d1 AND a2 > d2 THEN ' r1 = r1 + 1 ' ELSEIF d1 >= a1 AND d2 >= a2 THEN ' r3 = r3 + 1 ' ELSE ' r2 = r2 + 1 ' END IF r = (a1 > d1) + (a2 > d2) + 3 res(r) = res(r) + 1 NEXT m NEXT l NEXT k NEXT j NEXT i 'PRINT r1, r2, r3 FOR r = 1 TO 3: PRINT res(r), : NEXT r a = (2 * res(1) + res(2)) / (2 * 6 ^ 5): PRINT a; 1 - a; " 3v2" REM 2 attack dice against 2 defense r1 = 0: r2 = 0: r3 = 0 FOR i = 1 TO 6 FOR j = 1 TO 6 FOR l = 1 TO 6 FOR m = 1 TO 6 a1 = i: a2 = j: d1 = l: d2 = m IF a2 > a1 THEN SWAP a1, a2 IF d2 > d1 THEN SWAP d1, d2 IF a1 > d1 AND a2 > d2 THEN r1 = r1 + 1 ELSEIF d1 >= a1 AND d2 >= a2 THEN r3 = r3 + 1 ELSE r2 = r2 + 1 END IF NEXT m NEXT l NEXT j NEXT i PRINT r1, r2, r3, a = (2 * r1 + r2) / (2 * 6 ^ 4): PRINT a; 1 - a; " 2v2" REM 3 attack dice against 1 defense r1 = 0: r3 = 0 FOR i = 1 TO 6 FOR j = 1 TO 6 FOR k = 1 TO 6 FOR l = 1 TO 6 IF i > l OR j > l OR k > l THEN r1 = r1 + 1 ELSE r3 = r3 + 1 END IF NEXT l NEXT k NEXT j NEXT i PRINT r1, , r3, a = r1 / 6 ^ 4: PRINT a; 1 - a; " 3v1" REM 2 attack dice against 1 defense r1 = 0: r3 = 0 FOR i = 1 TO 6 FOR j = 1 TO 6 FOR l = 1 TO 6 IF i > l OR j > l THEN r1 = r1 + 1 ELSE r3 = r3 + 1 END IF NEXT l NEXT j NEXT i PRINT r1, , r3, a = r1 / 216: PRINT a; 1 - a; " 2v1" REM 1 attack die against 2 defense r1 = 0: r3 = 0 FOR i = 1 TO 6 FOR l = 1 TO 6 FOR m = 1 TO 6 IF i > l AND i > m THEN r1 = r1 + 1 ELSE r3 = r3 + 1 END IF NEXT m NEXT l NEXT i PRINT r1, , r3, a = r1 / 216: PRINT a; 1 - a; " 1v2" REM 1 attack die against 1 defense r1 = 0: r3 = 0 FOR i = 1 TO 6 FOR l = 1 TO 6 IF i > l THEN r1 = r1 + 1 ELSE r3 = r3 + 1 END IF NEXT l NEXT i PRINT r1, , r3, a = r1 / 36: PRINT a; 1 - a; " 1v1" PRINT END REM Three dice versus two as in the board game Risk, by mean of random sample, playing with the old gw-basic folder in 2002. 1 RANDOMIZE TIMER 2 DIM PA(50), PD(50) 58 N = 50 60 FOR j = 1 TO N 70 PA(j) = 1000: PD(j) = 1000 75 FOR i = 1 TO 500 99 REM Dice 100 a(1) = INT(RND * 6 + 1) 102 a(2) = INT(RND * 6 + 1) 104 a(3) = INT(RND * 6 + 1) 110 D(1) = INT(RND * 6 + 1) 112 D(2) = INT(RND * 6 + 1) 200 REM Sort 210 FOR S = 1 TO 2 212 IF a(S + 1) > a(S) THEN TEMP = a(S): a(S) = a(S + 1): a(S + 1) = TEMP 214 NEXT S 215 IF a(2) > a(1) THEN TEMP = a(1): a(1) = a(2): a(2) = TEMP 218 S = 1 220 IF D(S + 1) > D(S) THEN TEMP = D(S): D(S) = D(S + 1): D(S + 1) = TEMP 299 REM Battle 300 IF a(1) > D(1) THEN PD(j) = PD(j) - 1 ELSE PA(j) = PA(j) - 1 310 IF a(2) > D(2) THEN PD(j) = PD(j) - 1 ELSE PA(j) = PA(j) - 1 400 REM PRINT "Attacking Pop";"Defending Pop" 410 IF j = N THEN PRINT PA(j); PD(j); 450 NEXT i 455 PRINT PA(j); PD(j) 480 NEXT j 498 PAA = 0: PDA = 0 500 FOR i = 1 TO N 520 PAA = PAA + PA(i) 530 PDA = PDA + PD(i) 540 NEXT i 542 PAA = PAA / N: PDA = PDA / N 550 PRINT PAA; PDA END 2008 'December 2008 brute version, replaced April 2018 REM 3 attack dice against 2 defense, 6^5 space traversal att12 = 0 def12 = 0 attdef = 0 FOR i = 6 TO 1 STEP -1 FOR j = 6 TO 1 STEP -1 FOR k = 6 TO 1 STEP -1 FOR l = 6 TO 1 STEP -1 FOR m = 6 TO 1 STEP -1 a1 = i: a2 = j: a3 = k d1 = l: d2 = m IF a3 > a2 THEN t = a2: a2 = a3: a3 = t IF a2 > a1 THEN t = a1: a1 = a2: a2 = t IF a3 > a2 THEN t = a2: a2 = a3: a3 = t IF d2 > d1 THEN t = d1: d1 = d2: d2 = t att1 = 0: att2 = 0 IF a1 > d1 THEN att1 = 1 IF a2 > d2 THEN att2 = 1 IF att1 = 1 AND att2 = 1 THEN att12 = att12 + 1 ELSEIF att1 = 0 AND att2 = 0 THEN def12 = def12 + 1 ELSE attdef = attdef + 1 END IF NEXT m NEXT l NEXT k NEXT j NEXT i PRINT att12, attdef, def12 REM 3 attack dice against 2 defense, sorted dice space traversal REM one sixth of the attack 6^3 and half the 6^2 defense dice roll spaces FOR r = 1 TO 3: res(r) = 0: NEXT r FOR i = 6 TO 1 STEP -1 FOR j = i TO 1 STEP -1 FOR k = j TO 1 STEP -1 FOR l = 6 TO 1 STEP -1 FOR m = l TO 1 STEP -1 r = (i > l) + (j > m) + 3: 'true=-1 z = 1 IF l <> m THEN z = 2 IF i = j XOR j = k THEN z = z * 3: 'interior face and not interior edge ELSEIF i <> j THEN z = z * 6 END IF res(r) = res(r) + z NEXT m NEXT l NEXT k NEXT j NEXT i FOR r = 1 TO 3: PRINT res(r), : NEXT r PRINT ' 2890 2611 2275 .5395448 .4604552 3v2 ' 2890 2611 2275 .5395448 .4604552 3v2 ' 295 420 581 .3896605 .6103395 2v2 ' 855 441 .6597222 .3402778 3v1 ' 125 91 .5787037 .4212963 2v1 ' 55 161 .2546296 .7453704 1v2 ' 15 21 .4166667 .583333 1v1