! ACSL Contest #2

! Program Submitted by Kahl Orr Conrad Weiser HS

 

 

LET debug = 0 !Set to 1 for debug mode (Displays steps during process)

 

INPUT PROMPT "DATA: ": data1$,data2$,data3$,data4$

 

DO

 

   LET searchcount = searchcount + 1

   INPUT PROMPT "SEARCH "&str$(searchcount)&": ": search$

 

   PRINT "OUTPUT ";str$(searchcount);": "

   PRINT

 

   LET d1 = 1

   LET d2 = 1

   LET d3 = 1

   LET d4 = 1

 

   LET bracklen = 0

 

   IF search$[1:1] = "*" THEN

 

      LET lendif = len(data1$)-len(search$)

 

      FOR i = len(search$) to 1 step -1

 

          IF search$[i-bracklen:i-bracklen] = data1$[i+lendif:i+lendif] THEN

 

             IF debug = 1 THEN PRINT search$[i-bracklen:i-bracklen];" matches ";data1$[i+lendif:i+lendif]

 

          ELSE IF search$[i-bracklen:i-bracklen] = "?" THEN

 

             IF debug = 1 THEN PRINT "Found a ? so ";data1$[i+lendif:i+lendif];" doesnt matter"

 

          ELSE IF search$[i-bracklen:i-bracklen] = "]" THEN

 

             IF debug = 1 THEN PRINT "Found a bracket";

 

             LET endbracket = i

 

             FOR j = i to 1 step -1

                 IF search$[j:j] = "-" THEN

                    LET midbracket = j

                 ELSE IF search$[j:j] = "[" THEN

                    LET startbracket = j

                    LET bracklen = i-j

                    EXIT FOR

                 END IF

             NEXT j

 

             LET startrange = val(search$[startbracket+1:midbracket-1])

             LET endrange = val(search$[midbracket+1:endbracket-1])

 

             IF val(data1$[i+lendif:i+lendif]) >= startrange AND val(data1$[i+lendif:i+lendif]) <= endrange THEN

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data1$[i+lendif:i+lendif];" is within it."

             ELSE

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data1$[i+lendif:i+lendif];" is NOT within it."

                IF debug = 1 THEN PRINT "Set to false"

                LET d1 = 0

                EXIT FOR

             END IF

 

          ELSE IF search$[i-bracklen:i-bracklen] = "*" THEN

 

             IF debug = 1 THEN PRINT "Found * so nothing else matters"

             EXIT FOR

 

          ELSE

 

             IF debug = 1 THEN PRINT "Set to false"

             LET d1 = 0

             EXIT FOR

 

          END IF

 

      NEXT i

 

   ELSE                           !IF search$[len(search$):len(search$)] = "*" THEN

 

      FOR i = 1 to len(search$)+lendif

 

          IF search$[i+bracklen:i+bracklen] = data1$[i:i] THEN

 

             IF debug = 1 THEN PRINT search$[i+bracklen:i+bracklen];" matches ";data1$[i:i]

 

          ELSE IF search$[i+bracklen:i+bracklen] = "?" THEN

 

             IF debug = 1 THEN PRINT "Found a ? so ";data1$[i:i];" doesnt matter"

 

          ELSE IF search$[i+bracklen:i+bracklen] = "[" THEN

 

             IF debug = 1 THEN PRINT "Found a bracket";

 

             LET startbracket = i

 

             FOR j = i to len(search$)

                 IF search$[j:j] = "-" THEN

                    LET midbracket = j

                 ELSE IF search$[j:j] = "]" THEN

                    LET endbracket = j

                    LET bracklen = j-i

                    EXIT FOR

                 END IF

             NEXT j

 

             LET startrange = val(search$[startbracket+1:midbracket-1])

             LET endrange = val(search$[midbracket+1:endbracket-1])

 

             IF val(data1$[i:i]) >= startrange AND val(data1$[i:i]) <= endrange THEN

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data1$[i:i];" is within it."

             ELSE

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data1$[i:i];" is NOT within it."

                IF debug = 1 THEN PRINT "Set to false"

                LET d1 = 0

                EXIT FOR

             END IF

 

          ELSE IF search$[i+bracklen:i+bracklen] = "*" THEN

 

             IF debug = 1 THEN PRINT "Found * so nothing else matters"

             EXIT FOR

 

          ELSE

 

             IF debug = 1 THEN PRINT "Set to false"

             LET d1 = 0

             EXIT FOR

 

          END IF

 

 

      NEXT i

 

   END IF

 

   IF d1 = 1 THEN PRINT data1$

 

 

 

 

 

   IF search$[1:1] = "*" THEN

 

      LET lendif = len(data2$)-len(search$)

 

      FOR i = len(search$) to 1 step -1

 

          IF search$[i-bracklen:i-bracklen] = data2$[i+lendif:i+lendif] THEN

 

             IF debug = 1 THEN PRINT search$[i-bracklen:i-bracklen];" matches ";data2$[i+lendif:i+lendif]

 

          ELSE IF search$[i-bracklen:i-bracklen] = "?" THEN

 

             IF debug = 1 THEN PRINT "Found a ? so ";data2$[i+lendif:i+lendif];" doesnt matter"

 

          ELSE IF search$[i-bracklen:i-bracklen] = "]" THEN

 

             IF debug = 1 THEN PRINT "Found a bracket";

 

             LET endbracket = i

 

             FOR j = i to 1 step -1

                 IF search$[j:j] = "-" THEN

                    LET midbracket = j

                 ELSE IF search$[j:j] = "[" THEN

                    LET startbracket = j

                    LET bracklen = i-j

                    EXIT FOR

                 END IF

             NEXT j

 

             LET startrange = val(search$[startbracket+1:midbracket-1])

             LET endrange = val(search$[midbracket+1:endbracket-1])

 

             IF val(data2$[i+lendif:i+lendif]) >= startrange AND val(data2$[i+lendif:i+lendif]) <= endrange THEN

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data2$[i+lendif:i+lendif];" is within it."

             ELSE

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data2$[i+lendif:i+lendif];" is NOT within it."

                IF debug = 1 THEN PRINT "Set to false"

                LET d2 = 0

                EXIT FOR

             END IF

 

          ELSE IF search$[i-bracklen:i-bracklen] = "*" THEN

 

             IF debug = 1 THEN PRINT "Found * so nothing else matters"

             EXIT FOR

 

          ELSE

 

             IF debug = 1 THEN PRINT "Set to false"

             LET d2 = 0

             EXIT FOR

 

          END IF

 

      NEXT i

 

   ELSE                           !IF search$[len(search$):len(search$)] = "*" THEN

 

      FOR i = 1 to len(search$)+lendif

 

          IF search$[i+bracklen:i+bracklen] = data2$[i:i] THEN

 

             IF debug = 1 THEN PRINT search$[i+bracklen:i+bracklen];" matches ";data2$[i:i]

 

          ELSE IF search$[i+bracklen:i+bracklen] = "?" THEN

 

             IF debug = 1 THEN PRINT "Found a ? so ";data2$[i:i];" doesnt matter"

 

          ELSE IF search$[i+bracklen:i+bracklen] = "[" THEN

 

             IF debug = 1 THEN PRINT "Found a bracket";

 

             LET startbracket = i

 

             FOR j = i to len(search$)

                 IF search$[j:j] = "-" THEN

                    LET midbracket = j

                 ELSE IF search$[j:j] = "]" THEN

                    LET endbracket = j

                    LET bracklen = j-i

                    EXIT FOR

                 END IF

             NEXT j

 

             LET startrange = val(search$[startbracket+1:midbracket-1])

             LET endrange = val(search$[midbracket+1:endbracket-1])

 

             IF val(data2$[i:i]) >= startrange AND val(data2$[i:i]) <= endrange THEN

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data2$[i:i];" is within it."

             ELSE

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data2$[i:i];" is NOT within it."

                IF debug = 1 THEN PRINT "Set to false"

                LET d2 = 0

                EXIT FOR

             END IF

 

          ELSE IF search$[i+bracklen:i+bracklen] = "*" THEN

 

             IF debug = 1 THEN PRINT "Found * so nothing else matters"

             EXIT FOR

 

          ELSE

 

             IF debug = 1 THEN PRINT "Set to false"

             LET d2 = 0

             EXIT FOR

 

          END IF

 

 

      NEXT i

 

   END IF

 

 

   IF d2 = 1 THEN PRINT data2$

 

 

 

 

 

   IF search$[1:1] = "*" THEN

 

      LET lendif = len(data3$)-len(search$)

 

      FOR i = len(search$) to 1 step -1

 

          IF search$[i-bracklen:i-bracklen] = data3$[i+lendif:i+lendif] THEN

 

             IF debug = 1 THEN PRINT search$[i-bracklen:i-bracklen];" matches ";data3$[i+lendif:i+lendif]

 

          ELSE IF search$[i-bracklen:i-bracklen] = "?" THEN

 

             IF debug = 1 THEN PRINT "Found a ? so ";data3$[i+lendif:i+lendif];" doesnt matter"

 

          ELSE IF search$[i-bracklen:i-bracklen] = "]" THEN

 

             IF debug = 1 THEN PRINT "Found a bracket";

 

             LET endbracket = i

 

             FOR j = i to 1 step -1

                 IF search$[j:j] = "-" THEN

                    LET midbracket = j

                 ELSE IF search$[j:j] = "[" THEN

                    LET startbracket = j

                    LET bracklen = i-j

                    EXIT FOR

                 END IF

             NEXT j

 

             LET startrange = val(search$[startbracket+1:midbracket-1])

             LET endrange = val(search$[midbracket+1:endbracket-1])

 

             IF val(data3$[i+lendif:i+lendif]) >= startrange AND val(data3$[i+lendif:i+lendif]) <= endrange THEN

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data3$[i+lendif:i+lendif];" is within it."

             ELSE

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data3$[i+lendif:i+lendif];" is NOT within it."

                IF debug = 1 THEN PRINT "Set to false"

                LET d3 = 0

                EXIT FOR

             END IF

 

          ELSE IF search$[i-bracklen:i-bracklen] = "*" THEN

 

             IF debug = 1 THEN PRINT "Found * so nothing else matters"

             EXIT FOR

 

          ELSE

 

             IF debug = 1 THEN PRINT "Set to false"

             LET d3 = 0

             EXIT FOR

 

          END IF

 

      NEXT i

 

   ELSE                           !IF search$[len(search$):len(search$)] = "*" THEN

 

      FOR i = 1 to len(search$)+lendif

 

          IF search$[i+bracklen:i+bracklen] = data3$[i:i] THEN

 

             IF debug = 1 THEN PRINT search$[i+bracklen:i+bracklen];" matches ";data3$[i:i]

 

          ELSE IF search$[i+bracklen:i+bracklen] = "?" THEN

 

             IF debug = 1 THEN PRINT "Found a ? so ";data3$[i:i];" doesnt matter"

 

          ELSE IF search$[i+bracklen:i+bracklen] = "[" THEN

 

             IF debug = 1 THEN PRINT "Found a bracket";

 

             LET startbracket = i

 

             FOR j = i to len(search$)

                 IF search$[j:j] = "-" THEN

                    LET midbracket = j

                 ELSE IF search$[j:j] = "]" THEN

                    LET endbracket = j

                    LET bracklen = j-i

                    EXIT FOR

                 END IF

             NEXT j

 

             LET startrange = val(search$[startbracket+1:midbracket-1])

             LET endrange = val(search$[midbracket+1:endbracket-1])

 

             IF val(data3$[i:i]) >= startrange AND val(data3$[i:i]) <= endrange THEN

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data3$[i:i];" is within it."

             ELSE

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data3$[i:i];" is NOT within it."

                IF debug = 1 THEN PRINT "Set to false"

                LET d2 = 0

                EXIT FOR

             END IF

 

          ELSE IF search$[i+bracklen:i+bracklen] = "*" THEN

 

             IF debug = 1 THEN PRINT "Found * so nothing else matters"

             EXIT FOR

 

          ELSE

 

             IF debug = 1 THEN PRINT "Set to false"

             LET d3 = 0

             EXIT FOR

 

          END IF

 

 

      NEXT i

 

   END IF

 

 

   IF d3 = 1 THEN PRINT data3$

 

 

 

 

 

   IF search$[1:1] = "*" THEN

 

      LET lendif = len(data4$)-len(search$)

 

      FOR i = len(search$) to 1 step -1

 

          IF search$[i-bracklen:i-bracklen] = data4$[i+lendif:i+lendif] THEN

 

             IF debug = 1 THEN PRINT search$[i-bracklen:i-bracklen];" matches ";data4$[i+lendif:i+lendif]

 

          ELSE IF search$[i-bracklen:i-bracklen] = "?" THEN

 

             IF debug = 1 THEN PRINT "Found a ? so ";data4$[i+lendif:i+lendif];" doesnt matter"

 

          ELSE IF search$[i-bracklen:i-bracklen] = "]" THEN

 

             IF debug = 1 THEN PRINT "Found a bracket";

 

             LET endbracket = i

 

             FOR j = i to 1 step -1

                 IF search$[j:j] = "-" THEN

                    LET midbracket = j

                 ELSE IF search$[j:j] = "[" THEN

                    LET startbracket = j

                    LET bracklen = i-j

                    EXIT FOR

                 END IF

             NEXT j

 

             LET startrange = val(search$[startbracket+1:midbracket-1])

             LET endrange = val(search$[midbracket+1:endbracket-1])

 

             IF val(data4$[i+lendif:i+lendif]) >= startrange AND val(data4$[i+lendif:i+lendif]) <= endrange THEN

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data4$[i+lendif:i+lendif];" is within it."

             ELSE

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data4$[i+lendif:i+lendif];" is NOT within it."

                IF debug = 1 THEN PRINT "Set to false"

                LET d4 = 0

                EXIT FOR

             END IF

 

          ELSE IF search$[i-bracklen:i-bracklen] = "*" THEN

 

             IF debug = 1 THEN PRINT "Found * so nothing else matters"

             EXIT FOR

 

          ELSE

 

             IF debug = 1 THEN PRINT "Set to false"

             LET d4 = 0

             EXIT FOR

 

          END IF

 

      NEXT i

 

   ELSE                           !IF search$[len(search$):len(search$)] = "*" THEN

 

      FOR i = 1 to len(search$)+lendif

 

          IF search$[i+bracklen:i+bracklen] = data4$[i:i] THEN

 

             IF debug = 1 THEN PRINT search$[i+bracklen:i+bracklen];" matches ";data4$[i:i]

 

          ELSE IF search$[i+bracklen:i+bracklen] = "?" THEN

 

             IF debug = 1 THEN PRINT "Found a ? so ";data4$[i:i];" doesnt matter"

 

          ELSE IF search$[i+bracklen:i+bracklen] = "[" THEN

 

             IF debug = 1 THEN PRINT "Found a bracket";

 

             LET startbracket = i

 

             FOR j = i to len(search$)

                 IF search$[j:j] = "-" THEN

                    LET midbracket = j

                 ELSE IF search$[j:j] = "]" THEN

                    LET endbracket = j

                    LET bracklen = j-i

                    EXIT FOR

                 END IF

             NEXT j

 

             LET startrange = val(search$[startbracket+1:midbracket-1])

             LET endrange = val(search$[midbracket+1:endbracket-1])

 

             IF val(data4$[i:i]) >= startrange AND val(data4$[i:i]) <= endrange THEN

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data4$[i:i];" is within it."

             ELSE

                IF debug = 1 THEN PRINT ", length of it is ";bracklen;". Range is";startrange;"to";endrange;"and ";data4$[i:i];" is NOT within it."

                IF debug = 1 THEN PRINT "Set to false"

                LET d4 = 0

                EXIT FOR

             END IF

 

          ELSE IF search$[i+bracklen:i+bracklen] = "*" THEN

 

             IF debug = 1 THEN PRINT "Found * so nothing else matters"

             EXIT FOR

 

          ELSE

 

             IF debug = 1 THEN PRINT "Set to false"

             LET d4 = 0

             EXIT FOR

 

          END IF

 

 

      NEXT i

 

   END IF

 

 

   IF d4 = 1 THEN PRINT data4$

 

   IF d1 = 0 AND d2 = 0 AND d3 = 0 AND d4 = 0 THEN PRINT "No Match"

 

   PRINT

   PRINT

 

LOOP UNTIL searchcount = 5

 

 

END