DECLARE SUB ReadInput () DECLARE FUNCTION Find% (prev AS STRING) TYPE stype value AS INTEGER scname AS STRING * 16 NumScores AS INTEGER END TYPE CONST MAXPOSS = 32000 DIM SHARED score(1 TO 100) AS stype DIM SHARED overall(1 TO 100) AS INTEGER DIM SHARED NumScores(1 TO MAXPOSS) AS INTEGER DIM SHARED MaxOverall AS INTEGER DIM SHARED N AS INTEGER DIM SHARED M AS INTEGER DIM i, j, NextScore, Num AS INTEGER CALL ReadInput FOR i = 1 TO MaxOverall NumScores(i) = MAXPOSS NEXT FOR i = 1 TO M IF score(i).NumScores < NumScores(score(i).value) THEN NumScores(score(i).value) = score(i).NumScores END IF NEXT FOR i = 1 TO MaxOverall IF (NumScores(i) <> MAXPOSS) THEN 'PRINT "score "; i; " in "; NumScores(i); " attempts" END IF NEXT FOR i = 1 TO MaxOverall IF (NumScores(i) <> MAXPOSS) THEN FOR j = 1 TO M NextScore = i + score(j).value Num = NumScores(i) + score(j).NumScores IF Num < NumScores(NextScore) THEN NumScores(NextScore) = Num END IF NEXT END IF NEXT OPEN "DAY2C.SOL" FOR OUTPUT AS #2 FOR i = 1 TO N IF NumScores(overall(i)) <> MAXPOSS THEN PRINT #2, NumScores(overall(i)) ELSE PRINT #2, 0 END IF NEXT SYSTEM END FUNCTION Find% (prev AS STRING) DIM p AS INTEGER p = -1 FOR i = 1 TO M IF INSTR(score(i).scname, prev) > 0 THEN p = i EXIT FOR END IF NEXT IF p = -1 THEN PRINT "cockup" Find = p END FUNCTION SUB ReadInput DIM i, p, l, bl AS INTEGER DIM inpline, prev AS STRING OPEN "day2c.dat" FOR INPUT AS #1 INPUT #1, M FOR i = 1 TO M score(i).NumScores = 1 INPUT #1, score(i).value INPUT #1, score(i).scname IF INSTR(score(i).scname, "+") = 1 THEN l = LEN(score(i).scname) score(i).scname = RIGHT$(score(i).scname, l - 2) bl = INSTR(score(i).scname, " ") prev = RIGHT$(score(i).scname, l - bl) score(i).scname = LEFT$(score(i).scname, bl) p = Find(prev) score(i).NumScores = 1 + score(p).NumScores score(i).value = score(i).value + score(p).value END IF IF score(i).value > maxvalue THEN maxvalue = score(i).value END IF NEXT MaxOverall = 0 INPUT #1, N FOR i = 1 TO N INPUT #1, overall(i) IF overall(i) > MaxOverall THEN MaxOverall = overall(i) NEXT END SUB