! 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