Version with a function to convert array to string as described in Article

by qbguy (no login)

DECLARE FUNCTION ARRAY2STRING$ (A!())
DIM A(0 TO 999)
FOR I = 0 TO 999
  READ A(I)
NEXT
X$ = ARRAY2STRING$(A())
K1$ = LEFT$(X$, 1)
K2$ = LEFT$(X$, 1)
FOR I = 1 TO LEN(X$)
  IF MID$(X$, I, 1) <> K1$ THEN K2$ = MID$(X$, I, 1)
NEXT
IF K1$ = K2$ THEN PRINT "STRING MUST HAVE 2 DIFFERENT TYPES": STOP
FOR I = 1 TO LEN(X$)
  IF MID$(X$, I, 1) <> K1$ AND MID$(X$, I, 1) <> K2$ THEN
    PRINT "STRING MAY ONLY HAVE 2 TYPES": STOP
  END IF
NEXT
N1 = 0
N2 = 0
RUNS = 1
FOR I = 1 TO LEN(X$) - 1
  IF MID$(X$, I, 1) = K1$ THEN N1 = N1 + 1 ELSE N2 = N2 + 1
  IF MID$(X$, I + 1, 1) <> MID$(X$, I, 1) THEN RUNS = RUNS + 1
NEXT
IF MID$(X$, LEN(X$), 1) = K1$ THEN N1 = N1 + 1 ELSE N2 = N2 + 1
IF N1 < 8 OR N2 < 8 THEN PRINT "MUST HAVE 8 OR MORE OF EACH TYPE FOR MEANINGFUL ANALYSIS": STOP
EXPECTEDRUNS = 1 + ((2! * N1 * N2) / (N1 + N2))
VARN = (2! * N1 * N2) * (2! * N1 * N2 - N1 - N2)
VARD = (N1 + N2) * (N1 + N2) * (N1 + N2 - 1)
VAR = VARN / VARD
Z = (R - EXPECTEDRUNS) / SQR(VAR)
IF Z < -2.58 OR Z > 2.58 THEN
  PRINT "STRONG EVIDENCE (1%) PATTERN IS NOT RANDOM:"
  IF Z < -2.58 THEN PRINT "TOO FEW RUNS" ELSE PRINT "TOO MANY RUNS"
  PRINT "EXPECTED RUNS:"; EXPECTEDRUNS
  PRINT "ACTUAL RUNS:"; RUNS
END IF
DATA    75, 90, 55, 24, 80, 89, 90, 43, 99, 46
DATA    53, 96, 6, 59, 9, 3, 96, 83, 48, 40
DATA    93, 49, 79, 70, 5, 13, 41, 62, 36, 96
DATA    12, 76, 97, 46, 45, 80, 42, 58, 67, 12
DATA    21, 40, 82, 73, 82, 94, 19, 73, 62, 76
DATA    61, 25, 8, 71, 2, 18, 11, 19, 55, 33
DATA    12, 5, 11, 40, 52, 55, 37, 89, 48, 49
DATA    92, 100, 57, 71, 80, 100, 64, 46, 37, 2
DATA    23, 64, 54, 70, 15, 55, 31, 15, 48, 20
DATA    57, 77, 74, 77, 44, 34, 80, 43, 33, 65
DATA    36, 14, 42, 39, 21, 47, 15, 84, 45, 76
DATA    21, 43, 93, 69, 80, 10, 82, 55, 74, 42
DATA    23, 3, 54, 6, 68, 65, 86, 5, 17, 71
DATA    52, 5, 32, 83, 50, 76, 28, 15, 90, 17
DATA    59, 40, 30, 45, 1, 84, 54, 79, 32, 61
DATA    70, 24, 17, 49, 97, 70, 96, 17, 36, 28
DATA    12, 39, 94, 21, 46, 72, 14, 85, 18, 46
DATA    69, 90, 6, 44, 4, 67, 81, 58, 47, 47
DATA    71, 82, 74, 96, 3, 59, 18, 29, 91, 80
DATA    98, 21, 6, 64, 26, 60, 21, 99, 92, 53
DATA    99, 73, 9, 77, 92, 39, 55, 65, 37, 65
DATA    54, 89, 6, 41, 96, 39, 27, 83, 14, 89
DATA    93, 34, 22, 81, 55, 18, 62, 49, 4, 59
DATA    24, 27, 55, 42, 16, 2, 3, 7, 95, 44
DATA    97, 69, 11, 12, 32, 9, 13, 9, 100, 24
DATA    87, 59, 69, 27, 83, 11, 28, 37, 69, 51
DATA    26, 56, 82, 21, 24, 61, 91, 67, 74, 79
DATA    21, 1, 87, 81, 36, 41, 51, 75, 50, 46
DATA    84, 57, 23, 22, 100, 2, 62, 69, 26, 29
DATA    93, 44, 39, 20, 5, 89, 17, 67, 95, 39
DATA    53, 42, 99, 4, 98, 29, 28, 76, 47, 96
DATA    21, 52, 45, 1, 70, 69, 49, 16, 57, 59
DATA    47, 12, 48, 72, 81, 87, 90, 29, 34, 75
DATA    37, 53, 40, 97, 22, 15, 77, 10, 52, 9
DATA    2, 84, 74, 13, 80, 46, 28, 67, 73, 23
DATA    63, 11, 58, 51, 84, 63, 8, 29, 55, 64
DATA    9, 39, 35, 38, 3, 23, 97, 61, 11, 79
DATA    9, 13, 82, 56, 7, 69, 2, 67, 30, 34
DATA    24, 81, 37, 44, 19, 30, 41, 86, 2, 92
DATA    96, 94, 68, 76, 46, 75, 42, 53, 82, 75
DATA    23, 6, 11, 88, 45, 16, 91, 22, 3, 59
DATA    23, 46, 21, 62, 1, 94, 98, 7, 26, 77
DATA    70, 2, 62, 7, 35, 67, 42, 5, 30, 41
DATA    21, 21, 70, 84, 88, 4, 42, 24, 82, 72
DATA    59, 78, 91, 53, 6, 5, 83, 75, 10, 61
DATA    36, 1, 61, 32, 11, 97, 70, 85, 41, 57
DATA    24, 43, 10, 66, 52, 60, 30, 77, 14, 39
DATA    51, 61, 75, 65, 22, 16, 38, 85, 89, 57
DATA    55, 30, 49, 78, 97, 52, 34, 80, 48, 14
DATA    23, 29, 52, 51, 11, 65, 94, 56, 32, 70
DATA    28, 29, 55, 71, 19, 81, 99, 84, 38, 71
DATA    77, 73, 87, 38, 89, 30, 5, 12, 87, 14
DATA    72, 81, 86, 38, 14, 13, 33, 98, 21, 70
DATA    60, 88, 74, 47, 2, 86, 45, 44, 1, 32
DATA    96, 69, 8, 68, 28, 1, 94, 41, 92, 68
DATA    61, 36, 43, 39, 44, 84, 72, 29, 84, 82
DATA    38, 91, 57, 100, 6, 56, 96, 6, 26, 20
DATA    100, 53, 22, 46, 32, 100, 64, 48, 27, 87
DATA    12, 72, 16, 86, 67, 3, 73, 23, 65, 2
DATA    25, 66, 30, 8, 70, 8, 87, 13, 69, 26
DATA    49, 84, 86, 31, 55, 1, 97, 17, 70, 30
DATA    30, 26, 51, 71, 10, 65, 34, 20, 50, 65
DATA    30, 66, 50, 95, 4, 24, 45, 91, 9, 95
DATA    65, 54, 52, 94, 84, 92, 16, 81, 38, 78
DATA    63, 83, 69, 98, 23, 20, 89, 65, 40, 96
DATA    37, 59, 71, 34, 71, 38, 13, 95, 11, 42
DATA    40, 19, 10, 72, 52, 24, 71, 50, 86, 96
DATA    21, 53, 49, 65, 26, 45, 58, 91, 27, 26
DATA    85, 18, 50, 49, 74, 25, 59, 39, 32, 66
DATA    90, 85, 6, 27, 63, 6, 94, 29, 33, 73
DATA    95, 64, 17, 44, 4, 5, 29, 93, 82, 76
DATA    63, 22, 95, 86, 71, 89, 85, 80, 100, 2
DATA    59, 67, 89, 86, 59, 87, 20, 86, 13, 54
DATA    100, 65, 57, 18, 68, 37, 41, 27, 47, 41
DATA    100, 58, 71, 63, 55, 40, 96, 73, 42, 39
DATA    45, 64, 78, 15, 66, 89, 39, 86, 84, 27
DATA    77, 24, 44, 16, 81, 20, 41, 53, 23, 86
DATA    29, 50, 52, 13, 1, 5, 74, 26, 61, 92
DATA    74, 48, 65, 15, 84, 37, 25, 83, 29, 64
DATA    100, 57, 40, 48, 67, 89, 8, 51, 50, 64
DATA    94, 17, 20, 2, 45, 89, 89, 30, 89, 15
DATA    32, 90, 36, 53, 92, 15, 31, 91, 25, 89
DATA    59, 85, 57, 89, 70, 44, 82, 36, 80, 74
DATA    32, 45, 34, 46, 61, 100, 4, 40, 96, 7
DATA    35, 31, 13, 59, 70, 69, 87, 5, 6, 75
DATA    88, 18, 96, 68, 67, 38, 28, 39, 7, 7
DATA    80, 28, 88, 78, 12, 96, 69, 4, 70, 53
DATA    29, 63, 71, 40, 42, 14, 43, 14, 89, 30
DATA    20, 12, 92, 90, 56, 100, 28, 28, 89, 38
DATA    40, 64, 36, 83, 92, 65, 85, 60, 84, 58
DATA    58, 53, 8, 80, 85, 64, 4, 70, 55, 25
DATA    75, 70, 31, 42, 23, 59, 23, 74, 99, 55
DATA    17, 95, 88, 62, 14, 94, 67, 92, 12, 44
DATA    23, 45, 99, 21, 41, 56, 42, 90, 29, 65
DATA    1, 12, 57, 11, 83, 70, 44, 2, 69, 38
DATA    71, 4, 29, 77, 20, 55, 40, 95, 10, 32
DATA    3, 31, 11, 38, 5, 59, 77, 47, 59, 73
DATA    40, 39, 15, 90, 12, 46, 56, 79, 4, 49
DATA    46, 86, 17, 99, 9, 17, 65, 21, 67, 93
DATA    88, 64, 55, 69, 50, 39, 68, 42, 73, 53

FUNCTION ARRAY2STRING$ (A())
  SUM = 0
  NUMELEMENTS = UBOUND(A) - LBOUND(A) + 1
  FOR I = LBOUND(A) TO UBOUND(A)
    SUM = SUM + A(I)
  NEXT
  AVG = SUM / NUMELEMENTS
  FOR I = LBOUND(A) TO UBOUND(A)
    IF A(I) > AVG THEN I$ = I$ + "H" ELSE I$ = I$ + "L"
  NEXT
  ARRAY2STRING$ = I$
END FUNCTION

Posted on Mar 19, 2008, 11:37 AM
from IP address 75.9.218.72

Respond to this message   

Goto Forum Home